Saltar al contenido principal

Base de Datos

Tecnología

  • SQL Server hospedado en Azure SQL
  • Prisma ORM para acceso type-safe a datos
  • Schema definido en prisma/schema.prisma
  • Migraciones SQL manuales (no Prisma Migrate)

Diagrama Entidad-Relación

Entidades Principales

Subsistema de Pagos

Tablas del Sistema

Tablas Core

TablaPropósitoRegistros típicos
AspNetUsersUsuarios del sistema~50
AspNetRolesRoles (Admin, Supervisor, Ejecutivo)3
CustomerModelsClientes/carteras~10
IntegranteModelsCuentas/deudores (legacy)~500K
GestionModelsGestiones realizadas~2M
AccountsCuentas (nuevo sistema)~100K
AsignacionesAsignaciones dinámicas~100K

Tablas de Import/Export

TablaPropósito
ImportJobsJobs de importación (accounts, gestiones, pagos)
ImportFilesMetadatos de archivos subidos
ExportJobsJobs de exportación de gestiones
AutoExportConfigConfiguración de export automático por cliente
MappingTemplatesPlantillas de mapeo reutilizables
MasterDataCatalogCatálogo de campos disponibles

Tablas de Pagos

TablaPropósito
UnassignedPaymentsPagos importados no emparejados
PaymentImportReviewItemsDuplicados potenciales para revisión
PromesaPagoLinksVínculos promesa → pago efectuado

Tablas de Permisos

TablaPropósito
PermissionsCatálogo de 42 permisos nombrados
RolePermissionsAsociación rol → permiso
UserPermissionOverridesOverrides individuales (grant/revoke)

Tablas de Auditoría

TablaPropósito
AccountAuditHistoryHistorial de cambios campo-por-campo
TemplateUsageHistoryUso de plantillas de mapeo

Migraciones

Convenciones

Las migraciones son scripts SQL manuales en prisma/migrations/:

prisma/migrations/
├── add-accounts-table.sql
├── add-import-jobs-tables.sql
├── add-export-jobs-tables.sql
├── add-permissions-tables.sql
├── seed-permissions-data.sql
├── add-payment-import-tables.sql
├── add-unassigned-payments-table.sql
└── ...

Reglas:

  • Envueltas en BEGIN TRY / BEGIN CATCH con transacción
  • Guards IF NOT EXISTS / IF OBJECT_ID IS NULL para idempotencia
  • Constraints con prefijos: PK_, FK_, CK_, DF_
  • Tipos de FK: NVARCHAR(128) para AspNetUsers.Id, NVARCHAR(255) para UUIDs

Ejecución

# En SSMS o Azure Data Studio:
# 1. Conectar a la base de datos Azure SQL
# 2. Ejecutar scripts en orden cronológico
# 3. Verificar output "Migration completed successfully!"
aviso

No usar prisma migrate — las migraciones se manejan manualmente con scripts SQL. Prisma solo se usa para generar el cliente y para introspección.

Prisma — Comandos Útiles

# Regenerar el cliente después de cambios al schema
npx prisma generate

# Inspeccionar la DB visualmente
npx prisma studio

# Validar que el schema esté correcto
npx prisma validate

# Ver diferencias entre schema y DB
npx prisma db pull

Patrones de Datos

JobType en ImportJobs

JobTypeProcesadorTabla(s) afectada(s)
accountsAccount Import ProcessorAccounts, AccountAuditHistory
gestionesGestion Import ProcessorGestionModels
pagosPayment Job ProcessorIntegranteModels, GestionModels, UnassignedPayments

Status de Jobs

Composite Keys

  • Accounts: PK compuesto (AccountId, CustomerId)
  • AspNetUserRoles: PK compuesto (UserId, RoleId)
  • RolePermissions: PK compuesto (RoleId, PermissionId)
  • UserPermissionOverrides: PK compuesto (UserId, PermissionId)

Asignaciones — Schema Dinámico

La tabla Asignaciones usa un campo JSON (Data) para almacenar datos de cuenta de forma flexible, evitando migraciones de schema cuando se agregan nuevos campos al catálogo:

{
"NombreCompleto": "Juan Pérez López",
"TelPrincipal": "5551234567",
"TotalAdeudo": "15000.50",
"DiasMora": "45"
}

Los campos disponibles se definen en MasterDataCatalog y pueden agregarse sin migraciones.