Autoliquidation TVA (achats UE/import)
This commit is contained in:
+40
-12
@@ -6,10 +6,14 @@ Bases de calcul : CA HORS TAXES (HT) encaissé.
|
||||
- En franchise de TVA, HT = TTC : le calcul reste correct.
|
||||
|
||||
Multi-activité : une entreprise peut exercer plusieurs activités (ex. Vente BIC
|
||||
+ Prestation BIC). Les taux URSSAF, abattements, taux de versement libératoire et
|
||||
seuils diffèrent par activité, donc tout est ventilé par activité puis totalisé.
|
||||
+ Prestation BIC). Taux URSSAF, abattements, taux VL et seuils diffèrent par
|
||||
activité, donc tout est ventilé par activité puis totalisé.
|
||||
|
||||
TVA à reverser = TVA collectée (ventes encaissées) − TVA déductible (dépenses).
|
||||
TVA :
|
||||
- TVA collectée = TVA sur ventes encaissées + TVA auto-liquidée (achats UE/import).
|
||||
- TVA déductible = TVA facturée sur achats nationaux + TVA auto-liquidée.
|
||||
- L'autoliquidation s'ajoute aux deux côtés (effet net souvent nul), mais doit
|
||||
apparaître sur la CA3 : on l'expose donc séparément.
|
||||
"""
|
||||
from decimal import Decimal
|
||||
from django.db.models import Sum
|
||||
@@ -32,6 +36,10 @@ def factures_encaissees(entreprise, annee):
|
||||
)
|
||||
|
||||
|
||||
def depenses_annee(entreprise, annee):
|
||||
return Depense.objects.filter(entreprise=entreprise, date__year=annee)
|
||||
|
||||
|
||||
def ca_ht_par_activite(entreprise, annee):
|
||||
"""Dict {activite: CA HT encaissé}."""
|
||||
rows = (
|
||||
@@ -47,18 +55,34 @@ def ca_ht(entreprise, annee):
|
||||
return _q(agg["s"])
|
||||
|
||||
|
||||
def tva_collectee(entreprise, annee):
|
||||
# ---- TVA ----------------------------------------------------------------
|
||||
|
||||
def tva_sur_ventes(entreprise, annee):
|
||||
agg = factures_encaissees(entreprise, annee).aggregate(s=Sum("montant_tva"))
|
||||
return _q(agg["s"])
|
||||
|
||||
|
||||
def tva_deductible(entreprise, annee):
|
||||
agg = Depense.objects.filter(
|
||||
entreprise=entreprise, date__year=annee
|
||||
).aggregate(s=Sum("montant_tva"))
|
||||
return _q(agg["s"])
|
||||
def tva_autoliquidee(entreprise, annee):
|
||||
"""TVA auto-liquidée sur les achats UE/import (intracom + import)."""
|
||||
total = sum((d.tva_autoliquidee for d in depenses_annee(entreprise, annee)),
|
||||
Decimal("0"))
|
||||
return _q(total)
|
||||
|
||||
|
||||
def tva_deductible(entreprise, annee):
|
||||
"""TVA récupérable : facturée (national) + auto-liquidée (UE/import)."""
|
||||
total = sum((d.tva_deductible_value for d in depenses_annee(entreprise, annee)),
|
||||
Decimal("0"))
|
||||
return _q(total)
|
||||
|
||||
|
||||
def tva_collectee(entreprise, annee):
|
||||
"""TVA due : sur ventes + auto-liquidée sur achats UE/import."""
|
||||
return _q(tva_sur_ventes(entreprise, annee) + tva_autoliquidee(entreprise, annee))
|
||||
|
||||
|
||||
# ---- CA mensuel ---------------------------------------------------------
|
||||
|
||||
def ca_ht_mensuel(entreprise, annee):
|
||||
"""Liste de 12 valeurs (index 0 = janvier) du CA HT encaissé (toutes activités)."""
|
||||
rows = (
|
||||
@@ -74,6 +98,8 @@ def ca_ht_mensuel(entreprise, annee):
|
||||
return mensuel
|
||||
|
||||
|
||||
# ---- Détail par activité ------------------------------------------------
|
||||
|
||||
def detail_activite(activite, ca, bareme):
|
||||
"""Calculs fiscaux pour une activité donnée."""
|
||||
label = dict(Activite.choices).get(activite, activite)
|
||||
@@ -110,7 +136,6 @@ def synthese(entreprise, annee):
|
||||
"""Tableau de bord chiffré, ventilé par activité puis totalisé."""
|
||||
ca_par_act = ca_ht_par_activite(entreprise, annee)
|
||||
|
||||
# On inclut toujours l'activité principale, même sans CA encore.
|
||||
activites = set(ca_par_act) | {entreprise.activite}
|
||||
baremes = {b.activite: b for b in Bareme.objects.filter(annee=annee)}
|
||||
|
||||
@@ -119,13 +144,14 @@ def synthese(entreprise, annee):
|
||||
ca = ca_par_act.get(act, Decimal("0"))
|
||||
lignes.append(detail_activite(act, ca, baremes.get(act)))
|
||||
|
||||
# Totaux (on additionne ce qui est calculable)
|
||||
def somme(cle):
|
||||
vals = [l[cle] for l in lignes if l.get(cle) is not None]
|
||||
return _q(sum(vals, Decimal("0"))) if vals else None
|
||||
|
||||
tva_col = tva_collectee(entreprise, annee)
|
||||
tva_ventes = tva_sur_ventes(entreprise, annee)
|
||||
tva_autoliq = tva_autoliquidee(entreprise, annee)
|
||||
tva_ded = tva_deductible(entreprise, annee)
|
||||
tva_col = _q(tva_ventes + tva_autoliq)
|
||||
|
||||
return {
|
||||
"entreprise": entreprise,
|
||||
@@ -137,6 +163,8 @@ def synthese(entreprise, annee):
|
||||
"versement_liberatoire": (
|
||||
somme("versement_liberatoire") if entreprise.versement_liberatoire else None),
|
||||
"revenu_imposable": somme("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),
|
||||
|
||||
Reference in New Issue
Block a user