{"timestamp":"2026-09-07T20:00:40.906342+00:00","datetime_human":"2026-09-07 20:00:40","execution_time_seconds":16.94,"fleet_summary":{"total_services":9,"services_up":9,"services_error":0,"average_latency_ms":1074},"services":[{"id":"gds","name":"backend-boletos-la","ip":"34.236.254.39","role":"Motor GDS Delta Bus Core","repo":"boletos-la-backend-gds","status":"UP","latency_ms":838,"runtime":{"type":"pm2","app":"server","status":"online","memory_mb":125.0},"http_status":"200","health_detail":"PM2 'server': ONLINE (125MB) | HTTP Code: 200","logs":{"out":"[GDS:BLOCK] status: success\n[GDS:BLOCK] serviceId: 259992, seats: 1, channel: totem\n[GDS:BLOCK] status: success\n[GDS:CREATE_PASSENGER] name: IVAN ANDRES VALENZUELA RUBIO, doc: 17211508\n[GDS:CREATE_PASSENGER] status: success\n[GDS:BLOCK] serviceId: 259481, seats: 3, channel: web\n[GDS:BLOCK] status: success\n[GDS:CREATE_PASSENGER] name: IVAN ANDRES VALENZUELA RUBIO, doc: 17211508\n[GDS:CREATE_PASSENGER] status: success\n[GDS:BLOCK] serviceId: 259481, seats: 3, channel: web\n[GDS:BLOCK] status: success\n[GDS:UNBLOCK] connectionId: 3195181\n[GDS:UNBLOCK] status: success\n[GDS:UNBLOCK] connectionId: 3417423\n[GDS:UNBLOCK] status: success","error":"at async /home/bitnami/backend-boletos-la/node_modules/express-rate-limit/dist/index.cjs:782:5 {\n  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',\n  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'\n}\nSyntaxError: Unterminated string in JSON at position 100\n    at JSON.parse (<anonymous>)\n    at parse (/home/bitnami/backend-boletos-la/node_modules/body-parser/lib/types/json.js:77:19)\n    at /home/bitnami/backend-boletos-la/node_modules/body-parser/lib/read.js:123:18\n    at AsyncResource.runInAsyncScope (node:async_hooks:206:9)\n    at invokeCallback (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:238:16)\n    at done (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:227:7)\n    at IncomingMessage.onEnd (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:287:7)\n    at IncomingMessage.emit (node:events:524:28)\n    at endReadableNT (node:internal/streams/readable:1698:12)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"},"database_trace":{"type":"mongodb","summary":"Colecciones y estadisticas de MongoDB 'backend-boletos-la':\n  - Servicios: 0 | Ciudades: 0 | Rutas: 0 | Usuarios: 1\n  - Colecciones activas: users, buslayouts, buses, services, cities, seats, routemasters\n  (Servicios se sincronizan on-demand via SOAP Delta Bus)","counts":{"services":0,"cities":0,"routemasters":0,"users":1},"collections":["users","buslayouts","buses","services","cities","seats","routemasters"],"latest_services":[]},"sysinfo":{"ram":"874/3867MB (22.6%)","disk":"3.5G/79G (5%)","load":"0.00, 0.00, 0.00","summary":"RAM: 874/3867MB (22.6%) | Disco: 3.5G/79G (5%) | Load: 0.00, 0.00, 0.00"}},{"id":"bancard","name":"server-bancard-wit","ip":"3.239.196.199","role":"Orquestador Bancard vPOS 2.0 & QR","repo":"boletos-la-backend-bancard","status":"UP","latency_ms":1098,"runtime":{"type":"pm2","app":"backend-vpos","status":"online","memory_mb":100.3},"http_status":"running","health_detail":"PM2 'backend-vpos': ONLINE (100MB) | HTTP: running","logs":{"out":"\u001b[0mGET / \u001b[32m200\u001b[0m 0.394 ms - 161\u001b[0m\n\u001b[32m[2026-09-07T19:56:40.742Z] GET / 200 1ms — IP: ::1\u001b[0m\n\u001b[0mGET / \u001b[32m200\u001b[0m 0.386 ms - 161\u001b[0m\n\u001b[32m[2026-09-07T20:00:41.992Z] GET / 200 1ms — IP: ::ffff:127.0.0.1\u001b[0m","error":"Sin logs de error recientes en stderr"},"database_trace":{"type":"mysql_bancard","summary":"Ultimas 5 transacciones en RDS MySQL 'bancard' (tabla vpos_audit):\nID     FECHA                ACCION         SHOP_PROCESS_ID    MONTO      ESTADO   AUTH#    CDC SIFEN\n-------------------------------------------------------------------------------------------------------------------\n1941   2026-09-07 19:49:20  confirmation   169282632344381    N/A        error    —        —\n1940   2026-09-07 19:49:18  confirmation   169282632344381    N/A        error    —        —\n1939   2026-09-07 19:49:15  confirmation   169282632344381    N/A        error    —        —\n1938   2026-09-07 19:49:13  confirmation   169282632344381    N/A        error    —        —\n1937   2026-09-07 19:49:11  confirmation   169282632344381    N/A        error    —        —","records":[{"id":1941,"action":"confirmation","shop_process_id":"169282632344381","amount":null,"status_result":"error","authorization_number":null,"cdc":null,"created_at":"2026-09-07T19:49:20.000Z"},{"id":1940,"action":"confirmation","shop_process_id":"169282632344381","amount":null,"status_result":"error","authorization_number":null,"cdc":null,"created_at":"2026-09-07T19:49:18.000Z"},{"id":1939,"action":"confirmation","shop_process_id":"169282632344381","amount":null,"status_result":"error","authorization_number":null,"cdc":null,"created_at":"2026-09-07T19:49:15.000Z"},{"id":1938,"action":"confirmation","shop_process_id":"169282632344381","amount":null,"status_result":"error","authorization_number":null,"cdc":null,"created_at":"2026-09-07T19:49:13.000Z"},{"id":1937,"action":"confirmation","shop_process_id":"169282632344381","amount":null,"status_result":"error","authorization_number":null,"cdc":null,"created_at":"2026-09-07T19:49:11.000Z"}]},"sysinfo":{"ram":"696/1941MB (35.9%)","disk":"3.3G/59G (6%)","load":"0.17, 0.08, 0.03","summary":"RAM: 696/1941MB (35.9%) | Disco: 3.3G/59G (6%) | Load: 0.17, 0.08, 0.03"}},{"id":"pdf","name":"new-backend-pdf-2","ip":"32.197.199.197","role":"Emision Boletos PDF & CDC SIFEN","repo":"boletos-la-backend-pdf-tickets","status":"UP","latency_ms":2467,"runtime":{"type":"pm2","app":"app","status":"online","memory_mb":109.4},"http_status":"success","health_detail":"PM2 'app': ONLINE (109MB) | HTTP: success","logs":{"out":"==> /home/admin/.pm2/logs/app-out-0.log <==\n2026-08-27T15:23:22: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }\n2026-08-27T15:23:23: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }\n2026-08-27T15:23:24: Servidor en puerto 3000\n2026-08-27T11:29:15: [dotenv@17.2.4] injecting env (7) from .env -- tip: 🛠️  run anywhere with `dotenvx run -- yourcommand`\n2026-08-27T11:29:18: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }\n2026-08-27T11:29:18: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops\n2026-08-27T11:29:19: Servidor en puerto 3000\n2026-09-03T19:07:43: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }\n2026-09-03T19:07:48: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }\n2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }\n2026-09-03T19:07:50: Servidor en puerto 3000\n2026-09-03T20:48:37: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  override existing env vars with { override: true }\n2026-09-03T20:48:40: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔑 add access controls to secrets: https://dotenvx.com/ops\n2026-09-03T20:48:41: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops\n2026-09-03T20:48:41: Servidor en puerto 3000\n\n==> /home/admin/.pm2/logs/app-out-1.log <==\n2026-08-27T15:23:22: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }\n2026-08-27T15:23:23: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  override existing env vars with { override: true }\n2026-08-27T15:23:23: Servidor en puerto 3000\n2026-08-27T11:29:16: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }\n2026-08-27T11:29:19: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }\n2026-08-27T11:29:19: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }\n2026-08-27T11:29:20: Servidor en puerto 3000\n2026-09-03T19:07:47: [dotenv@17.2.4] injecting env (7) from .env -- tip: 🗂️ backup and recover secrets: https://dotenvx.com/ops\n2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops\n2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔐 prevent building .env in docker: https://dotenvx.com/prebuild\n2026-09-03T19:07:50: Servidor en puerto 3000\n2026-09-03T20:48:38: [dotenv@17.2.4] injecting env (7) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops\n2026-09-03T20:48:42: [dotenv@17.2.4] injecting env (0) from .env -- tip: 👥 sync secrets across teammates & machines: https://dotenvx.com/ops\n2026-09-03T20:48:42: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }\n2026-09-03T20:48:42: Servidor en puerto 3000\n\n==> /home/admin/.pm2/logs/app-out.log <==\n[pdfGenerator] Lanzando Chromium...\n[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium\n[pdfGenerator] Lanzando Chromium...\n[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium\n[pdfGenerator] Lanzando Chromium...\n[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium\n[pdfGenerator] Lanzando Chromium...\n[dotenv@17.2.4] injecting env (8) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops\n[dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops\n[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  suppress all logs with { quiet: true }\nServidor en puerto 3000\n[dotenv@17.2.4] injecting env (8) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops\n[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  override existing env vars with { override: true }\n[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }\nServidor en puerto 3000","error":"==> /home/admin/.pm2/logs/app-error-0.log <==\n    at Socket.emit (node:events:509:28)\n    at addChunk (node:internal/streams/readable:563:12)\n    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)\n    at Readable.push (node:internal/streams/readable:394:5)\n2026-09-05T23:06:02: Error con html-pdf-node: Error: Gotenberg devolvió código de error: 503\n    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:50:13)\n    at Object.onceWrapper (node:events:631:26)\n    at ClientRequest.emit (node:events:509:28)\n    at HTTPParser.parserOnIncomingClient (node:_http_client:798:27)\n    at HTTPParser.parserOnHeadersComplete (node:_http_common:125:17)\n    at Socket.socketOnData (node:_http_client:633:22)\n    at Socket.emit (node:events:509:28)\n    at addChunk (node:internal/streams/readable:563:12)\n    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)\n    at Readable.push (node:internal/streams/readable:394:5)\n\n==> /home/admin/.pm2/logs/app-error-1.log <==\n    at Socket.emit (node:events:509:28)\n    at addChunk (node:internal/streams/readable:563:12)\n    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)\n    at Readable.push (node:internal/streams/readable:394:5)\n2026-09-05T23:06:02: Error con html-pdf-node: Error: Gotenberg devolvió código de error: 503\n    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:50:13)\n    at Object.onceWrapper (node:events:631:26)\n    at ClientRequest.emit (node:events:509:28)\n    at HTTPParser.parserOnIncomingClient (node:_http_client:798:27)\n    at HTTPParser.parserOnHeadersComplete (node:_http_common:125:17)\n    at Socket.socketOnData (node:_http_client:633:22)\n    at Socket.emit (node:events:509:28)\n    at addChunk (node:internal/streams/readable:563:12)\n    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)\n    at Readable.push (node:internal/streams/readable:394:5)\n\n==> /home/admin/.pm2/logs/app-error.log <==\n    at emitErrorEvent (node:_http_client:109:11)\n    at Socket.socketErrorListener (node:_http_client:593:5)\n    at Socket.emit (node:events:509:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)\nError con html-pdf-node: Error: No se pudo conectar con Gotenberg en http://3.235.151.80:3001. ¿Está corriendo Docker? Detalles: connect ETIMEDOUT 3.235.151.80:3001\n    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:64:9)\n    at ClientRequest.emit (node:events:509:28)\n    at emitErrorEvent (node:_http_client:109:11)\n    at Socket.socketErrorListener (node:_http_client:593:5)\n    at Socket.emit (node:events:509:28)\n    at emitErrorNT (node:internal/streams/destroy:170:8)\n    at emitErrorCloseNT (node:internal/streams/destroy:129:3)\n    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)"},"database_trace":{"type":"none","summary":"Servicio stateless o sin persistencia transaccional directa","records":[]},"sysinfo":{"ram":"1058/1941MB (54.5%)","disk":"24G/59G (42%)","load":"2.45, 2.33, 2.42","summary":"RAM: 1058/1941MB (54.5%) | Disco: 24G/59G (42%) | Load: 2.45, 2.33, 2.42"}},{"id":"convenios","name":"BoletosConveniosServer","ip":"44.193.77.208","role":"Convenios B2B Boletos Paraguay","repo":"backend-convenios-py","status":"UP","latency_ms":1016,"runtime":{"type":"pm2","app":"backend","status":"online","memory_mb":77.0},"http_status":"OK","health_detail":"PM2 'backend': ONLINE (77MB) | HTTP: OK","logs":{"out":"{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}\n{\"level\":\"info\",\"message\":\"⏰ Ejecutando limpieza de convenios vencidos...\"}","error":"at Object.<anonymous> (/home/ubuntu/app/src/server.js:2:1)\n    at Module._compile (node:internal/modules/cjs/loader:1521:14)\n    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)\n    at Module.load (node:internal/modules/cjs/loader:1266:32)\n    at Module._load (node:internal/modules/cjs/loader:1091:12)\n    at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:32:23) {\n  code: 'MODULE_NOT_FOUND',\n  requireStack: [ '/home/ubuntu/app/src/server.js' ]\n}\n[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)\n[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)\n[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)\n[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)\n[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)\n[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)"},"database_trace":{"type":"convenios_api","summary":"Convenios activos y codigos de descuento en MySQL 'convenios' (Total: 7):\nID   ESTADO     CODIGO         DESCUENTO    ALCANCE    EMPRESA                NOMBRE CONVENIO\n---------------------------------------------------------------------------------------------------------\n1    ACTIVO     BOLETOS        5.00%        Global     Boletos.la/paraguay    5% OFF - Boletos\n3    INACTIVO   WIT1995        95.00%       Global     Boletos.la/paraguay    95% OFF - Boletos\n4    INACTIVO   —              20.00%       Global     Empresa Test           Convenio beneficiario test adulto mayor\n5    INACTIVO   —              25.00%       Global     Empresa Test           Estudiante\n6    INACTIVO   —              30.00%       Global     Empresa 2              Convenio 2\n7    INACTIVO   TESTDEL123     5.00%        Global     Boletos.la/paraguay    CONVENIO_TEST_BORRADO_TEMPORAL\n8    ACTIVO     BOLETOS70      70.00%       Global     Boletos.la/paraguay    70% OFF - Boletos","total":7,"records":[{"id":1,"nombre":"5% OFF - Boletos","empresa_id":1,"categoria_id":null,"categoria":null,"empresa_nombre":"Boletos.la/paraguay","empresa_rut":"80171570-9","status":"ACTIVO","tipo_consulta":"CODIGO_DESCUENTO","api_consulta_id":1,"beneficio":false,"imagenes":[],"endpoint":"/api/convenios/validar/{codigo}","fecha_inicio":"2026-08-26T00:00:00.000Z","fecha_termino":"2026-09-30T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"5.00","codigo":"BOLETOS","limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":null,"fecha_fin_inscripcion":null,"consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":0,"rutas":[],"configuraciones":[]},{"id":3,"nombre":"95% OFF - Boletos","empresa_id":1,"categoria_id":null,"categoria":null,"empresa_nombre":"Boletos.la/paraguay","empresa_rut":"80171570-9","status":"INACTIVO","tipo_consulta":"CODIGO_DESCUENTO","api_consulta_id":1,"beneficio":false,"imagenes":[],"endpoint":"/api/convenios/validar/{codigo}","fecha_inicio":"2026-08-26T00:00:00.000Z","fecha_termino":"2026-09-02T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"95.00","codigo":"WIT1995","limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":null,"fecha_fin_inscripcion":null,"consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":0,"rutas":[],"configuraciones":[]},{"id":4,"nombre":"Convenio beneficiario test adulto mayor","empresa_id":3,"categoria_id":1,"categoria":{"id":1,"nombre":"Adulto Mayor"},"empresa_nombre":"Empresa Test","empresa_rut":"2131312-3","status":"INACTIVO","tipo_consulta":"API_EXTERNA","api_consulta_id":2,"beneficio":true,"imagenes":["Cedula de identidad","Certificado de jubilacion"],"endpoint":"/api/integraciones/beneficiarios/validar","fecha_inicio":"2026-05-04T00:00:00.000Z","fecha_termino":"2026-08-04T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"20.00","codigo":null,"limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":"2026-08-31T00:00:00.000Z","fecha_fin_inscripcion":"2035-04-04T00:00:00.000Z","beneficio_nombre":"Convenio beneficiario test adulto mayor","beneficio_endpoint_registro":"/api/beneficiarios","beneficio_endpoint_validacion":"/api/integraciones/beneficiarios/validar","consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":3,"rutas":[],"configuraciones":[{"tipo_viaje":"Solo Ida","max_pasajes":2,"tipo_asiento":"Semi Cama","precio_solo_ida":2000}]},{"id":5,"nombre":"Estudiante","empresa_id":3,"categoria_id":2,"categoria":{"id":2,"nombre":"Beneficio estudiantil"},"empresa_nombre":"Empresa Test","empresa_rut":"2131312-3","status":"INACTIVO","tipo_consulta":"API_EXTERNA","api_consulta_id":2,"beneficio":true,"imagenes":["Tarjeta nacional estudiantil"],"endpoint":"/api/integraciones/beneficiarios/validar","fecha_inicio":"2026-02-25T00:00:00.000Z","fecha_termino":"2026-09-02T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"25.00","codigo":null,"limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":"2026-02-04T00:00:00.000Z","fecha_fin_inscripcion":"2027-04-03T00:00:00.000Z","beneficio_nombre":"Estudiante","beneficio_endpoint_registro":"/api/beneficiarios","beneficio_endpoint_validacion":"/api/integraciones/beneficiarios/validar","consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":2,"rutas":[],"configuraciones":[]},{"id":6,"nombre":"Convenio 2","empresa_id":4,"categoria_id":2,"categoria":{"id":2,"nombre":"Beneficio estudiantil"},"empresa_nombre":"Empresa 2","empresa_rut":"213412412-2","status":"INACTIVO","tipo_consulta":"API_EXTERNA","api_consulta_id":3,"beneficio":false,"imagenes":[],"endpoint":"/api/tablas-clientes-corporativos/validar/empresa_2","fecha_inicio":"2026-04-02T00:00:00.000Z","fecha_termino":"2026-08-03T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"30.00","codigo":null,"limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":null,"fecha_fin_inscripcion":null,"consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":0,"rutas":[],"configuraciones":[]},{"id":7,"nombre":"CONVENIO_TEST_BORRADO_TEMPORAL","empresa_id":1,"categoria_id":null,"categoria":null,"empresa_nombre":"Boletos.la/paraguay","empresa_rut":"80171570-9","status":"INACTIVO","tipo_consulta":"CODIGO_DESCUENTO","api_consulta_id":1,"beneficio":false,"imagenes":[],"endpoint":"/api/convenios/validar/{codigo}","fecha_inicio":"2026-09-01T00:00:00.000Z","fecha_termino":"2026-09-01T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":null,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"5.00","codigo":"TESTDEL123","limitar_por_stock":false,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":null,"fecha_fin_inscripcion":null,"consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":0,"rutas":[],"configuraciones":[]},{"id":8,"nombre":"70% OFF - Boletos","empresa_id":1,"categoria_id":null,"categoria":null,"empresa_nombre":"Boletos.la/paraguay","empresa_rut":"80171570-9","status":"ACTIVO","tipo_consulta":"CODIGO_DESCUENTO","api_consulta_id":1,"beneficio":false,"imagenes":[],"endpoint":"/api/convenios/validar/{codigo}","fecha_inicio":"2026-09-02T00:00:00.000Z","fecha_termino":"2026-09-30T23:59:59.000Z","tope_monto_descuento":null,"tope_cantidad_tickets":10,"tipo_alcance":"Global","tipo_descuento":"Porcentaje","valor_descuento":"70.00","codigo":"BOLETOS70","limitar_por_stock":true,"limitar_por_monto":false,"cargo_por_servicio":false,"valor_cargo_servicio":0,"cargo_servicio_id":null,"inscripcion":false,"fecha_inicio_inscripcion":null,"fecha_fin_inscripcion":null,"consumo_tickets":0,"consumo_monto_descuento":0,"total_beneficiarios":0,"rutas":[],"configuraciones":[]}]},"sysinfo":{"ram":"499/911MB (54.8%)","disk":"3.2G/38G (9%)","load":"0.40, 0.08, 0.03","summary":"RAM: 499/911MB (54.8%) | Disco: 3.2G/38G (9%) | Load: 0.40, 0.08, 0.03"}},{"id":"n8n","name":"Boletos_N8N_WhatsApp","ip":"44.201.44.213","role":"n8n WhatsApp & Evolution API","repo":"boletos-la-remarketing-service","status":"UP","latency_ms":937,"runtime":{"type":"docker","status":"running","container":"boletos_backend"},"http_status":"ok","health_detail":"Docker: boletos_backend: Up 3 days | n8n-whatsap | HTTP: ok","logs":{"out":"Servidor HTTP y WebSocket corriendo en el puerto 3000\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.\n[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...\n[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.","error":"Sin errores registrados en las ultimas lineas"},"database_trace":{"type":"evolution_postgres","summary":"id | name | connectionStatus | createdAt \n----+------+------------------+-----------\n(0 rows)","raw":"id | name | connectionStatus | createdAt \n----+------+------------------+-----------\n(0 rows)"},"sysinfo":{"ram":"1195/1907MB (62.7%)","disk":"11G/58G (19%)","load":"0.15, 0.04, 0.01","summary":"RAM: 1195/1907MB (62.7%) | Disco: 11G/58G (19%) | Load: 0.15, 0.04, 0.01"}},{"id":"vpn","name":"docker-vpn","ip":"3.238.141.180","role":"WireGuard Management VPN","repo":"boletos-la-infra-vpn","status":"UP","latency_ms":985,"runtime":{"type":"docker","status":"running","container":"wg-easy"},"http_status":"Up 2 weeks (healthy)","health_detail":"Docker: wg-easy: Up 2 weeks (healthy) | HTTP Code: Up 2 weeks (healthy)","logs":{"out":"2026-08-21T18:57:50.059Z WireGuard Config saved.\n2026-08-21T18:57:50.059Z WireGuard Config syncing...\n$ wg syncconf wg0 <(wg-quick strip wg0)\n2026-08-21T18:57:50.095Z WireGuard Config synced.\n2026-08-21T18:59:43.399Z WireGuard Config saving...\n$ wg syncconf wg0 <(wg-quick strip wg0)\n2026-08-21T18:59:43.400Z WireGuard Config saved.\n2026-08-21T18:59:43.400Z WireGuard Config syncing...\n2026-08-21T18:59:43.434Z WireGuard Config synced.\n2026-09-03T14:22:30.244Z Server New Session: obN_cS8-lEPSY87H_i8A97ao5VAvpJJe\n2026-09-03T14:22:42.005Z WireGuard Config saving...\n2026-09-03T14:22:42.008Z WireGuard Config saved.\n2026-09-03T14:22:42.008Z WireGuard Config syncing...\n$ wg syncconf wg0 <(wg-quick strip wg0)\n2026-09-03T14:22:42.050Z WireGuard Config synced.","error":"Sin errores registrados en las ultimas lineas"},"database_trace":{"type":"none","summary":"Servicio stateless o sin persistencia transaccional directa","records":[]},"sysinfo":{"ram":"581/911MB (63.8%)","disk":"3.5G/38G (10%)","load":"0.00, 0.00, 0.00","summary":"RAM: 581/911MB (63.8%) | Disco: 3.5G/38G (10%) | Load: 0.00, 0.00, 0.00"}},{"id":"publicidad","name":"backend-boletos-publicidad","ip":"44.245.217.130","role":"Publicidad & Totems Terminal","repo":"boletos-la-backend-publicidad","status":"UP","latency_ms":1118,"runtime":{"type":"pm2","app":"server","status":"online","memory_mb":112.9},"http_status":"200","health_detail":"PM2 'server': ONLINE (113MB) | HTTP Code: 200","logs":{"out":"'cdn-loop': 'cloudflare; loops=1',\n  'cf-connecting-ip': '181.42.164.150',\n  'cf-ipcountry': 'CL',\n  'cf-visitor': '{\"scheme\":\"https\"}',\n  'x-forwarded-proto': 'https',\n  'accept-encoding': 'gzip, br',\n  'x-forwarded-host': 'backend-boletos-publicidad.dev-wit.com',\n  'x-forwarded-server': 'backend-boletos-publicidad.dev-wit.com',\n  connection: 'Upgrade',\n  upgrade: 'websocket'\n}\n\u001b[0mGET / \u001b[32m200\u001b[0m 0.238 ms - 85\u001b[0m\n\u001b[0mGET / \u001b[32m200\u001b[0m 0.236 ms - 85\u001b[0m\n\u001b[0mGET / \u001b[32m200\u001b[0m 0.226 ms - 85\u001b[0m\n\u001b[0mGET / \u001b[32m200\u001b[0m 0.233 ms - 85\u001b[0m","error":"[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada\n[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos"},"database_trace":{"type":"none","summary":"Servicio stateless o sin persistencia transaccional directa","records":[]},"sysinfo":{"ram":"426/945MB (45.1%)","disk":"5.9G/40G (16%)","load":"0.00, 0.00, 0.00","summary":"RAM: 426/945MB (45.1%) | Disco: 5.9G/40G (16%) | Load: 0.00, 0.00, 0.00"}},{"id":"analitica","name":"boletos-la-analitica","ip":"16.59.46.45","role":"Analitica MEAN & Conversiones","repo":"boletos-la-analitica","status":"UP","latency_ms":581,"runtime":{"type":"pm2","app":"index","status":"online","memory_mb":74.6},"http_status":"200","health_detail":"PM2 'index': ONLINE (75MB) | HTTP Code: 200","logs":{"out":"◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }\nTablas sincronizadas y conectado a MySQL\nServidor en http://localhost:3000\n◇ injected env (8) from .env // tip: ◈ secrets for agents [www.dotenvx.com]\nTablas sincronizadas y conectado a MySQL\nServidor en http://localhost:3000\n◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }\nTablas sincronizadas y conectado a MySQL\nServidor en http://localhost:3000\n◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }\nTablas sincronizadas y conectado a MySQL\nServidor en http://localhost:3000\n◇ injected env (8) from .env // tip: ◈ encrypted .env [www.dotenvx.com]\nTablas sincronizadas y conectado a MySQL\nServidor en http://localhost:3000","error":"at process.processTicksAndRejections (node:internal/process/task_queues:82:21)\nDeprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\nArguments: \n[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 18-06-2008, _f: undefined, _strict: undefined, _locale: [object Object]\nError\n    at Function.createFromInputFallback (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:324:25)\n    at configFromString (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:2613:19)\n    at configFromInput (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3056:13)\n    at prepareConfig (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3039:13)\n    at createFromConfig (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3006:44)\n    at createLocalOrUTC (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3100:16)\n    at createLocal (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3104:16)\n    at hooks (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:16:29)\n    at model._sanitize (/home/bitnami/backend-boletos-analitica/node_modules/sequelize/lib/data-types.js:356:14)\n    at model.set (/home/bitnami/backend-boletos-analitica/node_modules/sequelize/lib/model.js:2286:59)"},"database_trace":{"type":"none","summary":"Servicio stateless o sin persistencia transaccional directa","records":[]},"sysinfo":{"ram":"712/1941MB (36.7%)","disk":"4.0G/59G (7%)","load":"0.02, 0.03, 0.00","summary":"RAM: 712/1941MB (36.7%) | Disco: 4.0G/59G (7%) | Load: 0.02, 0.03, 0.00"}},{"id":"itinerarios","name":"backend-itinerarios","ip":"18.222.89.111","role":"Motor de Itinerarios y Horarios","repo":"backend-itinerarios","status":"UP","latency_ms":625,"runtime":{"type":"pm2","app":"server","status":"online","memory_mb":122.7},"http_status":"200","health_detail":"PM2 'server': ONLINE (123MB) | HTTP Code: 200","logs":{"out":"Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2070' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2013' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1652' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2070' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1652' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2013' ORDER BY `Image`.`id` DESC LIMIT 3;\nExecuting (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2070' ORDER BY `Image`.`id` DESC LIMIT 3;","error":"Sin logs de error recientes en stderr"},"database_trace":{"type":"none","summary":"Servicio stateless o sin persistencia transaccional directa","records":[]},"sysinfo":{"ram":"563/1941MB (29.0%)","disk":"2.8G/59G (5%)","load":"0.00, 0.00, 0.00","summary":"RAM: 563/1941MB (29.0%) | Disco: 2.8G/59G (5%) | Load: 0.00, 0.00, 0.00"}}]}