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.