- Updated proforma listing behavior to utilize `Criteria filters[]` for managing archived and active proformas. - Removed `archived` query parameter from backend; frontend now manages `archiveView` state. - Implemented new filters for `archived_at` and `status` in the proforma listing API. - Adjusted proforma creation and deletion contracts to reflect changes in archiving logic. - Introduced new utility functions for building proforma listing criteria based on UI state. - Updated frontend components to support new filtering options and maintain state in the URL. - Added SQL index for improved performance on proforma queries. - Created new TypeScript types for managing proforma list filters and criteria.
1.8 KiB
1.8 KiB
Proforma Delete Contract
Objetivo
Definir el borrado funcional de proformas sin romper trazabilidad ni numeracion.
Reglas funcionales
- solo se pueden borrar proformas en estado
draft sent,approved,rejectedeissueddevuelven conflictorejectedno se borra; queda reservado para una futura operacion de archivado- el borrado es logico mediante
deleted_at - el borrado de
draftno depende dearchived_at - una proforma
draftarchivada puede borrarse directamente - una proforma
rejectedarchivada no puede borrarse - la numeracion no se reutiliza
- no se decrementa
document_series.next_number - no se borran fisicamente
proforma_itemsniproforma_taxes
Validaciones defensivas
- si
linked_invoice_idtiene valor, el borrado se bloquea - si existe
issued_invoices.source_proforma_id = proforma.id, el borrado se bloquea
Contrato REST
- endpoint:
DELETE /proformas/:proforma_id - respuesta satisfactoria:
204 No Content 404 Not Foundsi no existe, no pertenece a la empresa activa o ya esta borrada409 Conflictsi existe pero no cumple las reglas de borrado
Efecto operativo
GET /proformas/:iddebe tratar la proforma borrada como inexistenteGET /proformasno debe incluir proformas borradasGET /proformaspuede listar activas, archivadas o todas segunCriteria filters[], pero nunca borradasPUT /proformas/:idno debe editar proformas borradasPOST /proformas/:id/issueno debe emitir proformas borradas
UI
- la accion
Eliminarsolo debe mostrarse para proformasdraft - en la vista de archivadas,
Eliminartambien debe mostrarse paradraft - la confirmacion debe advertir que la referencia no se reutilizara
- en esta fase la accion esta disponible en el listado activo y en archivadas para
draft