Initial scaffold: unified customer/insurance/utilities platform

Next.js + NestJS + Prisma (MySQL) monorepo replacing the legacy PHP
internal app. Includes a session-based auth module with Argon2 password
hashing and global input validation (replacing the old app's SQL
injection and plaintext password comparison), the full target Prisma
schema for customers/insurance/utilities/shared ledger/bank register,
Docker Compose + Dockerfiles, and an Access-to-staging migration
pipeline (migration/) already run against the real source databases.

See PLAN.md and RESUME.md for the full architecture and session history.
This commit is contained in:
2026-07-22 01:29:56 -07:00
commit 27118f0df2
39 changed files with 10341 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
"""
Source-database manifest for the staging load (migration plan step 1).
Exclusions here are deliberately conservative: only tables that are either
(a) confirmed empty (0 rows — nothing is lost by skipping them) or (b) have
rows but are structurally not customer/business data (mail-merge document
templates, materialized Access query results) are excluded. Anything with
real rows and an ambiguous purpose (e.g. PROPANO, datosfreak, pagos email)
is loaded into staging anyway — the reconciliation pass decides what to do
with it, per the migration plan's "don't guess the rule up front" principle.
See C:\\Users\\ricar\\.claude\\plans\\logical-yawning-tome.md for the full
rationale per table group.
"""
from pathlib import Path
SOURCE_ROOT = Path(r"C:\Users\ricar\Downloads\Jorge")
SOURCES = {
"utilities": {
"path": SOURCE_ROOT / "UTILITIES.accdb",
"schema": "stg_utilities",
# Confirmed empty (0 rows) working/scratch tables.
"exclude": {
"BANCO EDITOR",
"Errores de pegado",
"TABLE1",
"PARA BILLING SIN",
"PARA BILLING1",
"PARA BILLING2",
"PARA EDO",
"FALTANTES AGUA",
"FALTANTES TEL",
"LUZ TODOS",
"TELEFONOS FECHAS",
"TRUSTHFEE",
"faltantes luz",
"billing", # 0 rows; superseded by datos2/FEE ANUAL/fee15
"TIT", # 1 row, default Access "Contacts" template shell — not real data
},
},
"seguros": {
# SEGUROS 16.mdb is an empty linked front-end; all data lives in _be.
"path": SOURCE_ROOT / "SEGUROS 16_be.mdb",
"schema": "stg_seguros",
"exclude": {
# Mail-merge document templates (letters/certificates), not data.
"AMPL MENS",
"AMPL R MENS",
"IN MENS",
"LIC MENS",
"MCA2 MENS",
"ME MENS",
"MF MENS",
"RC MENSAJE",
"RC R MENS",
# Materialized Access query results, not source-of-truth data.
"TODOSJC",
"TODOS",
"vigenta casa y auto unicos",
# Confirmed empty scratch tables.
"ID TABLA",
"ID TABLATLAS",
"TABLA LIQUIDA MCA2",
"TABLA LIQUIDA MF",
"TABLA LIQUIDA RES",
"TABLA LIQUIDA TUR",
"TABLA LIQUIDA TUR ENDOSO",
"TABLA AUTOS LIMIT R",
"BORRA",
"GENERICO_OLD",
"TIT",
},
},
"scothia": {
"path": SOURCE_ROOT / "SCOTHIA.mdb",
"schema": "stg_scothia",
"exclude": {
"INFORME",
"INFORME BA",
"FECHAIF", # date-range UI parameter table, not data
},
},
}