# Purchase Trade Accounting Extensions

Date: 2026-05-05

## 1. Extensions de `account.invoice`

Source: `modules/purchase_trade/invoice.py`.

### Padding comptable

- `do_lot_invoicing()` appelle `_create_sale_padding_moves()`.
- `_post()` poste aussi les additional moves de padding.
- Deux descriptions identifient les moves:
  - `Sale padding accrual`;
  - `Sale padding reversal`.
- Les comptes viennent de `account.configuration`:
  - `default_sale_padding_account`;
  - `default_accrual_padding_account`.
- Provisoire vente:
  - debit sale padding;
  - credit accrual padding.
- Finale vente:
  - debit accrual padding;
  - credit sale padding.
- Montant:
  - `lot.sale_invoice_padding * provisional_invoice_line.unit_price`;
  - conversion devise via `invoice.rate` si present, sinon `Currency.compute`.
- Les move lines portent:
  - `lot`;
  - `origin = invoice_line`;
  - `description = Padding`;
  - party si le compte l'exige.

### Proprietes `report_*`

Le module expose un pont facture -> vente/achat/lot/shipment:

- parties/adresses;
- contrat;
- produit;
- quantites, poids, bales;
- prix et prix en lettres;
- BL, vessel, ports, controller, S/I;
- pro forma liee au lot;
- freight amount depuis fee shipment `Maritime freight`;
- payment order.

Regle de conception:

- la logique business reste en Python;
- les `.fodt` consomment des proprietes simples.

## 2. Extensions de `account.invoice.line`

Sources: `modules/purchase_trade/invoice.py`, `stock.py`.

- Champ `lot` sur `account.invoice.line`.
- Champ `fee` sur `account.invoice.line`.
- Champ fonctionnel `included_padding`, affiche `lot.sale_invoice_padding`.
- Proprietes `report_*` au niveau ligne:
  - product name/description;
  - rate currency/value/unit;
  - crop/attributes;
  - net/lbs.

## 3. Extensions de `account.move` et `account.move.line`

Source: `modules/purchase_trade/stock.py`.

### Move Line

- `revaluate`: lien vers ligne revaluee;
- `lot`: rattachement lot;
- `fee`: rattachement fee.

Utilite:

- audit par lot/fee;
- revaluation FX detaillee;
- reporting PnL et couts.

### Move

- `IsBankMove()` detecte un move bancaire si une ligne utilise un compte de
  payment method debit/credit.

## 4. Extensions de `account.account`

Source: `modules/purchase_trade/stock.py`.

- Detection des devises secondes ouvertes par compte.
- Recuperation des lignes par devise.
- Revaluation FX par compte:
  - detaillee ligne par ligne si `fx_eval_detail`;
  - globale par devise sinon.

Source standard modifiee observee: `modules/account/account.py`.

- Champs:
  - `fx_eval`;
  - `fx_eval_detail`;
  - `currency_exchange_credit_account`;
  - `currency_exchange_debit_account`.

## 5. Extensions de configuration comptable

Source: `modules/purchase_trade/configuration.py`.

Ajouts sur `account.configuration`:

- `default_sale_padding_account`;
- `default_accrual_padding_account`;
- templates de documents facture/vente/achat/shipment;
- resolution dynamique des templates via `purchase_trade.configuration`.

## 6. Fees et comptabilite

Source: `modules/purchase_trade/fee.py`.

- `fee.fee` peut retrouver son invoice.
- Les fees calculent quantity/amount selon mode:
  - lumpsum;
  - per quantity;
  - percent price/cost;
  - rate selon regle ACT/360.
- `_get_account_move_fee()` cree des moves de fee lies a un lot.
- Les comptes utilises viennent du produit fee:
  - stock/COGS/stock in/stock out selon flux.
- Les move lines peuvent porter lot et fee.

Regles recentes:

- `% rate` utilise `fin_int_delta`, pas la date du jour.
- Les fees suivent les lots effectifs:
  - virtuel si aucun physique;
  - physiques des qu'ils existent.

## 7. Forex

Source: `modules/purchase_trade/forex.py`.

- `forex.forex` porte achat/vente devise, montant, rate, bank, maturity.
- Peut creer:
  - facture fournisseur de frais;
  - move comptable;
  - lignes de couverture achat/vente physique.
- Reporting BI via `forex.bi`.

## 8. Payment terms

Source: `modules/purchase_trade/payment_term.py`.

Extensions:

- `account.invoice.payment_term.is_mixed`;
- lignes de term avec:
  - `trigger_event`;
  - `term_type`;
  - `trigger_offset`;
  - unite d'offset;
  - EOM flag/mode;
  - risk classification.

Impact:

- utile pour credit risk, maturity date, bills et conditions trade.

