feat(sales): exportación Excel de Delivery Notes con snapshot clínico #46

Closed
opened 2026-03-27 02:13:33 +00:00 by leandro · 0 comments
Owner

Objetivo

Implementar la exportación a Excel del módulo Sales → Delivery Note reutilizando el patrón existente en Quotes y Expeditions, incluyendo el snapshot clínico (ExtrainfoJson) desnormalizado a columnas de negocio.


Contexto funcional

El módulo Delivery Note ya cuenta con:

  • emisión completa
  • persistencia en DB
  • snapshot clínico (ExtrainfoJson)
  • impresión PDF (Documents + Razor + Puppeteer)
  • descarga manual y automática del PDF
  • pantalla de consulta (/deliverynotes) con filtros y grilla

Actualmente el botón de exportación Excel está visible pero no implementado.

En el sistema ya existe un patrón consolidado de exportación Excel en:

  • Quotes
  • Expeditions

Este patrón:

  • genera el archivo en backend
  • usa XLSXExportBase (EPPlus)
  • descarga desde UI con saveAsFile

Definición funcional clave

El snapshot clínico (ExtrainfoJson) proviene del presupuesto (Quote) y para esta versión (Biodec) contiene:

  • Médico (Professional)
  • Institución / Hospital
  • Paciente
  • Fecha de cirugía

Este snapshot debe incluirse en el Excel, pero desnormalizado a columnas, no como JSON.


Alcance

Esta story incluye:

  • agregar contrato de exportación en IDeliveryNoteDom
  • implementar generación Excel en Core
  • reutilizar SearchAsync del repositorio
  • parsear ExtrainfoJson y mapearlo a columnas
  • agregar endpoint API POST /api/deliverynote/exportfiltered
  • implementar método en servicio UI
  • conectar botón Excel en DeliveryNotes.razor
  • exportar todos los resultados filtrados

Columnas del Excel

  • DeliveryNoteNumber
  • IssueDate
  • QuoteNumber
  • CustomerName
  • Status
  • ProfessionalName
  • InstitutionName
  • PatientName
  • SurgeryDate
  • Observations
  • PrintCount
  • CreatedAt

Fuera de alcance

  • exportación por ítems del remito
  • múltiples filas por remito
  • exportación del JSON crudo (ExtrainfoJson)
  • cambios en DTOs existentes
  • cambios en modelos EF (scaffold)
  • cambios en PDF
  • múltiples hojas Excel
  • formato avanzado (plantillas, estilos custom)

Criterios de aceptación

✔ El botón Excel ejecuta la exportación real
✔ Se respetan los filtros de búsqueda
✔ Se exportan todos los resultados filtrados
✔ El archivo se genera en backend usando XLSXExportBase
✔ La descarga se realiza con saveAsFile
✔ El Excel contiene una fila por Delivery Note
✔ El snapshot clínico se muestra en columnas separadas (no JSON)
✔ No se crean DTOs nuevos
✔ No se modifican modelos EF generados
✔ Código compila sin errores
✔ Exportación funciona con y sin resultados
✔ Mensajes al usuario en español


Decisiones de diseño

  • Generación Excel en backend (igual que Quotes / Expeditions)
  • Uso de XLSXExportBase (EPPlus)
  • Exportación tipo resumen (cabecera)
  • Sin ítems en esta versión (scope controlado)
  • ExtrainfoJson se parsea en Core y se expone en columnas:
    • ProfessionalName
    • InstitutionName
    • PatientName
    • SurgeryDate
  • No se exporta JSON crudo
  • UI fuerza:
    • Page = 1
    • PageSize = int.MaxValue
  • Endpoint API devuelve archivo binario
  • UI descarga con nombre timestamped

Flujo técnico

UI → API → Core → XLSXExportBase → API File → UI saveAsFile


Plan de implementación (bottom-up)

Data

  • Sin cambios

Domain

  • Sin cambios

Core

  1. IDeliveryNoteDom

    • agregar:
      Task<byte[]> ExportFilteredToExcelAsync(DeliveryNoteSearchParams searchParams)
  2. DeliveryNoteService

    • ejecutar búsqueda filtrada
    • validar resultados
    • parsear ExtrainfoJson
    • mapear columnas
    • generar Excel con XLSXExportBase

API

  1. DeliveryNoteController
    • agregar:
      POST /api/deliverynote/exportfiltered
    • retornar archivo Excel

UI Services

  1. IDeliveryNoteService

    • agregar ExportFilteredAsync
  2. DeliveryNoteService

    • POST a API
    • recibir bytes
    • convertir a Base64
    • descargar con saveAsFile

UI

  1. DeliveryNotes.razor
    • implementar método ExportToExcel()
    • setear:
      • Page = 1
      • PageSize = int.MaxValue
    • llamar servicio
    • manejar errores con toast

Archivos impactados

Core:

  • Core/Interfaces/IDeliveryNoteDom.cs
  • Core/Services/DeliveryNoteService.cs

API:

  • phronCare.API/Controllers/Sales/DeliveryNoteController.cs

UI:

  • phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs
  • phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs
  • phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor

Entregable esperado

Exportación Excel funcional desde la pantalla de Delivery Notes, consistente con Quotes y Expeditions, incluyendo snapshot clínico en columnas de negocio.


Próxima story sugerida

feat(sales): exportación Excel detallada de Delivery Notes por ítems

