From 6d43a61d76653ca2156597481324c0b6f95e49cb Mon Sep 17 00:00:00 2001 From: Jhonathan Guevara Date: Thu, 15 Jan 2026 20:31:20 -0500 Subject: [PATCH] cambios en el server --- PLANTILLAAUT.xlsx | Bin 0 -> 40120 bytes backend/src/server.js | 109 +++++++++++++-- saludut-inpec/public/assets/PLANTILLAAUT.xlsx | Bin 0 -> 40120 bytes saludut-inpec/src/app/app.routes.ts | 7 + .../cargar-autorizados-masivos.css | 117 ++++++++++++++++ .../cargar-autorizados-masivos.html | 132 ++++++++++++++++++ .../cargar-autorizados-masivos.ts | 124 ++++++++++++++++ .../app/components/dashboard/dashboard.html | 55 ++++++++ .../src/app/components/dashboard/dashboard.ts | 8 ++ saludut-inpec/src/app/services/paciente.ts | 13 ++ 10 files changed, 553 insertions(+), 12 deletions(-) create mode 100644 PLANTILLAAUT.xlsx create mode 100644 saludut-inpec/public/assets/PLANTILLAAUT.xlsx create mode 100644 saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.css create mode 100644 saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.html create mode 100644 saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.ts diff --git a/PLANTILLAAUT.xlsx b/PLANTILLAAUT.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..00356f42b74c59db93c6b15ddd7fbf05005877b8 GIT binary patch literal 40120 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 XuDTi|c!hkI8wH>hFMyeZ???XtVO8K# literal 0 HcmV?d00001 diff --git a/backend/src/server.js b/backend/src/server.js index 92a3588..86a87ab 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1358,6 +1358,63 @@ app.post( } ); +app.post( + '/api/cargar-autorizados-masivos', + verificarToken, + esAdministrador, + upload.single('archivo'), + async (req, res) => { + try { + if (!req.file) { + return res.status(400).json({ error: 'No se recibio archivo Excel' }); + } + + const jobId = createJobId(); + const job = { + id: jobId, + type: 'autorizados-masivos', + status: 'queued', + createdAt: new Date().toISOString(), + ownerId: req.usuario.id_usuario, + }; + + jobs.set(jobId, job); + + const jobTmpDir = path.join(os.tmpdir(), 'saludut_jobs', jobId); + await fsPromises.mkdir(jobTmpDir, { recursive: true }); + const inputPath = path.join(jobTmpDir, `autorizados_${jobId}.xlsx`); + await fsPromises.writeFile(inputPath, req.file.buffer); + + enqueueJob(job, async () => { + try { + return await procesarExcelAutorizacionesMasivas(inputPath, req.usuario, { + estadoAutorizacion: 'autorizado', + allowMissingAmbito: true, + defaultAmbito: 'extramural', + allowNumeroOrdenForAnyAmbito: true, + fechaAutorizacionKeys: [ + 'FECHADEREGISTRO', + 'FECHAREGISTRO', + 'FECHADEAUTORIZACION', + 'FECHA', + ], + }); + } finally { + await safeUnlink(inputPath); + await safeRemoveDir(jobTmpDir); + } + }); + + return res.status(202).json(sanitizeJob(job)); + } catch (error) { + console.error('Error creando job de autorizados masivos:', error); + return res.status(500).json({ + error: 'Error creando el job para procesar autorizados masivos', + }); + } + } +); + app.post( '/api/autorizaciones/autorrellenar', verificarToken, @@ -2444,7 +2501,7 @@ async function procesarExcelReps(inputFilePath) { }; } -async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { +async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario, options = {}) { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(inputFilePath); const sheet = workbook.worksheets[0]; @@ -2453,6 +2510,14 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { throw new Error('No se encontro una hoja en el Excel de autorizaciones'); } + const { + estadoAutorizacion = 'pendiente', + allowMissingAmbito = false, + defaultAmbito = '', + allowNumeroOrdenForAnyAmbito = false, + fechaAutorizacionKeys = [], + } = options; + const headerRow = sheet.getRow(1); const headers = {}; headerRow.eachCell((cell, colNumber) => { @@ -2544,6 +2609,7 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { 'NUMERODEDOCUMENTOPPL', 'NUMERODOCUMENTOPPL', 'DOCUMENTOPPL', + 'NUMERODEDOCUMENTO', 'NUMERODOCUMENTO', ]); const cupsRaw = getValueMulti(row, [ @@ -2653,15 +2719,19 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { ambitoAtencion = 'extramural'; } if (!ambitoAtencion) { - resumen.omitidas += 1; - resumen.sin_ambito += 1; - if (resumen.errores.length < 50) { - resumen.errores.push({ - fila: i, - error: 'Ambito intramural/extramural invalido', - }); + if (allowMissingAmbito) { + ambitoAtencion = defaultAmbito ? defaultAmbito : null; + } else { + resumen.omitidas += 1; + resumen.sin_ambito += 1; + if (resumen.errores.length < 50) { + resumen.errores.push({ + fila: i, + error: 'Ambito intramural/extramural invalido', + }); + } + continue; } - continue; } const numeroOrdenRaw = getValueMulti(row, [ @@ -2670,10 +2740,15 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { 'NUMEROORDEN', 'NROORDEN', 'NUMERODELAORDEN', + 'CODIGPODEREGISTRO', + 'CODIGODEREGISTRO', + 'CODIGOREGISTRO', ]); const numeroOrden = String(numeroOrdenRaw || '').trim(); const numeroOrdenFinal = - ambitoAtencion === 'intramural' && numeroOrden ? numeroOrden : null; + (ambitoAtencion === 'intramural' || allowNumeroOrdenForAnyAmbito) && numeroOrden + ? numeroOrden + : null; const estadoEntregaRaw = getValueMulti(row, [ 'ESTADODEENTREGA', @@ -2684,6 +2759,13 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { const estadoEntrega = parseEstadoEntrega(estadoEntregaRaw) || 'pendiente_entrega'; + const fechaAutorizacionRaw = fechaAutorizacionKeys.length + ? getValueMulti(row, fechaAutorizacionKeys) + : ''; + const fechaAutorizacion = fechaAutorizacionRaw + ? String(fechaAutorizacionRaw).trim() + : null; + const cupCodigo = extractCupCodigo(cupsRaw || procedimiento); if (!cupCodigo) { resumen.omitidas += 1; @@ -2720,6 +2802,8 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { 'NOMBREIPSREMITIDO', 'NOMBREDEIPSREMITIDO', 'IPSREMITIDO', + 'IPSSUJERIDA', + 'IPSSUGERIDA', ]); const departamentoExcel = getValue(row, 'DEPARTAMENTO') || @@ -2962,7 +3046,7 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { ` INSERT INTO autorizacion (interno, id_ips, numero_documento_autorizante, id_usuario_solicitante, fecha_autorizacion, observacion, cup_codigo, cie10_codigo, cie10_descripcion, tipo_autorizacion, tipo_servicio, ambito_atencion, numero_orden, estado_entrega, estado_autorizacion) - VALUES ($1, $2, $3, $4, COALESCE($5::timestamp AT TIME ZONE '${BOGOTA_TIMEZONE}', now()), $6, $7, $8, $9, $10, $11, $12, $13, $14, 'pendiente') + VALUES ($1, $2, $3, $4, COALESCE($5::timestamp AT TIME ZONE '${BOGOTA_TIMEZONE}', now()), $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING numero_autorizacion, fecha_autorizacion, version; `, [ @@ -2970,7 +3054,7 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { ipsInfo.id_ips, autorizanteDefault, solicitanteId, - null, + fechaAutorizacion, observacionFinal, cupCodigo, cie10Codigo, @@ -2980,6 +3064,7 @@ async function procesarExcelAutorizacionesMasivas(inputFilePath, usuario) { ambitoAtencion, numeroOrdenFinal, estadoEntrega, + estadoAutorizacion, ] ); diff --git a/saludut-inpec/public/assets/PLANTILLAAUT.xlsx b/saludut-inpec/public/assets/PLANTILLAAUT.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..00356f42b74c59db93c6b15ddd7fbf05005877b8 GIT binary patch literal 40120 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 XuDTi|c!hkI8wH>hFMyeZ???XtVO8K# literal 0 HcmV?d00001 diff --git a/saludut-inpec/src/app/app.routes.ts b/saludut-inpec/src/app/app.routes.ts index bcd61f0..b1d5bd2 100644 --- a/saludut-inpec/src/app/app.routes.ts +++ b/saludut-inpec/src/app/app.routes.ts @@ -9,6 +9,7 @@ import { UsuariosComponent } from './components/usuarios/usuarios'; import { CargarCupsComponent } from './components/cargar-cups/cargar-cups'; import { EstadisticasAutorizacionesComponent } from './components/estadisticas-autorizaciones/estadisticas-autorizaciones'; import { CargarAutorizacionesMasivasComponent } from './components/cargar-autorizaciones-masivas/cargar-autorizaciones-masivas'; +import { CargarAutorizadosMasivosComponent } from './components/cargar-autorizados-masivos/cargar-autorizados-masivos'; import { CargarIpsRepsComponent } from './components/cargar-ips-reps/cargar-ips-reps'; import { CargarPacientesComponent } from './components/cargar-pacientes/cargar-pacientes'; @@ -67,6 +68,12 @@ export const routes: Routes = [ canActivate: [AuthGuard], }, + { + path: 'cargar-autorizados-masivos', + component: CargarAutorizadosMasivosComponent, + canActivate: [AuthGuard, AdminGuard], + }, + { path: 'cargar-ips-reps', component: CargarIpsRepsComponent, diff --git a/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.css b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.css new file mode 100644 index 0000000..54da4b3 --- /dev/null +++ b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.css @@ -0,0 +1,117 @@ +/* ============================ + Carga masiva autorizados + ============================ */ +.masivas-container { + display: flex; + flex-direction: column; + gap: 20px; +} + +.masivas-card { + padding: 20px; +} + +.masivas-card h2 { + margin: 0 0 6px; + font-size: 1.5rem; +} + +.subtitle { + margin: 0 0 16px; + color: var(--color-text-muted); + font-size: 0.95rem; +} + +.form-row { + display: flex; + flex-direction: column; + gap: 6px; + margin-bottom: 14px; +} + +.form-row label { + font-weight: 600; + font-size: 0.9rem; +} + +.form-row input[type="file"] { + font-size: 0.9rem; +} + +.file-name { + font-size: 0.85rem; + color: var(--color-text-main); +} + +.form-row.acciones { + margin-top: 8px; +} + +.template-row { + align-items: flex-start; +} + +.template-note { + font-size: 0.85rem; + color: var(--color-text-muted); +} + +.resumen-card h2 { + margin: 0 0 12px; + font-size: 1.4rem; +} + +.summary-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 12px; +} + +.summary-item { + background: var(--color-cup-bg); + border: 1px solid var(--color-border); + border-radius: 10px; + padding: 12px; + display: flex; + flex-direction: column; + gap: 6px; +} + +.summary-label { + font-size: 0.8rem; + color: var(--color-text-muted); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.summary-value { + font-size: 1.2rem; + font-weight: 700; + color: var(--color-text-main); +} + +.summary-note { + margin-top: 12px; + padding: 10px 12px; + border-radius: 8px; + background: var(--color-primary-soft); + border: 1px solid var(--color-border); + font-size: 0.9rem; +} + +.error-list { + margin-top: 16px; +} + +.error-list h3 { + margin: 0 0 8px; + font-size: 1rem; +} + +.error-table { + border: 1px solid var(--color-border); + border-radius: 8px; + max-height: 260px; + overflow: auto; +} diff --git a/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.html b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.html new file mode 100644 index 0000000..a222083 --- /dev/null +++ b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.html @@ -0,0 +1,132 @@ +
+
+ + +
+

