# Arquitectura general ```mermaid flowchart LR usuario["Usuario"] --> navegador["Navegador web"] navegador --> angular["Frontend Angular
semillero"] angular -- "HTTP /api/auth/*
HTTP /api/invima/*" --> proxy["Proxy Angular dev
/api -> http://localhost:3000"] proxy --> express["API REST Express
backend/src/app.js"] express --> auth["Rutas /api/auth
login, me, logout"] express --> invima["Rutas /api/invima
datasets, categorias, filtros,
sync, catalogo, export"] auth --> authService["auth.service.js
usuarios, sesiones, tokens"] invima --> invimaService["invima/service.js
catalogo, filtros, sincronizacion"] invima --> syncJob["sync-job-manager.js
estado de sincronizacion"] authService --> postgres[("PostgreSQL
app_users, app_sessions")] invimaService --> postgres invimaService -- "sincroniza datasets" --> socrata["datos.gov.co Socrata API
https://www.datos.gov.co/resource/*.json"] socrata --> invimaService invimaService --> adapters["adapters.js
normalizacion por dataset"] adapters --> postgresInvima[("PostgreSQL
invima_api_raw, invima_api_catalog")] postgresInvima --- postgres ``` ## Archivos analizados - `diagramas/frontend-clases.mmd` - `diagramas/frontend-clases.svg` - `semillero/src/app/app.routes.ts` - `semillero/src/app/app.config.ts` - `semillero/proxy.conf.json` - `backend/src/app.js` - `backend/src/server.js` - `backend/src/routes/index.js` - `backend/src/routes/auth.routes.js` - `backend/src/routes/invima.routes.js` - `backend/src/auth/auth.service.js` - `backend/src/db/pool.js` - `backend/src/config/env.js` - `backend/invima/service.js` - `backend/invima/adapters.js` - `backend/invima/sync-job-manager.js` - `backend/APIinvima.js` - `backend/APIinvima.json`