## Objetivo Implementar la exportación a Excel del módulo Sales → Delivery Note reutilizando el patrón existente en Quotes y Expeditions, incluyendo el snapshot clínico (`ExtrainfoJson`) desnormalizado a columnas de negocio. --- ## Contexto funcional El módulo Delivery Note ya cuenta con: - emisión completa - persistencia en DB - snapshot clínico (`ExtrainfoJson`) - impresión PDF (Documents + Razor + Puppeteer) - descarga manual y automática del PDF - pantalla de consulta (`/deliverynotes`) con filtros y grilla Actualmente el botón de exportación Excel está visible pero no implementado. En el sistema ya existe un patrón consolidado de exportación Excel en: - Quotes - Expeditions Este patrón: - genera el archivo en backend - usa `XLSXExportBase` (EPPlus) - descarga desde UI con `saveAsFile` --- ## Definición funcional clave El snapshot clínico (`ExtrainfoJson`) proviene del presupuesto (Quote) y para esta versión (Biodec) contiene: - Médico (Professional) - Institución / Hospital - Paciente - Fecha de cirugía Este snapshot debe incluirse en el Excel, pero **desnormalizado a columnas**, no como JSON. --- ## Alcance Esta story incluye: - agregar contrato de exportación en `IDeliveryNoteDom` - implementar generación Excel en `Core` - reutilizar `SearchAsync` del repositorio - parsear `ExtrainfoJson` y mapearlo a columnas - agregar endpoint API `POST /api/deliverynote/exportfiltered` - implementar método en servicio UI - conectar botón Excel en `DeliveryNotes.razor` - exportar todos los resultados filtrados ### Columnas del Excel - DeliveryNoteNumber - IssueDate - QuoteNumber - CustomerName - Status - ProfessionalName - InstitutionName - PatientName - SurgeryDate - Observations - PrintCount - CreatedAt --- ## Fuera de alcance - exportación por ítems del remito - múltiples filas por remito - exportación del JSON crudo (`ExtrainfoJson`) - cambios en DTOs existentes - cambios en modelos EF (scaffold) - cambios en PDF - múltiples hojas Excel - formato avanzado (plantillas, estilos custom) --- ## Criterios de aceptación ✔ El botón Excel ejecuta la exportación real ✔ Se respetan los filtros de búsqueda ✔ Se exportan todos los resultados filtrados ✔ El archivo se genera en backend usando `XLSXExportBase` ✔ La descarga se realiza con `saveAsFile` ✔ El Excel contiene una fila por Delivery Note ✔ El snapshot clínico se muestra en columnas separadas (no JSON) ✔ No se crean DTOs nuevos ✔ No se modifican modelos EF generados ✔ Código compila sin errores ✔ Exportación funciona con y sin resultados ✔ Mensajes al usuario en español --- ## Decisiones de diseño - Generación Excel en backend (igual que Quotes / Expeditions) - Uso de `XLSXExportBase` (EPPlus) - Exportación tipo resumen (cabecera) - Sin ítems en esta versión (scope controlado) - `ExtrainfoJson` se parsea en Core y se expone en columnas: - ProfessionalName - InstitutionName - PatientName - SurgeryDate - No se exporta JSON crudo - UI fuerza: - `Page = 1` - `PageSize = int.MaxValue` - Endpoint API devuelve archivo binario - UI descarga con nombre timestamped --- ## Flujo técnico UI → API → Core → XLSXExportBase → API File → UI saveAsFile --- ## Plan de implementación (bottom-up) ### Data - Sin cambios ### Domain - Sin cambios ### Core 1. `IDeliveryNoteDom` - agregar: `Task<byte[]> ExportFilteredToExcelAsync(DeliveryNoteSearchParams searchParams)` 2. `DeliveryNoteService` - ejecutar búsqueda filtrada - validar resultados - parsear `ExtrainfoJson` - mapear columnas - generar Excel con `XLSXExportBase` --- ### API 3. `DeliveryNoteController` - agregar: `POST /api/deliverynote/exportfiltered` - retornar archivo Excel --- ### UI Services 4. `IDeliveryNoteService` - agregar `ExportFilteredAsync` 5. `DeliveryNoteService` - POST a API - recibir bytes - convertir a Base64 - descargar con `saveAsFile` --- ### UI 6. `DeliveryNotes.razor` - implementar método `ExportToExcel()` - setear: - `Page = 1` - `PageSize = int.MaxValue` - llamar servicio - manejar errores con toast --- ## Archivos impactados Core: - Core/Interfaces/IDeliveryNoteDom.cs - Core/Services/DeliveryNoteService.cs API: - phronCare.API/Controllers/Sales/DeliveryNoteController.cs UI: - phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs - phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs - phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor --- ## Entregable esperado Exportación Excel funcional desde la pantalla de Delivery Notes, consistente con Quotes y Expeditions, incluyendo snapshot clínico en columnas de negocio. --- ## Próxima story sugerida feat(sales): exportación Excel detallada de Delivery Notes por ítems
leandro added this to the Sales (Ventas, Facturación y Remitos) milestone 2026-03-27 02:13:33 +00:00
leandro added the
STORY
label 2026-03-27 02:13:33 +00:00
leandro self-assigned this 2026-03-27 02:13:33 +00:00
leandro added this to the phronCare: Tablero DEV project 2026-03-27 02:13:33 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leandro/phronCare#46
No description provided.