Files
tradon/notes/accounting/business_rules.md
2026-05-05 20:14:42 +02:00

137 lines
4.9 KiB
Markdown

# 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.