erp-core/docs/08-epicas/EPIC-MGN-017-stripe-integration.md

115 lines
3.4 KiB
Markdown

# EPICA: EPIC-MGN-017 - Integracion Stripe
## Metadata
| Campo | Valor |
|-------|-------|
| **ID** | EPIC-MGN-017 |
| **Nombre** | Integracion Stripe para Suscripciones |
| **Modulo** | billing |
| **Fase** | Fase 4 - SaaS Platform |
| **Prioridad** | P0 |
| **Estado** | Backlog |
| **Story Points** | 34 |
| **Sprint(s)** | Sprint 22-24 |
---
## Descripcion
Integracion completa con Stripe para gestion de suscripciones por usuario, cobros recurrentes, prorratas automaticas, y webhooks para sincronizacion de estado.
---
## Objetivo de Negocio
- Automatizar cobros recurrentes por suscripcion
- Soportar modelo per-seat con prorratas
- Facilitar cambios de plan (upgrade/downgrade)
- Mantener sincronizacion bidireccional con Stripe
---
## Historias de Usuario
| ID | Historia | Prioridad | SP | Estado |
|----|----------|-----------|-----|--------|
| US-MGN017-001 | Como tenant owner, quiero vincular mi cuenta con Stripe | P0 | 3 | Backlog |
| US-MGN017-002 | Como tenant owner, quiero agregar tarjeta de credito | P0 | 5 | Backlog |
| US-MGN017-003 | Como sistema, quiero crear suscripcion en Stripe al activar tenant | P0 | 5 | Backlog |
| US-MGN017-004 | Como sistema, quiero actualizar cantidad de usuarios en Stripe | P0 | 5 | Backlog |
| US-MGN017-005 | Como sistema, quiero procesar webhooks de Stripe | P0 | 8 | Backlog |
| US-MGN017-006 | Como sistema, quiero manejar pagos fallidos | P0 | 5 | Backlog |
| US-MGN017-007 | Como tenant owner, quiero ver portal de facturacion Stripe | P1 | 3 | Backlog |
**Total Story Points:** 34 SP
---
## Criterios de Aceptacion
**Funcionales:**
- [ ] Crear Customer en Stripe al registrar tenant
- [ ] Agregar/actualizar metodos de pago via Stripe Elements
- [ ] Crear Subscription con quantity = usuarios
- [ ] Actualizar quantity automaticamente al agregar/remover usuarios
- [ ] Procesar webhooks: invoice.paid, payment_failed, subscription.updated, etc.
- [ ] Cancelar suscripcion al final del periodo
- [ ] Redirigir a Stripe Customer Portal
**No Funcionales:**
- [ ] Webhook retry logic
- [ ] Idempotencia en procesamiento de webhooks
- [ ] Logs de todas las transacciones
---
## Webhooks a Implementar
| Evento | Accion |
|--------|--------|
| customer.subscription.created | Registrar suscripcion |
| customer.subscription.updated | Actualizar estado/cantidad |
| customer.subscription.deleted | Marcar suscripcion cancelada |
| invoice.created | Registrar factura draft |
| invoice.finalized | Actualizar factura a open |
| invoice.paid | Marcar factura pagada, activar tenant |
| invoice.payment_failed | Alertar, iniciar dunning |
| payment_intent.succeeded | Registrar pago |
| payment_intent.payment_failed | Registrar intento fallido |
---
## Dependencias
**Depende de:**
- EPIC-MGN-016 Billing (Ready)
- EPIC-MGN-004 Tenants (Ready)
**Bloquea:**
- EPIC-MGN-018 WhatsApp (feature flag por plan)
- EPIC-MGN-019 AI Agents (feature flag por plan)
---
## Desglose Tecnico
**Database:**
- [ ] Tabla: stripe_customers
- [ ] Tabla: stripe_webhook_events
**Backend:**
- [ ] Service: StripeService
- [ ] Controller: StripeWebhookController
- [ ] Job: SyncStripeDataJob
**Integraciones:**
- [ ] Stripe SDK (Node.js)
- [ ] Stripe Elements (Frontend)
- [ ] Stripe Customer Portal
---
**Creado por:** Requirements-Analyst
**Fecha:** 2025-12-05