# 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 - `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`