`PaymentMethod` es un catálogo `company-scoped` del módulo `catalogs`.
## Shape
Campos persistidos y expuestos para administración:
-`id`
-`company_id`
-`name`
-`description`
-`is_active`
-`is_system`
-`is_default`
-`system_key`
-`created_at`
-`updated_at`
-`deleted_at`
## System vs custom
Reglas:
-`is_system = true` implica `system_key != null`
-`is_system = false` implica `system_key = null`
-`is_system = true` no se puede editar, desactivar ni eliminar
Identidad estable de métodos del sistema:
-`cash`
-`bank_transfer`
-`card`
-`direct_debit`
## Active and default
Reglas:
-`is_default = true` implica `is_active = true`
- un método `default` no se puede desactivar
- un método `default` no se puede eliminar
- el cambio de default solo se realiza mediante `PATCH /catalogs/payment-methods/:payment_method_id/default`
La unicidad del default se garantiza mediante servicio transaccional y bloqueo por empresa. No se fuerza con constraint SQL adicional para evitar una solución opaca en MariaDB.
- restaura un system method soft-deleted si ya existía por `system_key`
- resincroniza `name`, `is_system`, `is_active`, `is_default = false` y `system_key`
- si la empresa no tiene default, establece `cash` como default inicial
Métodos creados:
-`Efectivo`
-`Transferencia bancaria`
-`Tarjeta`
-`Domiciliación bancaria`
## Delete policy
Un método solo puede eliminarse si:
-`is_system === false`
-`is_default === false`
- no está referenciado por consumidores vivos
Bloqueos actuales:
-`customers.payment_method_id`
-`proformas.payment_method_id`
-`supplier_invoices.payment_method_id`
No se bloquea por `issued_invoices`, porque ese módulo mantiene snapshot histórico suficiente del método de pago emitido.
## Reference protection
La arquitectura ideal sería mediante public services consumidores, pero `catalogs` ya es dependencia de `customers` y `customer-invoices`. Para evitar un ciclo de módulos, la protección referencial se implementa en `catalogs` con un checker de infraestructura específico contra los modelos registrados en Sequelize.
## Consumers
Consumidores actuales auditados:
-`customers`
-`customer-invoices/proformas`
-`customer-invoices/issued-invoices`
-`supplier-invoices`
-`factuges`
`factuges` no bloquea delete porque resuelve métodos de pago durante la importación y no mantiene una referencia persistente viva auditada en este flujo.