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