miinventario-v2/docs/01-epicas/MII-013-pagos-7eleven.md
rckrdmrd c24f889f70
Some checks failed
Build / Build Backend (push) Has been cancelled
Build / Build Mobile (TypeScript Check) (push) Has been cancelled
Lint / Lint Backend (push) Has been cancelled
Lint / Lint Mobile (push) Has been cancelled
Test / Backend E2E Tests (push) Has been cancelled
Test / Mobile Unit Tests (push) Has been cancelled
Build / Build Docker Image (push) Has been cancelled
[MIINVENTARIO] feat: Add exports, reports, integrations modules and CI/CD pipeline
- Add exports module with PDF/CSV/Excel generation
- Add reports module for inventory analytics
- Add POS integrations module
- Add database migrations for exports, movements and integrations
- Add GitHub Actions CI/CD workflow with Docker support
- Add mobile export and reports screens with tests
- Update epic documentation with traceability
- Add deployment and security guides

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 06:06:34 -06:00

321 lines
10 KiB
Markdown

# MII-013: Pagos 7-Eleven
---
id: MII-013
type: Epic
status: Completado
priority: P1
phase: 3
story_points: 8
created_date: 2026-01-10
updated_date: 2026-01-13
simco_version: "4.0.0"
---
## Metadata
| Campo | Valor |
|-------|-------|
| **ID** | MII-013 |
| **Nombre** | Pagos 7-Eleven |
| **Fase** | 3 - Monetizacion |
| **Prioridad** | P1 |
| **Story Points** | 8 |
| **Estado** | Completado |
---
## 1. Descripcion
Implementar pagos en efectivo via 7-Eleven usando un agregador de pagos (como Conekta, OpenPay o similar) que soporte referencias 7-Eleven.
### Objetivo
Ampliar las opciones de pago en efectivo para usuarios que prefieren 7-Eleven sobre OXXO.
---
## 2. Requerimientos Relacionados
| RF | Descripcion | Prioridad |
|----|-------------|-----------|
| FR-102 | Pagos en 7-Eleven via agregador | P1 |
| FR-103 | Confirmacion de pago via webhooks | P0 |
| FR-104 | Reconciliacion de estados | P0 |
| FR-105 | Expiracion de referencia (24-72h) | P1 |
---
## 3. Criterios de Aceptacion
### AC-001: Generar Referencia
```gherkin
DADO que seleccione pago en 7-Eleven
CUANDO confirmo el pedido
ENTONCES recibo una referencia con:
- Numero de referencia
- Monto a pagar
- Codigo de barras
- Instrucciones de pago
- Fecha de expiracion
```
### AC-002: Pago en Tienda
```gherkin
DADO que tengo una referencia valida
CUANDO pago en 7-Eleven
ENTONCES recibo un ticket de confirmacion
Y en minutos mis creditos se acreditan
Y recibo notificacion push
```
### AC-003: Similar a OXXO
```gherkin
DADO que el flujo es similar a OXXO
CUANDO genero una referencia 7-Eleven
ENTONCES la experiencia es consistente
Y puedo ver referencias pendientes
Y el voucher tiene el mismo formato
```
---
## 4. Tareas Tecnicas
| ID | Tarea | Estimacion | Estado |
|----|-------|------------|--------|
| T-001 | Investigar y seleccionar agregador | 1 SP | Completado |
| T-002 | Configurar agregador en backend | 2 SP | Completado |
| T-003 | Implementar generador de referencias | 2 SP | Completado |
| T-004 | Implementar webhook del agregador | 2 SP | Completado |
| T-005 | Adaptar UI para 7-Eleven | 1 SP | Completado |
---
## 5. Opciones de Agregador
| Agregador | Ventajas | Desventajas |
|-----------|----------|-------------|
| **Conekta** | Soporte MX, facil integracion | Costo por transaccion |
| **OpenPay** | Multiples cadenas | Documentacion limitada |
| **PayU** | Experiencia global | Menos enfoque MX |
| **Stripe** | Ya integrado | Solo OXXO, no 7-Eleven |
**Recomendacion:** Conekta (mejor soporte para Mexico y cadenas de conveniencia)
---
## 6. Flujo Similar a OXXO
```
┌─────────────────────────────────────────────────────────────────┐
│ FLUJO DE PAGO 7-ELEVEN │
├─────────────────────────────────────────────────────────────────┤
│ │
│ APP 7-ELEVEN AGREGADOR │
│ │ │ │ │
│ │ 1. Seleccionar 7-Eleven │ │ │
│ │─────────────────────────────────────────────────────▶ │
│ │ │ Referencia │ │
│ │◀───────────────────────────────────────────────────── │
│ │ Voucher │ │ │
│ │ │ │ │
│ │ 2. Mostrar voucher │ │ │
│ │ │ │ │
│ │ 3. Usuario va │ │ │
│ │ a 7-Eleven │ │ │
│ │ ───────▶│ │ │
│ │ │ 4. Paga │ │
│ │ │────────────────────────▶ │
│ │ │ │ │
│ │◀───────────────────────────────────────────────────── │
│ │ Webhook │ 5. Confirma │ │
│ │ │ │ │
│ │ 6. Acreditar creditos │ │ │
│ │ │ │ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 7. Modelo de Datos
Reutiliza la tabla `payment_orders` con:
```sql
-- Campos adicionales en metadata para 7-Eleven
{
"aggregator": "conekta",
"reference_number": "7ELEV-123456789",
"barcode": "...",
"store_name": "7-Eleven",
"aggregator_order_id": "ord_..."
}
```
---
## 8. Integracion Conekta (Ejemplo)
```typescript
async create7ElevenPayment(userId: string, packageId: string) {
const pkg = await this.packagesService.findOne(packageId);
const user = await this.usersService.findOne(userId);
// Crear orden local
const order = await this.ordersService.create({
userId,
packageId,
amountMxn: pkg.priceMxn,
creditsAmount: pkg.currentCredits,
paymentMethod: 'SEVEN_ELEVEN',
status: 'CREATED',
expiresAt: addHours(new Date(), 48)
});
// Crear orden en Conekta
const conektaOrder = await conekta.Order.create({
currency: 'MXN',
customer_info: {
name: user.name,
email: user.email,
phone: user.phone
},
line_items: [{
name: `Paquete ${pkg.name}`,
unit_price: Math.round(pkg.priceMxn * 100),
quantity: 1
}],
charges: [{
payment_method: {
type: 'cash',
expires_at: Math.floor(order.expiresAt.getTime() / 1000)
}
}],
metadata: {
orderId: order.id,
userId
}
});
const cashPayment = conektaOrder.charges.data[0].payment_method;
await this.ordersService.update(order.id, {
status: 'PENDING',
metadata: {
aggregator: 'conekta',
aggregatorOrderId: conektaOrder.id,
reference: cashPayment.reference,
barcode: cashPayment.barcode_url,
storeName: '7-Eleven'
}
});
return {
orderId: order.id,
voucher: {
reference: cashPayment.reference,
amount: pkg.priceMxn,
barcodeUrl: cashPayment.barcode_url,
expiresAt: order.expiresAt
}
};
}
```
---
## 9. Endpoints API
| Metodo | Endpoint | Descripcion | Auth |
|--------|----------|-------------|------|
| POST | /payments/7eleven/create | Crear referencia | JWT |
| GET | /payments/7eleven/:orderId/voucher | Obtener voucher | JWT |
| POST | /payments/webhook/conekta | Webhook Conekta | Sig |
---
## 10. Pantallas Mobile
Reutiliza las pantallas de OXXO con branding 7-Eleven:
| Pantalla | Adaptacion |
|----------|------------|
| **VoucherScreen** | Logo 7-Eleven, colores verde/naranja |
| **PendingPaymentsScreen** | Badge de tienda (OXXO o 7-Eleven) |
---
## 11. UI de Voucher
```
┌─────────────────────────────────────────┐
│ PAGO EN 7-ELEVEN │
├─────────────────────────────────────────┤
│ │
│ 🏪 Presenta este codigo en │
│ cualquier 7-Eleven │
│ │
│ ┌─────────────────────────────────┐ │
│ │ │ │
│ │ ||||| |||| ||||| |||| ||||| │ │
│ │ [CODIGO DE BARRAS] │ │
│ │ │ │
│ │ 7ELEV-1234-5678-9012 │ │
│ │ │ │
│ └─────────────────────────────────┘ │
│ │
│ REFERENCIA: 7ELEV-1234-5678-9012 │
│ MONTO: $100.00 MXN │
│ EXPIRA: ⏱️ 47:30:15 │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 📤 COMPARTIR VOUCHER │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
```
---
## 12. Dependencias
### Entrada (Requiere)
- MII-009: Wallet y Creditos
- MII-010: Paquetes de Recarga
- MII-012: Pagos OXXO (patron similar)
### Salida (Bloquea)
- Ninguna directa
---
## 13. Consideraciones
- Evaluar si el volumen justifica integracion adicional
- Conekta cobra por transaccion (evaluar costos)
- Podria implementarse post-MVP si OXXO cubre mayoria
- Mantener UX consistente con OXXO
---
## 14. Riesgos
| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|--------------|---------|------------|
| Agregador costoso | Media | Medio | Evaluar ROI, negociar |
| Integracion compleja | Media | Medio | Documentacion, sandbox |
| Poco uso | Media | Bajo | Medir antes de invertir |
---
## 15. Referencias
- [REQUERIMIENTOS-FUNCIONALES.md](../00-vision-general/REQUERIMIENTOS-FUNCIONALES.md) - Seccion 5.11
- [INT-003](../02-integraciones/INT-003-7eleven.md) - Integracion 7-Eleven
- [MII-012](./MII-012-pagos-oxxo.md) - Patron de OXXO
---
**Ultima Actualizacion:** 2026-01-10