Files
IPSExtractor/services/desktop_app/README.md
T

3.9 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.

Entorno URL por defecto
Desarrollo (npm run dev) http://127.0.0.1:8189
Instalador (build producción) https://pys1.builker.xyz
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 Ver tabla arriba 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 (TypeScript + Vite)
npm run dist    # genera el instalador Windows NSIS

El instalador se crea en release/IPSExtractor-Desktop-1.0.0-Setup.exe.

Versión de la app

Campo Archivo
Número (1.0.0) package.json → version
Fecha de release src/shared/version.json → releaseDate

La versión se muestra en el menú lateral y en la esquina superior derecha. Al publicar una nueva versión, actualiza ambos archivos y ejecuta npm run dist.