fin.invoices gana tipo de comprobante, forma y método de pago y CP de
expedición; fin.invoice_items gana concepto de catálogo y las claves ProdServ,
unidad y objeto de impuesto. Todas nullable: las facturas ya emitidas no las
tienen y siguen funcionando igual (listado, detalle, PDF, envío).
La columna de texto libre invoice_items.concept se conserva obligatoria porque
la consume el PDF actual; al capturar por catálogo, el service hereda ahí la
descripción del concepto cuando el cliente no la envía.
Nueva tabla fin.invoice_item_taxes para el detalle de impuestos trasladados y
retenidos por partida. No interviene en el cálculo de subtotal/IVA/total, que
sigue saliendo de invoices.tax_rate.
Incluye la migración e6f7a8b9c0d1 (crea el schema sat, siembra los catálogos con
sync_catalogs y monta las tablas e índices nuevos) y registra los permisos
fin.concept.* y fin.settings.{view,edit}.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
23 lines
1.2 KiB
Python
23 lines
1.2 KiB
Python
"""Registro de permisos del módulo Facturación (fin)."""
|
|
|
|
from api.v1.modules.core.permissions.registry import registry
|
|
|
|
MODULE = "fin"
|
|
_ENTITIES = [("invoice", "facturas"), ("payment", "pagos"), ("concept", "conceptos")]
|
|
_ACTIONS = [("view", "Ver"), ("create", "Crear"), ("edit", "Editar"), ("delete", "Eliminar")]
|
|
|
|
|
|
def register_permissions() -> None:
|
|
registry.register(code=f"{MODULE}.access", description="Acceso a Facturación", module=MODULE, action="access")
|
|
for entity, label in _ENTITIES:
|
|
for action, verb in _ACTIONS:
|
|
registry.register(code=f"{MODULE}.{entity}.{action}", description=f"{verb} {label}", module=MODULE, action=action)
|
|
# Datos fiscales del emisor: es configuración de la empresa, no una entidad con CRUD,
|
|
# así que solo tiene ver/editar. Los catálogos del SAT no llevan permiso propio:
|
|
# son globales y de solo lectura, basta con fin.access.
|
|
registry.register(code=f"{MODULE}.settings.view", description="Ver datos fiscales del emisor", module=MODULE, action="view")
|
|
registry.register(code=f"{MODULE}.settings.edit", description="Editar datos fiscales del emisor", module=MODULE, action="edit")
|
|
|
|
|
|
register_permissions()
|