Skip to content

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.

SoftwareVersión MínimaPropósito
Node.js20.x LTSRuntime para Orchestrator, Sevastopol y Jean d’Arc
PostgreSQL16.xBase de datos Mother (multi-tenant)
Python3.11+ETL Nostromo (accounting_system/)
Git2.xControl de versiones
pnpm10.x (corepack)Gestor de paquetes obligatorio (Orchestrator, Sevastopol y Jean d’Arc)

Terminal window
git clone https://github.com/ChrisTkm/Nostromo.git
cd Nostromo
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 compartidos

Mother es PostgreSQL 16 con arquitectura multi-tenant: dos bases del sistema y una base por empresa.

CREATE DATABASE nostromo_common;
CREATE DATABASE nostromo_command;
  • nostromo_common aloja parámetros compartidos: monedas, indicadores, AFP, ISAPRE, tablas IUSC.
  • nostromo_command aloja autenticación, sesiones y registro de tenants.

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 plantilla
CREATE 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.


Cada componente lee su propio .env. Los archivos .env.example viven en cada subcarpeta.

orchestrator/.env
PGHOST=localhost
PGPORT=5432
PGUSER=postgres
PGPASSWORD=$DB_PASSWORD
COMMAND_DB=nostromo_command
COMMON_DB=nostromo_common
JWT_SECRET=$JWT_SECRET
JWT_EXPIRES_IN=8h
CORS_ORIGINS=http://localhost:4321,http://localhost:4322
PORT=8000
sevastopol/.env
PUBLIC_API_URL=http://localhost:8000
accounting_system/.env
PGHOST=localhost
PGPORT=5432
PGUSER=postgres
PGPASSWORD=$DB_PASSWORD
PGDATABASE=nostromo_common

  1. Instalar dependencias del workspace

    Terminal window
    cd Accounting
    pnpm install

    El pnpm-workspace.yaml raíz instala Orchestrator y Sevastopol en una sola pasada.

  2. Configurar variables de entorno

    Terminal window
    cp orchestrator/.env.example orchestrator/.env
    # editar credenciales de PostgreSQL y JWT_SECRET
  3. Iniciar en desarrollo

    Terminal window
    pnpm --dir orchestrator dev
    # o desde la raíz del workspace:
    pnpm dev:orchestrator

    El backend queda escuchando en http://localhost:8000.

  4. Verificar

    Terminal window
    curl http://localhost:8000/health
    # → {"status":"OK","service":"orchestrator"}

  1. Dependencias ya instaladas con pnpm install en el workspace

    Si lo levantás aislado:

    Terminal window
    pnpm --dir sevastopol install
  2. Configurar el endpoint del Orchestrator

    Terminal window
    cp sevastopol/.env.example sevastopol/.env
    # PUBLIC_API_URL=http://localhost:8000
  3. Iniciar en desarrollo

    Terminal window
    pnpm --dir sevastopol dev
    # o desde la raíz del workspace:
    pnpm dev:sevastopol

    La SPA queda disponible en http://localhost:4321.


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.

  1. Crear entorno virtual e instalar dependencias

    Terminal window
    cd accounting_system
    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
  2. Configurar credenciales hacia Mother

    Terminal window
    cp .env.example .env
    # PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE=nostromo_common
  3. 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.


  1. Activar corepack y pnpm

    Terminal window
    corepack enable
    corepack prepare pnpm@latest --activate
  2. Instalar dependencias

    Terminal window
    cd jean_d_arc
    pnpm install
  3. Iniciar el servidor de desarrollo

    Terminal window
    pnpm run dev

    La documentación queda disponible en http://localhost:4322.

  4. Build para producción

    Terminal window
    pnpm run build
    pnpm run preview

ComponenteURLVerificación
Orchestratorhttp://localhost:8000/healthRetorna {"status":"ok"}
Sevastopolhttp://localhost:4321Muestra la página de login
Jean d’Archttp://localhost:4322Muestra la home de la documentación
PostgreSQLlocalhost:5432pg_isready -h localhost -p 5432

Una sesión típica de desarrollo requiere tener corriendo:

  1. PostgreSQL como servicio de sistema o contenedor.
  2. Orchestrator con pnpm --dir orchestrator dev (puerto 8000).
  3. Sevastopol con pnpm --dir sevastopol dev (puerto 4321).
  4. 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.


Terminal window
netstat -ano | findstr :8000
# Identificar PID y cerrar el proceso si corresponde
taskkill /F /PID <pid>
Terminal window
pg_isready -h localhost -p 5432
# Si falla: revisar el servicio postgres y las credenciales en .env

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.

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).

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.sql

Luego recrear los tenants existentes que necesiten la versión actualizada.