# Accounting Business Rules Date: 2026-05-05 ## 1. Ecritures comptables Source principale: `modules/account/move.py`. ### Move - `account.move` porte un numero interne `number`, un `post_number`, une societe, une periode, un journal, une date effective, une date de post et des lignes. - Un move draft peut etre modifie; un move posted ne doit pas etre modifie hors champs explicitement toleres. - A la creation, le numero est tire de la sequence du journal si absent. - La date ajuste la periode si la date sort de la periode courante. - Le posting refuse: - un move sans ligne; - un move non equilibre dans la devise societe. - Au `post`, le move recoit `state = posted`, `post_date` et `post_number`. - Les lignes a zero sur comptes reconciliables peuvent etre letrees automatiquement. ### Move Line - `account.move.line` porte debit, credit, compte, party, devise seconde, montant devise seconde, taxes, maturity date et reconciliation. - La validite des lignes suit l'equilibre du move. - Le lettrage groupe compte, party et devise. - Si une devise seconde est presente, le solde de reconciliation peut etre lu dans cette devise plutot que dans la devise societe. ## 2. Comptes Source principale: `modules/account/account.py`. - Les comptes sont rattaches a une societe et a un type de compte. - Les types de compte portent les categories structurantes: assets, receivable, payable, debt, revenue, expense, stock. - Les comptes peuvent etre fermes, reconciliables, ou exiger une party. - Les comptes portent aussi des indicateurs Tradon ajoutes: `fx_eval`, `fx_eval_detail`, comptes de gain/perte de change. - Les soldes sont calcules par contexte: societe, periodes, dates, posted only. ## 3. Factures Source principale: `modules/account_invoice/invoice.py`. ### Workflow Etats: - `draft` - `validated` - `posted` - `paid` - `cancelled` Regles: - Une facture fournisseur exige une date de facture des `Validate`. - Une facture client standard exige la date au `Post`, mais ce repository a modifie le flux pour creer aussi le move et le numero client au `Validate`. - `posted` represente le posting comptable. - `paid` depend du lettrage des lignes a payer. - `cancelled` cree ou reference les moves d'annulation selon le contexte. ### Montants et taxes - `untaxed_amount`, `tax_amount`, `total_amount` sont caches et recalcules. - Les taxes de lignes alimentent les taxes calculees de facture. - Les taxes manuelles sont preservees lors de `update_taxes`. - Une ligne produit genere des `account.tax.line` de type `base`. - Une ligne de taxe facture genere une move line avec `account.tax.line` de type `tax`; si la taxe est manuelle, une ligne `base` complementaire peut etre ajoutee. - La devise seconde est portee par `account.move.line`, pas par `account.tax.line`. ### Paiements - `lines_to_pay` expose les lignes comptables ouvertes a payer. - `payment_lines` rattache les lignes de paiement a la facture. - Le wizard `account.invoice.pay` cree/reconcilie les paiements selon la methode de paiement. - Les wizards de reschedule/delegate agissent sur les lignes a payer. ## 4. Devises Regles notees dans `notes/business_rules.md` et vues dans le code: - `account.move.line.rate` est un champ stocke/editable dans ce repository. - Le sens du taux suit Tryton: devise seconde / devise societe. - Montant societe = `amount_second_currency / rate` quand la devise societe a une base a 1. - Les lignes facture generees doivent renseigner `rate` quand elles portent `amount_second_currency`. - Un fallback central sur `account.move.line.create` calcule le taux manquant depuis les montants. - La revaluation FX Tradon cree des moves de revaluation sur comptes marques `fx_eval`. ## 5. Reconciliation Source principale: `modules/account/move.py`. - Les comptes reconciliables peuvent etre letres automatiquement ou via wizard. - Le wizard de reconciliation cherche les comptes avec lignes ouvertes, puis les parties, puis les devises. - Il peut proposer uniquement les combinaisons balancees, ou creer un write-off si un ecart reste. - La devise de reconciliation est la devise seconde si elle existe, sinon la devise du compte/societe. ## 6. Statements Source principale: `modules/account_statement/statement.py`. - Un statement a des lignes, origines, solde de depart/fin, devise et journal. - La validation controle solde, montants et nombre de lignes selon la configuration. - Le posting cree les moves des lignes. - La reconciliation des lignes relie les lignes statement aux lignes comptables. ## 7. Stock et couts Source principale: modules `account_stock_*`. - Les modules stock comptables generent des moves depuis les mouvements stock selon methode continental/anglo-saxon. - Les landed costs et shipment costs creent des objets dedies, allocation sur mouvements/shipments, puis posting comptable. - Dans `purchase_trade`, les fees peuvent creer des mouvements de stock/cout supplementaires lies aux lots.