datasynth_core/pcg.rs
1//! Plan Comptable Général (PCG) – French GAAP chart of accounts constants.
2//!
3//! PCG uses a decimal classification with classes 1–9:
4//! - Class 1: Equity and liabilities (capitaux)
5//! - Class 2: Fixed assets (immobilisations)
6//! - Class 3: Inventory and work in progress (stocks)
7//! - Class 4: Receivables and payables (tiers)
8//! - Class 5: Financial / cash (financiers)
9//! - Class 6: Expenses (charges)
10//! - Class 7: Income (produits)
11//! - Class 8: Special accounts (comptes spéciaux)
12//! - Class 9: Analytical accounts (comptes analytiques)
13
14/// PCG control and main account ranges (6-digit base).
15/// First digit = class; next two = subclass; last three = account.
16///
17/// L’idée de base:
18/// Un bail peut être compté de deux façons :
19/// - Bail en « exploitation » (operating) —
20/// On enregistre surtout les loyers en charges au fil du temps.
21/// - Bail « finance » (finance) —
22/// On considère qu’on « possède presque » l’actif.
23///
24/// La classification dépend du référentiel (US GAAP, IFRS, French GAAP).
25pub mod control_accounts {
26 /// Clients (Accounts Receivable) – Class 4
27 pub const AR_CONTROL: &str = "411000";
28
29 /// Fournisseurs (Accounts Payable) – Class 4
30 pub const AP_CONTROL: &str = "401000";
31
32 /// Inventories – Class 3
33 pub const INVENTORY: &str = "310000";
34
35 /// Immobilisations corporelles (Fixed assets) – Class 2
36 pub const FIXED_ASSETS: &str = "210000";
37
38 /// Amortissements (Accumulated depreciation) – Class 2
39 pub const ACCUMULATED_DEPRECIATION: &str = "281000";
40
41 /// GR/IR clearing – Class 4
42 pub const GR_IR_CLEARING: &str = "408000";
43
44 /// Intercompany AR – Class 4
45 pub const IC_AR_CLEARING: &str = "411800";
46
47 /// Intercompany AP – Class 4
48 pub const IC_AP_CLEARING: &str = "401800";
49}
50
51/// Cash and bank – Class 5
52pub mod cash_accounts {
53 pub const OPERATING_CASH: &str = "530000";
54 pub const BANK_ACCOUNT: &str = "512000";
55 pub const PETTY_CASH: &str = "531000";
56}
57
58/// Revenue – Class 7 (produits)
59pub mod revenue_accounts {
60 pub const PRODUCT_REVENUE: &str = "701000";
61 pub const SERVICE_REVENUE: &str = "706000";
62 pub const OTHER_REVENUE: &str = "758000";
63 pub const SALES_DISCOUNTS: &str = "709000";
64}
65
66/// Expenses – Class 6 (charges)
67pub mod expense_accounts {
68 pub const COGS: &str = "603000";
69 pub const DEPRECIATION: &str = "681000";
70 pub const SALARIES_WAGES: &str = "641100";
71 pub const RENT: &str = "613000";
72 pub const INTEREST_EXPENSE: &str = "661000";
73}
74
75/// Equity and liabilities – Class 1
76pub mod equity_liability_accounts {
77 pub const COMMON_STOCK: &str = "101000";
78 pub const RETAINED_EARNINGS: &str = "129000";
79 pub const PROVISIONS: &str = "151000";
80 pub const SHORT_TERM_DEBT: &str = "164000";
81 pub const LONG_TERM_DEBT: &str = "163000";
82}
83
84/// Personnel – Class 4 (sub-class 42)
85pub mod personnel_accounts {
86 pub const WAGES_PAYABLE: &str = "421000";
87}
88
89/// Fixed asset sub-accounts – Class 2.
90pub mod fixed_asset_accounts {
91 /// Terrains (Land)
92 pub const TERRAINS: &str = "211000";
93 /// Constructions (Buildings)
94 pub const CONSTRUCTIONS: &str = "213000";
95 /// Installations techniques, matériel et outillage industriels
96 pub const INDUSTRIAL: &str = "215000";
97 /// Matériel de transport (Vehicles)
98 pub const TRANSPORT: &str = "218200";
99 /// Matériel de bureau (Office Equipment)
100 pub const OFFICE_EQUIPMENT: &str = "218300";
101 /// Matériel informatique (IT Equipment)
102 pub const IT_EQUIPMENT: &str = "218400";
103}
104
105/// Tax accounts – Classes 4 & 6.
106pub mod tax_accounts {
107 /// TVA déductible sur biens et services (Input VAT)
108 pub const INPUT_VAT: &str = "445660";
109 /// TVA collectée (Output VAT)
110 pub const OUTPUT_VAT: &str = "445710";
111 /// Retenue à la source (Withholding Tax Payable)
112 pub const WHT_PAYABLE: &str = "442100";
113 /// Crédit d'impôt (Tax Receivable)
114 pub const TAX_RECEIVABLE: &str = "443000";
115 /// Impôt sur les bénéfices (Tax Expense)
116 pub const TAX_EXPENSE: &str = "695000";
117 /// Provisions pour impôts différés passifs (Deferred Tax Liability)
118 pub const DEFERRED_TAX_LIABILITY: &str = "155000";
119 /// Charges à répartir / actif impôt différé (Deferred Tax Asset)
120 pub const DEFERRED_TAX_ASSET: &str = "481000";
121}
122
123/// Suspense and clearing accounts.
124pub mod suspense_accounts {
125 /// Personnel – Rémunérations dues (Payroll Clearing)
126 pub const PAYROLL_CLEARING: &str = "421000";
127 /// Comptes d'attente (General Suspense)
128 pub const GENERAL_SUSPENSE: &str = "471000";
129}
130
131/// Additional revenue accounts – Class 7.
132pub mod additional_revenue {
133 /// Produits intercompany (IC Revenue)
134 pub const IC_REVENUE: &str = "757000";
135 /// Escomptes obtenus / rabais sur achats (Purchase Discount Income)
136 pub const PURCHASE_DISCOUNT_INCOME: &str = "765000";
137 /// Rabais, remises et ristournes accordés (Sales Returns)
138 pub const SALES_RETURNS: &str = "709100";
139}
140
141/// Additional expense accounts – Class 6.
142pub mod additional_expense {
143 /// Achats de matières premières (Raw Materials)
144 pub const RAW_MATERIALS: &str = "601000";
145 /// Rabais, remises sur achats (Purchase Discounts)
146 pub const PURCHASE_DISCOUNTS: &str = "609000";
147 /// Pertes de change (FX Gain/Loss)
148 pub const FX_GAIN_LOSS: &str = "666000";
149 /// Pertes sur créances irrécouvrables (Bad Debt)
150 pub const BAD_DEBT: &str = "654000";
151}
152
153/// Liability accounts – Class 4.
154pub mod liability_accounts {
155 /// Charges à payer (Accrued Expenses)
156 pub const ACCRUED_EXPENSES: &str = "428000";
157 /// Charges de personnel à payer (Accrued Salaries)
158 pub const ACCRUED_SALARIES: &str = "428400";
159 /// Produits constatés d'avance (Unearned Revenue)
160 pub const UNEARNED_REVENUE: &str = "487000";
161 /// Comptes courants des associés / IC Payable (Group Companies)
162 pub const IC_PAYABLE: &str = "451000";
163}
164
165/// Additional equity accounts – Class 1.
166pub mod equity_accounts {
167 /// Prime d'émission (Additional Paid-In Capital)
168 pub const APIC: &str = "104000";
169 /// Résultat de l'exercice (Current Year Earnings)
170 pub const CURRENT_YEAR_EARNINGS: &str = "120000";
171 /// Écart de conversion (Currency Translation Adjustment)
172 pub const CTA: &str = "107000";
173 /// Solde intermédiaire de gestion (Income Summary)
174 pub const INCOME_SUMMARY: &str = "129900";
175 /// Associés – dividendes à payer (Dividends Paid)
176 pub const DIVIDENDS_PAID: &str = "457000";
177}
178
179/// Return the PCG class (1–9) from a 6-digit account number.
180#[inline]
181pub fn pcg_class(account: &str) -> Option<u8> {
182 let first = account.chars().next()?;
183 first.to_digit(10).map(|d| d as u8)
184}