feat(sales): implementar PDF de Delivery Note #43

Closed
opened 2026-03-25 13:49:19 +00:00 by leandro · 0 comments
Owner

Objetivo

Implementar la generación de PDF para Delivery Note en el módulo Sales, reutilizando la infraestructura existente de documentos (Quotes / Expeditions) y manteniendo consistencia con el patrón actual del sistema.


Contexto funcional

El módulo Sales → Delivery Note ya cuenta con emisión completa (CreateAndIssue), persistencia en base de datos, UI funcional de creación y snapshot clínico (ExtraInfoJson) implementado en la story #41.

Actualmente falta la impresión en PDF del remito, que debe seguir la misma estrategia técnica ya consolidada en el sistema para:

  • Quotes (presupuestos)
  • Expeditions (expediciones / notas de entrega)

El proyecto ya dispone de infraestructura reusable para generación documental mediante:

  • Documents
  • DocumentTemplateService
  • templates Razor .cshtml
  • PuppeteerSharp

La necesidad de esta story es dejar operativo el documento PDF de Delivery Note sin introducir un modelo alternativo ni romper contratos existentes.


Alcance

Esta story incluye:

  • extender DeliveryNoteDto para que pueda utilizarse como DTO de lectura e impresión
  • completar la proyección de GetDtoByIdAsync para incluir los datos necesarios para documento
  • agregar soporte de DeliveryNote en DocumentType
  • integrar DeliveryNote en DocumentTemplateService
  • crear el template Razor del PDF para Delivery Note
  • agregar endpoint API GET /api/deliverynote/{id}/pdf
  • agregar consumo desde UI Blazor para descargar el PDF
  • mostrar en el documento:
    • encabezado del remito
    • cliente
    • presupuesto vinculado si existe
    • detalle de ítems
    • contexto clínico desde ExtraInfoJson
    • observaciones

Fuera de alcance

Esta story NO incluye:

  • rediseño del flujo de emisión de Delivery Note
  • cambios en la estructura de persistencia del remito
  • cambios en entidades EF generadas por scaffold
  • lógica de autorización, cierre o anulación de remitos
  • incremento automático de PrintCount por cada impresión, salvo que ya exista patrón consolidado y se incorpore sin ampliar alcance
  • rediseño visual completo de Quotes o Expeditions
  • firma digital, QR, código de barras o numeración automática
  • edición del remito luego de emitido

Criterios de aceptación

✔ Se puede solicitar el PDF de un Delivery Note existente mediante endpoint API
✔ El PDF se genera usando la infraestructura actual (DocumentTemplateService + Razor + PuppeteerSharp)
DeliveryNoteDto contiene los datos mínimos necesarios para impresión sin crear un DTO alternativo
✔ El template muestra correctamente:

  • número de remito
  • fecha de emisión
  • cliente
  • presupuesto relacionado si existe
  • ítems
  • observaciones
  • bloque clínico desde ExtraInfoJson

✔ El logo se inyecta mediante LogoBase64 siguiendo el patrón de Quotes y Expeditions
✔ El parseo de ExtraInfoJson se resuelve en el template Razor de forma segura
✔ La UI permite descargar el PDF desde la consulta de remitos
✔ No se modifican modelos EF generados por scaffold
✔ No se rompe ningún contrato existente de la API
✔ El código compila y la generación del PDF funciona manualmente en ambiente de desarrollo


Decisiones de diseño

  • Se reutiliza DeliveryNoteDto como DTO de lectura e impresión, evitando crear un modelo específico de print.
  • DocumentGenerationRequest se mantiene sin cambios.
  • Se agrega DocumentType.DeliveryNote por consistencia técnica con el módulo actual, sin eliminar Remito si ya existe.
  • El template del remito se implementa en Documents/Templates/DeliveryNotes/Template_v1.cshtml.
  • El logo se inyecta desde DocumentTemplateService mediante LogoBase64, igual que en Quotes y Expeditions.
  • ExtraInfoJson no se parsea en Core ni en API; se resuelve en el template Razor, replicando el patrón de Expeditions.
  • La obtención de datos enriquecidos para impresión debe resolverse en repository/proyección, especialmente cliente y referencias visibles.
  • Se prioriza mantener el documento funcional y operativo, sin ampliar alcance a auditoría avanzada de impresión.

Entregable esperado

Archivos a crear o modificar:

  • Domain/Dtos/Sales/DeliveryNoteDto.cs
  • Models/Repositories/PhSDeliveryNoteRepository.cs
  • phronCare.API/Controllers/Sales/DeliveryNoteController.cs
  • Documents/Models/DocumentType.cs
  • Documents/Services/DocumentTemplateService.cs
  • Documents/Templates/DeliveryNotes/Template_v1.cshtml
  • phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs
  • phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs
  • phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor

Opcional según decisión de UX:

  • phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteDetailDrawer.razor

Próxima Story sugerida (opcional)

feat(sales): registrar reimpresiones y auditoría básica de Delivery Note PDF

