FEAT: re-integracion de tax-api y simulador F29

This commit is contained in:
Nachou-u
2026-09-09 14:45:50 -03:00
parent 522d5337f4
commit f0a4fa64e8
9 changed files with 324 additions and 52 deletions
+34 -2
View File
@@ -205,12 +205,44 @@ class SIIService:
return {
'tax_type': 'EXENTO',
'net_amount': net_amount_clp,
'tax_rate_percent': Decimal('0.0'),
'tax_rate_percent': Decimal('0'),
'tax_amount': Decimal('0'),
'total_amount': net_amount_clp,
'description': 'Exento / No Afecto a Impuestos'
'description': 'Exento de Impuestos'
}
@classmethod
def simulate_f29(cls, f29_data: dict) -> dict:
"""
Llama al endpoint /api/f29/simular del tax-api.
f29_data debe contener: ventas_netas, compras_netas, etc.
"""
api_res = cls._call_api("/api/f29/simular", f29_data)
if api_res:
return api_res
# Fallback local simplificado si la API no está disponible
ventas_netas = Decimal(str(f29_data.get('ventas_netas', 0)))
compras_netas = Decimal(str(f29_data.get('compras_netas', 0)))
retenciones = Decimal(str(f29_data.get('retenciones_honorarios', 0)))
tasa_ppm = Decimal(str(f29_data.get('tasa_ppm', 0.01)))
debito = ventas_netas * Decimal('0.19')
credito = compras_netas * Decimal('0.19')
ppm = ventas_netas * tasa_ppm
iva_pagar = max(Decimal('0'), debito - credito)
return {
"iva_debito": float(debito),
"iva_credito": float(credito),
"iva_a_pagar": float(iva_pagar),
"ppm_a_pagar": float(ppm),
"total_retenciones_honorarios": float(retenciones),
"total_a_pagar": float(iva_pagar + ppm + retenciones),
"remanente_siguiente_mes": float(max(Decimal('0'), credito - debito)),
"nota": "Simulación local de respaldo. API no disponible."
}
@staticmethod
def check_duplicate_expense(
expense_model,