# 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`