# Componentes backend
```mermaid
flowchart TD
server["server.js
arranque"] --> pool["Pool PostgreSQL
src/db/pool.js"]
server --> ensureAuth["ensureAuthTables
ensureDefaultAdmin
cleanupExpiredSessions"]
server --> ensureInvima["ensureInvimaTables"]
server --> app["Express app
src/app.js"]
app --> cors["cors
CORS_ORIGINS"]
app --> json["express.json
limit 1mb"]
app --> apiRouter["/api
routes/index.js"]
app --> errorMiddleware["errorMiddleware"]
apiRouter --> health["GET /health"]
apiRouter --> authRoutes["/auth
auth.routes.js"]
apiRouter --> invimaRoutes["/invima
invima.routes.js"]
authRoutes --> loginRoute["POST /login"]
authRoutes --> meRoute["GET /me"]
authRoutes --> logoutRoute["POST /logout"]
loginRoute --> authService["auth.service.js
login, createSession"]
meRoute --> requireAuth["requireAuth
auth.middleware.js"]
logoutRoute --> requireAuth
logoutRoute --> logoutService["auth.service.js
logout"]
requireAuth --> authenticate["authenticateToken"]
authenticate --> pool
authService --> pool
logoutService --> pool
invimaRoutes --> requireAuth
invimaRoutes --> datasets["GET /datasets
listInvimaDatasets"]
invimaRoutes --> categorias["GET /categorias
listInvimaCategories"]
invimaRoutes --> filtros["GET /filtros
listInvimaFilterOptions"]
invimaRoutes --> stats["GET /sync/stats
getInvimaSyncStats"]
invimaRoutes --> job["GET /sync/job
getInvimaSyncJob"]
invimaRoutes --> sync["POST /sync
startInvimaSyncJob"]
invimaRoutes --> catalogo["GET /catalogo
getInvimaCatalog"]
invimaRoutes --> exportar["GET /catalogo/export
csv o xlsx"]
categorias --> invimaService["invima/service.js"]
filtros --> invimaService
stats --> invimaService
catalogo --> invimaService
exportar --> invimaService
sync --> syncManager["sync-job-manager.js"]
syncManager --> invimaService
invimaService --> queries["Consultas SQL
invima_api_catalog
invima_api_raw"]
queries --> pool
invimaService --> adapters["adapters.js
normalizacion"]
invimaService --> apiInvima["APIinvima.js
fetchInvimaDataset"]
apiInvima --> config["APIinvima.json
datasets Socrata"]
apiInvima -- "HTTPS fetch" --> socrata["datos.gov.co/resource"]
```
## Archivos analizados
- `backend/src/server.js`
- `backend/src/app.js`
- `backend/src/routes/index.js`
- `backend/src/routes/auth.routes.js`
- `backend/src/routes/invima.routes.js`
- `backend/src/middlewares/auth.middleware.js`
- `backend/src/middlewares/error.middleware.js`
- `backend/src/auth/auth.service.js`
- `backend/src/db/pool.js`
- `backend/src/config/env.js`
- `backend/invima/service.js`
- `backend/invima/sync-job-manager.js`
- `backend/invima/adapters.js`
- `backend/APIinvima.js`
- `backend/APIinvima.json`
- `backend/package.json`