Plataforma técnica · Setup Local
Setup Local
Desarrollo
Esta guía levanta el ecosistema completo (Mother, Orchestrator, Sevastopol, Nostromo y Jean d’Arc) en un entorno de desarrollo local. Cada componente puede correrse de forma independiente; el orden recomendado es: base de datos → backend → frontend → ETL → documentación.
Requisitos Previos
Section titled “Requisitos Previos”| Software | Versión Mínima | Propósito |
|---|---|---|
| Node.js | 20.x LTS | Runtime para Orchestrator, Sevastopol y Jean d’Arc |
| PostgreSQL | 16.x | Base de datos Mother (multi-tenant) |
| Python | 3.11+ | ETL Nostromo (accounting_system/) |
| Git | 2.x | Control de versiones |
| pnpm | 10.x (corepack) | Gestor de paquetes obligatorio (Orchestrator, Sevastopol y Jean d’Arc) |
Clonar el Monorepo
Section titled “Clonar el Monorepo”git clone https://github.com/ChrisTkm/Nostromo.gitcd NostromoEstructura del Monorepo
Section titled “Estructura del Monorepo”Nostromo/├── orchestrator/ # Backend Node.js · Express · TypeScript├── sevastopol/ # Frontend Astro · SolidJS├── accounting_system/ # ETL Python (loaders BC, Previred, SII)├── jean_d_arc/ # Documentación (este sitio)└── .github/ # Workflows y skills compartidosMother: Base de Datos PostgreSQL
Section titled “Mother: Base de Datos PostgreSQL”Mother es PostgreSQL 16 con arquitectura multi-tenant: dos bases del sistema y una base por empresa.
Crear bases del sistema
Section titled “Crear bases del sistema”CREATE DATABASE nostromo_common;CREATE DATABASE nostromo_command;createdb -U postgres nostromo_commoncreatedb -U postgres nostromo_commandnostromo_commonaloja parámetros compartidos: monedas, indicadores, AFP, ISAPRE, tablas IUSC.nostromo_commandaloja autenticación, sesiones y registro de tenants.
Plantilla y primer tenant
Section titled “Plantilla y primer tenant”Cada empresa vive en su propia base, creada como copia de accunting_template:
CREATE DATABASE accunting_template;-- Aplicar schemas accounting (remuneraciones, operaciones_sii, administracion...)\c accunting_template\i orchestrator/sql/template/init.sql
-- Crear un tenant a partir de la plantillaCREATE DATABASE nostromo_60004317 WITH TEMPLATE accunting_template;La convención es nostromo_<rut_empresa_sin_dv>. El RUT se persiste en nostromo_command.tenants.tenant_db y lo resuelve el middleware del Orchestrator en cada petición.
Variables de Entorno
Section titled “Variables de Entorno”Cada componente lee su propio .env. Los archivos .env.example viven en cada subcarpeta.
PGHOST=localhostPGPORT=5432PGUSER=postgresPGPASSWORD=$DB_PASSWORDCOMMAND_DB=nostromo_commandCOMMON_DB=nostromo_commonJWT_SECRET=$JWT_SECRETJWT_EXPIRES_IN=8hCORS_ORIGINS=http://localhost:4321,http://localhost:4322PORT=8000PUBLIC_API_URL=http://localhost:8000PGHOST=localhostPGPORT=5432PGUSER=postgresPGPASSWORD=$DB_PASSWORDPGDATABASE=nostromo_commonSetup por Componente
Section titled “Setup por Componente”Orchestrator (Backend)
Section titled “Orchestrator (Backend)”-
Instalar dependencias del workspace
Terminal window cd Accountingpnpm installEl
pnpm-workspace.yamlraíz instala Orchestrator y Sevastopol en una sola pasada. -
Configurar variables de entorno
Terminal window cp orchestrator/.env.example orchestrator/.env# editar credenciales de PostgreSQL y JWT_SECRET -
Iniciar en desarrollo
Terminal window pnpm --dir orchestrator dev# o desde la raíz del workspace:pnpm dev:orchestratorEl backend queda escuchando en
http://localhost:8000. -
Verificar
Terminal window curl http://localhost:8000/health# → {"status":"OK","service":"orchestrator"}
Sevastopol (Frontend)
Section titled “Sevastopol (Frontend)”-
Dependencias ya instaladas con
pnpm installen el workspaceSi lo levantás aislado:
Terminal window pnpm --dir sevastopol install -
Configurar el endpoint del Orchestrator
Terminal window cp sevastopol/.env.example sevastopol/.env# PUBLIC_API_URL=http://localhost:8000 -
Iniciar en desarrollo
Terminal window pnpm --dir sevastopol dev# o desde la raíz del workspace:pnpm dev:sevastopolLa SPA queda disponible en
http://localhost:4321.
Nostromo (ETL Python)
Section titled “Nostromo (ETL Python)”Los loaders viven en accounting_system/. Cargan parámetros (UF, USD, EUR, AFP, IUSC) y datos del SII hacia Mother. No corren como daemon: se ejecutan bajo demanda.
-
Crear entorno virtual e instalar dependencias
Terminal window cd accounting_systempython -m venv .venvsource .venv/bin/activatepip install -r requirements.txtTerminal window cd accounting_systempython -m venv .venv.venv\Scripts\Activate.ps1pip install -r requirements.txt -
Configurar credenciales hacia Mother
Terminal window cp .env.example .env# PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE=nostromo_common -
Ejecutar una carga de prueba (dry-run)
Terminal window python bc_loader.py -fi 2026-01-01 -fn 2026-01-31 -m UF -dryrun
El catálogo completo de loaders, flags y ejemplos vive en ETL Scripts.
Jean d’Arc (Documentación)
Section titled “Jean d’Arc (Documentación)”-
Activar corepack y pnpm
Terminal window corepack enablecorepack prepare pnpm@latest --activate -
Instalar dependencias
Terminal window cd jean_d_arcpnpm install -
Iniciar el servidor de desarrollo
Terminal window pnpm run devLa documentación queda disponible en
http://localhost:4322. -
Build para producción
Terminal window pnpm run buildpnpm run preview
Tabla de Puertos
Section titled “Tabla de Puertos”| Componente | URL | Verificación |
|---|---|---|
| Orchestrator | http://localhost:8000/health | Retorna {"status":"ok"} |
| Sevastopol | http://localhost:4321 | Muestra la página de login |
| Jean d’Arc | http://localhost:4322 | Muestra la home de la documentación |
| PostgreSQL | localhost:5432 | pg_isready -h localhost -p 5432 |
Flujo de Trabajo Diario
Section titled “Flujo de Trabajo Diario”Una sesión típica de desarrollo requiere tener corriendo:
- PostgreSQL como servicio de sistema o contenedor.
- Orchestrator con
pnpm --dir orchestrator dev(puerto 8000). - Sevastopol con
pnpm --dir sevastopol dev(puerto 4321). - Jean d’Arc con
pnpm run dev(puerto 4322) solo si se está editando documentación.
El ETL accounting_system/ se ejecuta bajo demanda cuando hace falta refrescar parámetros del Banco Central, Previred o SII; no es parte del loop de desarrollo continuo.
Troubleshooting
Section titled “Troubleshooting”Puerto ocupado
Section titled “Puerto ocupado”netstat -ano | findstr :8000# Identificar PID y cerrar el proceso si correspondetaskkill /F /PID <pid>lsof -i :8000kill -9 <pid>Error de conexión a PostgreSQL
Section titled “Error de conexión a PostgreSQL”pg_isready -h localhost -p 5432# Si falla: revisar el servicio postgres y las credenciales en .envTenant no resuelto al loguear
Section titled “Tenant no resuelto al loguear”Verificar que el usuario en nostromo_command.users tenga tenant_db apuntando a una base existente (ej. nostromo_60004317). Sin ese vínculo, el resolver de tenant devuelve 403 Forbidden.
CORS bloquea peticiones desde Sevastopol
Section titled “CORS bloquea peticiones desde Sevastopol”El Orchestrator solo acepta orígenes listados en CORS_ORIGINS. Para desarrollo local debe incluir http://localhost:4321 (Sevastopol) y http://localhost:4322 (Jean d’Arc si consume la API).
Migraciones / template desactualizado
Section titled “Migraciones / template desactualizado”Si al crear un tenant nuevo faltan tablas, regenerar accunting_template:
DROP DATABASE accunting_template;CREATE DATABASE accunting_template;\c accunting_template\i orchestrator/sql/template/init.sqlLuego recrear los tenants existentes que necesiten la versión actualizada.