Arrondi URSSAF/TVA/VFL a l'euro + CFP + fix montant popup + fix categorie favori
Deploy via Portainer / deploy (push) Successful in 0s
Deploy via Portainer / deploy (push) Successful in 0s
This commit is contained in:
+39
-16
@@ -5,7 +5,7 @@ Bases : CA HORS TAXES (HT) encaissé.
|
||||
TVA collectée = TVA ventes + TVA auto-liquidée (UE/import).
|
||||
TVA déductible = TVA achats nationaux + TVA auto-liquidée. Neutres exclus.
|
||||
"""
|
||||
from decimal import Decimal
|
||||
from decimal import Decimal, ROUND_HALF_UP
|
||||
from django.db.models import Sum
|
||||
from django.db.models.functions import TruncMonth
|
||||
|
||||
@@ -21,6 +21,16 @@ def _q(v):
|
||||
return (v or Decimal("0")).quantize(CENT)
|
||||
|
||||
|
||||
def _euro(v):
|
||||
"""Arrondi à l'euro le plus proche (règle URSSAF / TVA : 0,50 → euro sup.)."""
|
||||
return (v or Decimal("0")).quantize(Decimal("1"), rounding=ROUND_HALF_UP)
|
||||
|
||||
|
||||
def _somme_euro(lignes, cle):
|
||||
vals = [l[cle] for l in lignes if l.get(cle) is not None]
|
||||
return _euro(sum(vals, Decimal("0"))) if vals else None
|
||||
|
||||
|
||||
# ---- Sélections de période ---------------------------------------------
|
||||
|
||||
def factures_encaissees(entreprise, annee, mois=None):
|
||||
@@ -120,9 +130,11 @@ def detail_activite(activite, ca, bareme):
|
||||
if bareme:
|
||||
d.update({
|
||||
"taux_urssaf": bareme.taux_urssaf,
|
||||
"cotisations": _q(ca * bareme.taux_urssaf / Decimal("100")),
|
||||
"cotisations": _euro(ca * bareme.taux_urssaf / Decimal("100")),
|
||||
"taux_vl": bareme.taux_vl,
|
||||
"versement_liberatoire": _q(ca * bareme.taux_vl / Decimal("100")),
|
||||
"versement_liberatoire": _euro(ca * bareme.taux_vl / Decimal("100")),
|
||||
"taux_cfp": bareme.taux_cfp,
|
||||
"cfp": _euro(ca * bareme.taux_cfp / Decimal("100")),
|
||||
"abattement_fiscal": bareme.abattement_fiscal,
|
||||
"revenu_imposable": _q(ca * (Decimal("100") - bareme.abattement_fiscal) / Decimal("100")),
|
||||
"seuil_ca": bareme.seuil_ca,
|
||||
@@ -133,8 +145,8 @@ def detail_activite(activite, ca, bareme):
|
||||
})
|
||||
else:
|
||||
for k in ("taux_urssaf", "cotisations", "taux_vl", "versement_liberatoire",
|
||||
"abattement_fiscal", "revenu_imposable", "seuil_ca", "pct_seuil_ca",
|
||||
"seuil_tva_base"):
|
||||
"taux_cfp", "cfp", "abattement_fiscal", "revenu_imposable",
|
||||
"seuil_ca", "pct_seuil_ca", "seuil_tva_base"):
|
||||
d[k] = None
|
||||
d["depasse_seuil_tva"] = d["depasse_seuil_ca"] = False
|
||||
return d
|
||||
@@ -165,13 +177,13 @@ def synthese(entreprise, annee):
|
||||
"entreprise": entreprise, "annee": annee, "lignes_activite": lignes,
|
||||
"bareme_manquant": any(l["bareme"] is None and l["ca_ht"] for l in lignes),
|
||||
"ca_ht": ca_ht(entreprise, annee),
|
||||
"cotisations_urssaf": _somme(lignes, "cotisations"),
|
||||
"versement_liberatoire": (_somme(lignes, "versement_liberatoire")
|
||||
"cotisations_urssaf": _somme_euro(lignes, "cotisations"),
|
||||
"versement_liberatoire": (_somme_euro(lignes, "versement_liberatoire")
|
||||
if entreprise.versement_liberatoire else None),
|
||||
"revenu_imposable": _somme(lignes, "revenu_imposable"),
|
||||
"tva_sur_ventes": tva_ventes, "tva_autoliquidee": tva_autoliq,
|
||||
"tva_collectee": tva_col, "tva_deductible": tva_ded,
|
||||
"tva_a_reverser": _q(tva_col - tva_ded),
|
||||
"tva_a_reverser": _euro(_euro(tva_col) - _euro(tva_ded)),
|
||||
"ca_mensuel": ca_ht_mensuel(entreprise, annee),
|
||||
}
|
||||
|
||||
@@ -195,10 +207,10 @@ def tableau_mensuel(entreprise, annee):
|
||||
rows.append({
|
||||
"mois": m, "nom": MOIS_FR[m - 1],
|
||||
"ca_ht": ca_ht(entreprise, annee, m),
|
||||
"cotisations": _q(cot),
|
||||
"versement_liberatoire": _q(vl) if entreprise.versement_liberatoire else None,
|
||||
"cotisations": _euro(cot),
|
||||
"versement_liberatoire": _euro(vl) if entreprise.versement_liberatoire else None,
|
||||
"tva_collectee": tva_col, "tva_deductible": tva_ded,
|
||||
"tva_a_reverser": _q(tva_col - tva_ded),
|
||||
"tva_a_reverser": _euro(_euro(tva_col) - _euro(tva_ded)),
|
||||
})
|
||||
return rows
|
||||
|
||||
@@ -207,14 +219,23 @@ def tableau_mensuel(entreprise, annee):
|
||||
|
||||
def declaration_urssaf(entreprise, annee, mois=None):
|
||||
lignes = _lignes_activite(entreprise, annee, mois)
|
||||
# URSSAF : le CA déclaré et les cotisations sont arrondis à l'euro le plus proche.
|
||||
for l in lignes:
|
||||
l["ca_ht"] = _euro(l["ca_ht"])
|
||||
return {
|
||||
"entreprise": entreprise, "annee": annee, "mois": mois,
|
||||
"mois_nom": MOIS_FR[mois - 1] if mois else "Année entière",
|
||||
"lignes": lignes,
|
||||
"ca_ht": ca_ht(entreprise, annee, mois),
|
||||
"cotisations": _somme(lignes, "cotisations"),
|
||||
"versement_liberatoire": (_somme(lignes, "versement_liberatoire")
|
||||
"ca_ht": _euro(ca_ht(entreprise, annee, mois)),
|
||||
"cotisations": _somme_euro(lignes, "cotisations"),
|
||||
"cfp": _somme_euro(lignes, "cfp"),
|
||||
"versement_liberatoire": (_somme_euro(lignes, "versement_liberatoire")
|
||||
if entreprise.versement_liberatoire else None),
|
||||
"total_regle": _euro(
|
||||
(_somme_euro(lignes, "cotisations") or Decimal("0"))
|
||||
+ (_somme_euro(lignes, "cfp") or Decimal("0"))
|
||||
+ ((_somme_euro(lignes, "versement_liberatoire") or Decimal("0"))
|
||||
if entreprise.versement_liberatoire else Decimal("0"))),
|
||||
}
|
||||
|
||||
|
||||
@@ -225,8 +246,10 @@ def declaration_tva(entreprise, annee, mois=None):
|
||||
intra_base, intra_tva = intracom_periode(entreprise, annee, mois)
|
||||
tva_ventes = sum((t for _, t in par_taux.values()), Decimal("0"))
|
||||
tva_ded = tva_deductible(entreprise, annee, mois)
|
||||
tva_brute = _q(tva_ventes + intra_tva)
|
||||
a_payer = _q(tva_brute - tva_ded)
|
||||
# CA3 : TVA collectée, déductible et à payer arrondies à l'euro le plus proche.
|
||||
tva_brute = _euro(tva_ventes + intra_tva)
|
||||
tva_ded = _euro(tva_ded)
|
||||
a_payer = tva_brute - tva_ded
|
||||
|
||||
def couple(taux):
|
||||
return par_taux.get(Decimal(taux), (Decimal("0.00"), Decimal("0.00")))
|
||||
|
||||
Reference in New Issue
Block a user