Saltar a contenido

ADR-009 · Pagos = Flow.cl únicamente (Stripe descartado)

Fecha: 2026-04-27 Source: /srv/projects/cis/cis-plan/DECISIONS.md (do not edit here — re-split desde la fuente)


Contexto: el scaffold de pagos en cis-platform (abril/2026) y luego el microservicio cis-pagos (2026-04-22) incluyeron desde el día 1 un adapter Stripe en paralelo al adapter Flow.cl, bajo el supuesto de que Stripe iba a ser el camino para tarjetas internacionales. Al revisar la operativa real:

  • CIS SpA es persona jurídica chilena (RUT chileno, sin entidad legal en US/EU/UK).
  • La cuenta bancaria de la empresa es Banco de Chile 045-71260-89 (CLP), compatible con liquidación Flow → cuenta corriente CL.
  • Flow.cl ya cubre tarjetas chilenas + transferencia + WebPay + Onepay + tarjeta internacional Visa/Mastercard/Amex (vía gateway local) y soporta CLP nativo sin conversión.
  • Stripe Atlas / Stripe en LatAm sigue requiriendo entidad legal en países soportados; abrir una solo para procesar pagos no se justifica para el volumen actual ni el roadmap.
  • El adapter Stripe nunca pasó de modo stub — no hay merchant account, no hay traffic real, no hay reconciliaciones bancarias dependientes de él.

Alternativas consideradas:

  1. Mantener adapter Stripe dormido (stub) "por si acaso" ← previo. Costo: superficie de código y tests viva, dos webhooks que monitorear, key-rotation overhead, riesgo de bug en cleanup si nadie lo ejerce nunca. Beneficio real: cero hasta que CIS abra entidad extranjera.
  2. Abrir Stripe Atlas (entidad Delaware) para habilitar Stripe. Costo: ~500 USD setup + ~100 USD/año + complejidad fiscal CL/US. Sin demanda real de clientes pagando con tarjeta extranjera que Flow no pueda procesar.
  3. Pagos = Flow.cl únicamenteelegida. Drop limpio del adapter, env vars, tests, vault keys. Si en el futuro CIS tiene entidad extranjera o si aparece un proveedor LatAm-native con cobertura ≥ Flow + tarjeta internacional fluida, se evalúa entonces.

Decisión: el único proveedor de pagos soportado por cis-pagos es Flow.cl. El código, env vars, secretos en vault, fila en CONTRACTS.md, tests y documentación de Stripe se eliminan. La ruta POST /api/v1/webhooks/stripe se mantiene devolviendo HTTP 410 Gone durante 30 días (hasta ~2026-05-27) como cortesía a cualquier request legacy que pudiera llegar desde una URL vieja en cache; pasada esa ventana se borra el handler completo y se devuelve 404 nativo.

Consecuencias:

  • cis-pagos: borrado de app/services/stripe_adapter.py, refs en packs.py/orders.py/health.py/config.py/schemas/order.py, env vars CIS_PAGOS_STRIPE_* en .env*, tests en tests/test_orders.py y tests/conftest.py.
  • Vault: cis-pagos/STRIPE_SECRET_KEY y cis-pagos/STRIPE_WEBHOOK_SECRET quedan obsoletas; eliminar manualmente cuando se cierre el ticket de cleanup.
  • CONTRACTS.md (cis-platform): fila Stripe → cis-platform marcada ❌ Removed 2026-04-27.
  • Schema BD: payment_orders.provider queda con dominio efectivo {flow} aunque la columna sigue siendo String(20) (sin constraint nuevo — no vale la migration).
  • UI portal /billing/: el botón "Tarjeta internacional (Stripe)" (si existe) debe desaparecer en la próxima iteración del frontend.
  • Reactivación futura: si se decide retomar Stripe, reverter este ADR con uno nuevo + restaurar adapter desde git history (git log -- app/services/stripe_adapter.py).

Implementación: aplicado en sesión 2026-04-27. Ver canal cis-note y diff cis-pagos@HEAD.

Relaciones: refina ADR-l-cleanup-2026-04-22 (que había dejado Stripe en 503 + handler preservado bajo if False:). Aquel era shutdown soft; éste es la decisión arquitectural firme.