FEAT: re-integracion de tax-api y simulador F29
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user