Files
IPSExtractor/services/desktop_app/README.md
T

3.4 KiB

desktop_app

Aplicación de escritorio Electron + React para interactuar con el stack IPSExtractor. Permite seleccionar carpetas locales, contar servicios en facturas médicas, revisar resultados y lanzar extracciones LLM.


Flujos principales

Conteo de facturas

  1. Seleccionar carpeta con PDFs.
  2. Los PDFs se envían en lotes de 10 a POST /count/v1/count (count-api).
  3. Los resultados se guardan en PostgreSQL vía POST /count-jobs (extraction).
  4. El usuario revisa y marca archivos como válidos/inválidos.

Extracción desde conteo

  1. Desde el wizard de conteo, clic en "Extraer archivos válidos".
  2. Se llama POST /tasks/extraction/from-count con el counting_task_id.
  3. El servicio extraction lee los PDFs desde el volumen /data y los procesa con LLM.

Extracción directa

  1. Seleccionar carpeta → discovery de campos → seleccionar campos → estimar costo.
  2. Subir PDFs en lotes a /tasks/{id}/ingest-many.
  3. Polling de progreso vía GET /tasks/{id}.
  4. Exportar resultados como CSV.

Arquitectura técnica

Capa Tecnología
Shell Electron 35+
UI React 19 + TypeScript
Bundler Vite
Estilos CSS custom (sin framework UI)
IPC contextBridge (preload.cjs)

Comunicación con el backend

Toda la comunicación pasa por el API Gateway (http://localhost:8000). El cliente HTTP es src/renderer/lib/apiClient.ts.

Indexación de carpetas

El proceso principal (Electron) indexa carpetas locales con electron/folderIndex.cjs:

  • Modo general: lista todos los PDFs/TIFFs de la carpeta.
  • Modo radicados: busca un PDF por tipo de documento dentro de subdirectorios con nombre de radicado.

Estructura del código

electron/
  main.cjs          — proceso principal Electron
  preload.cjs       — bridge seguro main ↔ renderer (contextBridge)
  folderIndex.cjs   — indexación de carpetas locales
src/
  renderer/
    App.tsx                       — root: navegación y estado global
    components/
      CountingWizard.tsx          — wizard de conteo en 3 pasos
      CountResultsTable.tsx       — tabla de resultados con validación
      CountingStepper.tsx         — indicador de progreso
      ExtractionWizard.tsx        — wizard de extracción en 4 pasos
      ExtractionStepper.tsx       — indicador de progreso
    lib/
      apiClient.ts                — cliente HTTP hacia el API Gateway
      payloads.ts                 — builders de FormData y JSON
      pathMapping.ts              — mapeo rutas locales ↔ contenedor
      csv.ts                      — exportación CSV
    styles.css                    — estilos globales
  shared/
    types.ts                      — tipos compartidos main/renderer

Variables de configuración (runtime)

Variable Default Descripción
API Gateway URL http://localhost:8000 Configurable en la pantalla de Configuración
Ruta local de documentos — Seleccionada con el explorador de archivos
Ruta en contenedor /data Prefijo donde Docker monta los documentos

Arrancar en desarrollo

cd services/desktop_app
npm install
npm run dev

Build para producción

npm run build        # compila el renderer
npm run electron:build  # empaqueta la app