Modelo de datos
Esquema PostgreSQL gestionado con Prisma (apps/api/prisma/schema.prisma).
En modo demo el mismo modelo vive en memoria (createMemoryRepos).
Entidades
User
Remitentes (rol USER), operadores de empresa (BUSINESS) y admins.
| Campo | Notas |
|---|---|
email | único, login |
role | USER · BUSINESS · ADMIN |
kycStatus | NOT_STARTED → PENDING → APPROVED/REJECTED |
monthlyLimitEur | lÃmite mensual (equivalente EUR), editable por admin |
companyId | enlaza al operador con su empresa (B2B) |
Company
Cuenta B2B. kybStatus controla si la empresa puede enviar (lo aprueba el
backoffice en /admin/companies/:id/kyb).
KycSubmission
Documento + selfie + prueba de residencia (base64 en MVP). El admin la revisa
y el resultado se replica en User.kycStatus.
Beneficiary
Destinatario guardado del remitente, con métodos de cobro opcionales:
bank (Json), wallet (Json), usdt (Json). Validación: el método debe
existir como corredor en su paÃs.
Remittance — el corazón
| Grupo | Campos |
|---|---|
| Identidad | reference (NX-XXXXXX, único), senderId, companyId?, beneficiaryId? |
| Receptor | recipientName, recipientPhone, recipientToken? (smart link), deliveryDetails (Json) |
| Cotización congelada | amount, amountEur, sourceCurrency, destinationCountry, deliveryMethod, destinationCurrency, appliedRate, corridorFee, totalFees, totalToPay, receiveAmount |
| Estado | status, requiresReview, awaitingRecipient, failureReason |
| Cashela | payinId, payoutId, paymentInstructions (Json) |
| Futuro | batchId (mass payouts Fase 6) |
amountEur se congela al crear para que lÃmites y umbrales AML no dependan
del FX del momento de la consulta.
RemittanceEvent
Timeline append-only por remesa — alimenta el tracking del cliente.
ComplianceAlert
Alertas AML (AML_THRESHOLD, MONTHLY_LIMIT, MANUAL) con estado
OPEN/RESOLVED. Se resuelven al aprobar/rechazar la remesa o manualmente.
Lead
CRM de la Fase 0: capturados por la landing, gestionados en el backoffice
(NEW → CONTACTED → CONVERTED / DISCARDED).
Diagrama
User 1──n Beneficiary
User 1──n KycSubmission
User 1──n Remittance n──1 Company (opcional)
Remittance 1──n RemittanceEvent
Remittance 1──n ComplianceAlert n──1 User
Lead (independiente)Migraciones
El MVP usa prisma db push en el arranque de Railway (deploy:start).
Antes de producción real: congelar el esquema con prisma migrate dev y
cambiar el comando a prisma migrate deploy.