Integración PAMI SII
Qué es: el núcleo del producto. PAMI / INSSJP no expone una API pública: el SII (Sistema
Interactivo de Información) se accede por scraping HTTP — axios + cookie jar + cheerio.
De ahí sale casi todo el dato externo: afiliados, autorizaciones / OP, cápitas asignadas, diagnósticos, OMEs, insumos, planes onco.
Las piezas
| Archivo | Rol |
|---|---|
src/services/v3/PamiSIIServiceV3.ts (~4.800 líneas) | El corazón. Casi todos los flujos de worker desembocan acá |
src/services/v3/PamiSIIServiceV4.ts | Iteración más nueva de partes del scraping |
src/services/v3/SIIBotService.ts + SIIBotPoolService.ts | Sesiones de bot contra el SII y su pool |
src/services/v3/CupBotPoolService.ts, PadronBotService.ts | Pools para CUP y para el padrón |
src/services/v2/PamiSIIService.ts, CupPamiSIIService.ts, PamiSIIFinancesService.ts | Capas previas, todavía en uso |
src/SIIWorkerConfig.ts, src/CupWorkerConfigV2.ts | Los managers de worker |
configuration.SiiCredential | Las credenciales de acceso al SII |
services/v1/PamiSIIService.ts es legacyLa integración viva es v2 / v3 / v4. Ver Código legacy.
Cómo pensarla
- Es frágil por naturaleza. Si el SII cambia el HTML, se rompe el parseo. Los errores de scraping se dejan crashear el worker (reinicia y reintenta) en vez de tragarse. Ver Workers y colas.
- Los resultados se cachean en Redis (lookups de PAMI ~12 h) y se deduplican con keys tipo
authorization-scrapped-${op}. - El scraping se orquesta por colas: un publisher o loop llena la cola, un consumer / worker scrapea.
- La credencial PAMI es
beneficio+gp(grado de parentesco), guardada concatenada enPatientAgreement.healthcardnumber. Los adapters de autorización la parten o la matchean según el origen. Ver Autorizaciones.
Gotchas
Las cápitas del afiliado son read-only
Las cápitas que PAMI asignó al afiliado se leen de cache Redis (PamiCapita*) y no se escriben desde
Proteus. No las confundas con la cápita de cartilla local — ver el
glosario.
- Las OMEs solo cuentan si están validadas por PAMI (y valorizadas). Transmitida ≠ validada: el snapshot
diario distingue
OMESTRANSMITIDASdeOMESVALIDADAS. Ver OMEs y CUP. - Los
temp_sii_*.txtde la raíz del repo son volcados de scratch, no fixtures ni parte de la app. - Los catálogos
configuration."SERVICES"/"INSURANCES"/"AGREEMENTS"migraron vacíos en algunos entornos: una lista en blanco es dato, no bug. - Bug conocido y diferido:
refresh-oncoplanda 500 con credencial alfanumérica. La corrección correcta sería escrapear solo si el financiador es PAMI.