Uecko_ERP/docs/customer-invoices/proforma-delete-contract.md
david a264f43b95 feat: enhance proforma listing and archiving functionality
- 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.
2026-07-29 22:24:53 +02:00

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, rejected e issued devuelven conflicto
  • rejected no se borra; queda reservado para una futura operacion de archivado
  • el borrado es logico mediante deleted_at
  • el borrado de draft no depende de archived_at
  • una proforma draft archivada puede borrarse directamente
  • una proforma rejected archivada no puede borrarse
  • la numeracion no se reutiliza
  • no se decrementa document_series.next_number
  • no se borran fisicamente proforma_items ni proforma_taxes

Validaciones defensivas

  • si linked_invoice_id tiene 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 Found si no existe, no pertenece a la empresa activa o ya esta borrada
  • 409 Conflict si existe pero no cumple las reglas de borrado

Efecto operativo

  • GET /proformas/:id debe tratar la proforma borrada como inexistente
  • GET /proformas no debe incluir proformas borradas
  • GET /proformas puede listar activas, archivadas o todas segun Criteria filters[], pero nunca borradas
  • PUT /proformas/:id no debe editar proformas borradas
  • POST /proformas/:id/issue no debe emitir proformas borradas

UI

  • la accion Eliminar solo debe mostrarse para proformas draft
  • en la vista de archivadas, Eliminar tambien debe mostrarse para draft
  • 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