Spot

Boletas de Spot

Empuja boletas médicas a Skip por el paciente para extracción con IA y seguimiento del reembolso.

Los proveedores de boletas (DTEmite, Octava, más algunos partners de agendamiento) empujan boletas directo a Skip. El paciente nunca toca una UI — tu backend envía, Skip extrae los datos con IA y el reembolso ISAPRE se gestiona automático.

Subes la boleta como archivo con POST /api/spot/gastos, autenticado con public_key como query param, igual que los endpoints de widget.

Formatos aceptados: solo PDF e imágenes (PDF, JPEG, PNG, WebP, HEIC/HEIF). XML no está soportado. Entre 1 y 5 archivos por request, máximo 2 MB cada uno.

Qué pasa después de enviar

Tu backend  →  POST /api/spot/gastos

                Skip valida provider + busca beneficiario

                IA extrae campos estructurados de la boleta

                Se crea ChileanExpense + se presenta reembolso ISAPRE

                El paciente recibe notificaciones (WhatsApp / email)

Si el RUT que envías no es un beneficiario Skip con al menos una ISAPRE asociada, la llamada devuelve 404 beneficiary_not_found.

Paciente aún no registrado (404)

Un paciente puede pagar hoy y completar su onboarding más tarde (o nunca). Si emites la boleta antes de que se registre, recibirás 404. Recomendación:

  1. Guarda la boleta y reintenta el envío cuando el paciente aparezca como beneficiario.
  2. Correlaciona por RUT (normalizado): es la llave entre el paciente y sus boletas en ambos flujos.
  3. Opcionalmente, pre-chequea con GET /api/spot/is_user_subscribed antes de reintentar, para no golpear el endpoint de gastos en vano.

Ejemplo: si el paciente se registra el mismo día que paga, la boleta emitida esa noche entra con 200. Si no completó el registro, seguirás recibiendo 404 hasta que lo haga — ahí reintentas.

Extracción con IA e idempotencia

El envío de boletas dispara un paso de extracción con IA que saca datos estructurados del documento. Conviene saber dos cosas: qué se extrae, y cómo Skip evita duplicados.

Qué extrae el modelo

Cuando envías una boleta, Skip corre un modelo sobre el documento y extrae:

  • RUT del médico y del prestador
  • Fecha de atención
  • Códigos por ítem (código FONASA, código DAU)
  • Monto y cantidad por ítem
  • Monto total
  • Nombre del emisor

Los campos que envías como form fields se usan como pistas que anclan la extracción — Skip prefiere lo que enviaste si hay conflicto, y usa la extracción para llenar campos que no proveíste.

Deduplicación

Skip deduplica por el archivo dentro de un mismo paciente y origen: reenviar el mismo documento no crea un ChileanExpense duplicado.

receipt_id se guarda como referencia tuya, no es la clave de deduplicación — no confíes en él para reintentos seguros. Si necesitas reintentar tras un fallo de red, reenvía el mismo archivo (ahí actúa la dedup por archivo); ten en cuenta que un reenvío puede volver a encolar el procesamiento.

Qué significa "processed_files" realmente

La respuesta processed_files lista los archivos que Skip aceptó. Un archivo puede estar en esta lista pero fallar la extracción downstream (ej. el modelo no puede leerlo). Esos fallos aparecen en colas internas de Skip y se notifican a tu account manager — no aparecen en la respuesta del endpoint.

Si necesitas garantía de que la boleta se extrajo bien, pide a Skip un webhook (hoy los webhooks de status de extracción de Spot no son parte de la superficie pública).

On this page