## Objetivo Implementar la generación de PDF para Delivery Note en el módulo Sales, reutilizando la infraestructura existente de documentos (Quotes / Expeditions) y manteniendo consistencia con el patrón actual del sistema. --- ## Contexto funcional El módulo Sales → Delivery Note ya cuenta con emisión completa (`CreateAndIssue`), persistencia en base de datos, UI funcional de creación y snapshot clínico (`ExtraInfoJson`) implementado en la story #41. Actualmente falta la impresión en PDF del remito, que debe seguir la misma estrategia técnica ya consolidada en el sistema para: - Quotes (presupuestos) - Expeditions (expediciones / notas de entrega) El proyecto ya dispone de infraestructura reusable para generación documental mediante: - `Documents` - `DocumentTemplateService` - templates Razor `.cshtml` - `PuppeteerSharp` La necesidad de esta story es dejar operativo el documento PDF de Delivery Note sin introducir un modelo alternativo ni romper contratos existentes. --- ## Alcance Esta story incluye: - extender `DeliveryNoteDto` para que pueda utilizarse como DTO de lectura e impresión - completar la proyección de `GetDtoByIdAsync` para incluir los datos necesarios para documento - agregar soporte de `DeliveryNote` en `DocumentType` - integrar `DeliveryNote` en `DocumentTemplateService` - crear el template Razor del PDF para Delivery Note - agregar endpoint API `GET /api/deliverynote/{id}/pdf` - agregar consumo desde UI Blazor para descargar el PDF - mostrar en el documento: - encabezado del remito - cliente - presupuesto vinculado si existe - detalle de ítems - contexto clínico desde `ExtraInfoJson` - observaciones --- ## Fuera de alcance Esta story NO incluye: - rediseño del flujo de emisión de Delivery Note - cambios en la estructura de persistencia del remito - cambios en entidades EF generadas por scaffold - lógica de autorización, cierre o anulación de remitos - incremento automático de `PrintCount` por cada impresión, salvo que ya exista patrón consolidado y se incorpore sin ampliar alcance - rediseño visual completo de Quotes o Expeditions - firma digital, QR, código de barras o numeración automática - edición del remito luego de emitido --- ## Criterios de aceptación ✔ Se puede solicitar el PDF de un Delivery Note existente mediante endpoint API ✔ El PDF se genera usando la infraestructura actual (`DocumentTemplateService` + Razor + PuppeteerSharp) ✔ `DeliveryNoteDto` contiene los datos mínimos necesarios para impresión sin crear un DTO alternativo ✔ El template muestra correctamente: - número de remito - fecha de emisión - cliente - presupuesto relacionado si existe - ítems - observaciones - bloque clínico desde `ExtraInfoJson` ✔ El logo se inyecta mediante `LogoBase64` siguiendo el patrón de Quotes y Expeditions ✔ El parseo de `ExtraInfoJson` se resuelve en el template Razor de forma segura ✔ La UI permite descargar el PDF desde la consulta de remitos ✔ No se modifican modelos EF generados por scaffold ✔ No se rompe ningún contrato existente de la API ✔ El código compila y la generación del PDF funciona manualmente en ambiente de desarrollo --- ## Decisiones de diseño - Se reutiliza `DeliveryNoteDto` como DTO de lectura e impresión, evitando crear un modelo específico de print. - `DocumentGenerationRequest` se mantiene sin cambios. - Se agrega `DocumentType.DeliveryNote` por consistencia técnica con el módulo actual, sin eliminar `Remito` si ya existe. - El template del remito se implementa en `Documents/Templates/DeliveryNotes/Template_v1.cshtml`. - El logo se inyecta desde `DocumentTemplateService` mediante `LogoBase64`, igual que en Quotes y Expeditions. - `ExtraInfoJson` no se parsea en Core ni en API; se resuelve en el template Razor, replicando el patrón de Expeditions. - La obtención de datos enriquecidos para impresión debe resolverse en repository/proyección, especialmente cliente y referencias visibles. - Se prioriza mantener el documento funcional y operativo, sin ampliar alcance a auditoría avanzada de impresión. --- ## Entregable esperado Archivos a crear o modificar: - `Domain/Dtos/Sales/DeliveryNoteDto.cs` - `Models/Repositories/PhSDeliveryNoteRepository.cs` - `phronCare.API/Controllers/Sales/DeliveryNoteController.cs` - `Documents/Models/DocumentType.cs` - `Documents/Services/DocumentTemplateService.cs` - `Documents/Templates/DeliveryNotes/Template_v1.cshtml` - `phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs` - `phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs` - `phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor` Opcional según decisión de UX: - `phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteDetailDrawer.razor` --- ## Próxima Story sugerida (opcional) feat(sales): registrar reimpresiones y auditoría básica de Delivery Note PDF
leandro changed title from feat(deliverynotes): PDF de Delivery Note (impresión) to feat(sales): implementar PDF de Delivery Note 2026-03-25 14:16:09 +00:00
leandro added the
STORY
label 2026-03-25 14:17:29 +00:00
leandro added this to the Sales (Ventas, Facturación y Remitos) milestone 2026-03-25 14:17:33 +00:00
leandro added this to the phronCare: Tablero DEV project 2026-03-25 14:17:38 +00:00
leandro self-assigned this 2026-03-25 14:17:42 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leandro/phronCare#43
No description provided.