""" Charge les barèmes 2026 et un jeu de données d'exemple (multi-activité). Usage : python manage.py seed_demo """ from decimal import Decimal from datetime import date from django.core.management.base import BaseCommand from compta.models import ( Bareme, Entreprise, Client, Facture, LigneFacture, Depense, Activite, StatutFacture, ) # Barèmes officiels 2026 (voir docs/regles-fiscales-2026.md) BAREMES_2026 = [ # activite, taux_urssaf, abattement, taux_vl, seuil_ca, tva_base, tva_majore (Activite.VENTE, Decimal("12.30"), Decimal("71"), Decimal("1.0"), Decimal("203100"), Decimal("85000"), Decimal("93500")), (Activite.SERVICE_BIC, Decimal("21.20"), Decimal("50"), Decimal("1.7"), Decimal("83600"), Decimal("37500"), Decimal("41250")), (Activite.SERVICE_BNC, Decimal("25.60"), Decimal("34"), Decimal("2.2"), Decimal("83600"), Decimal("37500"), Decimal("41250")), ] class Command(BaseCommand): help = "Charge les barèmes 2026 et des données d'exemple." def handle(self, *args, **options): for act, urssaf, ab, vl, sca, tb, tm in BAREMES_2026: Bareme.objects.update_or_create( activite=act, annee=2026, defaults=dict(taux_urssaf=urssaf, abattement_fiscal=ab, taux_vl=vl, seuil_ca=sca, seuil_tva_base=tb, seuil_tva_majore=tm), ) self.stdout.write(self.style.SUCCESS("Barèmes 2026 chargés.")) # Entreprise multi-activité : impression 3D (Vente BIC) + aide info (Presta BIC) ent, _ = Entreprise.objects.get_or_create( nom="JB Conseil", defaults=dict(activite=Activite.SERVICE_BIC, franchise_tva=False, taux_tva_defaut=Decimal("20.00"), versement_liberatoire=True, email="jb@example.fr"), ) clients = {} for nom, mail in [("Acme SARL", "contact@acme.fr"), ("Studio Lumiere", "hello@studiolumiere.fr"), ("Mairie de Ville", "compta@ville.fr")]: c, _ = Client.objects.get_or_create(entreprise=ent, nom=nom, defaults=dict(email=mail)) clients[nom] = c V, S = Activite.VENTE, Activite.SERVICE_BIC factures = [ # numero, client, activite, emission, encaissement, statut, lignes ("2026-001", "Acme SARL", S, date(2026, 1, 10), date(2026, 1, 25), StatutFacture.ENCAISSEE, [("Dépannage informatique", 2, 600)]), ("2026-002", "Studio Lumiere", V, date(2026, 1, 18), date(2026, 2, 5), StatutFacture.ENCAISSEE, [("Impression 3D - lot pièces", 1, 800)]), ("2026-003", "Mairie de Ville", S, date(2026, 2, 2), date(2026, 2, 20), StatutFacture.ENCAISSEE, [("Maintenance parc", 1, 2500)]), ("2026-004", "Acme SARL", V, date(2026, 3, 1), date(2026, 3, 15), StatutFacture.ENCAISSEE, [("Impression 3D - prototype", 1, 1500)]), ("2026-005", "Studio Lumiere", S, date(2026, 3, 20), None, StatutFacture.ENVOYEE, [("Audit poste de travail", 1, 950)]), ] for numero, client_nom, activite, emis, enc, statut, lignes in factures: f, created = Facture.objects.get_or_create( entreprise=ent, numero=numero, defaults=dict(client=clients[client_nom], activite=activite, date_emission=emis, date_encaissement=enc, statut=statut), ) if created: for des, qte, pu in lignes: LigneFacture.objects.create( facture=f, designation=des, quantite=Decimal(qte), prix_unitaire_ht=Decimal(pu), taux_tva=Decimal("20")) f.recompute_totaux() Depense.objects.get_or_create( entreprise=ent, libelle="Bobines PLA/PETG", date=date(2026, 1, 15), defaults=dict(categorie="Matiere", activite=Activite.VENTE, montant_ttc=Decimal("96.00"), montant_tva=Decimal("16.00"))) Depense.objects.get_or_create( entreprise=ent, libelle="Abonnement outils", date=date(2026, 2, 10), defaults=dict(categorie="Logiciel", activite=Activite.SERVICE_BIC, montant_ttc=Decimal("34.80"), montant_tva=Decimal("5.80"))) self.stdout.write(self.style.SUCCESS("Données d'exemple chargées."))