CA3 : base intracom reportee sur les lignes de taux (fix controle bases cadre A/B)
Deploy via Portainer / deploy (push) Successful in 0s
Deploy via Portainer / deploy (push) Successful in 0s
This commit is contained in:
+32
-19
@@ -85,6 +85,16 @@ def tva_deductible(entreprise, annee, mois=None):
|
|||||||
return _q(total)
|
return _q(total)
|
||||||
|
|
||||||
|
|
||||||
|
def intracom_par_taux(entreprise, annee, mois=None):
|
||||||
|
"""Acquisitions auto-liquidées (UE/import) ventilées par taux : {taux: (base_ht, tva)}."""
|
||||||
|
par = {}
|
||||||
|
for d in depenses_periode(entreprise, annee, mois):
|
||||||
|
if d.autoliquidee and not d.neutre:
|
||||||
|
b, t = par.get(d.taux_tva, (Decimal("0"), Decimal("0")))
|
||||||
|
par[d.taux_tva] = (b + d.montant_ht, t + d.tva_autoliquidee)
|
||||||
|
return {taux: (_q(b), _q(t)) for taux, (b, t) in par.items()}
|
||||||
|
|
||||||
|
|
||||||
def tva_deductible_split(entreprise, annee, mois=None):
|
def tva_deductible_split(entreprise, annee, mois=None):
|
||||||
"""TVA déductible ventilée : (immobilisations [ligne 19], autres biens/services [ligne 20])."""
|
"""TVA déductible ventilée : (immobilisations [ligne 19], autres biens/services [ligne 20])."""
|
||||||
immo = Decimal("0")
|
immo = Decimal("0")
|
||||||
@@ -267,32 +277,35 @@ def _ca3_ligne(ref, libelle, base=None, tva=None, total=False):
|
|||||||
|
|
||||||
|
|
||||||
def declaration_tva(entreprise, annee, mois=None, label=None):
|
def declaration_tva(entreprise, annee, mois=None, label=None):
|
||||||
par_taux = tva_par_taux(entreprise, annee, mois)
|
dom = tva_par_taux(entreprise, annee, mois) # ventes {taux: (base, tva)}
|
||||||
intra_base, intra_tva = intracom_periode(entreprise, annee, mois)
|
intra = intracom_par_taux(entreprise, annee, mois) # acquisitions auto-liquidées
|
||||||
# CA3 : chaque ligne (base ET TVA) est arrondie à l'euro le plus proche ;
|
# CA3 : chaque ligne (base ET TVA) est arrondie à l'euro le plus proche.
|
||||||
# les totaux sont la somme des lignes arrondies (comme le formulaire officiel).
|
# Les acquisitions intracom/import auto-liquidées sont taxées sur les lignes de
|
||||||
def couple(taux):
|
# taux (08/9B/09) : leur base s'ajoute à celle des ventes, sinon le total des
|
||||||
b, t = par_taux.get(Decimal(taux), (Decimal("0.00"), Decimal("0.00")))
|
# bases du cadre B ne correspond pas au cadre A (contrôle bloquant du CA3).
|
||||||
return _euro(b), _euro(t)
|
def rate(taux):
|
||||||
|
db, dt = dom.get(Decimal(taux), (Decimal("0"), Decimal("0")))
|
||||||
|
ib, it = intra.get(Decimal(taux), (Decimal("0"), Decimal("0")))
|
||||||
|
return _euro(db + ib), _euro(dt + it)
|
||||||
|
|
||||||
b20, t20 = couple("20.00")
|
b20, t20 = rate("20.00")
|
||||||
b10, t10 = couple("10.00")
|
b10, t10 = rate("10.00")
|
||||||
b55, t55 = couple("5.50")
|
b55, t55 = rate("5.50")
|
||||||
intra_base = _euro(intra_base)
|
ventes_ht = _euro(sum((b for b, _ in dom.values()), Decimal("0")))
|
||||||
intra_tva = _euro(intra_tva)
|
ventes_tva = _euro(sum((t for _, t in dom.values()), Decimal("0")))
|
||||||
|
intra_base = _euro(sum((b for b, _ in intra.values()), Decimal("0")))
|
||||||
|
intra_tva = _euro(sum((t for _, t in intra.values()), Decimal("0")))
|
||||||
ded_immo, ded_autres = tva_deductible_split(entreprise, annee, mois)
|
ded_immo, ded_autres = tva_deductible_split(entreprise, annee, mois)
|
||||||
ded_immo, ded_autres = _euro(ded_immo), _euro(ded_autres)
|
ded_immo, ded_autres = _euro(ded_immo), _euro(ded_autres)
|
||||||
tva_ventes = t20 + t10 + t55
|
tva_brute = t20 + t10 + t55 # inclut déjà l'auto-liquidation
|
||||||
tva_brute = tva_ventes + intra_tva
|
|
||||||
tva_ded = ded_immo + ded_autres
|
tva_ded = ded_immo + ded_autres
|
||||||
a_payer = tva_brute - tva_ded
|
a_payer = tva_brute - tva_ded
|
||||||
base_taxable = b20 + b10 + b55
|
|
||||||
|
|
||||||
Z = Decimal("0")
|
Z = Decimal("0")
|
||||||
# --- Cadre A : montant des opérations réalisées (bases HT) ---
|
# --- Cadre A : montant des opérations réalisées (bases HT) ---
|
||||||
a_taxees = []
|
a_taxees = []
|
||||||
if base_taxable:
|
if ventes_ht:
|
||||||
a_taxees.append(_ca3_ligne("A1", "Ventes, prestations de services", base=base_taxable))
|
a_taxees.append(_ca3_ligne("A1", "Ventes, prestations de services", base=ventes_ht))
|
||||||
if intra_base:
|
if intra_base:
|
||||||
a_taxees.append(_ca3_ligne("B2", "Acquisitions intracommunautaires", base=intra_base))
|
a_taxees.append(_ca3_ligne("B2", "Acquisitions intracommunautaires", base=intra_base))
|
||||||
# --- Cadre B : décompte de la TVA à payer ---
|
# --- Cadre B : décompte de la TVA à payer ---
|
||||||
@@ -334,8 +347,8 @@ def declaration_tva(entreprise, annee, mois=None, label=None):
|
|||||||
"entreprise": entreprise, "annee": annee, "mois": mois,
|
"entreprise": entreprise, "annee": annee, "mois": mois,
|
||||||
"mois_nom": label or (MOIS_FR[mois - 1] if isinstance(mois, int) else "Année entière"),
|
"mois_nom": label or (MOIS_FR[mois - 1] if isinstance(mois, int) else "Année entière"),
|
||||||
"par_taux": [{"taux": k, "base": _euro(v[0]), "tva": _euro(v[1])}
|
"par_taux": [{"taux": k, "base": _euro(v[0]), "tva": _euro(v[1])}
|
||||||
for k, v in par_taux.items()],
|
for k, v in dom.items()],
|
||||||
"tva_sur_ventes": tva_ventes,
|
"tva_sur_ventes": ventes_tva,
|
||||||
"tva_autoliquidee": intra_tva,
|
"tva_autoliquidee": intra_tva,
|
||||||
"tva_collectee": tva_brute,
|
"tva_collectee": tva_brute,
|
||||||
"tva_deductible": tva_ded,
|
"tva_deductible": tva_ded,
|
||||||
|
|||||||
Reference in New Issue
Block a user