Subir plantilla

+

+ Usa la plantilla oficial de autorizados. La fecha de registro se guarda como fecha de autorizacion. +

+ +
+ + Descargar plantilla de autorizados + + Plantilla oficial para carga masiva. +
+ +
+ + + {{ archivoFile.name }} +
+ +
+ +
+ +
{{ statusMessage }}
+
{{ errorMessage }}
+
+ +
+

Resumen de la carga

+
+
+ Total filas + {{ resumen.total || 0 }} +
+
+ Creadas + {{ resumen.creadas || 0 }} +
+
+ Omitidas + {{ resumen.omitidas || resumen.omitidos || 0 }} +
+
+ Duplicadas + {{ resumen.duplicados || 0 }} +
+
+ Sin paciente + {{ resumen.sin_paciente || 0 }} +
+
+ Sin CUPS + {{ resumen.sin_cups || 0 }} +
+
+ Sin IPS + {{ resumen.sin_ips || 0 }} +
+
+ Sin diagnostico + {{ resumen.sin_diagnostico || 0 }} +
+
+ Sin ambito + {{ resumen.sin_ambito || 0 }} +
+
+ CUPS no cubiertos + {{ resumen.cups_no_cubiertos || 0 }} +
+
+ IPS sin convenio + {{ resumen.ips_sin_convenio || 0 }} +
+
+ +
+ Se detectaron CUPS no cubiertos o IPS sin convenio. Revisa estas autorizaciones. +
+ +
+

