Ir al contenido

Flujo de Creación de Cuenta

La creación de una cuenta CLABE involucra dos fases: el registro sincrónico y la activación asíncrona por parte de STP.

Backend Finalitix
│ POST /api/v1/connection
│ { module: "account", method: "postAccount",
│ params: { user_id, alias } }
finalitixspeiapi
├─ 1. Obtener credenciales DB (Secrets Manager: CREDENTIALS_SECRET)
├─ 2. Obtener config STP (Secrets Manager: STP_SECRET_NAME)
├─ 3. Consultar última secuencia para la plaza
├─ 4. Generar CLABE: institutionCode + plazaCode + prefix + sequence + checkDigit
├─ 5. Guardar cuenta en MySQL (active=false)
├─ 6. Guardar periodo de cuenta
├─ 7. Firmar: CryptoHandlerCuenta.getSign(passphrase, privateKey)
├─ 8. PUT STP: regPersonaFisicaUrl | regPersonaMoralUrl
│ { cuenta, empresa, nombre, rfcCurp, firma, ... }
├─ 9. Marcar cuenta como pendiente de revisión manual en STP
├─ 10. Lambda: ACCOUNT_CREATED (email de bienvenida)
Backend Finalitix
{ success: true, account_number: "64618001000001237" }

Fase 2 — Activación (asíncrono, iniciada por STP)

Sección titulada «Fase 2 — Activación (asíncrono, iniciada por STP)»

Después del registro, STP revisa la cuenta. Cuando aprueba o rechaza, llama:

STP Bank
│ PUT /stp/v1/account
│ { cuenta: "64618001000001237", estado: "A", firma: "..." }
finalitixspeiapi
├─ Verificar firma RSA (solo prod)
├─ Si estado = "A" (ACTIVA):
│ ├─ account.active = true
│ ├─ SQS → Odoo: create_finalitix_partner (res.partner)
│ └─ Lambda: notificación de activación exitosa al usuario
└─ Si estado ≠ "A" (RECHAZADA):
├─ Crear alerta VRSTP (URL: /users/review)
├─ Lambda: ON_BOARDING_RESULT_REJECT (correo al cliente)
├─ Lambda: ON_BOARDING_RESULT_REJECT_PLD (correo a PLD)
└─ Lambda PubSub: notificación al portal admin (WebSocket)

En desarrollo con API_IMPLMENTATION=MOCK:

  1. Al crear la cuenta en STP, la respuesta simulada devuelve éxito inmediatamente
  2. La API ejecuta automáticamente el callback putAccount con estado: 'A'
  3. La cuenta queda activa sin esperar respuesta real de STP
// De STP_SECRET_NAME en Secrets Manager
{
empresaAlias: "FINALITIX",
institutionCode: "00000",
plazaCode: "821",
prefijoCliente: "0000",
privateKey: "<PEM en Base64>",
passphrase: "...",
regPersonaFisicaUrl: "https://{URL_STP}}/...",
regPersonaMoralUrl: "https://{URL_STP}}/..."
}