3.9 KiB
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
- Seleccionar carpeta con PDFs.
- Los PDFs se envían en lotes de 10 a
POST /count/v1/count(count-api). - Los resultados se guardan en PostgreSQL vía
POST /count-jobs(extraction). - El usuario revisa y marca archivos como válidos/inválidos.
Extracción desde conteo
- Desde el wizard de conteo, clic en "Extraer archivos válidos".
- Se llama
POST /tasks/extraction/from-countcon elcounting_task_id. - El servicio extraction lee los PDFs desde el volumen
/datay los procesa con LLM.
Extracción directa
- Seleccionar carpeta → discovery de campos → seleccionar campos → estimar costo.
- Subir PDFs en lotes a
/tasks/{id}/ingest-many. - Polling de progreso vía
GET /tasks/{id}. - 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.