Refactor invoice schemas and services for improved clarity and structure

- Updated schemas in `schemas.py` to enhance readability by aligning field definitions and descriptions.
- Consolidated optional fields and improved default values for better data handling.
- Modified the `InvoiceService` class in `services.py` to streamline error handling and data extraction for nested invoice components.
- Ensured that nested data is processed correctly before creating invoice entries, improving overall service reliability.
This commit is contained in:
2026-01-11 17:09:04 -06:00
parent 887cbfa5ce
commit 20aff5ff7b
4 changed files with 793 additions and 419 deletions

View File

@@ -90,19 +90,20 @@ class InvoiceService:
errors = ErrorCollector()
# Validar si la factura ya existe
invoice_exists(db, invoice_data.invoice_number, tenant_id, company_id, errors)
validate_create(db, invoice_data, tenant_id, company_id, errors)
invoice_exists(db, invoice_data.invoice_number, tenant_id, company_id, errors)
validate_create(db, invoice_data, tenant_id, company_id, errors)
# Si hay errores, lanzar excepción
# Si hay errores, lanzar excepción ANTES de intentar crear
errors.raise_if_errors("Error al crear la factura")
# Extract nested data
compliance_data = invoice_data.compliance_mx
financials_data = invoice_data.financials
logistics_data = invoice_data.logistics
details_data = invoice_data.details or []
collections_data = invoice_data.collections or []
try:
# Extract nested data
compliance_data = invoice_data.compliance_mx
financials_data = invoice_data.financials
logistics_data = invoice_data.logistics or []
details_data = invoice_data.details or []
collections_data = invoice_data.collections or []
# Create main invoice header
raw_invoice_dict = invoice_data.model_dump(
@@ -148,8 +149,8 @@ class InvoiceService:
db.add(new_financials)
# Create logistics entries
for logistics_item in logistics_data:
raw_log_dict = logistics_item.model_dump()
if logistics_data:
raw_log_dict = logistics_data.model_dump()
logistics_dict = clean_dict(raw_log_dict)
logistics_dict["invoice_id"] = new_invoice.id