Errores (max 50)

+
+ + + + + + + + + + + + + +
FilaError
{{ e.fila || '-' }}{{ e.error || 'Error en fila' }}
+
+
+
+
+
diff --git a/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.ts b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.ts new file mode 100644 index 0000000..b6f260a --- /dev/null +++ b/saludut-inpec/src/app/components/cargar-autorizados-masivos/cargar-autorizados-masivos.ts @@ -0,0 +1,124 @@ +import { ChangeDetectorRef, Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Router } from '@angular/router'; +import { AppHeaderComponent } from '../shared/app-header/app-header'; +import { AuthService } from '../../services/auth'; +import { PacienteService } from '../../services/paciente'; +import { JobsService } from '../../services/jobs'; +import { JobResult, JobRowError } from '../../services/job-types'; + +@Component({ + selector: 'app-cargar-autorizados-masivos', + standalone: true, + imports: [CommonModule, AppHeaderComponent], + templateUrl: './cargar-autorizados-masivos.html', + styleUrls: ['./cargar-autorizados-masivos.css'] +}) +export class CargarAutorizadosMasivosComponent { + archivoFile: File | null = null; + isLoading = false; + statusMessage: string | null = null; + errorMessage: string | null = null; + resumen: JobResult | null = null; + errores: JobRowError[] = []; + + constructor( + private authService: AuthService, + private pacienteService: PacienteService, + private jobsService: JobsService, + private router: Router, + private cdr: ChangeDetectorRef + ) {} + + volverDashboard(): void { + this.router.navigate(['/dashboard']); + } + + logout(): void { + this.authService.logout(); + } + + isLoggedIn(): boolean { + return this.authService.isLoggedIn(); + } + + getCurrentUser(): any { + return this.authService.getCurrentUser(); + } + + onArchivoSelected(event: Event): void { + const input = event.target as HTMLInputElement; + this.archivoFile = input.files?.[0] || null; + this.limpiarMensajes(); + this.resumen = null; + this.errores = []; + } + + procesarMasivo(input?: HTMLInputElement): void { + this.limpiarMensajes(); + this.resumen = null; + this.errores = []; + + if (!this.archivoFile) { + this.errorMessage = 'Debes seleccionar el archivo Excel de autorizados.'; + return; + } + + this.isLoading = true; + this.statusMessage = 'Subiendo archivo...'; + + const formData = new FormData(); + formData.append('archivo', this.archivoFile); + + this.pacienteService.cargarAutorizadosMasivos(formData).subscribe({ + next: (job) => { + this.statusMessage = 'Archivo en cola. Procesando...'; + if (input) { + input.value = ''; + } + + this.jobsService.pollJob(job.id).subscribe({ + next: (estado) => { + if (estado.status === 'completed') { + this.resumen = estado.result || null; + this.errores = Array.isArray(estado.result?.errores) + ? estado.result?.errores || [] + : []; + this.statusMessage = + estado.result?.mensaje || 'Carga masiva finalizada.'; + this.isLoading = false; + } + + if (estado.status === 'failed') { + this.errorMessage = + estado.error?.message || + 'Error procesando autorizados masivos.'; + this.isLoading = false; + } + + this.cdr.detectChanges(); + }, + error: (error) => { + console.error(error); + this.errorMessage = + 'Error consultando el estado de la carga masiva.'; + this.isLoading = false; + this.cdr.detectChanges(); + } + }); + }, + error: (err) => { + console.error(err); + this.errorMessage = + err?.error?.error || 'Error subiendo el Excel de autorizados.'; + this.isLoading = false; + this.cdr.detectChanges(); + } + }); + } + + private limpiarMensajes(): void { + this.statusMessage = null; + this.errorMessage = null; + } +} diff --git a/saludut-inpec/src/app/components/dashboard/dashboard.html b/saludut-inpec/src/app/components/dashboard/dashboard.html index b93ec11..9849621 100644 --- a/saludut-inpec/src/app/components/dashboard/dashboard.html +++ b/saludut-inpec/src/app/components/dashboard/dashboard.html @@ -132,6 +132,41 @@

Subir plantilla Excel para crear autorizaciones pendientes

+ +
+ +

Carga masiva de autorizados

+

Subir plantilla Excel de autorizados

+
Solo admin
+
+
+
+ + ✓ + + + × + +
+ Cargar autorizados masivos + Subir plantilla de autorizados +
+
+
{ + const token = this.authService.getToken(); + const headers = new HttpHeaders({ + 'Authorization': `Bearer ${token}` + }); + + return this.http.post( + `${this.API_URL}/cargar-autorizados-masivos`, + formData, + { headers } + ); + } + crearAutorizante(payload: CrearAutorizantePayload): Observable { return this.http.post( `${this.API_URL}/autorizantes`,