diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_avec_code.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_avec_code.json
new file mode 100644
index 00000000000..4d7f879ddc7
--- /dev/null
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_avec_code.json
@@ -0,0 +1,2473 @@
+{
+ "country_code": "fr",
+ "name": "France - Plan Comptable General 2025 avec code",
+ "tree": {
+ "1-Comptes de capitaux": {
+ "root_type": "Equity",
+ "10-Capital et r\u00e9serves": {
+ "101-Capital": {
+ "Capital souscrit - non appel\u00e9": {
+ "account_number": "1011"
+ },
+ "Capital souscrit - appel\u00e9, non vers\u00e9": {
+ "account_number": "1012"
+ },
+ "1013-Capital souscrit - appel\u00e9, vers\u00e9": {
+ "Capital non amorti": {
+ "account_number": "10131"
+ },
+ "Capital amorti": {
+ "account_number": "10132"
+ }
+ },
+ "Capital souscrit soumis \u00e0 des r\u00e9glementations particuli\u00e8res": {
+ "account_number": "1018"
+ }
+ },
+ "Fonds fiduciaires": {
+ "account_number": "102"
+ },
+ "104-Primes li\u00e9es au capital": {
+ "Primes d'\u00e9mission": {
+ "account_number": "1041"
+ },
+ "Primes de fusion": {
+ "account_number": "1042"
+ },
+ "Primes d'apport": {
+ "account_number": "1043"
+ },
+ "Primes de conversion d'obligations en actions": {
+ "account_number": "1044"
+ },
+ "Bons de souscription d'actions": {
+ "account_number": "1045"
+ }
+ },
+ "\u00c9carts de r\u00e9\u00e9valuation": {
+ "account_number": "105"
+ },
+ "106-R\u00e9serves": {
+ "R\u00e9serve l\u00e9gale": {
+ "account_number": "1061"
+ },
+ "R\u00e9serves indisponibles": {
+ "account_number": "1062"
+ },
+ "R\u00e9serves statutaires ou contractuelles": {
+ "account_number": "1063"
+ },
+ "R\u00e9serves r\u00e9glement\u00e9es": {
+ "account_number": "1064"
+ },
+ "Autres r\u00e9serves": {
+ "account_number": "1068"
+ }
+ },
+ "\u00c9cart d'\u00e9quivalence": {
+ "account_number": "107"
+ },
+ "Compte de l'exploitant": {
+ "account_number": "108"
+ },
+ "Actionnaires : capital souscrit - non appel\u00e9": {
+ "account_number": "109"
+ }
+ },
+ "11-Report \u00e0 nouveau": {
+ "Report \u00e0 nouveau - solde cr\u00e9diteur": {
+ "account_number": "110"
+ },
+ "Report \u00e0 nouveau - solde d\u00e9biteur": {
+ "account_number": "119"
+ }
+ },
+ "12-R\u00e9sultat de l'exercice": {
+ "120-R\u00e9sultat de l'exercice - b\u00e9n\u00e9fice": {
+ "Acomptes sur dividendes": {
+ "account_number": "1209"
+ }
+ },
+ "R\u00e9sultat de l'exercice - perte": {
+ "account_number": "129"
+ }
+
+ },
+ "13-Subventions d'investissement": {
+ "Subventions d'investissement octroy\u00e9es": {
+ "account_number": "131"
+ },
+ "Subventions d'investissement inscrites au compte de r\u00e9sultat": {
+ "account_number": "139"
+ }
+ },
+ "14-Provisions r\u00e9glement\u00e9es": {
+ "Provisions r\u00e9glement\u00e9es pour hausse de prix": {
+ "account_number": "143"
+ },
+ "Amortissements d\u00e9rogatoires": {
+ "account_number": "145"
+ },
+ "Autres provisions r\u00e9glement\u00e9es": {
+ "account_number": "148"
+ }
+ },
+ "15-Provisions": {
+ "151-Provisions pour risques": {
+ "Provisions pour litiges": {
+ "account_number": "1511"
+ },
+ "Provisions pour garanties donn\u00e9es aux clients": {
+ "account_number": "1512"
+ },
+ "Provisions pour amendes et p\u00e9nalit\u00e9s": {
+ "account_number": "1514"
+ },
+ "Provisions pour pertes de change": {
+ "account_number": "1515"
+ },
+ "Provisions pour pertes sur contrats": {
+ "account_number": "1516"
+ },
+ "Autres provisions pour risques": {
+ "account_number": "1518"
+ }
+ },
+ "152-Provisions pour charges": {
+ "Provisions pour pensions et obligations similaires": {
+ "account_number": "1521"
+ },
+ "Provisions pour restructurations": {
+ "account_number": "1522"
+ },
+ "Provisions pour imp\u00f4ts": {
+ "account_number": "1523"
+ },
+ "Provisions pour renouvellement des immobilisations - entreprises concessionnaires": {
+ "account_number": "1524"
+ },
+ "Provisions pour gros entretien ou grandes r\u00e9visions": {
+ "account_number": "1525"
+ },
+ "Provisions pour remise en \u00e9tat": {
+ "account_number": "1526"
+ },
+ "Autres provisions pour charges": {
+ "account_number": "1527"
+ }
+ }
+ },
+ "16-Emprunts et dettes assimil\u00e9es": {
+ "161-Emprunts obligataires convertibles": {
+ "Int\u00e9r\u00eats courus sur emprunts obligataires convertibles": {
+ "account_number": "1618"
+ }
+ },
+ "Obligations repr\u00e9sentatives de passifs nets remis en fiducie": {
+ "account_number": "162"
+ },
+ "163-Autres emprunts obligataires": {
+ "Int\u00e9r\u00eats courus sur autres emprunts obligataires": {
+ "account_number": "1638"
+ }
+ },
+ "164-Emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {
+ "Int\u00e9r\u00eats courus sur emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {
+ "account_number": "1648"
+ }
+ },
+ "165-D\u00e9p\u00f4ts et cautionnements re\u00e7us": {
+ "D\u00e9p\u00f4ts": {
+ "account_number": "1651"
+ },
+ "Cautionnements": {
+ "account_number": "1655"
+ },
+ "Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements re\u00e7us": {
+ "account_number": "1658"
+ }
+ },
+ "166-Participation des salari\u00e9s aux r\u00e9sultats": {
+ "Comptes bloqu\u00e9s": {
+ "account_number": "1661"
+ },
+ "Fonds de participation": {
+ "account_number": "1662"
+ },
+ "Int\u00e9r\u00eats courus sur participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "1668"
+ }
+ },
+ "167-Emprunts et dettes assortis de conditions particuli\u00e8res": {
+ "1671-\u00c9missions de titres participatifs": {
+ "Int\u00e9r\u00eats courus sur titres participatifs": {
+ "account_number": "16718"
+ }
+ },
+ "1674-Avances conditionn\u00e9es de l'\u00c9tat": {
+ "Int\u00e9r\u00eats courus sur avances conditionn\u00e9es": {
+ "account_number": "16748"
+ }
+ },
+ "1675-Emprunts participatifs": {
+ "Int\u00e9r\u00eats courus sur emprunts participatifs": {
+ "account_number": "16758"
+ }
+ }
+ },
+ "168-Autres emprunts et dettes assimil\u00e9es": {
+ "Autres emprunts": {
+ "account_number": "1681"
+ },
+ "Rentes viag\u00e8res capitalis\u00e9es": {
+ "account_number": "1685"
+ },
+ "Autres dettes": {
+ "account_number": "1687"
+ },
+ "Int\u00e9r\u00eats courus sur autres emprunts et dettes assimil\u00e9es": {
+ "account_number": "1688"
+ }
+ },
+ "Primes de remboursement des emprunts": {
+ "account_number": "169"
+ }
+ },
+ "17-Dettes rattach\u00e9es \u00e0 des participations": {
+ "Dettes rattach\u00e9es \u00e0 des participations - groupe": {
+ "account_number": "171"
+ },
+ "Dettes rattach\u00e9es \u00e0 des participations - hors groupe": {
+ "account_number": "174"
+ },
+ "Dettes rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": {
+ "account_number": "178"
+ }
+ },
+ "18-Comptes de liaison des \u00e9tablissements et soci\u00e9t\u00e9s en participation": {
+ "Comptes de liaison des \u00e9tablissements": {
+ "account_number": "181"
+ },
+ "Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements - charges": {
+ "account_number": "186"
+ },
+ "Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements - produits": {
+ "account_number": "187"
+ },
+ "Comptes de liaison des soci\u00e9t\u00e9s en participation": {
+ "account_number": "188"
+ }
+ }
+ },
+ "2-Comptes d'immobilisations": {
+ "root_type": "Asset",
+ "20-Immobilisations incorporelles et frais d'\u00e9tablissement": {
+ "201-Frais d'\u00e9tablissement": {
+ "Frais de constitution": {
+ "account_number": "2011"
+ },
+ "2012-Frais de premier \u00e9tablissement": {
+ "Frais de prospection": {
+ "account_number": "20121"
+ },
+ "Frais de publicit\u00e9": {
+ "account_number": "20122"
+ }
+ },
+ "Frais d'augmentation de capital et d'op\u00e9rations diverses - fusions, scissions, transformations": {
+ "account_number": "2013"
+ }
+ },
+ "Frais de d\u00e9veloppement": {
+ "account_number": "203"
+ },
+ "Concessions et droits similaires, brevets, licences, marques, proc\u00e9d\u00e9s, solutions informatiques, droits et valeurs similaires": {
+ "account_number": "205"
+ },
+ "Droit au bail": {
+ "account_number": "206"
+ },
+ "Fonds commercial": {
+ "account_number": "207"
+ },
+ "208-Autres immobilisations incorporelles": {
+ "Mali de fusion sur actifs incorporels": {
+ "account_number": "2081"
+ }
+ }
+ },
+ "21-Immobilisations corporelles": {
+ "account_type": "Fixed Asset",
+ "211-Terrains": {
+ "account_type": "Fixed Asset",
+ "Terrains nus": {
+ "account_type": "Fixed Asset",
+ "account_number": "2111"
+ },
+ "Terrains am\u00e9nag\u00e9s": {
+ "account_type": "Fixed Asset",
+ "account_number": "2112"
+ },
+ "Sous-sols et sur-sols": {
+ "account_type": "Fixed Asset",
+ "account_number": "2113"
+ },
+ "Terrains de carri\u00e8res (Tr\u00e9fonds)": {
+ "account_type": "Fixed Asset",
+ "account_number": "2114"
+ },
+ "Terrains b\u00e2tis": {
+ "account_type": "Fixed Asset",
+ "account_number": "2115"
+ }
+ },
+ "Agencements et am\u00e9nagements de terrains (m\u00eame ventilation que celle du compte 211)": {
+ "account_type": "Fixed Asset",
+ "account_number": "212"
+ },
+ "213-Constructions": {
+ "account_type": "Fixed Asset",
+ "B\u00e2timents": {
+ "account_type": "Fixed Asset",
+ "account_number": "2131"
+ },
+ "Installations g\u00e9n\u00e9rales - agencements - am\u00e9nagements des constructions": {
+ "account_type": "Fixed Asset",
+ "account_number": "2135"
+ },
+ "Ouvrages d'infrastructure": {
+ "account_type": "Fixed Asset",
+ "account_number": "2138"
+ }
+ },
+ "Constructions sur sol d'autrui (m\u00eame ventilation que celle du compte 213)": {
+ "account_type": "Fixed Asset",
+ "account_number": "214"
+ },
+ "215-Installations techniques, mat\u00e9riels et outillages industriels": {
+ "account_type": "Fixed Asset",
+ "2151-Installations complexes sp\u00e9cialis\u00e9es": {
+ "account_type": "Fixed Asset",
+ "Installations complexes sp\u00e9cialis\u00e9es sur sol propre": {
+ "account_type": "Fixed Asset",
+ "account_number": "21511"
+ },
+ "Installations complexes sp\u00e9cialis\u00e9es sur sol d'autrui": {
+ "account_type": "Fixed Asset",
+ "account_number": "21514"
+ }
+ },
+ "2153-Installations \u00e0 caract\u00e8re sp\u00e9cifique": {
+ "account_type": "Fixed Asset",
+ "Installations \u00e0 caract\u00e8re sp\u00e9cifique sur sol propre": {
+ "account_type": "Fixed Asset",
+ "account_number": "21531"
+ },
+ "Installations \u00e0 caract\u00e8re sp\u00e9cifique sur sol d'autrui": {
+ "account_type": "Fixed Asset",
+ "account_number": "21534"
+ }
+ },
+ "Mat\u00e9riels industriels": {
+ "account_type": "Fixed Asset",
+ "account_number": "2154"
+ },
+ "Outillages industriels": {
+ "account_type": "Fixed Asset",
+ "account_number": "2155"
+ },
+ "Agencements et am\u00e9nagements des mat\u00e9riels et outillages industriels": {
+ "account_type": "Fixed Asset",
+ "account_number": "2157"
+ }
+ },
+ "218-Autres immobilisations corporelles": {
+ "account_type": "Fixed Asset",
+ "Installations g\u00e9n\u00e9rales, agencements, am\u00e9nagements divers": {
+ "account_type": "Fixed Asset",
+ "account_number": "2181"
+ },
+ "Mat\u00e9riel de transport": {
+ "account_type": "Fixed Asset",
+ "account_number": "2182"
+ },
+ "Mat\u00e9riel de bureau et mat\u00e9riel informatique": {
+ "account_type": "Fixed Asset",
+ "account_number": "2183"
+ },
+ "Mobilier": {
+ "account_type": "Fixed Asset",
+ "account_number": "2184"
+ },
+ "Cheptel": {
+ "account_type": "Fixed Asset",
+ "account_number": "2185"
+ },
+ "Emballages r\u00e9cup\u00e9rables": {
+ "account_type": "Fixed Asset",
+ "account_number": "2186"
+ },
+ "Mali de fusion sur actifs corporels": {
+ "account_type": "Fixed Asset",
+ "account_number": "2187"
+ }
+ }
+ },
+ "22-Immobilisations mises en concession": {
+ "Droits du conc\u00e9dant": {
+ "account_number": "229"
+ }
+ },
+ "23-Immobilisations en cours, avances et acomptes": {
+ "Immobilisations corporelles en cours": {
+ "account_number": "231"
+ },
+ "Immobilisations incorporelles en cours": {
+ "account_number": "232"
+ },
+ "Avances et acomptes vers\u00e9s sur commandes d'immobilisations incorporelles": {
+ "account_number": "237"
+ },
+ "Avances et acomptes vers\u00e9s sur commandes d'immobilisations corporelles": {
+ "account_number": "238"
+ }
+ },
+ "26-Participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "261-Titres de participation": {
+ "Actions": {
+ "account_number": "2611"
+ },
+ "Autres titres": {
+ "account_number": "2618"
+ }
+ },
+ "Titres \u00e9valu\u00e9s par \u00e9quivalence": {
+ "account_number": "262"
+ },
+ "266-Autres formes de participation": {
+ "Droits repr\u00e9sentatifs d'actifs nets remis en fiducie": {
+ "account_number": "2661"
+ }
+ },
+ "267-Cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des participations - groupe": {
+ "account_number": "2671"
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des participations - hors groupe": {
+ "account_number": "2674"
+ },
+ "Versements repr\u00e9sentatifs d'apports non capitalis\u00e9s - appel de fonds": {
+ "account_number": "2675"
+ },
+ "Avances consolidables": {
+ "account_number": "2676"
+ },
+ "Autres cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "account_number": "2677"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "2678"
+ }
+ },
+ "268-Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": {
+ "Principal": {
+ "account_number": "2681"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "2688"
+ }
+ },
+ "Versements restant \u00e0 effectuer sur titres de participation non lib\u00e9r\u00e9s": {
+ "account_number": "269"
+ }
+ },
+ "27-Autres immobilisations financi\u00e8res": {
+ "271-Titres immobilis\u00e9s autres que les titres immobilis\u00e9s de l'activit\u00e9 de portefeuille (droit de propri\u00e9t\u00e9)": {
+ "Actions": {
+ "account_number": "2711"
+ },
+ "Autres titres": {
+ "account_number": "2718"
+ }
+ },
+ "272-Titres immobilis\u00e9s (droit de cr\u00e9ance)": {
+ "Obligations": {
+ "account_number": "2721"
+ },
+ "Bons": {
+ "account_number": "2722"
+ }
+ },
+ "Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "273"
+ },
+ "274-Pr\u00eats": {
+ "Pr\u00eats participatifs": {
+ "account_number": "2741"
+ },
+ "Pr\u00eats aux associ\u00e9s": {
+ "account_number": "2742"
+ },
+ "Pr\u00eats au personnel": {
+ "account_number": "2743"
+ },
+ "Autres pr\u00eats": {
+ "account_number": "2748"
+ }
+ },
+ "275-D\u00e9p\u00f4ts et cautionnements vers\u00e9s": {
+ "D\u00e9p\u00f4ts": {
+ "account_number": "2751"
+ },
+ "Cautionnements": {
+ "account_number": "2755"
+ }
+ },
+ "276-Autres cr\u00e9ances immobilis\u00e9es": {
+ "Cr\u00e9ances diverses": {
+ "account_number": "2761"
+ },
+ "2768-Int\u00e9r\u00eats courus": {
+ "Int\u00e9r\u00eats courus sur titres immobilis\u00e9s (droit de cr\u00e9ance)": {
+ "account_number": "27682"
+ },
+ "Int\u00e9r\u00eats courus sur pr\u00eats": {
+ "account_number": "27684"
+ },
+ "Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements": {
+ "account_number": "27685"
+ },
+ "Int\u00e9r\u00eats courus sur cr\u00e9ances diverses": {
+ "account_number": "27688"
+ }
+ }
+ },
+ "277-(Actions propres ou parts propres)": {
+ "Actions propres ou parts propres": {
+ "account_number": "2771"
+ },
+ "Actions propres ou parts propres en voie d'annulation": {
+ "account_number": "2772"
+ }
+ },
+ "Mali de fusion sur actifs financiers": {
+ "account_number": "278"
+ },
+ "Versements restant \u00e0 effectuer sur titres immobilis\u00e9s non lib\u00e9r\u00e9s": {
+ "account_number": "279"
+ }
+ },
+ "28-Amortissements des immobilisations": {
+ "account_type": "Accumulated Depreciation",
+ "280-Amortissements des immobilisations incorporelles et des frais d'\u00e9tablissement (m\u00eame ventilation que celle du compte 20)": {
+ "account_type": "Accumulated Depreciation",
+ "Frais d'\u00e9tablissement (m\u00eame ventilation que celle du compte 201)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2801"
+ },
+ "Frais de d\u00e9veloppement": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2803"
+ },
+ "Concessions et droits similaires, brevets, licences, solutions informatiques, droits et valeurs similaires": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2805"
+ },
+ "Droit au bail": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2806"
+ },
+ "Fonds commercial": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2807"
+ },
+ "Autres immobilisations incorporelles": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2808"
+ }
+ },
+ "281-Amortissements des immobilisations corporelles (m\u00eame ventilation que celle du compte 21)": {
+ "account_type": "Accumulated Depreciation",
+ "Agencements, am\u00e9nagements de terrains (m\u00eame ventilation que celle du compte 212)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2812"
+ },
+ "Constructions (m\u00eame ventilation que celle du compte 213)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2813"
+ },
+ "Constructions sur sol d'autrui (m\u00eame ventilation que celle du compte 214)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2814"
+ },
+ "Installations, mat\u00e9riel et outillage industriels (m\u00eame ventilation que celle du compte 215)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2815"
+ },
+ "2818-Autres immobilisations corporelles (m\u00eame ventilation que celle du compte 218)": {
+ "account_type": "Accumulated Depreciation",
+ "Amortissement du mali de fusion sur actifs corporels": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "28187"
+ }
+ }
+ },
+ "Amortissements des immobilisations mises en concession": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "282"
+ }
+ },
+ "29-D\u00e9pr\u00e9ciations des immobilisations": {
+ "290-D\u00e9pr\u00e9ciations des immobilisations incorporelles": {
+ "Frais d'\u00e9tablissement": {
+ "account_number": "2901"
+ },
+ "Frais de d\u00e9veloppement": {
+ "account_number": "2903"
+ },
+ "Marques, proc\u00e9d\u00e9s, droits et valeurs similaires": {
+ "account_number": "2905"
+ },
+ "Droit au bail": {
+ "account_number": "2906"
+ },
+ "Fonds commercial": {
+ "account_number": "2907"
+ },
+ "2908-Autres immobilisations incorporelles": {
+ "D\u00e9pr\u00e9ciation du mali de fusion sur actifs incorporels": {
+ "account_number": "29081"
+ }
+ }
+ },
+ "291-D\u00e9pr\u00e9ciations des immobilisations corporelles": {
+ "Terrains": {
+ "account_number": "2911"
+ },
+ "Agencements et am\u00e9nagements de terrains": {
+ "account_number": "2912"
+ },
+ "Constructions": {
+ "account_number": "2913"
+ },
+ "Constructions sur sol d'autrui": {
+ "account_number": "2914"
+ },
+ "Installations techniques, mat\u00e9riels et outillages industriels": {
+ "account_number": "2915"
+ },
+ "2918-Autres immobilisations corporelles": {
+ "D\u00e9pr\u00e9ciation du mali de fusion sur actifs corporels": {
+ "account_number": "29187"
+ }
+ }
+ },
+ "D\u00e9pr\u00e9ciations des immobilisations mises en concession": {
+ "account_number": "292"
+ },
+ "293-D\u00e9pr\u00e9ciations des immobilisations en cours": {
+ "Immobilisations corporelles en cours": {
+ "account_number": "2931"
+ },
+ "Immobilisations incorporelles en cours": {
+ "account_number": "2932"
+ }
+ },
+ "296-D\u00e9pr\u00e9ciations des participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "Titres de participation": {
+ "account_number": "2961"
+ },
+ "Titres \u00e9valu\u00e9s par \u00e9quivalence": {
+ "account_number": "2962"
+ },
+ "Autres formes de participation": {
+ "account_number": "2966"
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des participations (m\u00eame ventilation que celle du compte 267)": {
+ "account_number": "2967"
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation (m\u00eame ventilation que celle du compte 268)": {
+ "account_number": "2968"
+ }
+ },
+ "297-D\u00e9pr\u00e9ciations des autres immobilisations financi\u00e8res": {
+ "Titres immobilis\u00e9s autres que les titres immobilis\u00e9s de l'activit\u00e9 de portefeuille (droit de propri\u00e9t\u00e9)": {
+ "account_number": "2971"
+ },
+ "Titres immobilis\u00e9s (droit de cr\u00e9ance)": {
+ "account_number": "2972"
+ },
+ "Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "2973"
+ },
+ "Pr\u00eats": {
+ "account_number": "2974"
+ },
+ "D\u00e9p\u00f4ts et cautionnements vers\u00e9s": {
+ "account_number": "2975"
+ },
+ "Autres cr\u00e9ances immobilis\u00e9es": {
+ "account_number": "2976"
+ }
+ }
+ }
+ },
+ "3-Comptes de stocks et en-cours": {
+ "root_type": "Asset",
+ "Mati\u00e8res premi\u00e8res et fournitures": {
+ "account_number": "31"
+ },
+ "32-Autres approvisionnements": {
+ "Mati\u00e8res consommables": {
+ "account_number": "321"
+ },
+ "322-Fournitures consommables": {
+ "Combustibles": {
+ "account_number": "3221"
+ },
+ "Produits d'entretien": {
+ "account_number": "3222"
+ },
+ "Fournitures d'atelier et d'usine": {
+ "account_number": "3223"
+ },
+ "Fournitures de magasin": {
+ "account_number": "3224"
+ },
+ "Fournitures de bureau": {
+ "account_number": "3225"
+ }
+ },
+ "326-Emballages": {
+ "Emballages perdus": {
+ "account_number": "3261"
+ },
+ "Emballages r\u00e9cup\u00e9rables non identifiables": {
+ "account_number": "3265"
+ },
+ "Emballages \u00e0 usage mixte": {
+ "account_number": "3267"
+ }
+ }
+ },
+ "33-En-cours de production de biens": {
+ "Produits en cours": {
+ "account_number": "331"
+ },
+ "Travaux en cours": {
+ "account_number": "335"
+ }
+ },
+ "34-En-cours de production de services": {
+ "\u00c9tudes en cours": {
+ "account_number": "341"
+ },
+ "Prestations de services en cours": {
+ "account_number": "345"
+ }
+ },
+ "35-Stocks de produits": {
+ "Produits interm\u00e9diaires": {
+ "account_number": "351"
+ },
+ "Produits finis": {
+ "account_number": "355"
+ },
+ "358-Produits r\u00e9siduels ou mati\u00e8res de r\u00e9cup\u00e9ration": {
+ "D\u00e9chets": {
+ "account_number": "3581"
+ },
+ "Rebuts": {
+ "account_number": "3585"
+ },
+ "Mati\u00e8res de r\u00e9cup\u00e9ration": {
+ "account_number": "3586"
+ }
+ }
+ },
+ "Compte \u00e0 ouvrir, le cas \u00e9ch\u00e9ant, sous l'intitul\u00e9 \u00ab Stocks provenant d'immobilisations \u00bb": {
+ "account_number": "36"
+ },
+ "Stocks de marchandises": {
+ "account_type": "Stock",
+ "account_number": "37"
+ },
+ "Le compte 38 peut \u00eatre utilis\u00e9 pour comptabiliser les stocks en voie d'acheminement, mis en d\u00e9p\u00f4t ou donn\u00e9s en consignation": {
+ "account_number": "38"
+ },
+ "39-D\u00e9pr\u00e9ciations des stocks et en-cours": {
+ "D\u00e9pr\u00e9ciations des mati\u00e8res premi\u00e8res et fournitures": {
+ "account_number": "391"
+ },
+ "D\u00e9pr\u00e9ciations des autres approvisionnements": {
+ "account_number": "392"
+ },
+ "D\u00e9pr\u00e9ciations des en-cours de production de biens": {
+ "account_number": "393"
+ },
+ "D\u00e9pr\u00e9ciations des en-cours de production de services": {
+ "account_number": "394"
+ },
+ "D\u00e9pr\u00e9ciations des stocks de produits": {
+ "account_number": "395"
+ },
+ "D\u00e9pr\u00e9ciations des stocks de marchandises": {
+ "account_number": "397"
+ }
+ }
+ },
+ "4-Comptes de tiers (ACTIF)": {
+ "root_type": "Asset",
+ "Fournisseurs et comptes rattach\u00e9s (ACTIF)": {
+ "409-Fournisseurs d\u00e9biteurs": {
+ "Fournisseurs - Avances et acomptes vers\u00e9s sur commandes": {
+ "account_number": "4091"
+ },
+ "Fournisseurs - Cr\u00e9ances pour emballages et mat\u00e9riel \u00e0 rendre": {
+ "account_number": "4096"
+ },
+ "4097-Fournisseurs - Autres avoirs": {
+ "Fournisseurs d'exploitation": {
+ "account_number": "40971"
+ },
+ "Fournisseurs d'immobilisations": {
+ "account_number": "40974"
+ }
+ },
+ "Rabais, remises, ristournes \u00e0 obtenir et autres avoirs non encore re\u00e7us": {
+ "account_number": "4098"
+ }
+ }
+ },
+ "41-Clients et comptes rattach\u00e9s (ACTIF)": {
+ "account_type": "Receivable",
+ "411-Clients": {
+ "account_type": "Receivable",
+ "Clients - Ventes de biens ou de prestations de services": {
+ "account_type": "Receivable",
+ "account_number": "4111"
+ },
+ "Clients - Retenues de garantie": {
+ "account_type": "Receivable",
+ "account_number": "4117"
+ }
+ },
+ "Clients - Effets \u00e0 recevoir": {
+ "account_type": "Receivable",
+ "account_number": "413"
+ },
+ "Clients douteux ou litigieux": {
+ "account_type": "Receivable",
+ "account_number": "416"
+ },
+ "418-Clients - Produits non encore factur\u00e9s": {
+ "account_type": "Receivable",
+ "Clients - Factures \u00e0 \u00e9tablir": {
+ "account_type": "Receivable",
+ "account_number": "4181"
+ },
+ "Clients - Int\u00e9r\u00eats courus": {
+ "account_type": "Receivable",
+ "account_number": "4188"
+ }
+ }
+ },
+ "42-Personnel et comptes rattach\u00e9s (ACTIF)": {
+ "Personnel - Avances et acomptes et autres comptes d\u00e9biteurs": {
+ "account_number": "425"
+ }
+ },
+ "44-\u00c9tat et autres collectivit\u00e9s publiques (ACTIF)": {
+ "\u00c9tat - Subventions et aides \u00e0 recevoir": {
+ "account_number": "441"
+ },
+ "445-\u00c9tat - Taxes sur le chiffre d'affaires": {
+ "TVA due intracommunautaire": {
+ "account_number": "4452",
+ "account_type": "Tax",
+ "tax_rate": -20
+ },
+ "TVA à décaisser": {
+ "account_number": "44551"
+ },
+ "4456-Taxes sur le chiffre d'affaires d\u00e9ductibles": {
+ "TVA sur immobilisations": {
+ "account_number": "44562",
+ "account_type": "Tax"
+ },
+ "TVA transf\u00e9r\u00e9e par d'autres entit\u00e9s": {
+ "account_number": "44563",
+ "account_type": "Tax"
+ },
+ "TVA sur autres biens et services": {
+ "account_number": "44566",
+ "account_type": "Tax",
+ "tax_rate": 20
+ },
+ "Cr\u00e9dit de TVA \u00e0 reporter": {
+ "account_number": "44567",
+ "account_type": "Tax"
+ },
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44568",
+ "account_type": "Tax"
+ },
+ "TVA 20% Déductible": {
+ "account_number": "445620",
+ "account_type": "Tax",
+ "tax_rate": 20
+ },
+ "TVA 10% Déductible": {
+ "account_number": "445610",
+ "account_type": "Tax",
+ "tax_rate": 10
+ },
+ "TVA 5.5% Déductible": {
+ "account_number": "445655",
+ "account_type": "Tax",
+ "tax_rate": 5.5
+ },
+ "TVA 2.1% Déductible": {
+ "account_number": "445621",
+ "account_type": "Tax",
+ "tax_rate": 2.1
+ }
+ },
+ "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente": {
+ "Acomptes - R\u00e9gime simplifi\u00e9 d'imposition": {
+ "account_number": "44581"
+ },
+ "Remboursement de taxes sur le chiffre d'affaires demand\u00e9": {
+ "account_number": "44583"
+ },
+ "Taxes sur le chiffre d'affaires sur factures non parvenues": {
+ "account_number": "44586"
+ }
+ }
+ },
+ "448-\u00c9tat - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "\u00c9tat - Produits \u00e0 recevoir": {
+ "account_number": "4482"
+ }
+ }
+ },
+ "45-Groupe et associ\u00e9s (ACTIF)": {
+ "456-Associ\u00e9s - Op\u00e9rations sur le capital": {
+ "4562-Apporteurs - Capital appel\u00e9, non vers\u00e9": {
+ "Actionnaires - Capital souscrit et appel\u00e9, non vers\u00e9": {
+ "account_number": "45621"
+ },
+ "Associ\u00e9s - Capital appel\u00e9, non vers\u00e9": {
+ "account_number": "45625"
+ }
+ }
+ }
+ },
+ "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (ACTIF)": {
+ "Cr\u00e9ances sur cessions d'immobilisations": {
+ "account_number": "462"
+ },
+ "Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "465"
+ },
+ "Divers comptes d\u00e9biteurs et produits \u00e0 recevoir": {
+ "account_number": "467"
+ }
+ },
+ "47-Comptes transitoires ou d'attente (ACTIF)": {
+ "476-Diff\u00e9rence de conversion - Actif": {
+ "Diminution des cr\u00e9ances": {
+ "account_number": "4761"
+ },
+ "Augmentation des dettes": {
+ "account_number": "4762"
+ },
+ "Diff\u00e9rences compens\u00e9es par couverture de change": {
+ "account_number": "4768"
+ }
+ },
+ "478-Autres comptes transitoires": {
+ "Mali de fusion sur actif circulant": {
+ "account_number": "4781"
+ }
+ }
+ },
+ "48-Comptes de r\u00e9gularisation (ACTIF)": {
+ "Frais d'\u00e9mission des emprunts": {
+ "account_number": "481"
+ },
+ "Charges constat\u00e9es d'avance": {
+ "account_number": "486"
+ },
+ "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits": {
+ "Charges": {
+ "account_number": "4886"
+ }
+ }
+ },
+ "49-D\u00e9pr\u00e9ciations des comptes de tiers (ACTIF)": {
+ "495-D\u00e9pr\u00e9ciations des comptes du groupe et des associ\u00e9s": {
+ "Comptes du groupe": {
+ "account_number": "4951"
+ },
+ "Comptes courants des associ\u00e9s": {
+ "account_number": "4955"
+ },
+ "Op\u00e9rations faites en commun et en GIE": {
+ "account_number": "4958"
+ }
+ },
+ "496-D\u00e9pr\u00e9ciations des comptes de d\u00e9biteurs divers": {
+ "Cr\u00e9ances sur cessions d'immobilisations": {
+ "account_number": "4962"
+ },
+ "Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "4965"
+ },
+ "Autres comptes d\u00e9biteurs": {
+ "account_number": "4967"
+ }
+ }
+ }
+ },
+ "4-Comptes de tiers (PASSIF)": {
+ "root_type": "Liability",
+ "40-Fournisseurs et comptes rattach\u00e9s (PASSIF)": {
+ "account_type": "Payable",
+ "401-Fournisseurs": {
+ "Fournisseurs - Achats de biens et prestations de services": {
+ "account_type": "Payable",
+ "account_number": "4011"
+ },
+ "Fournisseurs - Retenues de garantie": {
+ "account_type": "Payable",
+ "account_number": "4017"
+ }
+ },
+ "Fournisseurs - Effets \u00e0 payer": {
+ "account_type": "Payable",
+ "account_number": "403"
+ },
+ "404-Fournisseurs d'immobilisations": {
+ "account_type": "Payable",
+ "Fournisseurs - Achats d'immobilisations": {
+ "account_type": "Payable",
+ "account_number": "4041"
+ },
+ "Fournisseurs d'immobilisations - Retenues de garantie": {
+ "account_type": "Payable",
+ "account_number": "4047"
+ }
+ },
+ "Fournisseurs d'immobilisations - Effets \u00e0 payer": {
+ "account_number": "405"
+ },
+ "408-Fournisseurs - Factures non parvenues": {
+ "account_type": "Stock Received But Not Billed",
+ "Fournisseurs": {
+ "account_type": "Stock Received But Not Billed",
+ "account_number": "4081"
+ },
+ "Fournisseurs d'immobilisations": {
+ "account_type": "Asset Received But Not Billed",
+ "account_number": "4084"
+ },
+ "Fournisseurs - Int\u00e9r\u00eats courus": {
+ "account_type": "Stock Received But Not Billed",
+ "account_number": "4088"
+ }
+ }
+ },
+ "41-Clients et comptes rattach\u00e9s (PASSIF)": {
+ "419-Clients cr\u00e9diteurs": {
+ "Clients - Avances et acomptes re\u00e7us sur commandes": {
+ "account_number": "4191",
+ "account_type": "Income Account"
+ },
+ "Clients - Dettes sur emballages et mat\u00e9riels consign\u00e9s": {
+ "account_number": "4196"
+ },
+ "Clients - Autres avoirs": {
+ "account_number": "4197"
+ },
+ "Rabais, remises, ristournes \u00e0 accorder et autres avoirs \u00e0 \u00e9tablir": {
+ "account_number": "4198"
+ }
+ }
+ },
+ "42-Personnel et comptes rattach\u00e9s (PASSIF)": {
+ "Personnel - R\u00e9mun\u00e9rations dues": {
+ "account_number": "421"
+ },
+ "Comit\u00e9 social et \u00e9conomique": {
+ "account_number": "422"
+ },
+ "424-Participation des salari\u00e9s aux r\u00e9sultats": {
+ "R\u00e9serve sp\u00e9ciale": {
+ "account_number": "4246"
+ },
+ "Comptes courants": {
+ "account_number": "4248"
+ }
+ },
+ "Personnel - D\u00e9p\u00f4ts": {
+ "account_number": "426"
+ },
+ "Personnel - Oppositions": {
+ "account_number": "427"
+ },
+ "428-Personnel - Charges \u00e0 payer": {
+ "Dettes provisionn\u00e9es pour cong\u00e9s \u00e0 payer": {
+ "account_number": "4282"
+ },
+ "Dettes provisionn\u00e9es pour participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "4284"
+ },
+ "Autres charges \u00e0 payer": {
+ "account_number": "4286"
+ }
+ }
+ },
+ "43-S\u00e9curit\u00e9 sociale et autres organismes sociaux (PASSIF)": {
+ "S\u00e9curit\u00e9 sociale": {
+ "account_number": "431"
+ },
+ "Autres organismes sociaux": {
+ "account_number": "437"
+ },
+ "438-Organismes sociaux - Charges \u00e0 payer": {
+ "Charges sociales sur cong\u00e9s \u00e0 payer": {
+ "account_number": "4382"
+ },
+ "Autres charges \u00e0 payer": {
+ "account_number": "4386"
+ }
+ }
+ },
+ "44-\u00c9tat et autres collectivit\u00e9s publiques (PASSIF)": {
+ "Contributions, imp\u00f4ts et taxes recouvr\u00e9s pour le compte de l'\u00c9tat": {
+ "account_number": "442"
+ },
+ "\u00c9tat - Imp\u00f4ts sur les b\u00e9n\u00e9fices": {
+ "account_number": "444"
+ },
+ "445-\u00c9tat - Taxes sur le chiffre d'affaires": {
+ "4455-Taxes sur le chiffre d'affaires \u00e0 d\u00e9caisser": {
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44558"
+ }
+ },
+ "4457-Taxes sur le chiffre d'affaires collect\u00e9es": {
+ "44571-TVA collect\u00e9e": {
+ "account_type": "Tax",
+ "TVA 20% Collectée": {
+ "account_type": "Tax",
+ "account_number": "445720",
+ "tax_rate": 20
+ },
+ "TVA 10% Collectée": {
+ "account_type": "Tax",
+ "account_number": "445710",
+ "tax_rate": 10
+ },
+ "TVA 5.5% Collectée": {
+ "account_type": "Tax",
+ "account_number": "445755",
+ "tax_rate": 5.5
+ },
+ "TVA 2.1% Collectée": {
+ "account_type": "Tax",
+ "account_number": "445721",
+ "tax_rate": 2.1
+ }
+ },
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44578"
+ }
+ },
+ "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente": {
+ "TVA r\u00e9cup\u00e9r\u00e9e d'avance": {
+ "account_number": "44584"
+ },
+ "Taxes sur le chiffre d'affaires sur factures \u00e0 \u00e9tablir": {
+ "account_number": "44587"
+ }
+ }
+ },
+ "Obligations cautionn\u00e9es": {
+ "account_number": "446"
+ },
+ "Autres imp\u00f4ts, taxes et versements assimil\u00e9s": {
+ "account_number": "447"
+ },
+ "Quotas d'\u00e9mission \u00e0 acqu\u00e9rir": {
+ "account_number": "449"
+ }
+ },
+ "45-Groupe et associ\u00e9s (PASSIF)": {
+ "Groupe": {
+ "account_number": "451"
+ },
+ "455-Associ\u00e9s - Comptes courants": {
+ "Principal": {
+ "account_number": "4551"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "4558"
+ }
+ },
+ "456-Associ\u00e9s - Op\u00e9rations sur le capital": {
+ "4561-Associ\u00e9s - Comptes d'apport en soci\u00e9t\u00e9": {
+ "Apports en nature": {
+ "account_number": "45611"
+ },
+ "Apports en num\u00e9raire": {
+ "account_number": "45615"
+ }
+ },
+ "Associ\u00e9s - Versements re\u00e7us sur augmentation de capital": {
+ "account_number": "4563"
+ },
+ "Associ\u00e9s - Versements anticip\u00e9s": {
+ "account_number": "4564"
+ },
+ "Actionnaires d\u00e9faillants": {
+ "account_number": "4566"
+ },
+ "Associ\u00e9s - Capital \u00e0 rembourser": {
+ "account_number": "4567"
+ }
+ },
+ "Associ\u00e9s - Dividendes \u00e0 payer": {
+ "account_number": "457"
+ },
+ "458-Associ\u00e9s - Op\u00e9rations faites en commun et en GIE": {
+ "Op\u00e9rations courantes": {
+ "account_number": "4581"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "4588"
+ }
+ }
+ },
+ "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (PASSIF)": {
+ "Dettes sur acquisitions de valeurs mobili\u00e8res de placement": {
+ "account_number": "464"
+ },
+ "Divers comptes cr\u00e9diteurs et charges \u00e0 payer": {
+ "account_number": "468"
+ }
+ },
+ "47-Comptes transitoires ou d'attente (PASSIF)": {
+ "Comptes d'attente": {
+ "account_type": "Temporary",
+ "account_number": "471"
+ },
+ "477-Diff\u00e9rences de conversion - Passif": {
+ "Augmentation des cr\u00e9ances": {
+ "account_number": "4771"
+ },
+ "Diminution des dettes": {
+ "account_number": "4772"
+ },
+ "Diff\u00e9rences compens\u00e9es par couverture de change": {
+ "account_number": "4778"
+ }
+ },
+ "Autres comptes transitoires": {
+ "account_number": "478"
+ }
+ },
+ "48-Comptes de r\u00e9gularisation (PASSIF)": {
+ "Produits constat\u00e9s d'avance": {
+ "account_number": "487"
+ },
+ "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits": {
+ "Produits": {
+ "account_number": "4887"
+ }
+ }
+ },
+ "D\u00e9pr\u00e9ciations des comptes de tiers (PASSIF)": {
+ "account_number": "49"
+ }
+ },
+ "5-Comptes financiers": {
+ "root_type": "Asset",
+ "50-Valeurs mobili\u00e8res de placement": {
+ "502-Actions propres": {
+ "Actions destin\u00e9es \u00e0 \u00eatre attribu\u00e9es aux employ\u00e9s et affect\u00e9es \u00e0 des plans d\u00e9termin\u00e9s": {
+ "account_number": "5021"
+ },
+ "Actions disponibles pour \u00eatre attribu\u00e9es aux employ\u00e9s ou pour la r\u00e9gularisation des cours de bourse": {
+ "account_number": "5022"
+ }
+ },
+ "503-Actions": {
+ "Titres cot\u00e9s": {
+ "account_number": "5031"
+ },
+ "Titres non cot\u00e9s": {
+ "account_number": "5035"
+ }
+ },
+ "Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {
+ "account_number": "504"
+ },
+ "Obligations et bons \u00e9mis par la soci\u00e9t\u00e9 et rachet\u00e9s par elle": {
+ "account_number": "505"
+ },
+ "506-Obligations": {
+ "Titres cot\u00e9s": {
+ "account_number": "5061"
+ },
+ "Titres non cot\u00e9s": {
+ "account_number": "5065"
+ }
+ },
+ "Bons du Tr\u00e9sor et bons de caisse \u00e0 court terme": {
+ "account_number": "507"
+ },
+ "508-Autres valeurs mobili\u00e8res de placement et autres cr\u00e9ances assimil\u00e9es": {
+ "Autres valeurs mobili\u00e8res": {
+ "account_number": "5081"
+ },
+ "Bons de souscription": {
+ "account_number": "5082"
+ },
+ "Int\u00e9r\u00eats courus sur obligations, bons et valeurs assimil\u00e9s": {
+ "account_number": "5088"
+ }
+ },
+ "Versements restant \u00e0 effectuer sur valeurs mobili\u00e8res de placement non lib\u00e9r\u00e9es": {
+ "account_number": "509"
+ }
+ },
+ "51-Banques, \u00e9tablissements financiers et assimil\u00e9s": {
+ "511-Valeurs \u00e0 l'encaissement": {
+ "Coupons \u00e9chus \u00e0 l'encaissement": {
+ "account_number": "5111"
+ },
+ "Ch\u00e8ques \u00e0 encaisser": {
+ "account_number": "5112"
+ },
+ "Effets \u00e0 l'encaissement": {
+ "account_number": "5113"
+ },
+ "Effets \u00e0 l'escompte": {
+ "account_number": "5114"
+ }
+ },
+ "512-Banques": {
+ "account_type": "Bank",
+ "Comptes en euros": {
+ "account_type": "Bank",
+ "account_number": "5121"
+ },
+ "Comptes en devises": {
+ "account_type": "Bank",
+ "account_number": "5124"
+ }
+ },
+ "Autres organismes financiers": {
+ "account_number": "517"
+ },
+ "518-Int\u00e9r\u00eats courus": {
+ "Int\u00e9r\u00eats courus \u00e0 payer": {
+ "account_number": "5181"
+ },
+ "Int\u00e9r\u00eats courus \u00e0 recevoir": {
+ "account_number": "5188"
+ }
+ },
+ "519-Concours bancaires courants": {
+ "Cr\u00e9dit de mobilisation de cr\u00e9ances commerciales": {
+ "account_number": "5191"
+ },
+ "Mobilisation de cr\u00e9ances n\u00e9es \u00e0 l'\u00e9tranger": {
+ "account_number": "5193"
+ },
+ "Int\u00e9r\u00eats courus sur concours bancaires courants": {
+ "account_number": "5198"
+ }
+ }
+ },
+ "52-Instruments financiers \u00e0 terme et jetons d\u00e9tenus": {
+ "Instruments financiers \u00e0 terme": {
+ "account_number": "521"
+ },
+ "Jetons d\u00e9tenus": {
+ "account_number": "522"
+ },
+ "Jetons auto-d\u00e9tenus": {
+ "account_number": "523"
+ },
+ "Jetons emprunt\u00e9s": {
+ "account_number": "524"
+ }
+ },
+ "53-Caisse": {
+ "account_type": "Cash",
+ "Caisse": {
+ "account_type": "Cash",
+ "account_number": "530"
+ }
+ },
+ "Virements internes": {
+ "account_number": "58"
+ },
+ "59-D\u00e9pr\u00e9ciations des comptes financiers": {
+ "590-D\u00e9pr\u00e9ciations des valeurs mobili\u00e8res de placement": {
+ "Actions": {
+ "account_number": "5903"
+ },
+ "Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {
+ "account_number": "5904"
+ },
+ "Obligations": {
+ "account_number": "5906"
+ },
+ "Autres valeurs mobili\u00e8res de placement et cr\u00e9ances assimil\u00e9es": {
+ "account_number": "5908"
+ }
+ }
+ }
+ },
+ "6-Comptes de charges": {
+ "root_type": "Expense",
+ "60-Achats (sauf 603)": {
+ "Achats stock\u00e9s - Mati\u00e8res premi\u00e8res et fournitures": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "601"
+ },
+ "602-Achats stock\u00e9s - Autres approvisionnements": {
+ "Mati\u00e8res consommables": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6021"
+ },
+ "6022-Fournitures consommables": {
+ "account_type": "Cost of Goods Sold",
+ "Combustibles": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60221"
+ },
+ "Produits d'entretien": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60222"
+ },
+ "Fournitures d'atelier et d'usine": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60223"
+ },
+ "Fournitures de magasin": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60224"
+ },
+ "Fourniture de bureau": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60225"
+ }
+ },
+ "6026-Emballages": {
+ "account_type": "Cost of Goods Sold",
+ "Emballages perdus": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60261"
+ },
+ "Malis sur emballage": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60262"
+ },
+ "Emballages r\u00e9cup\u00e9rables non identifiables": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60265"
+ },
+ "Emballages \u00e0 usage mixte": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60267"
+ }
+ }
+ },
+ "Achats d'\u00e9tudes et prestations de services": {
+ "account_number": "604"
+ },
+ "Achats de mat\u00e9riel, \u00e9quipements et travaux": {
+ "account_number": "605"
+ },
+ "606-Achats non stock\u00e9s de mati\u00e8re et fournitures": {
+ "account_type": "Cost of Goods Sold",
+ "Fournitures non stockables (eau, \u00e9nergie, etc.)": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6061"
+ },
+ "Fournitures d'entretien et de petit \u00e9quipement": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6063"
+ },
+ "Fournitures administratives": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6064"
+ },
+ "Autres mati\u00e8res et fournitures": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6068"
+ }
+ },
+ "Achats de marchandises": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "607"
+ },
+ "Compte r\u00e9serv\u00e9, le cas \u00e9ch\u00e9ant, au regroupement des frais accessoires incorpor\u00e9s aux achats": {
+ "account_number": "608",
+ "account_type": "Expenses Included In Valuation"
+ },
+ "609-Rabais, remises et ristournes obtenus sur achats (m\u00eame ventilation que celle du compte 60)": {
+ "Rabais, remises et ristournes non affect\u00e9s": {
+ "account_number": "6098"
+ }
+ }
+ },
+ "603-Variation des stocks d'approvisionnements et de marchandises": {
+ "account_type": "Stock Adjustment",
+ "Variation des stocks de mati\u00e8res premi\u00e8res et fournitures": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6031"
+ },
+ "Variation des stocks des autres approvisionnements": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6032"
+ },
+ "Variation des stocks de marchandises": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6037"
+ }
+ },
+ "61-Services ext\u00e9rieurs": {
+ "Sous-traitance g\u00e9n\u00e9rale": {
+ "account_number": "611"
+ },
+ "612-Redevances de cr\u00e9dit-bail": {
+ "Cr\u00e9dit-bail mobilier": {
+ "account_number": "6122"
+ },
+ "Cr\u00e9dit-bail immobilier": {
+ "account_number": "6125"
+ }
+ },
+ "613-Locations": {
+ "Locations immobili\u00e8res": {
+ "account_number": "6132"
+ },
+ "Locations mobili\u00e8res": {
+ "account_number": "6135"
+ }
+ },
+ "Charges locatives et de copropri\u00e9t\u00e9": {
+ "account_number": "614"
+ },
+ "615-Entretien et r\u00e9paration": {
+ "Entretien et r\u00e9paration sur biens immobiliers": {
+ "account_number": "6152"
+ },
+ "Entretien et r\u00e9paration sur biens mobiliers": {
+ "account_number": "6155"
+ },
+ "Maintenance": {
+ "account_number": "6156"
+ }
+ },
+ "616-Primes d'assurances": {
+ "Multirisques": {
+ "account_number": "6161"
+ },
+ "Assurance obligatoire dommage construction": {
+ "account_number": "6162"
+ },
+ "6163-Assurance - transport": {
+ "sur achats": {
+ "account_number": "61636"
+ },
+ "sur ventes": {
+ "account_number": "61637"
+ },
+ "sur autres biens": {
+ "account_number": "61638"
+ }
+ },
+ "Risques d'exploitation": {
+ "account_number": "6164"
+ },
+ "Insolvabilit\u00e9 clients": {
+ "account_number": "6165"
+ }
+ },
+ "\u00c9tudes et recherches": {
+ "account_number": "617"
+ },
+ "618-Divers": {
+ "Documentation g\u00e9n\u00e9rale": {
+ "account_number": "6181"
+ },
+ "Documentation technique": {
+ "account_number": "6183"
+ },
+ "Frais de colloques, s\u00e9minaires, conf\u00e9rences": {
+ "account_number": "6185"
+ }
+ },
+ "Rabais, remises et ristournes obtenus sur services ext\u00e9rieurs": {
+ "account_number": "619"
+ }
+ },
+ "62-Autres services ext\u00e9rieurs": {
+ "621-Personnel ext\u00e9rieur \u00e0 l'entit\u00e9": {
+ "Personnel int\u00e9rimaire": {
+ "account_number": "6211"
+ },
+ "Personnel d\u00e9tach\u00e9 ou pr\u00eat\u00e9 \u00e0 l'entit\u00e9": {
+ "account_number": "6214"
+ }
+ },
+ "622-R\u00e9mun\u00e9rations d'interm\u00e9diaires et honoraires": {
+ "Commissions et courtages sur achats": {
+ "account_number": "6221"
+ },
+ "Commissions et courtages sur ventes": {
+ "account_number": "6222"
+ },
+ "R\u00e9mun\u00e9rations des transitaires": {
+ "account_number": "6224"
+ },
+ "R\u00e9mun\u00e9rations d'affacturage": {
+ "account_number": "6225"
+ },
+ "Honoraires": {
+ "account_number": "6226"
+ },
+ "Frais d'actes et de contentieux": {
+ "account_number": "6227"
+ },
+ "Divers": {
+ "account_number": "6228"
+ }
+ },
+ "623-Publicit\u00e9, publications, relations publiques": {
+ "Annonces et insertions": {
+ "account_number": "6231"
+ },
+ "\u00c9chantillons": {
+ "account_number": "6232"
+ },
+ "Foires et expositions": {
+ "account_number": "6233"
+ },
+ "Cadeaux \u00e0 la client\u00e8le": {
+ "account_number": "6234"
+ },
+ "Primes": {
+ "account_number": "6235"
+ },
+ "Catalogues et imprim\u00e9s": {
+ "account_number": "6236"
+ },
+ "Publications": {
+ "account_number": "6237"
+ },
+ "Divers (pourboires, dons courants)": {
+ "account_number": "6238"
+ }
+ },
+ "624-Transports de biens et transports collectifs du personnel": {
+ "Transports sur achats": {
+ "account_number": "6241",
+ "account_type": "Chargeable"
+ },
+ "Transports sur ventes": {
+ "account_type": "Chargeable",
+ "account_number": "6242"
+ },
+ "Transports entre \u00e9tablissements ou chantiers": {
+ "account_number": "6243"
+ },
+ "Transports administratifs": {
+ "account_number": "6244"
+ },
+ "Transports collectifs du personnel": {
+ "account_number": "6247"
+ },
+ "Divers": {
+ "account_number": "6248"
+ }
+ },
+ "625-D\u00e9placements, missions et r\u00e9ceptions": {
+ "Voyages et d\u00e9placements": {
+ "account_number": "6251"
+ },
+ "Frais de d\u00e9m\u00e9nagement": {
+ "account_number": "6255"
+ },
+ "Missions": {
+ "account_number": "6256"
+ },
+ "R\u00e9ceptions": {
+ "account_number": "6257"
+ }
+ },
+ "Frais postaux et de t\u00e9l\u00e9communications": {
+ "account_number": "626"
+ },
+ "627-Services bancaires et assimil\u00e9s": {
+ "Frais sur titres (achat, vente, garde)": {
+ "account_number": "6271"
+ },
+ "Commissions et frais sur \u00e9mission d'emprunts": {
+ "account_number": "6272"
+ },
+ "Frais sur effets": {
+ "account_number": "6275"
+ },
+ "Location de coffres": {
+ "account_number": "6276"
+ },
+ "Autres frais et commissions sur prestations de services": {
+ "account_number": "6278"
+ }
+ },
+ "628-Divers": {
+ "Concours divers (cotisations)": {
+ "account_number": "6281"
+ },
+ "Frais de recrutement de personnel": {
+ "account_number": "6284"
+ }
+ },
+ "Rabais, remises et ristournes obtenus sur autres services ext\u00e9rieurs": {
+ "account_number": "629"
+ }
+ },
+ "63-Imp\u00f4ts, taxes et versements assimil\u00e9s": {
+ "631-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (administrations des imp\u00f4ts)": {
+ "Taxe sur les salaires": {
+ "account_number": "6311"
+ },
+ "Cotisation pour d\u00e9faut d'investissement obligatoire dans la construction": {
+ "account_number": "6314"
+ },
+ "Autres": {
+ "account_number": "6318"
+ }
+ },
+ "633-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (autres organismes)": {
+ "Versement de transport": {
+ "account_number": "6331"
+ },
+ "Allocations logement": {
+ "account_number": "6332"
+ },
+ "Contribution unique des employeurs \u00e0 la formation professionnelle": {
+ "account_number": "6333"
+ },
+ "Participation des employeurs \u00e0 l'effort de construction": {
+ "account_number": "6334"
+ },
+ "Versements lib\u00e9ratoires ouvrant droit \u00e0 l'exon\u00e9ration de la taxe d'apprentissage": {
+ "account_number": "6335"
+ },
+ "Autres": {
+ "account_number": "6338"
+ }
+ },
+ "635-Autres imp\u00f4ts, taxes et versements assimil\u00e9s (administrations des imp\u00f4ts)": {
+ "6351-Imp\u00f4ts directs (sauf imp\u00f4ts sur les b\u00e9n\u00e9fices)": {
+ "Contribution \u00e9conomique territoriale": {
+ "account_number": "63511"
+ },
+ "Taxes fonci\u00e8res": {
+ "account_number": "63512"
+ },
+ "Autres imp\u00f4ts locaux": {
+ "account_number": "63513"
+ },
+ "Taxe sur les v\u00e9hicules des soci\u00e9t\u00e9s": {
+ "account_number": "63514"
+ }
+ },
+ "Taxe sur le chiffre d'affaires non r\u00e9cup\u00e9rables": {
+ "account_number": "6352"
+ },
+ "Imp\u00f4ts indirects": {
+ "account_number": "6353"
+ },
+ "6354-Droits d'enregistrement et de timbre": {
+ "Droits de mutation": {
+ "account_number": "63541"
+ }
+ },
+ "Autres droits": {
+ "account_number": "6358"
+ }
+ },
+ "637-Autres imp\u00f4ts, taxes et versements assimil\u00e9s (autres organismes)": {
+ "Contribution sociale de solidarit\u00e9 \u00e0 la charge des soci\u00e9t\u00e9s": {
+ "account_number": "6371"
+ },
+ "Taxes per\u00e7ues par les organismes publics internationaux": {
+ "account_number": "6372"
+ },
+ "Imp\u00f4ts et taxes exigibles \u00e0 l'\u00e9tranger": {
+ "account_number": "6374"
+ },
+ "Taxes diverses": {
+ "account_number": "6378"
+ }
+ },
+ "Rappel d'imp\u00f4ts (autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices)": {
+ "account_number": "638"
+ }
+ },
+ "64-Charges de personnel": {
+ "641-R\u00e9mun\u00e9rations du personnel": {
+ "Salaires, appointements": {
+ "account_number": "6411"
+ },
+ "Cong\u00e9s pay\u00e9s": {
+ "account_number": "6412"
+ },
+ "Primes et gratifications": {
+ "account_number": "6413"
+ },
+ "Indemnit\u00e9s et avantages divers": {
+ "account_number": "6414"
+ },
+ "Suppl\u00e9ment familial": {
+ "account_number": "6415"
+ }
+ },
+ "R\u00e9mun\u00e9ration du travail de l'exploitant": {
+ "account_number": "644"
+ },
+ "645-Cotisations de s\u00e9curit\u00e9 sociale et de pr\u00e9voyance": {
+ "Cotisations \u00e0 l'Urssaf": {
+ "account_number": "6451"
+ },
+ "Cotisations aux mutuelles": {
+ "account_number": "6452"
+ },
+ "Cotisations aux caisses de retraites": {
+ "account_number": "6453"
+ },
+ "Cotisations \u00e0 P\u00f4le emploi": {
+ "account_number": "6454"
+ },
+ "Cotisations aux autres organismes sociaux": {
+ "account_number": "6458"
+ }
+ },
+ "Cotisations sociales personnelles de l'exploitant": {
+ "account_number": "646"
+ },
+ "647-Autres cotisations sociales": {
+ "Prestations directes": {
+ "account_number": "6471"
+ },
+ "Versements au comit\u00e9 social et \u00e9conomique": {
+ "account_number": "6472"
+ },
+ "Versements aux autres \u0153uvres sociales": {
+ "account_number": "6474"
+ },
+ "M\u00e9decine du travail, pharmacie": {
+ "account_number": "6475"
+ }
+ },
+ "Autres charges de personnel": {
+ "account_number": "648"
+ },
+ "Remboursements de charges de personnel": {
+ "account_number": "649"
+ }
+ },
+ "65-Autres charges de gestion courante": {
+ "651-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, solutions informatiques, droits et valeurs similaires": {
+ "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, solutions informatiques": {
+ "account_number": "6511"
+ },
+ "Droits d'auteur et de reproduction": {
+ "account_number": "6516"
+ },
+ "Autres droits et valeurs similaires": {
+ "account_number": "6518"
+ }
+ },
+ "R\u00e9mun\u00e9rations de l'activit\u00e9 des administrateurs et des g\u00e9rants": {
+ "account_number": "653"
+ },
+ "654-Pertes sur cr\u00e9ances irr\u00e9couvrables": {
+ "Cr\u00e9ances de l'exercice": {
+ "account_number": "6541"
+ },
+ "Cr\u00e9ances des exercices ant\u00e9rieurs": {
+ "account_number": "6544"
+ }
+ },
+ "655-Quote-part de r\u00e9sultat sur op\u00e9rations faites en commun": {
+ "Quote-part de b\u00e9n\u00e9fice transf\u00e9r\u00e9e - comptabilit\u00e9 du g\u00e9rant": {
+ "account_number": "6551"
+ },
+ "Quote-part de perte support\u00e9e - comptabilit\u00e9 des associ\u00e9s non g\u00e9rants": {
+ "account_number": "6555"
+ }
+ },
+ "Pertes de change sur cr\u00e9ances et dettes commerciales": {
+ "account_number": "656"
+ },
+ "Valeurs comptables des immobilisations incorporelles et corporelles c\u00e9d\u00e9es": {
+ "account_number": "657"
+ },
+ "658-P\u00e9nalit\u00e9s et autres charges": {
+ "P\u00e9nalit\u00e9s sur march\u00e9s (et d\u00e9dits pay\u00e9s sur achats et ventes)": {
+ "account_number": "6581"
+ },
+ "P\u00e9nalit\u00e9s, amendes fiscales et p\u00e9nales": {
+ "account_number": "6582"
+ },
+ "Malis provenant de clauses d'indexation": {
+ "account_number": "6583"
+ },
+ "Lots": {
+ "account_number": "6584"
+ },
+ "Op\u00e9rations de constitution ou liquidation des fiducies": {
+ "account_number": "6588"
+ }
+ }
+ },
+ "66-Charges financi\u00e8res": {
+ "661-Charges d'int\u00e9r\u00eats": {
+ "6611-Int\u00e9r\u00eats des emprunts et dettes": {
+ "Int\u00e9r\u00eats des emprunts et dettes assimil\u00e9es": {
+ "account_number": "66116"
+ },
+ "Int\u00e9r\u00eats des dettes rattach\u00e9es \u00e0 des participations": {
+ "account_number": "66117"
+ }
+ },
+ "Charges de la fiducie, r\u00e9sultat de la p\u00e9riode": {
+ "account_number": "6612"
+ },
+ "Int\u00e9r\u00eats des comptes courants et des d\u00e9p\u00f4ts cr\u00e9diteurs": {
+ "account_number": "6615"
+ },
+ "Int\u00e9r\u00eats bancaires et sur op\u00e9rations de financement (escompte\u2026)": {
+ "account_number": "6616"
+ },
+ "Int\u00e9r\u00eats des obligations cautionn\u00e9es": {
+ "account_number": "6617"
+ },
+ "6618-Int\u00e9r\u00eats des autres dettes": {
+ "Int\u00e9r\u00eats des dettes commerciales": {
+ "account_number": "66181"
+ },
+ "Int\u00e9r\u00eats des dettes diverses": {
+ "account_number": "66188"
+ }
+ }
+ },
+ "Pertes sur cr\u00e9ances li\u00e9es \u00e0 des participations": {
+ "account_number": "664"
+ },
+ "Escomptes accord\u00e9s": {
+ "account_number": "665"
+ },
+ "Pertes de change financi\u00e8res": {
+ "account_type": "Round Off",
+ "account_number": "666"
+ },
+ "667-Charges sur cession d'\u00e9l\u00e9ments financiers": {
+ "Valeurs comptables des immobilisations financi\u00e8res c\u00e9d\u00e9es": {
+ "account_number": "6671"
+ },
+ "Charges nettes sur cessions de titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "6672"
+ },
+ "Charges nettes sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "6673"
+ },
+ "Charges nettes sur cessions de jetons": {
+ "account_number": "6674"
+ }
+ },
+ "668-Autres charges financi\u00e8res": {
+ "Mali provenant du rachat par l'entit\u00e9 d'actions et obligations \u00e9mises par elle-m\u00eame": {
+ "account_number": "6683"
+ }
+ }
+ },
+ "67-Charges exceptionnelles": {
+ "(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les charges sur exercices ant\u00e9rieurs)": {
+ "account_number": "672"
+ },
+ "Autres charges exceptionnelles": {
+ "account_number": "678"
+ }
+ },
+ "68-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions": {
+ "account_type": "Depreciation",
+ "681-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions (\u00e0 inscrire dans les charges d'exploitation)": {
+ "account_type": "Depreciation",
+ "6811-Dotations aux amortissements sur immobilisations incorporelles et corporelles": {
+ "account_type": "Depreciation",
+ "Immobilisations incorporelles et frais d'\u00e9tablissement": {
+ "account_type": "Depreciation",
+ "account_number": "68111"
+ },
+ "Immobilisations corporelles": {
+ "account_type": "Depreciation",
+ "account_number": "68112"
+ }
+ },
+ "Dotations aux provisions d'exploitation": {
+ "account_type": "Depreciation",
+ "account_number": "6815"
+ },
+ "6816-Dotations pour d\u00e9pr\u00e9ciations des immobilisations incorporelles et corporelles": {
+ "account_type": "Depreciation",
+ "Immobilisations incorporelles": {
+ "account_type": "Depreciation",
+ "account_number": "68161"
+ },
+ "Immobilisations corporelles": {
+ "account_type": "Depreciation",
+ "account_number": "68162"
+ }
+ },
+ "6817-Dotations pour d\u00e9pr\u00e9ciations des actifs circulants": {
+ "account_type": "Depreciation",
+ "Stocks et en-cours": {
+ "account_type": "Depreciation",
+ "account_number": "68173"
+ },
+ "Cr\u00e9ances": {
+ "account_type": "Depreciation",
+ "account_number": "68174"
+ }
+ }
+ },
+ "686-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions (\u00e0 inscrire dans les charges financi\u00e8res)": {
+ "account_type": "Depreciation",
+ "Dotations aux amortissements des primes de remboursement des emprunts": {
+ "account_type": "Depreciation",
+ "account_number": "6861"
+ },
+ "Dotations aux amortissements des frais d'\u00e9mission des emprunts": {
+ "account_type": "Depreciation",
+ "account_number": "6862"
+ },
+ "Dotations aux provisions financi\u00e8res": {
+ "account_type": "Depreciation",
+ "account_number": "6865"
+ },
+ "6866-Dotations pour d\u00e9pr\u00e9ciation des \u00e9l\u00e9ments financiers": {
+ "account_type": "Depreciation",
+ "Immobilisations financi\u00e8res": {
+ "account_type": "Depreciation",
+ "account_number": "68662"
+ },
+ "Valeurs mobili\u00e8res de placement": {
+ "account_type": "Depreciation",
+ "account_number": "68665"
+ }
+ }
+ },
+ "687-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions (\u00e0 inscrire dans les charges exceptionnelles)": {
+ "account_type": "Depreciation",
+ "Dotations aux amortissements exceptionnels des immobilisations": {
+ "account_type": "Depreciation",
+ "account_number": "6871"
+ },
+ "Dotations aux provisions r\u00e9glement\u00e9es (immobilisations)": {
+ "account_type": "Depreciation",
+ "Amortissements d\u00e9rogatoires": {
+ "account_type": "Depreciation",
+ "account_number": "68725"
+ }
+ },
+ "Dotations aux provisions r\u00e9glement\u00e9es (stocks)": {
+ "account_type": "Depreciation",
+ "account_number": "6873"
+ },
+ "Dotations aux autres provisions r\u00e9glement\u00e9es": {
+ "account_type": "Depreciation",
+ "account_number": "6874"
+ },
+ "Dotations aux provisions exceptionnelles": {
+ "account_type": "Depreciation",
+ "account_number": "6875"
+ },
+ "Dotations pour d\u00e9pr\u00e9ciations exceptionnelles": {
+ "account_type": "Depreciation",
+ "account_number": "6876"
+ }
+ }
+ },
+ "69-Participation des salari\u00e9s - Imp\u00f4ts sur les b\u00e9n\u00e9fices et assimil\u00e9s": {
+ "Participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "691"
+ },
+ "695-Imp\u00f4ts sur les b\u00e9n\u00e9fices": {
+ "Imp\u00f4ts dus en France": {
+ "account_number": "6951"
+ },
+ "Contribution additionnelle \u00e0 l'imp\u00f4t sur les b\u00e9n\u00e9fices": {
+ "account_number": "6952"
+ },
+ "Imp\u00f4ts dus \u00e0 l'\u00e9tranger": {
+ "account_number": "6954"
+ }
+ },
+ "Suppl\u00e9ments d'imp\u00f4t sur les soci\u00e9t\u00e9s li\u00e9s aux distributions": {
+ "account_number": "696"
+ },
+ "698-Int\u00e9gration fiscale": {
+ "Int\u00e9gration fiscale - Charges": {
+ "account_number": "6981"
+ },
+ "Int\u00e9gration fiscale - Produits": {
+ "account_number": "6989"
+ }
+ },
+ "Produits - Reports en arri\u00e8re des d\u00e9ficits": {
+ "account_number": "699"
+ }
+ }
+ },
+ "7-Comptes de produits": {
+ "root_type": "Income",
+ "70-Ventes de produits fabriqu\u00e9s, prestations de services, marchandises": {
+ "Ventes de produits finis": {
+ "account_number": "701"
+ },
+ "Ventes de produits interm\u00e9diaires": {
+ "account_number": "702"
+ },
+ "Ventes de produits r\u00e9siduels": {
+ "account_number": "703"
+ },
+ "Travaux": {
+ "account_number": "704"
+ },
+ "\u00c9tudes": {
+ "account_number": "705"
+ },
+ "Prestations de services": {
+ "account_number": "706"
+ },
+ "707-Ventes de marchandises": {
+ "Marchandises": {
+ "account_number": "7071"
+ },
+ "Éco-participation": {
+ "account_type": "Income Account",
+ "account_number": "7079"
+ }
+ },
+ "708-Produits des activit\u00e9s annexes": {
+ "Produits des services exploit\u00e9s dans l'int\u00e9r\u00eat du personnel": {
+ "account_number": "7081"
+ },
+ "Commissions et courtages": {
+ "account_number": "7082"
+ },
+ "Locations diverses": {
+ "account_number": "7083"
+ },
+ "Mise \u00e0 disposition de personnel factur\u00e9e": {
+ "account_number": "7084"
+ },
+ "Ports et frais accessoires factur\u00e9s": {
+ "account_number": "7085"
+ },
+ "Bonis sur reprises d'emballages consign\u00e9s": {
+ "account_number": "7086"
+ },
+ "Bonifications obtenues des clients et primes sur ventes": {
+ "account_number": "7087"
+ },
+ "Autres produits d'activit\u00e9s annexes (cessions d'approvisionnements)": {
+ "account_number": "7088"
+ }
+ },
+ "709-Rabais, remises et ristournes accord\u00e9s": {
+ "Rabais, remises et ristournes accord\u00e9s sur ventes de produits finis": {
+ "account_number": "7091"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur ventes de produits interm\u00e9diaires": {
+ "account_number": "7092"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur travaux": {
+ "account_number": "7094"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur \u00e9tudes": {
+ "account_number": "7095"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur prestations de services": {
+ "account_number": "7096"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur ventes de marchandises": {
+ "account_number": "7097"
+ },
+ "Rabais, remises et ristournes accord\u00e9s sur produits des activit\u00e9s annexes": {
+ "account_number": "7098"
+ }
+ }
+ },
+ "71-Production stock\u00e9e (ou d\u00e9stockage)": {
+ "713-Variation des stocks des en-cours de production et de produits": {
+ "7133-Variation des en-cours de production de biens": {
+ "Produits en cours": {
+ "account_number": "71331"
+ },
+ "Travaux en cours": {
+ "account_number": "71335"
+ }
+ },
+ "7134-Variation des en-cours de production de services": {
+ "\u00c9tudes en cours": {
+ "account_number": "71341"
+ },
+ "Prestations de services en cours": {
+ "account_number": "71345"
+ }
+ },
+ "7135-Variation des stocks de produits": {
+ "Produits interm\u00e9diaires": {
+ "account_number": "71351"
+ },
+ "Produits finis": {
+ "account_number": "71355"
+ },
+ "Produits r\u00e9siduels": {
+ "account_number": "71358"
+ }
+ }
+ }
+ },
+ "72-Production immobilis\u00e9e": {
+ "Immobilisations incorporelles": {
+ "account_number": "721"
+ },
+ "Immobilisations corporelles": {
+ "account_number": "722"
+ }
+ },
+ "74-Subventions": {
+ "Subventions d'exploitation": {
+ "account_number": "741"
+ },
+ "Subventions d'\u00e9quilibre": {
+ "account_number": "742"
+ },
+ "Quote-part des subventions d'investissement vir\u00e9e au r\u00e9sultat de l'exercice": {
+ "account_number": "747"
+ }
+ },
+ "75-Autres produits de gestion courante": {
+ "751-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, solutions informatiques, droits et valeurs similaires": {
+ "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, solutions informatiques": {
+ "account_number": "7511"
+ },
+ "Droits d'auteur et de reproduction": {
+ "account_number": "7516"
+ },
+ "Autres droits et valeurs similaires": {
+ "account_number": "7518"
+ }
+ },
+ "Revenus des immeubles non affect\u00e9s \u00e0 des activit\u00e9s professionnelles": {
+ "account_number": "752"
+ },
+ "R\u00e9mun\u00e9rations de l'activit\u00e9 des administrateurs et des g\u00e9rants": {
+ "account_number": "753"
+ },
+ "Ristournes per\u00e7ues des coop\u00e9ratives provenant des exc\u00e9dents": {
+ "account_number": "754"
+ },
+ "755-Quote-part de r\u00e9sultat sur op\u00e9rations faites en commun": {
+ "Quote-part de perte transf\u00e9r\u00e9e - comptabilit\u00e9 du g\u00e9rant": {
+ "account_number": "7551"
+ },
+ "Quote-part de b\u00e9n\u00e9fice attribu\u00e9e - comptabilit\u00e9 des associ\u00e9s non-g\u00e9rants": {
+ "account_number": "7555"
+ }
+ },
+ "Gains de change sur cr\u00e9ances et dettes commerciales": {
+ "account_number": "756"
+ },
+ "Produits des cessions d'immobilisations incorporelles et corporelles": {
+ "account_number": "757"
+ },
+ "758-Indemnit\u00e9s et autres produits": {
+ "D\u00e9dits et p\u00e9nalit\u00e9s per\u00e7us sur achats et ventes": {
+ "account_number": "7581"
+ },
+ "Lib\u00e9ralit\u00e9s re\u00e7ues": {
+ "account_number": "7582"
+ },
+ "Rentr\u00e9es sur cr\u00e9ances amorties": {
+ "account_number": "7583"
+ },
+ "D\u00e9gr\u00e8vements d'imp\u00f4ts autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices": {
+ "account_number": "7584"
+ },
+ "Bonis provenant de clauses d'indexation": {
+ "account_number": "7585"
+ },
+ "Lots": {
+ "account_number": "7586"
+ },
+ "Indemnit\u00e9s d'assurance": {
+ "account_number": "7587"
+ },
+ "Op\u00e9rations de constitution ou liquidation des fiducies": {
+ "account_number": "7588"
+ }
+ }
+ },
+ "76-Produits financiers": {
+ "761-Produits de participations": {
+ "Revenus des titres de participation": {
+ "account_number": "7611"
+ },
+ "Produits de la fiducie, r\u00e9sultat de la p\u00e9riode": {
+ "account_number": "7612"
+ },
+ "Revenus sur autres formes de participation": {
+ "account_number": "7616"
+ },
+ "Revenus des cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "account_number": "7617"
+ }
+ },
+ "762-Produits des autres immobilisations financi\u00e8res": {
+ "Revenus des titres immobilis\u00e9s": {
+ "account_number": "7621"
+ },
+ "Revenus des pr\u00eats": {
+ "account_number": "7626"
+ },
+ "Revenus des cr\u00e9ances immobilis\u00e9es": {
+ "account_number": "7627"
+ }
+ },
+ "763-Revenus des autres cr\u00e9ances": {
+ "Revenus des cr\u00e9ances commerciales": {
+ "account_number": "7631"
+ },
+ "Revenus des cr\u00e9ances diverses": {
+ "account_number": "7638"
+ }
+ },
+ "Revenus des valeurs mobili\u00e8res de placement": {
+ "account_number": "764"
+ },
+ "Escomptes obtenus": {
+ "account_number": "765"
+ },
+ "Gains de change financiers": {
+ "account_type": "Round Off",
+ "account_number": "766"
+ },
+ "767-Produits sur cession d'\u00e9l\u00e9ments financiers": {
+ "Produits des cessions d'immobilisations financi\u00e8res": {
+ "account_number": "7671"
+ },
+ "Produits nets sur cessions de titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "7672"
+ },
+ "Produits nets sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "7673"
+ },
+ "Produits nets sur cessions de jetons": {
+ "account_number": "7674"
+ }
+ },
+ "768-Autres produits financiers": {
+ "Bonis provenant du rachat par l'entreprise d'actions et d'obligations \u00e9mises par elle-m\u00eame": {
+ "account_number": "7683"
+ }
+ }
+ },
+ "77-Produits exceptionnels": {
+ "(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les produits sur exercices ant\u00e9rieurs)": {
+ "account_number": "772"
+ },
+ "Autres produits exceptionnels": {
+ "account_number": "778"
+ }
+ },
+ "78-Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions": {
+ "781-Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits d'exploitation)": {
+ "7811-Reprises sur amortissements des immobilisations incorporelles et corporelles": {
+ "Immobilisations incorporelles": {
+ "account_number": "78111"
+ },
+ "Immobilisations corporelles": {
+ "account_number": "78112"
+ }
+ },
+ "Reprises sur provisions d'exploitation": {
+ "account_number": "7815"
+ },
+ "7816-Reprises sur d\u00e9pr\u00e9ciations des immobilisations incorporelles et corporelles": {
+ "Immobilisations incorporelles": {
+ "account_number": "78161"
+ },
+ "Immobilisations corporelles": {
+ "account_number": "78162"
+ }
+ },
+ "7817-Reprises sur d\u00e9pr\u00e9ciations des actifs circulants": {
+ "Stocks et en-cours": {
+ "account_number": "78173"
+ },
+ "Cr\u00e9ances": {
+ "account_number": "78174"
+ }
+ }
+ },
+ "786-Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits financiers)": {
+ "Reprises sur provisions financi\u00e8res": {
+ "account_number": "7865"
+ },
+ "7866-Reprises sur d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": {
+ "Immobilisations financi\u00e8res": {
+ "account_number": "78662"
+ },
+ "Valeurs mobili\u00e8res de placement": {
+ "account_number": "78665"
+ }
+ }
+ },
+ "787-Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits exceptionnels)": {
+ "7872-Reprises sur provisions r\u00e9glement\u00e9es (immobilisations)": {
+ "Amortissements d\u00e9rogatoires": {
+ "account_number": "78725"
+ }
+ },
+ "Reprises sur provisions r\u00e9glement\u00e9es (stocks)": {
+ "account_number": "7873"
+ },
+ "Reprises sur autres provisions r\u00e9glement\u00e9es": {
+ "account_number": "7874"
+ },
+ "Reprises sur provisions exceptionnelles": {
+ "account_number": "7875"
+ },
+ "Reprises sur d\u00e9pr\u00e9ciations exceptionnelles": {
+ "account_number": "7876"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_ex_agricole.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_ex_agricole.json
new file mode 100644
index 00000000000..6d8d2b14302
--- /dev/null
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan2025_comptable_general_ex_agricole.json
@@ -0,0 +1,3260 @@
+
+{
+ "country_code": "fr",
+ "name": "France - Plan Comptable General Agricole 2025 avec code",
+ "tree": {
+ "1-Comptes de capitaux": {
+ "root_type": "Equity",
+ "10-Capital et r\u00e9serves": {
+ "101-Capital": {
+ "Capital individuel initial (au ..\/..\/..\/)": {
+ "account_number": "1011"
+ },
+ "Variations capital individuel initial": {
+ "account_number": "1012"
+ },
+ "Capital souscrit - non appel\u00e9": {
+ "account_number": "1013"
+ },
+ "Capital souscrit - appel\u00e9, vers\u00e9": {
+ "account_number": "1014"
+ },
+ "1015-Capital souscrit - appel\u00e9, non vers\u00e9": {
+ "Capital non amorti": {
+ "account_number": "10151"
+ },
+ "Capital amorti": {
+ "account_number": "10152"
+ }
+ },
+ "Capital souscrit soumis \u00e0 des r\u00e9glementations particuli\u00e8res": {
+ "account_number": "1018"
+ }
+ },
+ "104-Primes li\u00e9es au capital social": {
+ "Primes d'\u00e9mission": {
+ "account_number": "1041"
+ },
+ "Primes de fusion": {
+ "account_number": "1042"
+ },
+ "Primes d'apport": {
+ "account_number": "1043"
+ },
+ "Primes de conversion d'obligations en actions": {
+ "account_number": "1044"
+ },
+ "Bons de souscription d'actions": {
+ "account_number": "1045"
+ }
+ },
+ "105-Ecarts de r\u00e9\u00e9valuation": {
+ "R\u00e9serve sp\u00e9ciale de r\u00e9\u00e9valuation": {
+ "account_number": "1051"
+ },
+ "Ecart de r\u00e9\u00e9valuation libre": {
+ "account_number": "1052"
+ },
+ "R\u00e9serve de r\u00e9\u00e9valuation": {
+ "account_number": "1053"
+ },
+ "Ecarts de r\u00e9\u00e9valuation (autres op\u00e9rations l\u00e9gales)": {
+ "account_number": "1055"
+ },
+ "Autres \u00e9carts de r\u00e9\u00e9valuation en France": {
+ "account_number": "1057"
+ },
+ "Autres \u00e9carts de r\u00e9\u00e9valuation \u00e0 l'Etranger": {
+ "account_number": "1058"
+ }
+ },
+ "106-R\u00e9serves": {
+ "1061-R\u00e9serve l\u00e9gale": {
+ "R\u00e9serve l\u00e9gale proprement dite": {
+ "account_number": "10611"
+ },
+ "Plus-values nettes \u00e0 long terme": {
+ "account_number": "10612"
+ }
+ },
+ "R\u00e9serves indisponibles": {
+ "account_number": "1062"
+ },
+ "R\u00e9serves statutaires ou contractuelles": {
+ "account_number": "1063"
+ },
+ "1064-R\u00e9serves r\u00e9glement\u00e9es": {
+ "Plus-values nettes \u00e0 long terme": {
+ "account_number": "10641"
+ },
+ "R\u00e9serves cons\u00e9cutives \u00e0 l'octroi de subventions d'investissement": {
+ "account_number": "10643"
+ },
+ "Autres r\u00e9serves r\u00e9glement\u00e9es": {
+ "account_number": "10648"
+ }
+ },
+ "1068-Autres r\u00e9serves": {
+ "R\u00e9serve de propre assureur": {
+ "account_number": "10681"
+ },
+ "R\u00e9serves diverses": {
+ "account_number": "10688"
+ }
+ }
+ },
+ "Ecart d'\u00e9quivalence": {
+ "account_number": "107"
+ },
+ "Compte de l'exploitant": {
+ "account_number": "108"
+ },
+ "109-Actionnaires et associ\u00e9s : Capital souscrit - non appel\u00e9": {
+ "Actionnaires : Capital souscrit - non appel\u00e9": {
+ "account_number": "1091"
+ },
+ "Associ\u00e9s : Capital souscrit - non appel\u00e9": {
+ "account_number": "1092"
+ }
+ }
+ },
+ "11-Report \u00e0 nouveau (solde cr\u00e9diteur ou d\u00e9biteur)": {
+ "Report \u00e0 nouveau (solde cr\u00e9diteur)": {
+ "account_number": "110"
+ },
+ "Report \u00e0 nouveau (solde d\u00e9biteur)": {
+ "account_number": "119"
+ }
+ },
+ "12-R\u00e9sultat de l'exercice (b\u00e9n\u00e9fice ou perte)": {
+ "R\u00e9sultat de l'exercice (b\u00e9n\u00e9fice)": {
+ "account_number": "120"
+ },
+ "R\u00e9sultat de l'exercice (perte)": {
+ "account_number": "129"
+ }
+ },
+ "13-Subventions d'investissement": {
+ "131-Subventions d'\u00e9quipement": {
+ "Etat": {
+ "account_number": "1311"
+ },
+ "R\u00e9gions": {
+ "account_number": "1312"
+ },
+ "D\u00e9partements": {
+ "account_number": "1313"
+ },
+ "Communes": {
+ "account_number": "1314"
+ },
+ "Collectivit\u00e9s publiques": {
+ "account_number": "1315"
+ },
+ "Entreprises publiques": {
+ "account_number": "1316"
+ },
+ "Entreprises et organismes priv\u00e9s": {
+ "account_number": "1317"
+ },
+ "Autres": {
+ "account_number": "1318"
+ }
+ },
+ "Autres subventions d'investissement": {
+ "account_number": "138"
+ },
+ "139-Subventions d'investissement inscrites au compte de r\u00e9sultat": {
+ "1391-Subventions d'\u00e9quipement inscrites au compte de r\u00e9sultat": {
+ "Etat": {
+ "account_number": "13911"
+ },
+ "R\u00e9gions": {
+ "account_number": "13912"
+ },
+ "D\u00e9partements": {
+ "account_number": "13913"
+ },
+ "Communes": {
+ "account_number": "13914"
+ },
+ "Collectivit\u00e9s publiques": {
+ "account_number": "13915"
+ },
+ "Entreprises publiques": {
+ "account_number": "13916"
+ },
+ "Entreprises et organismes priv\u00e9s": {
+ "account_number": "13917"
+ },
+ "Autres": {
+ "account_number": "13918"
+ }
+ },
+ "Autres subventions d'investissement inscrites au compte de r\u00e9sultat": {
+ "account_number": "1398"
+ }
+ }
+ },
+ "14-Provisions r\u00e9glement\u00e9es": {
+ "142-Provisions r\u00e9glement\u00e9es relatives aux immobilisations": {
+ "Provisions pour investissement (participation des salari\u00e9s)": {
+ "account_number": "1424"
+ }
+ },
+ "143-Provisions r\u00e9glement\u00e9es relatives aux stocks": {
+ "Hausse des prix": {
+ "account_number": "1431"
+ },
+ "Fluctuation des cours": {
+ "account_number": "1432"
+ }
+ },
+ "Provisions r\u00e9glement\u00e9es relatives aux autres \u00e9l\u00e9ments de l'actif": {
+ "account_number": "144"
+ },
+ "Amortissements d\u00e9rogatoires": {
+ "account_number": "145"
+ },
+ "Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {
+ "account_number": "146"
+ },
+ "Plus-values r\u00e9investies": {
+ "account_number": "147"
+ },
+ "Autres provisions r\u00e9glement\u00e9es": {
+ "account_number": "148"
+ }
+ },
+ "15-Provisions": {
+ "151-Provisions pour risques": {
+ "Provisions pour litiges": {
+ "account_number": "1511"
+ },
+ "Provisions pour garanties donn\u00e9es aux clients": {
+ "account_number": "1512"
+ },
+ "Provisions pour pertes sur march\u00e9s \u00e0 terme": {
+ "account_number": "1513"
+ },
+ "Provisions pour amendes et p\u00e9nalit\u00e9s": {
+ "account_number": "1514"
+ },
+ "Provisions pour pertes de change": {
+ "account_number": "1515"
+ },
+ "Provisions pour pertes sur contrats": {
+ "account_number": "1516"
+ },
+ "Autres provisions pour risques": {
+ "account_number": "1518"
+ }
+ },
+ "Provisions pour pensions et obligations similaires": {
+ "account_number": "153"
+ },
+ "Provisions pour restructurations": {
+ "account_number": "154"
+ },
+ "Provisions pour imp\u00f4ts": {
+ "account_number": "155"
+ },
+ "Provisions pour renouvellement des immobilisations": {
+ "account_number": "156"
+ },
+ "157-Provisions pour charges \u00e0 r\u00e9partir sur plusieurs exercices": {
+ "Provisions pour gros entretien ou grandes r\u00e9visions": {
+ "account_number": "1572"
+ }
+ },
+ "158-Autres provisions pour charges": {
+ "Provisions pour remises en \u00e9tat": {
+ "account_number": "1581"
+ }
+ }
+ },
+ "16-Emprunts et dettes assimil\u00e9es": {
+ "Emprunts obligataires convertibles": {
+ "account_number": "161"
+ },
+ "Autres emprunts obligataires": {
+ "account_number": "163"
+ },
+ "164-Emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {
+ "Emprunts fonciers": {
+ "account_number": "1641"
+ },
+ "Autres emprunts \u00e0 moyen et long terme": {
+ "account_number": "1642"
+ },
+ "Emprunts \u00e0 court terme": {
+ "account_number": "1643"
+ }
+ },
+ "165-D\u00e9p\u00f4ts et cautionnements re\u00e7us": {
+ "D\u00e9p\u00f4ts": {
+ "account_number": "1651"
+ },
+ "Cautionnements": {
+ "account_number": "1655"
+ }
+ },
+ "166-Participation des salari\u00e9s aux r\u00e9sultats": {
+ "Comptes bloqu\u00e9s": {
+ "account_number": "1661"
+ },
+ "Fonds de participation": {
+ "account_number": "1662"
+ }
+ },
+ "167-Emprunts et dettes assortis de conditions particuli\u00e8res": {
+ "Emissions de titres participatifs": {
+ "account_number": "1671"
+ },
+ "Avances conditionn\u00e9es": {
+ "account_number": "1674"
+ },
+ "Emprunts participatifs": {
+ "account_number": "1675"
+ }
+ },
+ "168-Autres emprunts et dettes assimil\u00e9es": {
+ "Autres emprunts": {
+ "account_number": "1681"
+ },
+ "Rentes viag\u00e8res capitalis\u00e9es": {
+ "account_number": "1685"
+ },
+ "Autres dettes": {
+ "account_number": "1687"
+ },
+ "1688-Int\u00e9r\u00eats courus": {
+ "sur emprunts obligataires convertibles": {
+ "account_number": "16881"
+ },
+ "sur autres emprunts obligataires": {
+ "account_number": "16883"
+ },
+ "16884-sur emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {
+ "Int\u00e9r\u00eats courus sur emprunts fonciers": {
+ "account_number": "168841"
+ },
+ "Int\u00e9r\u00eats courus sur autres emprunts MLT": {
+ "account_number": "168842"
+ },
+ "Int\u00e9r\u00eats courus sur emprunts court terme": {
+ "account_number": "168843"
+ }
+ },
+ "sur d\u00e9p\u00f4ts et cautionnements re\u00e7us": {
+ "account_number": "16885"
+ },
+ "sur participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "16886"
+ },
+ "sur emprunts et dettes assortis de conditions particuli\u00e8res": {
+ "account_number": "16887"
+ },
+ "sur autres emprunts et dettes assimil\u00e9es": {
+ "account_number": "16888"
+ }
+ }
+ },
+ "Primes de remboursement des obligations": {
+ "account_number": "169"
+ }
+ },
+ "17-Dettes rattach\u00e9es \u00e0 des participations": {
+ "171-Dettes rattach\u00e9es \u00e0 des participations (groupe)": {
+ "Principal": {
+ "account_number": "1711"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "1712"
+ }
+ },
+ "172-Dettes rattach\u00e9es \u00e0 des participations \u00e0 des organismes professionnels agricoles (autres que les \u00e9tablissements de cr\u00e9dit)": {
+ "Principal": {
+ "account_number": "1721"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "1728"
+ }
+ },
+ "174-Dettes rattach\u00e9es \u00e0 des participations (hors groupe)": {
+ "Principal": {
+ "account_number": "1741"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "1748"
+ }
+ },
+ "178-Dettes rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": {
+ "Principal": {
+ "account_number": "1781"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "1788"
+ }
+ }
+ },
+ "18-Comptes de liaison des \u00e9tablissements et soci\u00e9t\u00e9s en participation": {
+ "Comptes de liaison des \u00e9tablissements": {
+ "account_number": "181"
+ },
+ "Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (charges)": {
+ "account_number": "186"
+ },
+ "Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (produits)": {
+ "account_number": "187"
+ },
+ "Comptes de liaison des soci\u00e9t\u00e9s en participation": {
+ "account_number": "188"
+ }
+ }
+ },
+ "2-Comptes d'immobilisations": {
+ "root_type": "Asset",
+ "20-Immobilisations incorporelles": {
+ "201-Frais d'\u00e9tablissement": {
+ "Frais de constitution": {
+ "account_number": "2011"
+ },
+ "2012-Frais de premier \u00e9tablissement": {
+ "Frais de prospection": {
+ "account_number": "20121"
+ },
+ "Frais de publicit\u00e9": {
+ "account_number": "20122"
+ }
+ },
+ "Frais d'augmentation de capital et d'op\u00e9rations diverses (fusions, scissions, transformations)": {
+ "account_number": "2013"
+ }
+ },
+ "Frais de recherche et de d\u00e9veloppement": {
+ "account_number": "203"
+ },
+ "Concessions et droits similaires, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": {
+ "account_number": "205"
+ },
+ "Droit au bail": {
+ "account_number": "206"
+ },
+ "207-Fonds rural et commercial": {
+ "Fonds agricole": {
+ "account_number": "2071"
+ },
+ "Fonds commercial": {
+ "account_number": "2072"
+ }
+ },
+ "208-Autres immobilisations incorporelles": {
+ "Usufruit temporaire": {
+ "account_number": "2082"
+ }
+ }
+ },
+ "21-Immobilisations corporelles": {
+ "account_type": "Fixed Asset",
+ "211-Terrains": {
+ "account_type": "Fixed Asset",
+ "2111-Terrains nus": {
+ "account_type": "Fixed Asset",
+ "Terrains nus exploit\u00e9s en faire valoir direct": {
+ "account_type": "Fixed Asset",
+ "account_number": "21111"
+ },
+ "Autres terrains nus": {
+ "account_type": "Fixed Asset",
+ "account_number": "21112"
+ }
+ },
+ "Terrains am\u00e9nag\u00e9s": {
+ "account_type": "Fixed Asset",
+ "account_number": "2112"
+ },
+ "Sous-sols et sur-sols": {
+ "account_type": "Fixed Asset",
+ "account_number": "2113"
+ },
+ "2114-Terrains de gisement": {
+ "account_type": "Fixed Asset",
+ "Carri\u00e8res": {
+ "account_type": "Fixed Asset",
+ "account_number": "21141"
+ }
+ },
+ "2115-Terrains b\u00e2tis": {
+ "account_type": "Fixed Asset",
+ "affect\u00e9s \u00e0 la production agricole": {
+ "account_type": "Fixed Asset",
+ "account_number": "21151"
+ },
+ "affect\u00e9s \u00e0 une autre activit\u00e9 professionnelle": {
+ "account_type": "Fixed Asset",
+ "account_number": "21155"
+ },
+ "affect\u00e9s \u00e0 des op\u00e9rations non professionnelles": {
+ "account_type": "Fixed Asset",
+ "account_number": "21158"
+ }
+ },
+ "Compte d'ordre sur immobilisations (art. 6 du d\u00e9cret 78.737 du 11-07-1978)": {
+ "account_type": "Fixed Asset",
+ "account_number": "2116"
+ }
+ },
+ "Agencements et am\u00e9nagements de terrains": {
+ "account_type": "Fixed Asset",
+ "account_number": "212"
+ },
+ "213-Constructions sur sol propre": {
+ "account_type": "Fixed Asset",
+ "2131-B\u00e2timents": {
+ "account_type": "Fixed Asset",
+ "affect\u00e9s \u00e0 la production agricole": {
+ "account_type": "Fixed Asset",
+ "account_number": "21311"
+ },
+ "affect\u00e9s \u00e0 une autre activit\u00e9 professionnelle": {
+ "account_type": "Fixed Asset",
+ "account_number": "21315"
+ },
+ "affect\u00e9s \u00e0 des op\u00e9rations non professionnelles": {
+ "account_type": "Fixed Asset",
+ "account_number": "21318"
+ }
+ },
+ "2135-Installations g\u00e9n\u00e9rales - agencements - am\u00e9nagements des constructions": {
+ "account_type": "Fixed Asset",
+ "affect\u00e9s \u00e0 la production agricole": {
+ "account_type": "Fixed Asset",
+ "account_number": "21351"
+ },
+ "affect\u00e9s \u00e0 une autre activit\u00e9 professionnelle": {
+ "account_type": "Fixed Asset",
+ "account_number": "21355"
+ },
+ "affect\u00e9s \u00e0 des op\u00e9rations non professionnelles": {
+ "account_type": "Fixed Asset",
+ "account_number": "21358"
+ }
+ },
+ "Ouvrages d'infrastructure": {
+ "account_type": "Fixed Asset",
+ "account_number": "2138"
+ }
+ },
+ "214-Constructions sur sol d'autrui": {
+ "account_type": "Fixed Asset",
+ "2141-B\u00e2timents": {
+ "account_type": "Fixed Asset",
+ "affect\u00e9s \u00e0 la production agricole": {
+ "account_type": "Fixed Asset",
+ "account_number": "21411"
+ },
+ "affect\u00e9s \u00e0 une autre activit\u00e9 professionnelle": {
+ "account_type": "Fixed Asset",
+ "account_number": "21415"
+ },
+ "affect\u00e9s \u00e0 des op\u00e9rations non professionnelles": {
+ "account_type": "Fixed Asset",
+ "account_number": "21418"
+ }
+ },
+ "2145-Installations g\u00e9n\u00e9rales - agencements - am\u00e9nagements des constructions": {
+ "account_type": "Fixed Asset",
+ "affect\u00e9s \u00e0 la production agricole": {
+ "account_type": "Fixed Asset",
+ "account_number": "21451"
+ },
+ "affect\u00e9s \u00e0 une autre activit\u00e9 professionnelle": {
+ "account_type": "Fixed Asset",
+ "account_number": "21455"
+ },
+ "affect\u00e9s \u00e0 des op\u00e9rations non professionnelles": {
+ "account_type": "Fixed Asset",
+ "account_number": "21458"
+ }
+ },
+ "Ouvrages d'infrastructure": {
+ "account_type": "Fixed Asset",
+ "account_number": "2148"
+ }
+ },
+ "215-Installations techniques, mat\u00e9riels et outillage": {
+ "account_type": "Fixed Asset",
+ "Installations techniques sur sol propre": {
+ "account_type": "Fixed Asset",
+ "account_number": "2151"
+ },
+ "Installations techniques sur sol d'autrui": {
+ "account_type": "Fixed Asset",
+ "account_number": "2153"
+ },
+ "Mat\u00e9riel": {
+ "account_type": "Fixed Asset",
+ "account_number": "2154"
+ },
+ "Outillage": {
+ "account_type": "Fixed Asset",
+ "account_number": "2155"
+ },
+ "Agencements et am\u00e9nagements du mat\u00e9riel et outillage industriels": {
+ "account_type": "Fixed Asset",
+ "account_number": "2157"
+ }
+ },
+ "Am\u00e9liorations du fonds": {
+ "account_type": "Fixed Asset",
+ "account_number": "217"
+ },
+ "218-Autres immobilisations corporelles (hors biens vivants)": {
+ "account_type": "Fixed Asset",
+ "Installations g\u00e9n\u00e9rales, agencements, am\u00e9nagements divers": {
+ "account_type": "Fixed Asset",
+ "account_number": "2181"
+ },
+ "Mat\u00e9riel de transport": {
+ "account_type": "Fixed Asset",
+ "account_number": "2182"
+ },
+ "Mat\u00e9riel de bureau et mat\u00e9riel informatique": {
+ "account_type": "Fixed Asset",
+ "account_number": "2183"
+ },
+ "Mobilier": {
+ "account_type": "Fixed Asset",
+ "account_number": "2184"
+ },
+ "Emballages r\u00e9cup\u00e9rables": {
+ "account_type": "Fixed Asset",
+ "account_number": "2186"
+ },
+ "Autres": {
+ "account_type": "Fixed Asset",
+ "account_number": "2188"
+ }
+ }
+ },
+ "Immobilisations mises en concession": {
+ "account_number": "22"
+ },
+ "23-Immobilisations en cours": {
+ "231-Immobilisations corporelles en cours (hors biens vivants)": {
+ "Terrains (en cours)": {
+ "account_number": "2311"
+ },
+ "Agencements et am\u00e9nagements de terrains (en cours)": {
+ "account_number": "2312"
+ },
+ "Constructions sur sol propre (en cours)": {
+ "account_number": "2313"
+ },
+ "Constructions sur sol d'autrui (en cours)": {
+ "account_number": "2314"
+ },
+ "Installations techniques, mat\u00e9riel et outillage (en cours)": {
+ "account_number": "2315"
+ },
+ "Autres immobilisations corporelles - hors biens vivants (en cours)": {
+ "account_number": "2318"
+ }
+ },
+ "Immobilisations incorporelles en cours": {
+ "account_number": "232"
+ },
+ "234-Immobilisations corporelles en cours (biens vivants)": {
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "2341"
+ },
+ "Animaux de services (en cours)": {
+ "account_number": "2343"
+ },
+ "Plantations p\u00e9rennes (en cours)": {
+ "account_number": "2346"
+ },
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s (en cours)": {
+ "account_number": "2347"
+ }
+ },
+ "Avances et acomptes vers\u00e9s sur immobilisations incorporelles": {
+ "account_number": "237"
+ },
+ "238-Avances et acomptes vers\u00e9s sur commandes d'immobilisations corporelles": {
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "2381"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_number": "2384"
+ }
+ }
+ },
+ "24-Immobilisations en cours (biens vivants)": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "241"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "242"
+ },
+ "Animaux de services": {
+ "account_number": "243"
+ },
+ "246-Plantations p\u00e9rennes": {
+ "Plantations p\u00e9rennes sur sol propre": {
+ "account_number": "2461"
+ },
+ "Plantations p\u00e9rennes sur sol d'autrui": {
+ "account_number": "2465"
+ },
+ "Am\u00e9nagements des plantations p\u00e9rennes": {
+ "account_number": "2467"
+ }
+ },
+ "247-Autres v\u00e9g\u00e9taux immobilis\u00e9s": {
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s sur sol propre": {
+ "account_number": "2471"
+ },
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s sur sol d'autrui": {
+ "account_number": "2475"
+ },
+ "Am\u00e9nagements des autres v\u00e9g\u00e9taux immobilis\u00e9s": {
+ "account_number": "2477"
+ }
+ }
+ },
+ "Entreprises li\u00e9es - parts et cr\u00e9ances": {
+ "account_number": "25"
+ },
+ "26-Participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "261-Titres de participation": {
+ "Actions": {
+ "account_number": "2611"
+ },
+ "Autres titres": {
+ "account_number": "2618"
+ }
+ },
+ "262-Participations \u00e0 des organismes professionnels agricoles": {
+ "Soci\u00e9t\u00e9s coop\u00e9ratives agricoles (sauf CUMA)": {
+ "account_number": "2621"
+ },
+ "CUMA": {
+ "account_number": "2622"
+ },
+ "SICA": {
+ "account_number": "2624"
+ },
+ "Autres": {
+ "account_number": "2628"
+ }
+ },
+ "Autres formes de participation": {
+ "account_number": "266"
+ },
+ "267-Cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des participations (groupe)": {
+ "account_number": "2671"
+ },
+ "2672-Cr\u00e9ances rattach\u00e9es \u00e0 des participations \u00e0 des organismes professionnels agricoles": {
+ "Soci\u00e9t\u00e9s coop\u00e9ratives agricoles (sauf CUMA)": {
+ "account_number": "26721"
+ },
+ "CUMA": {
+ "account_number": "26722"
+ },
+ "SICA": {
+ "account_number": "26724"
+ },
+ "Autres": {
+ "account_number": "26728"
+ }
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 d'autres participations": {
+ "account_number": "2674"
+ },
+ "Versements repr\u00e9sentatifs d'apports non capitalis\u00e9s (appel de fonds)": {
+ "account_number": "2675"
+ },
+ "Avances consolidables": {
+ "account_number": "2676"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "2678"
+ }
+ },
+ "268-Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": {
+ "Principal": {
+ "account_number": "2681"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "2688"
+ }
+ },
+ "269-Versements restant \u00e0 effectuer sur titres de participation non lib\u00e9r\u00e9s": {
+ "sur titres de participation": {
+ "account_number": "2691"
+ },
+ "sur participations \u00e0 des organismes professionnels agricoles": {
+ "account_number": "2692"
+ },
+ "sur autres formes de participation": {
+ "account_number": "2696"
+ }
+ }
+ },
+ "27-Autres immobilisations financi\u00e8res": {
+ "271-Titres immobilis\u00e9s (droit de propri\u00e9t\u00e9)": {
+ "Actions": {
+ "account_number": "2711"
+ },
+ "Parts dans les \u00e9tablissements de cr\u00e9dit": {
+ "account_number": "2715"
+ },
+ "Autres titres": {
+ "account_number": "2718"
+ }
+ },
+ "272-Titres immobilis\u00e9s (droit de cr\u00e9ance)": {
+ "Obligations": {
+ "account_number": "2721"
+ },
+ "Bons": {
+ "account_number": "2722"
+ },
+ "Certificats de fonds de d\u00e9veloppement coop\u00e9ratifs": {
+ "account_number": "2723"
+ }
+ },
+ "Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "273"
+ },
+ "274-Pr\u00eats": {
+ "Pr\u00eats participatifs": {
+ "account_number": "2741"
+ },
+ "Pr\u00eats aux associ\u00e9s": {
+ "account_number": "2742"
+ },
+ "Pr\u00eats au personnel": {
+ "account_number": "2743"
+ },
+ "Autres pr\u00eats": {
+ "account_number": "2748"
+ }
+ },
+ "275-D\u00e9p\u00f4ts et cautionnements vers\u00e9s": {
+ "D\u00e9p\u00f4ts": {
+ "account_number": "2751"
+ },
+ "Cautionnements": {
+ "account_number": "2755"
+ }
+ },
+ "276-Autres cr\u00e9ances immobilis\u00e9es": {
+ "Cr\u00e9ances diverses": {
+ "account_number": "2761"
+ },
+ "2768-Int\u00e9r\u00eats courus": {
+ "sur titres immobilis\u00e9s (droit de cr\u00e9ance)": {
+ "account_number": "27682"
+ },
+ "sur pr\u00eats": {
+ "account_number": "27684"
+ },
+ "sur d\u00e9p\u00f4ts et cautionnements vers\u00e9s": {
+ "account_number": "27685"
+ },
+ "sur cr\u00e9ances diverses": {
+ "account_number": "27688"
+ }
+ }
+ },
+ "Actions propres ou parts propres": {
+ "account_number": "277"
+ },
+ "Versements restant \u00e0 effectuer sur titres immobilis\u00e9s non lib\u00e9r\u00e9s": {
+ "account_number": "279"
+ }
+ },
+ "28-Amortissements des immobilisations": {
+ "account_type": "Accumulated Depreciation",
+ "280-Amortissements des immobilisations incorporelles": {
+ "account_type": "Accumulated Depreciation",
+ "Frais d'\u00e9tablissement": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2801"
+ },
+ "Frais de recherche et de d\u00e9veloppement": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2803"
+ },
+ "Concessions et droits similaires, brevets, licences, logiciels, droits et valeurs similaires": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2805"
+ },
+ "Fonds commercial": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2807"
+ },
+ "2808-Autres immobilisations incorporelles": {
+ "account_type": "Accumulated Depreciation",
+ "Usufruit temporaire": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "28082"
+ }
+ }
+ },
+ "281-Amortissements des immobilisations corporelles (hors biens vivants)": {
+ "account_type": "Accumulated Depreciation",
+ "Terrains de gisement": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2811"
+ },
+ "Agencements, am\u00e9nagements de terrains amortissables": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2812"
+ },
+ "Constructions sur sol propre": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2813"
+ },
+ "Constructions sur sol d'autrui": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2814"
+ },
+ "Installations, mat\u00e9riel et outillage": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2815"
+ },
+ "Autres immobilisations corporelles (hors biens vivants)": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "2818"
+ }
+ },
+ "Amortissement des immobilisations mises en concession": {
+ "account_type": "Accumulated Depreciation",
+ "account_number": "282"
+ },
+ "284-Amortissement des immobilisations corporelles (biens vivants)": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "2841"
+ },
+ "Animaux de service": {
+ "account_number": "2843"
+ },
+ "Plantation p\u00e9rennes": {
+ "account_number": "2846"
+ },
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s": {
+ "account_number": "2847"
+ }
+ }
+ },
+ "29-D\u00e9pr\u00e9ciations des immobilisations": {
+ "290-D\u00e9pr\u00e9ciations des immobilisations incorporelles": {
+ "Marques, proc\u00e9d\u00e9s, droits et valeurs similaires": {
+ "account_number": "2905"
+ },
+ "Droit au bail": {
+ "account_number": "2906"
+ },
+ "Fonds rural et commercial": {
+ "account_number": "2907"
+ },
+ "Autres immobilisations incorporelles": {
+ "account_number": "2908"
+ }
+ },
+ "291-D\u00e9pr\u00e9ciations des immobilisations corporelles (hors biens vivants)": {
+ "Terrains": {
+ "account_number": "2911"
+ },
+ "Agencements et am\u00e9nagements de terrains": {
+ "account_number": "2912"
+ },
+ "Constructions sur sol propre": {
+ "account_number": "2913"
+ },
+ "Constructions sur sol d'autrui": {
+ "account_number": "2914"
+ },
+ "Installations techniques, mat\u00e9riel et outillage": {
+ "account_number": "2915"
+ },
+ "Am\u00e9liorations du fonds": {
+ "account_number": "2917"
+ },
+ "Autres immobilisations corporelles (hors biens vivants)": {
+ "account_number": "2918"
+ }
+ },
+ "D\u00e9pr\u00e9ciations des immobilisations mises en concession": {
+ "account_number": "292"
+ },
+ "293-D\u00e9pr\u00e9ciations des immobilisations en cours": {
+ "Immobilisations corporelles en cours (hors biens vivants)": {
+ "account_number": "2931"
+ },
+ "Immobilisations incorporelles en cours": {
+ "account_number": "2932"
+ },
+ "Immobilisations corporelles en cours (biens vivants)": {
+ "account_number": "2934"
+ }
+ },
+ "294-Autres immobilisations corporelles (biens vivants)": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "2941"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "2942"
+ },
+ "Animaux de service": {
+ "account_number": "2943"
+ },
+ "Plantation p\u00e9rennes": {
+ "account_number": "2946"
+ },
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s": {
+ "account_number": "2947"
+ }
+ },
+ "296-D\u00e9pr\u00e9ciations des participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "Titres de participation": {
+ "account_number": "2961"
+ },
+ "Participations \u00e0 des organismes professionnels agricoles": {
+ "account_number": "2962"
+ },
+ "Autres formes de participation": {
+ "account_number": "2966"
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "account_number": "2967"
+ },
+ "Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": {
+ "account_number": "2968"
+ }
+ },
+ "297-D\u00e9pr\u00e9ciations des autres immobilisations financi\u00e8res": {
+ "Titres immobilis\u00e9s - droit de propri\u00e9t\u00e9": {
+ "account_number": "2971"
+ },
+ "Titres immobilis\u00e9s - droit de cr\u00e9ances": {
+ "account_number": "2972"
+ },
+ "Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {
+ "account_number": "2973"
+ },
+ "Pr\u00eats": {
+ "account_number": "2974"
+ },
+ "D\u00e9p\u00f4ts et cautionnements vers\u00e9s": {
+ "account_number": "2975"
+ },
+ "Autres cr\u00e9ances immobilis\u00e9es": {
+ "account_number": "2976"
+ }
+ }
+ }
+ },
+ "3-Comptes de stocks et en-cours": {
+ "root_type": "Asset",
+ "30-Stocks et en-cours": {
+ "301-Approvisionnements": {
+ "Engrais et amendements": {
+ "account_number": "3011"
+ },
+ "Semences et plants": {
+ "account_number": "3012"
+ },
+ "Produits de d\u00e9fense des v\u00e9g\u00e9taux": {
+ "account_number": "3013"
+ },
+ "Aliments du b\u00e9tail": {
+ "account_number": "3014"
+ },
+ "Produits de d\u00e9fense des animaux": {
+ "account_number": "3015"
+ },
+ "Produits de reproduction animale": {
+ "account_number": "3016"
+ },
+ "3017-Emballages": {
+ "Emballages perdus": {
+ "account_number": "30171"
+ },
+ "Emballages r\u00e9cup\u00e9rables non identifiables": {
+ "account_number": "30175"
+ },
+ "Emballages \u00e0 usage mixte": {
+ "account_number": "30177"
+ }
+ },
+ "Combustibles": {
+ "account_number": "3018"
+ }
+ },
+ "302-Autres approvisionnements": {
+ "Carburants et lubrifiants": {
+ "account_number": "3021"
+ },
+ "Produits d'entretien": {
+ "account_number": "3022"
+ },
+ "Fournitures d'atelier et de magasin": {
+ "account_number": "3023"
+ },
+ "Fournitures de bureau": {
+ "account_number": "3024"
+ },
+ "Denr\u00e9es et fournitures pour le personnel": {
+ "account_number": "3025"
+ },
+ "Mat\u00e9riaux divers": {
+ "account_number": "3026"
+ },
+ "Autres fournitures consommables": {
+ "account_number": "3027"
+ },
+ "Mati\u00e8res premi\u00e8res": {
+ "account_number": "3028"
+ }
+ },
+ "Marchandises": {
+ "account_number": "307"
+ }
+ },
+ "31-Animaux (cycle long)": {
+ "Stocks d'animaux (cycle long)": {
+ "account_number": "311"
+ }
+ },
+ "32-Animaux (cycle court)": {
+ "Stocks d'animaux (cycle court)": {
+ "account_number": "321"
+ }
+ },
+ "33-V\u00e9g\u00e9taux en terre (cycle long)": {
+ "331-Avances aux cultures (cycle long)": {
+ "Engrais et amendements en terre": {
+ "account_number": "3311"
+ },
+ "Semences et plants en terre": {
+ "account_number": "3312"
+ },
+ "Produit de d\u00e9fense des v\u00e9g\u00e9taux en terre": {
+ "account_number": "3313"
+ },
+ "Autres approvisionnements en terre": {
+ "account_number": "3314"
+ },
+ "Fa\u00e7ons culturales": {
+ "account_number": "3315"
+ },
+ "Autres": {
+ "account_number": "3318"
+ }
+ }
+ },
+ "34-V\u00e9g\u00e9taux en terre (cycle court)": {
+ "341-Avances aux cultures (cycle court)": {
+ "Engrais et amendements en terre": {
+ "account_number": "3411"
+ },
+ "Semences et plants en terre": {
+ "account_number": "3412"
+ },
+ "Produit de d\u00e9fense des v\u00e9g\u00e9taux en terre": {
+ "account_number": "3413"
+ },
+ "Autres approvisionnements en terre": {
+ "account_number": "3414"
+ },
+ "Fa\u00e7ons culturales": {
+ "account_number": "3415"
+ },
+ "Autres": {
+ "account_number": "3418"
+ }
+ },
+ "Autres v\u00e9g\u00e9taux en terre (cycle court)": {
+ "account_number": "348"
+ }
+ },
+ "35-En-cours de production de biens et services (cycle long)": {
+ "Biens (cycle long)": {
+ "account_number": "355"
+ },
+ "Autres biens (cycle long)": {
+ "account_number": "356"
+ },
+ "Travaux \u00e0 fa\u00e7on (cycle long)": {
+ "account_number": "357"
+ },
+ "Autres services (cycle long)": {
+ "account_number": "358"
+ }
+ },
+ "36-En-cours de production de biens et services (cycle court)": {
+ "Biens (cycle court) - Produits v\u00e9g\u00e9taux": {
+ "account_number": "361"
+ },
+ "Biens (cycle court) - Produits animaux": {
+ "account_number": "362"
+ },
+ "Biens (cycle court) - Vins": {
+ "account_number": "363"
+ },
+ "Biens (cycle court) - Alcools": {
+ "account_number": "364"
+ },
+ "Biens (cycle court) - Autres produits transform\u00e9s": {
+ "account_number": "365"
+ },
+ "Autres biens (activit\u00e9s annexes)": {
+ "account_number": "366"
+ },
+ "Travaux \u00e0 fa\u00e7on (cycle court)": {
+ "account_number": "367"
+ },
+ "Autres services (cycle court)": {
+ "account_number": "368"
+ }
+ },
+ "37-Stocks de Produits": {
+ "account_type": "Stock",
+ "Produits interm\u00e9diaires v\u00e9g\u00e9taux": {
+ "account_type": "Stock",
+ "account_number": "371"
+ },
+ "Produits interm\u00e9diaires animaux": {
+ "account_type": "Stock",
+ "account_number": "372"
+ },
+ "Produits interm\u00e9diaires transform\u00e9s": {
+ "account_type": "Stock",
+ "account_number": "373"
+ },
+ "Produits finis v\u00e9g\u00e9taux": {
+ "account_type": "Stock",
+ "account_number": "374"
+ },
+ "Produits finis animaux": {
+ "account_type": "Stock",
+ "account_number": "375"
+ },
+ "Produits finis transform\u00e9s": {
+ "account_type": "Stock",
+ "account_number": "376"
+ },
+ "Produits r\u00e9siduels": {
+ "account_type": "Stock",
+ "account_number": "377"
+ },
+ "Produits (activit\u00e9s annexes)": {
+ "account_type": "Stock",
+ "account_number": "378"
+ }
+ },
+ "Inventaire permanent": {
+ "account_number": "38"
+ },
+ "39-D\u00e9pr\u00e9ciations des stocks et en-cours": {
+ "D\u00e9pr\u00e9ciations des approvisionnements et marchandises": {
+ "account_number": "390"
+ },
+ "D\u00e9pr\u00e9ciations des animaux (cycle long)": {
+ "account_number": "391"
+ },
+ "D\u00e9pr\u00e9ciations des animaux (cycle court)": {
+ "account_number": "392"
+ },
+ "D\u00e9pr\u00e9ciations des v\u00e9g\u00e9taux en terre (cycle long)": {
+ "account_number": "393"
+ },
+ "D\u00e9pr\u00e9ciations des v\u00e9g\u00e9taux en terre (cycle court)": {
+ "account_number": "394"
+ },
+ "D\u00e9pr\u00e9ciations des en-cours de production de biens et services (cycle long)": {
+ "account_number": "395"
+ },
+ "D\u00e9pr\u00e9ciations des en-cours de production de biens et services (cycle court)": {
+ "account_number": "396"
+ },
+ "D\u00e9pr\u00e9ciations des produits": {
+ "account_number": "397"
+ }
+ }
+ },
+ "4-Comptes de tiers (ACTIF)": {
+ "root_type": "Asset",
+ "40-Fournisseurs et comptes rattach\u00e9s (ACTIF)": {
+ "409-Fournisseurs d\u00e9biteurs": {
+ "Fournisseurs - Avances et acomptes vers\u00e9s sur commandes": {
+ "account_number": "4091"
+ },
+ "Fournisseurs - Cr\u00e9ances pour emballages et mat\u00e9riel \u00e0 rendre": {
+ "account_number": "4096"
+ },
+ "4097-Fournisseurs - Autres avoirs": {
+ "Fournisseurs d'exploitation": {
+ "account_number": "40971"
+ },
+ "Fournisseurs d'immobilisations": {
+ "account_number": "40974"
+ }
+ },
+ "Rabais, remises, ristournes \u00e0 obtenir et autres avoirs non encore re\u00e7us": {
+ "account_number": "4098"
+ }
+ }
+ },
+ "41-Clients et comptes rattach\u00e9s (ACTIF)": {
+ "account_type": "Receivable",
+ "411-Clients": {
+ "account_type": "Receivable",
+ "Clients - Ventes de biens ou de prestations de services": {
+ "account_type": "Receivable",
+ "account_number": "4111"
+ },
+ "Clients - Retenues de garantie": {
+ "account_type": "Receivable",
+ "account_number": "4117"
+ }
+ },
+ "Clients - Effets \u00e0 recevoir": {
+ "account_type": "Receivable",
+ "account_number": "413"
+ },
+ "Clients douteux ou litigieux": {
+ "account_type": "Receivable",
+ "account_number": "416"
+ },
+ "418-Clients - Produits non encore factur\u00e9s": {
+ "account_type": "Receivable",
+ "Clients - Factures \u00e0 \u00e9tablir": {
+ "account_type": "Receivable",
+ "account_number": "4181"
+ },
+ "Clients - Int\u00e9r\u00eats courus": {
+ "account_type": "Receivable",
+ "account_number": "4188"
+ }
+ }
+ },
+ "42-Personnel et comptes rattach\u00e9s (ACTIF)": {
+ "Personnel - Avances et acomptes": {
+ "account_number": "425"
+ }
+ },
+ "43-Mutualit\u00e9 Sociale Agricole et autres organismes sociaux (ACTIF)": {
+ "Mutualit\u00e9 Sociale Agricole": {
+ "account_number": "431"
+ },
+ "Autres organismes sociaux": {
+ "account_number": "437"
+ },
+ "438-Organismes sociaux - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Produits \u00e0 recevoir": {
+ "account_number": "4387"
+ }
+ }
+ },
+ "44-Etat et autres collectivit\u00e9s publiques (ACTIF)": {
+ "441-Etat - Subventions \u00e0 recevoir": {
+ "Subventions d'investissement": {
+ "account_number": "4411"
+ },
+ "Subventions d'exploitation": {
+ "account_number": "4417"
+ },
+ "Subventions d'\u00e9quilibre": {
+ "account_number": "4418"
+ },
+ "Avances sur subventions": {
+ "account_number": "4419"
+ }
+ },
+ "Op\u00e9rations particuli\u00e8res avec l'Etat, les collectivit\u00e9s publiques, les organismes internationaux": {
+ "account_number": "443"
+ },
+ "445-Etat - Taxes sur le chiffre d'affaires": {
+ "TVA due intracommunautaire": {
+ "account_number": "4452",
+ "account_type": "Tax",
+ "tax_rate": -20
+ },
+ "44551-TVA à décaisser": {
+ "TVA 20% Déductible": {
+ "account_number": "445511",
+ "account_type": "Tax",
+ "tax_rate": 20
+ },
+ "TVA 10% Déductible": {
+ "account_number": "445512",
+ "account_type": "Tax",
+ "tax_rate": 10
+ },
+ "TVA 5.5% Déductible": {
+ "account_number": "445513",
+ "account_type": "Tax",
+ "tax_rate": 5.5
+ },
+ "TVA 2.1% Déductible": {
+ "account_number": "445514",
+ "account_type": "Tax",
+ "tax_rate": 2.1
+ }
+ },
+ "4456-Taxes sur le chiffre d'affaires d\u00e9ductibles": {
+ "TVA sur immobilisations": {
+ "account_number": "44562"
+ },
+ "TVA transf\u00e9r\u00e9e par d'autres entreprises": {
+ "account_number": "44563"
+ },
+ "44566-TVA sur autres biens et services": {
+ "TVA sur intracommunautaire sur biens et services": {
+ "account_number": "445662",
+ "account_type": "Tax",
+ "tax_rate": 20
+ }
+ },
+ "Cr\u00e9dit de TVA \u00e0 reporter": {
+ "account_number": "44567"
+ },
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44568"
+ }
+ },
+ "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente": {
+ "Acomptes - R\u00e9gime simplifi\u00e9 d'imposition": {
+ "account_number": "44581"
+ },
+ "Acomptes - R\u00e9gime du forfait": {
+ "account_number": "44582"
+ },
+ "Remboursement de taxes sur le chiffre d'affaires demand\u00e9": {
+ "account_number": "44583"
+ },
+ "Taxes sur le chiffre d'affaires sur factures non parvenues": {
+ "account_number": "44586"
+ }
+ }
+ },
+ "448-Etat - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Charges fiscales sur cong\u00e9s \u00e0 payer": {
+ "account_number": "4482"
+ },
+ "Autres charges \u00e0 payer": {
+ "account_number": "4486"
+ },
+ "Produits \u00e0 recevoir": {
+ "account_number": "4487"
+ }
+ }
+ },
+ "45-Groupe, communaut\u00e9s d'exploitation et associ\u00e9s (ACTIF)": {
+ "456-Associ\u00e9s - Op\u00e9rations sur le capital": {
+ "4562-Apporteurs - Capital appel\u00e9, non vers\u00e9": {
+ "Actionnaires - Capital souscrit et appel\u00e9, non vers\u00e9": {
+ "account_number": "45621"
+ },
+ "Associ\u00e9s - Capital appel\u00e9, non vers\u00e9": {
+ "account_number": "45625"
+ }
+ }
+ }
+ },
+ "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (ACTIF)": {
+ "Cr\u00e9ances sur cessions d'immobilisations": {
+ "account_number": "462"
+ },
+ "Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "465"
+ },
+ "Autres comptes d\u00e9biteurs ou cr\u00e9diteurs": {
+ "account_number": "467"
+ },
+ "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Produits \u00e0 recevoir": {
+ "account_number": "4687"
+ }
+ }
+ },
+ "47-Comptes transitoires ou d'attente (ACTIF)": {
+ "471-Comptes d'attente (ACTIF)": {
+ "account_type": "Temporary"
+ },
+ "476-Diff\u00e9rence de conversion - Actif": {
+ "Diminution des cr\u00e9ances": {
+ "account_number": "4761"
+ },
+ "Augmentation des dettes": {
+ "account_number": "4762"
+ },
+ "Diff\u00e9rences compens\u00e9es par couverture de change": {
+ "account_number": "4768"
+ }
+ },
+ "478-Autres comptes transitoires (ACTIF)": {}
+ },
+ "48-Comptes de r\u00e9gularisation (ACTIF)": {
+ "481-Charges \u00e0 r\u00e9partir sur plusieurs exercices": {
+ "Frais d'\u00e9mission des emprunts": {
+ "account_number": "4816"
+ }
+ },
+ "Charges constat\u00e9es d'avance": {
+ "account_number": "486"
+ },
+ "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits": {
+ "Charges": {
+ "account_number": "4886"
+ }
+ }
+ },
+ "49-D\u00e9pr\u00e9ciations des comptes de tiers (ACTIF)": {
+ "495-D\u00e9pr\u00e9ciations des comptes du groupe, des communaut\u00e9s d'exploitation et des associ\u00e9s": {
+ "Comptes du groupe": {
+ "account_number": "4951"
+ },
+ "Comptes courants des associ\u00e9s": {
+ "account_number": "4955"
+ },
+ "Op\u00e9rations faites en commun et en GIE": {
+ "account_number": "4958"
+ }
+ },
+ "496-D\u00e9pr\u00e9ciations des comptes de d\u00e9biteurs divers": {
+ "Cr\u00e9ances sur cessions d'immobilisations": {
+ "account_number": "4962"
+ },
+ "Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "4965"
+ },
+ "Autres comptes d\u00e9biteurs": {
+ "account_number": "4967"
+ }
+ }
+ }
+ },
+ "4-Comptes de tiers (PASSIF)": {
+ "root_type": "Liability",
+ "40-Fournisseurs et comptes rattach\u00e9s (PASSIF)": {
+ "account_type": "Payable",
+ "401-Fournisseurs d'exploitation": {
+ "Fournisseurs - Achats de biens et de prestations de services": {
+ "account_type": "Payable",
+ "account_number": "4011"
+ },
+ "Fournisseurs - Retenues de garantie": {
+ "account_type": "Payable",
+ "account_number": "4017"
+ }
+ },
+ "Fournisseurs - Effets \u00e0 payer": {
+ "account_type": "Payable",
+ "account_number": "403"
+ },
+ "404-Fournisseurs d'immobilisations": {
+ "account_type": "Payable",
+ "Fournisseurs - Achats d'immobilisations": {
+ "account_type": "Payable",
+ "account_number": "4041"
+ },
+ "Fournisseurs d'immobilisations - Retenues de garantie": {
+ "account_type": "Payable",
+ "account_number": "4047"
+ }
+ },
+ "Fournisseurs d'immobilisations - Effets \u00e0 payer": {
+ "account_type": "Payable",
+ "account_number": "405"
+ },
+ "408-Fournisseurs - Factures non parvenues": {
+ "account_type": "Stock Received But Not Billed",
+ "Fournisseurs d'exploitation": {
+ "account_type": "Stock Received But Not Billed",
+ "account_number": "4081"
+ },
+ "Fournisseurs d'immobilisations": {
+ "account_type": "Asset Received But Not Billed",
+ "account_number": "4084"
+ },
+ "Fournisseurs - Int\u00e9r\u00eats courus": {
+ "account_type": "Stock Received But Not Billed",
+ "account_number": "4088"
+ }
+ }
+ },
+ "41-Clients et comptes rattach\u00e9s (PASSIF)": {
+ "419-Clients cr\u00e9diteurs": {
+ "Clients - Avances et acomptes re\u00e7us sur commandes": {
+ "account_number": "4191",
+ "account_type": "Payable"
+ },
+ "Clients - Dettes sur emballages et mat\u00e9riels consign\u00e9s": {
+ "account_number": "4196"
+ },
+ "Clients - Autres avoirs": {
+ "account_number": "4197"
+ },
+ "Rabais, remises, ristournes \u00e0 accorder et autres avoirs \u00e0 \u00e9tablir": {
+ "account_number": "4198"
+ }
+ }
+ },
+ "42-Personnel et comptes rattach\u00e9s (PASSIF)": {
+ "Personnel - R\u00e9mun\u00e9rations dues": {
+ "account_number": "421"
+ },
+ "Comit\u00e9s d'entreprises, d'\u00e9tablissement": {
+ "account_number": "422"
+ },
+ "424-Participation des salari\u00e9s aux r\u00e9sultats": {
+ "R\u00e9serve sp\u00e9ciale (art. L. 442-2 du Code du travail)": {
+ "account_number": "4246"
+ },
+ "Comptes courants": {
+ "account_number": "4248"
+ }
+ },
+ "Personnel - D\u00e9p\u00f4ts": {
+ "account_number": "426"
+ },
+ "Personnel - Oppositions": {
+ "account_number": "427"
+ },
+ "428-Personnel - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Dettes provisionn\u00e9es pour cong\u00e9s \u00e0 payer": {
+ "account_number": "4282"
+ },
+ "Dettes provisionn\u00e9es pour participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "4284"
+ },
+ "Autres charges \u00e0 payer": {
+ "account_number": "4286"
+ },
+ "Produits \u00e0 recevoir": {
+ "account_number": "4287"
+ }
+ }
+ },
+ "43-Mutualit\u00e9 Sociale Agricole et autres organismes sociaux (PASSIF)": {
+ "438-Organismes sociaux - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Charges sociales sur cong\u00e9s \u00e0 payer": {
+ "account_number": "4382"
+ },
+ "Autres charges \u00e0 payer": {
+ "account_number": "4386"
+ }
+ }
+ },
+ "44-Etat et autres collectivit\u00e9s publiques (PASSIF)": {
+ "442-Etat - Imp\u00f4ts et taxes recouvrables sur des tiers": {
+ "Obligataires": {
+ "account_number": "4424"
+ },
+ "Associ\u00e9s": {
+ "account_number": "4425"
+ }
+ },
+ "Etat - Imp\u00f4ts sur les b\u00e9n\u00e9fices": {
+ "account_number": "444"
+ },
+ "445-Etat - Taxes sur le chiffre d'affaires": {
+ "4455-Taxes sur le chiffre d'affaires \u00e0 d\u00e9caisser": {
+ "TVA \u00e0 d\u00e9caisser": {
+ "account_number": "44551"
+ },
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44558"
+ }
+ },
+ "4457-Taxes sur le chiffre d'affaires collect\u00e9es par l'entreprise": {
+ "44571-TVA collect\u00e9e": {
+ "account_type": "Tax",
+ "TVA 20% Collectée": {
+ "account_type": "Tax",
+ "account_number": "4457101",
+ "tax_rate": 20
+ },
+ "TVA 10% Collectée": {
+ "account_type": "Tax",
+ "account_number": "4457102",
+ "tax_rate": 10
+ },
+ "TVA 5.5% Collectée": {
+ "account_type": "Tax",
+ "account_number": "4457103",
+ "tax_rate": 5.5
+ },
+ "TVA 2.1% Collectée": {
+ "account_type": "Tax",
+ "account_number": "4457104",
+ "tax_rate": 2.1
+ }
+ },
+ "Taxes assimil\u00e9es \u00e0 la TVA": {
+ "account_number": "44578"
+ }
+ },
+ "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente": {
+ "TVA r\u00e9cup\u00e9r\u00e9e d'avance": {
+ "account_number": "44584"
+ },
+ "Taxes sur le chiffre d'affaires sur factures \u00e0 \u00e9tablir": {
+ "account_number": "44587"
+ }
+ }
+ },
+ "Obligations cautionn\u00e9es": {
+ "account_number": "446"
+ },
+ "Autres imp\u00f4ts, taxes et versements assimil\u00e9s": {
+ "account_number": "447"
+ }
+ },
+ "45-Groupe, communaut\u00e9s d'exploitation et associ\u00e9s (PASSIF)": {
+ "Groupe": {
+ "account_number": "451"
+ },
+ "455-Associ\u00e9s - Comptes courants": {
+ "Associ\u00e9s - Comptes courants (principal)": {
+ "account_number": "4551"
+ },
+ "Associ\u00e9s - Comptes courants (int\u00e9r\u00eats courus)": {
+ "account_number": "4558"
+ }
+ },
+ "456-Associ\u00e9s - Op\u00e9rations sur le capital": {
+ "4561-Associ\u00e9s - Comptes d'apport en soci\u00e9t\u00e9": {
+ "Apports en nature": {
+ "account_number": "45611"
+ },
+ "Apports en num\u00e9raire": {
+ "account_number": "45615"
+ }
+ },
+ "Associ\u00e9s - Versements re\u00e7us sur augmentation de capital": {
+ "account_number": "4563"
+ },
+ "Associ\u00e9s - Versements anticip\u00e9s": {
+ "account_number": "4564"
+ },
+ "Associ\u00e9s d\u00e9faillants": {
+ "account_number": "4566"
+ },
+ "Associ\u00e9s - Capital \u00e0 rembourser": {
+ "account_number": "4567"
+ }
+ },
+ "Associ\u00e9s - Dividendes \u00e0 payer": {
+ "account_number": "457"
+ },
+ "458-Associ\u00e9s - Op\u00e9rations faites en commun et en GIE": {
+ "Op\u00e9rations courantes": {
+ "account_number": "4581"
+ },
+ "Int\u00e9r\u00eats courus": {
+ "account_number": "4588"
+ }
+ }
+ },
+ "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (PASSIF)": {
+ "Dettes sur acquisitions de valeurs mobili\u00e8res de placement": {
+ "account_number": "464"
+ },
+ "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs": {
+ "Autres comptes d\u00e9biteurs": {
+ "account_number": "4671"
+ },
+ "Autres comptes cr\u00e9diteurs": {
+ "account_number": "4672"
+ }
+ },
+ "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir": {
+ "Charges \u00e0 payer": {
+ "account_number": "4686"
+ }
+ }
+ },
+ "47-Comptes transitoires ou d'attente (PASSIF)": {
+ "471-Comptes d'attente (PASSIF)": {
+ "account_type": "Temporary"
+ },
+ "477-Diff\u00e9rences de conversion - Passif": {
+ "Augmentation des cr\u00e9ances": {
+ "account_number": "4771"
+ },
+ "Diminution des dettes": {
+ "account_number": "4772"
+ },
+ "Diff\u00e9rences compens\u00e9es par couverture de change": {
+ "account_number": "4778"
+ }
+ },
+ "478-Autres comptes transitoires (PASSIF)": {}
+ },
+ "48-Comptes de r\u00e9gularisation (PASSIF)": {
+ "Produits constat\u00e9s d'avance": {
+ "account_number": "487"
+ },
+ "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits": {
+ "Produits": {
+ "account_number": "4887"
+ }
+ }
+ },
+ "D\u00e9pr\u00e9ciations des comptes de tiers (PASSIF)": {
+ "account_number": "49"
+ }
+ },
+ "5-Comptes financiers": {
+ "root_type": "Asset",
+ "50-Valeurs mobili\u00e8res de placement": {
+ "Parts dans des entreprises li\u00e9es": {
+ "account_number": "501"
+ },
+ "Actions propres": {
+ "account_number": "502"
+ },
+ "503-Actions": {
+ "Titres cot\u00e9s": {
+ "account_number": "5031"
+ },
+ "Titres non cot\u00e9s": {
+ "account_number": "5035"
+ }
+ },
+ "Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {
+ "account_number": "504"
+ },
+ "Obligations et bons \u00e9mis par la soci\u00e9t\u00e9 et rachet\u00e9s par elle": {
+ "account_number": "505"
+ },
+ "506-Obligations": {
+ "Titres cot\u00e9s": {
+ "account_number": "5061"
+ },
+ "Titres non cot\u00e9s": {
+ "account_number": "5065"
+ }
+ },
+ "Bons du Tr\u00e9sor et bons de caisse \u00e0 court terme": {
+ "account_number": "507"
+ },
+ "508-Autres valeurs mobili\u00e8res de placement et autres cr\u00e9ances assimil\u00e9es": {
+ "Autres valeurs mobili\u00e8res": {
+ "account_number": "5081"
+ },
+ "Bons de souscription": {
+ "account_number": "5082"
+ },
+ "Int\u00e9r\u00eats courus sur obligations, bons et valeurs assimil\u00e9s": {
+ "account_number": "5088"
+ }
+ },
+ "Versements restant \u00e0 effectuer sur valeurs mobili\u00e8res de placement non lib\u00e9r\u00e9es": {
+ "account_number": "509"
+ }
+ },
+ "51-Banques, \u00e9tablissements financiers et assimil\u00e9s": {
+ "511-Valeurs \u00e0 l'encaissement": {
+ "Coupons \u00e9chus \u00e0 l'encaissement": {
+ "account_number": "5111"
+ },
+ "Ch\u00e8ques \u00e0 encaisser": {
+ "account_number": "5112"
+ },
+ "Effets \u00e0 l'encaissement": {
+ "account_number": "5113"
+ },
+ "Effets \u00e0 l'escompte": {
+ "account_number": "5114"
+ }
+ },
+ "512-Banques": {
+ "account_type": "Bank",
+ "Comptes en euros": {
+ "account_type": "Bank",
+ "account_number": "5121"
+ },
+ "Comptes en devises": {
+ "account_type": "Bank",
+ "account_number": "5124"
+ }
+ },
+ "Ch\u00e8ques postaux": {
+ "account_number": "514"
+ },
+ "Caisses du Tr\u00e9sor et des \u00e9tablissements publics": {
+ "account_number": "515"
+ },
+ "Soci\u00e9t\u00e9s de Bourse": {
+ "account_number": "516"
+ },
+ "Autres organismes financiers": {
+ "account_number": "517"
+ },
+ "518-Int\u00e9r\u00eats courus": {
+ "Int\u00e9r\u00eats courus \u00e0 payer": {
+ "account_number": "5181"
+ },
+ "Int\u00e9r\u00eats courus \u00e0 recevoir": {
+ "account_number": "5188"
+ }
+ },
+ "519-Concours bancaires courants": {
+ "Cr\u00e9dit bancaires de campagne": {
+ "account_number": "5191"
+ },
+ "Mobilisation de cr\u00e9ances n\u00e9es \u00e0 l'\u00e9tranger": {
+ "account_number": "5193"
+ },
+ "Cr\u00e9dits de mobilisation de cr\u00e9ances": {
+ "account_number": "5197"
+ },
+ "Int\u00e9r\u00eats courus sur concours bancaires courants": {
+ "account_number": "5198"
+ }
+ }
+ },
+ "Instruments de tr\u00e9sorerie": {
+ "account_number": "52"
+ },
+ "53-Caisse": {
+ "account_type": "Cash",
+ "Caisse": {
+ "account_type": "Cash",
+ "account_number": "530"
+ }
+ },
+ "R\u00e9gies d'avance et accr\u00e9ditifs": {
+ "account_number": "54"
+ },
+ "Virements internes": {
+ "account_number": "58"
+ },
+ "59-D\u00e9pr\u00e9ciations des comptes financiers": {
+ "590-D\u00e9pr\u00e9ciations des valeurs mobili\u00e8res de placement": {
+ "Actions": {
+ "account_number": "5903"
+ },
+ "Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {
+ "account_number": "5904"
+ },
+ "Obligations": {
+ "account_number": "5906"
+ },
+ "Autres valeurs mobili\u00e8res de placement et cr\u00e9ances assimil\u00e9es": {
+ "account_number": "5908"
+ }
+ }
+ }
+ },
+ "6-Comptes de charges": {
+ "root_type": "Expense",
+ "60-Achats (sauf 603)": {
+ "601-Achats stock\u00e9s - approvisionnements": {
+ "account_type": "Cost of Goods Sold",
+ "Engrais et amendements": {
+ "account_number": "6011"
+ },
+ "Semences et plants": {
+ "account_number": "6012"
+ },
+ "Produits de d\u00e9fense des v\u00e9g\u00e9taux": {
+ "account_number": "6013"
+ },
+ "Aliments du b\u00e9tail": {
+ "account_number": "6014"
+ },
+ "Produits de d\u00e9fense des animaux": {
+ "account_number": "6015"
+ },
+ "Produits de reproduction animale": {
+ "account_number": "6016"
+ },
+ "6017-Emballages": {
+ "account_type": "Cost of Goods Sold",
+ "Emballages perdus": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60171"
+ },
+ "Emballages r\u00e9cup\u00e9rables non identifiables": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60172"
+ },
+ "Emballages \u00e0 usage mixte": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "60173"
+ }
+ },
+ "Combustibles": {
+ "account_number": "6018"
+ }
+ },
+ "602-Achats stock\u00e9s - Autres approvisionnements": {
+ "Carburants et lubrifiants": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6021"
+ },
+ "Produits d'entretien": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6022"
+ },
+ "Fournitures d'atelier et de magasin": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6023"
+ },
+ "Fournitures de bureau": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6024"
+ },
+ "Denr\u00e9es et fournitures pour le personnel": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6025"
+ },
+ "Mat\u00e9riaux divers": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6026"
+ },
+ "Autres fournitures consommables": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6027"
+ },
+ "Mati\u00e8res premi\u00e8res": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6028"
+ }
+ },
+ "603-Variations des stocks (approvisionnements et marchandises)": {
+ "account_type": "Stock Adjustment",
+ "Variation des stocks d'approvisionnements": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6031"
+ },
+ "Variation des stocks d'autres approvisionnements": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6032"
+ },
+ "Variation des stocks de marchandises": {
+ "account_type": "Stock Adjustment",
+ "account_number": "6037"
+ }
+ },
+ "604-Achats d'animaux": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "6041"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "6042"
+ },
+ "Autres animaux": {
+ "account_number": "6045"
+ }
+ },
+ "605-Achats de travaux et services incorpor\u00e9s aux produits": {
+ "Achats de travaux et services incorpor\u00e9s pour productions v\u00e9g\u00e9tales": {
+ "account_number": "6051"
+ },
+ "Achats de travaux et services incorpor\u00e9s pour productions animales": {
+ "account_number": "6054"
+ },
+ "Autres achats de travaux et services": {
+ "account_number": "6058"
+ }
+ },
+ "606-Achats non stock\u00e9s et fournitures": {
+ "account_type": "Cost of Goods Sold",
+ "Eau": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6061"
+ },
+ "Gaz": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6062"
+ },
+ "Electricit\u00e9s": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6063"
+ },
+ "Carburants et lubrifiants": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6064"
+ },
+ "Eau d'irrigation": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6065"
+ },
+ "Fournitures d'entretien et de petit \u00e9quipement": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6066"
+ },
+ "Fournitures pour productions immobilis\u00e9es": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6067"
+ },
+ "Autres fournitures non stock\u00e9s": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6068"
+ }
+ },
+ "607-Achats de marchandises": {
+ "account_type": "Cost of Goods Sold",
+ "Marchandises": {
+ "account_type": "Cost of Goods Sold",
+ "account_number": "6071"
+ },
+ "Éco-contribution": {
+ "account_type": "Expense Account",
+ "account_number": "6079"
+ }
+ },
+ "Frais accessoires sur achats": {
+ "account_number": "608",
+ "account_type": "Expenses Included In Valuation"
+ },
+ "609-Rabais, remises et ristournes obtenus sur achats": {
+ "RRR sur achats d'autres approvisionnements": {
+ "account_number": "6091"
+ },
+ "RRR sur achats d'approvisionnements": {
+ "account_number": "6092"
+ },
+ "RRR sur achats d'animaux": {
+ "account_number": "6094"
+ },
+ "RRR sur achats de travaux et services incorpor\u00e9s aux produits": {
+ "account_number": "6095"
+ },
+ "RRR sur achats de fournitures non stock\u00e9s": {
+ "account_number": "6096"
+ },
+ "RRR sur achats de marchandises": {
+ "account_number": "6097"
+ },
+ "Rabais, remises et ristournes non affect\u00e9s": {
+ "account_number": "6098"
+ }
+ }
+ },
+ "61-Services ext\u00e9rieurs": {
+ "Sous-traitance g\u00e9n\u00e9rale": {
+ "account_number": "611"
+ },
+ "612-Redevances de cr\u00e9dit-bail": {
+ "Redevances de cr\u00e9dit-bail mobilier": {
+ "account_number": "6122"
+ },
+ "Redevances de cr\u00e9dit-bail immobilier": {
+ "account_number": "6125"
+ }
+ },
+ "613-Locations": {
+ "Fermages et loyers du foncier": {
+ "account_number": "6131"
+ },
+ "Locations de mat\u00e9riel": {
+ "account_number": "6132"
+ },
+ "Locations d'animaux": {
+ "account_number": "6134"
+ },
+ "Malis sur emballages": {
+ "account_number": "6136"
+ },
+ "Autres locations": {
+ "account_number": "6138"
+ }
+ },
+ "614-Charges locatives et de copropri\u00e9t\u00e9": {
+ "Charges locatives du foncier": {
+ "account_number": "6141"
+ },
+ "Charges locatives du mat\u00e9riel": {
+ "account_number": "6142"
+ },
+ "Charges locatives des animaux": {
+ "account_number": "6144"
+ },
+ "Autres charges locatives et de copropri\u00e9t\u00e9": {
+ "account_number": "6148"
+ }
+ },
+ "615-Entretien et r\u00e9parations": {
+ "Terrains": {
+ "account_number": "6151"
+ },
+ "Agencements et am\u00e9nagements de terrains": {
+ "account_number": "6152"
+ },
+ "Constructions (sur sol propre)": {
+ "account_number": "6153"
+ },
+ "Constructions (sur sol d'autrui)": {
+ "account_number": "6154"
+ },
+ "Installations techniques, mat\u00e9riel et outillage": {
+ "account_number": "6155"
+ },
+ "Plantations p\u00e9rennes": {
+ "account_number": "6156"
+ },
+ "Autres v\u00e9g\u00e9taux immobilis\u00e9s": {
+ "account_number": "6157"
+ },
+ "Autres immobilisations corporelles (hors biens vivants)": {
+ "account_number": "6158"
+ }
+ },
+ "616-Primes d'assurances": {
+ "Multirisques": {
+ "account_number": "6161"
+ },
+ "Assurance obligatoire dommage construction": {
+ "account_number": "6162"
+ },
+ "Assurance - transport (sur achats)": {
+ "account_number": "6163"
+ },
+ "Assurance - transport (sur ventes)": {
+ "account_number": "6164"
+ },
+ "Assurance - transport (sur autres biens)": {
+ "account_number": "6165"
+ },
+ "Risques d'exploitation": {
+ "account_number": "6166"
+ },
+ "Insolvabilit\u00e9 clients": {
+ "account_number": "6167"
+ },
+ "Autres": {
+ "account_number": "6168"
+ }
+ },
+ "Etudes et recherches": {
+ "account_number": "617"
+ },
+ "618-Divers": {
+ "Documentation g\u00e9n\u00e9rale": {
+ "account_number": "6181"
+ },
+ "Documentation technique": {
+ "account_number": "6183"
+ },
+ "Frais de colloques, s\u00e9minaires, conf\u00e9rences": {
+ "account_number": "6185"
+ }
+ },
+ "Rabais, remises et ristournes obtenus sur services ext\u00e9rieurs": {
+ "account_number": "619"
+ }
+ },
+ "62-Autres services ext\u00e9rieurs": {
+ "621-Personnel ext\u00e9rieur \u00e0 l'entreprise": {
+ "Personnel int\u00e9rimaire": {
+ "account_number": "6211"
+ },
+ "Personnel d\u00e9tach\u00e9 ou pr\u00eat\u00e9 \u00e0 l'entreprise": {
+ "account_number": "6214"
+ }
+ },
+ "622-R\u00e9mun\u00e9rations d'interm\u00e9diaires et honoraires": {
+ "Commissions et courtages sur achats": {
+ "account_number": "6221"
+ },
+ "Commissions et courtages sur ventes": {
+ "account_number": "6222"
+ },
+ "R\u00e9mun\u00e9rations des transitaires": {
+ "account_number": "6223"
+ },
+ "R\u00e9mun\u00e9rations d'affacturage": {
+ "account_number": "6224"
+ },
+ "Honoraires v\u00e9t\u00e9rinaires": {
+ "account_number": "6225"
+ },
+ "Autres honoraires": {
+ "account_number": "6226"
+ },
+ "Frais d'actes et de contentieux": {
+ "account_number": "6227"
+ },
+ "Divers": {
+ "account_number": "6228"
+ }
+ },
+ "623-Publicit\u00e9, publications, relations publiques": {
+ "Annonces et insertions": {
+ "account_number": "6231"
+ },
+ "Echantillons": {
+ "account_number": "6232"
+ },
+ "Emplacements foires et expositions": {
+ "account_number": "6233"
+ },
+ "Cadeaux \u00e0 la client\u00e8le": {
+ "account_number": "6234"
+ },
+ "Primes": {
+ "account_number": "6235"
+ },
+ "Catalogues et imprim\u00e9s": {
+ "account_number": "6236"
+ },
+ "Publications": {
+ "account_number": "6237"
+ },
+ "Divers (pourboire, dons courants, etc)": {
+ "account_number": "6238"
+ }
+ },
+ "624-Transports de biens et transports collectifs du personnel": {
+ "Transports sur achats": {
+ "account_number": "6241",
+ "account_type": "Chargeable"
+ },
+ "Transports sur ventes": {
+ "account_type": "Chargeable",
+ "account_number": "6242"
+ },
+ "Transports entre \u00e9tablissements ou chantiers": {
+ "account_number": "6243"
+ },
+ "Transports administratifs": {
+ "account_number": "6244"
+ },
+ "Transports collectifs du personnel": {
+ "account_number": "6247"
+ },
+ "Autres transports": {
+ "account_number": "6248"
+ }
+ },
+ "625-D\u00e9placements, missions et r\u00e9ceptions": {
+ "Voyages et d\u00e9placements": {
+ "account_number": "6251"
+ },
+ "Frais de d\u00e9m\u00e9nagement": {
+ "account_number": "6255"
+ },
+ "Missions": {
+ "account_number": "6256"
+ },
+ "R\u00e9ceptions": {
+ "account_number": "6257"
+ }
+ },
+ "Frais postaux et de t\u00e9l\u00e9communications": {
+ "account_number": "626"
+ },
+ "627-Services bancaires et assimil\u00e9s": {
+ "Frais sur titres (achat, vente, garde)": {
+ "account_number": "6271"
+ },
+ "Commissions et frais sur \u00e9mission d'emprunts": {
+ "account_number": "6272"
+ },
+ "Frais sur effets (commissions d'endos\u2026)": {
+ "account_number": "6275"
+ },
+ "Location de coffres": {
+ "account_number": "6276"
+ },
+ "Autres frais et commissions sur prestations de services": {
+ "account_number": "6278"
+ }
+ },
+ "628-Divers": {
+ "Cotisations professionnelles (productions animales)": {
+ "account_number": "6281"
+ },
+ "Cotisations professionnelles (productions v\u00e9g\u00e9tales)": {
+ "account_number": "6284"
+ },
+ "Autres cotisations professionnelles": {
+ "account_number": "6286"
+ },
+ "Frais de recrutement de personnel": {
+ "account_number": "6287"
+ },
+ "Autres services ext\u00e9rieurs divers": {
+ "account_number": "6288"
+ }
+ },
+ "Rabais, remises et ristournes obtenus sur autres services ext\u00e9rieurs": {
+ "account_number": "629"
+ }
+ },
+ "63-Imp\u00f4ts, taxes et versements assimil\u00e9s": {
+ "631-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (administrations des imp\u00f4ts)": {
+ "Taxe sur les salaires": {
+ "account_number": "6311"
+ },
+ "Taxe d'apprentissage": {
+ "account_number": "6312"
+ },
+ "Participation des employeurs \u00e0 la formation professionnelle continue": {
+ "account_number": "6313"
+ },
+ "Cotisation pour d\u00e9faut d'investissement obligatoire dans la construction": {
+ "account_number": "6314"
+ },
+ "Autres": {
+ "account_number": "6318"
+ }
+ },
+ "633-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (autres organismes)": {
+ "Versement de transport": {
+ "account_number": "6331"
+ },
+ "Allocations logement": {
+ "account_number": "6332"
+ },
+ "Participation des employeurs \u00e0 la formation professionnelle continue": {
+ "account_number": "6333"
+ },
+ "Participation des employeurs \u00e0 l'effort de construction": {
+ "account_number": "6334"
+ },
+ "Versements lib\u00e9ratoires ouvrant droit \u00e0 l'exon\u00e9ration de la taxe d'apprentissage": {
+ "account_number": "6335"
+ },
+ "Autres": {
+ "account_number": "6338"
+ }
+ },
+ "634-Taxes sp\u00e9cifiques sur les produits de l'exploitation": {
+ "Taxes sp\u00e9cifiques sur les produits v\u00e9g\u00e9taux": {
+ "account_number": "6341"
+ },
+ "Taxes sp\u00e9cifiques sur les produits animaux": {
+ "account_number": "6342"
+ },
+ "Taxes sp\u00e9cifiques sur les produits transform\u00e9s": {
+ "account_number": "6343"
+ },
+ "Taxes sp\u00e9cifiques sur les animaux": {
+ "account_number": "6344"
+ },
+ "P\u00e9nalit\u00e9s sur productions": {
+ "account_number": "6345"
+ },
+ "Taxes sp\u00e9cifiques sur autres produits": {
+ "account_number": "6348"
+ }
+ },
+ "635-Autres imp\u00f4ts, taxes et versements assimil\u00e9s (administrations des imp\u00f4ts)": {
+ "Taxe professionnelle": {
+ "account_number": "6351"
+ },
+ "Taxes fonci\u00e8res": {
+ "account_number": "6352"
+ },
+ "Autres imp\u00f4ts locaux": {
+ "account_number": "6353"
+ },
+ "Autres imp\u00f4ts directs (sauf imp\u00f4ts sur les soci\u00e9t\u00e9s)": {
+ "account_number": "6354"
+ },
+ "Taxe sur le chiffre d'affaires non r\u00e9cup\u00e9rables": {
+ "account_number": "6355"
+ },
+ "Imp\u00f4ts indirects": {
+ "account_number": "6356"
+ },
+ "Droits d'enregistrement et de timbre": {
+ "account_number": "6357"
+ },
+ "Autres droits": {
+ "account_number": "6358"
+ }
+ },
+ "637-Autres imp\u00f4ts, taxes et versements assimil\u00e9s (autres organismes)": {
+ "Contribution sociale de solidarit\u00e9 \u00e0 la charge des soci\u00e9t\u00e9s": {
+ "account_number": "6371"
+ },
+ "Taxes per\u00e7ues par les organismes publics internationaux": {
+ "account_number": "6372"
+ },
+ "Imp\u00f4ts et taxes exigibles \u00e0 l'\u00e9tranger": {
+ "account_number": "6374"
+ },
+ "Taxes diverses": {
+ "account_number": "6378"
+ }
+ }
+ },
+ "64-Charges de personnel": {
+ "641-R\u00e9mun\u00e9rations du personnel": {
+ "6411-Salaires (personnel salari\u00e9)": {
+ "Personnel permanent ou r\u00e9gulier": {
+ "account_number": "64111"
+ },
+ "Personnel temporaire ou occasionnel": {
+ "account_number": "64115"
+ }
+ },
+ "R\u00e9mun\u00e9rations (associ\u00e9s d'exploitation)": {
+ "account_number": "6412"
+ },
+ "R\u00e9mun\u00e9rations (administrateurs, g\u00e9rants, associ\u00e9s)": {
+ "account_number": "6413"
+ },
+ "Cong\u00e9s pay\u00e9s": {
+ "account_number": "6415"
+ },
+ "Primes et gratifications": {
+ "account_number": "6416"
+ },
+ "Indemnit\u00e9s et avantages en esp\u00e8ces divers": {
+ "account_number": "6417"
+ },
+ "Avantages en nature": {
+ "account_number": "6418"
+ }
+ },
+ "R\u00e9mun\u00e9ration du travail de l'exploitant": {
+ "account_number": "644"
+ },
+ "645-Charges de s\u00e9curit\u00e9 sociale et de pr\u00e9voyance": {
+ "Cotisations \u00e0 la Mutualit\u00e9 Sociale Agricole": {
+ "account_number": "6451"
+ },
+ "Cotisations aux mutuelles": {
+ "account_number": "6452"
+ },
+ "Cotisations aux caisses de retraites": {
+ "account_number": "6453"
+ },
+ "Cotisations aux caisses de ch\u00f4mages": {
+ "account_number": "6454"
+ },
+ "Cotisations aux autres organismes sociaux": {
+ "account_number": "6458"
+ }
+ },
+ "Cotisations sociales personnelles de l'exploitant": {
+ "account_number": "646"
+ },
+ "647-Autres charges sociales": {
+ "Versements aux comit\u00e9s d'entreprise et d'\u00e9tablissement": {
+ "account_number": "6472"
+ },
+ "Versements aux autres \u0153uvres sociales": {
+ "account_number": "6474"
+ },
+ "M\u00e9decine du travail, pharmacie": {
+ "account_number": "6475"
+ },
+ "Autres charges sociales diverses": {
+ "account_number": "6478"
+ }
+ },
+ "Autres charges de personnel": {
+ "account_number": "648"
+ }
+ },
+ "65-Autres charges de gestion courante": {
+ "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": {
+ "account_number": "651"
+ },
+ "Jetons de pr\u00e9sence": {
+ "account_number": "653"
+ },
+ "654-Pertes sur cr\u00e9ances irr\u00e9couvrables": {
+ "Cr\u00e9ances de l'exercice": {
+ "account_number": "6541"
+ },
+ "Cr\u00e9ances des exercices ant\u00e9rieurs": {
+ "account_number": "6544"
+ }
+ },
+ "655-Quotes-parts de r\u00e9sultat sur op\u00e9rations faites en commun": {
+ "Quote-part de b\u00e9n\u00e9fice transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {
+ "account_number": "6551"
+ },
+ "Quote-part de perte support\u00e9e (comptabilit\u00e9 des associ\u00e9s non g\u00e9rants)": {
+ "account_number": "6555"
+ }
+ },
+ "656-Valeurs comptables des \u00e9l\u00e9ments d'actif c\u00e9d\u00e9s (cessions courantes)": {
+ "Animaux reproducteurs adultes": {
+ "account_number": "6561"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "6562"
+ }
+ },
+ "Charges diverses de gestion courante": {
+ "account_number": "658"
+ }
+ },
+ "66-Charges financi\u00e8res": {
+ "661-Charges d'int\u00e9r\u00eats": {
+ "Int\u00e9r\u00eats des emprunts fonciers": {
+ "account_number": "6611"
+ },
+ "Int\u00e9r\u00eats des autres emprunts \u00e0 moyen et long terme": {
+ "account_number": "6612"
+ },
+ "Int\u00e9r\u00eats des emprunts \u00e0 court terme": {
+ "account_number": "6613"
+ },
+ "Int\u00e9r\u00eats des cr\u00e9dits bancaires de campagne": {
+ "account_number": "6614"
+ },
+ "Int\u00e9r\u00eats des dettes rattach\u00e9es \u00e0 des participations \u00e0 des organismes professionnels agricoles": {
+ "account_number": "6615"
+ },
+ "Int\u00e9r\u00eats des dettes rattach\u00e9es \u00e0 d'autres participations": {
+ "account_number": "6616"
+ },
+ "Int\u00e9r\u00eats du cr\u00e9dit fournisseur": {
+ "account_number": "6617"
+ },
+ "6618-Autres charges d'int\u00e9r\u00eat": {
+ "Autres int\u00e9r\u00eats bancaires": {
+ "account_number": "66181"
+ },
+ "Int\u00e9r\u00eats des comptes courants et d\u00e9p\u00f4ts cr\u00e9diteurs": {
+ "account_number": "66182"
+ },
+ "Int\u00e9r\u00eats des obligations cautionn\u00e9es": {
+ "account_number": "66183"
+ },
+ "Int\u00e9r\u00eats des autres dettes": {
+ "account_number": "66188"
+ }
+ }
+ },
+ "Pertes sur cr\u00e9ances li\u00e9es \u00e0 des participations": {
+ "account_number": "664"
+ },
+ "Escomptes accord\u00e9s": {
+ "account_number": "665"
+ },
+ "Pertes de change": {
+ "account_type": "Round Off",
+ "account_number": "666"
+ },
+ "Charges nettes sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "667"
+ },
+ "Autres charges financi\u00e8res": {
+ "account_number": "668"
+ }
+ },
+ "67-Charges exceptionnelles": {
+ "671-Charges exceptionnelles sur op\u00e9rations de gestion": {
+ "P\u00e9nalit\u00e9s sur march\u00e9s (et d\u00e9dits pay\u00e9s sur achats et ventes)": {
+ "account_number": "6711"
+ },
+ "P\u00e9nalit\u00e9s, amendes fiscales et p\u00e9nales": {
+ "account_number": "6712"
+ },
+ "Dons, lib\u00e9ralit\u00e9s": {
+ "account_number": "6713"
+ },
+ "Cr\u00e9ances devenues irr\u00e9couvrables dans l'exercice": {
+ "account_number": "6714"
+ },
+ "Subventions accord\u00e9es": {
+ "account_number": "6715"
+ },
+ "Rappel d'imp\u00f4ts (autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices)": {
+ "account_number": "6717"
+ },
+ "Autres charges exceptionnelles sur op\u00e9rations de gestion": {
+ "account_number": "6718"
+ }
+ },
+ "Charges sur exercices ant\u00e9rieurs": {
+ "account_number": "672"
+ },
+ "673-Charges exeptionnelles relatives aux p\u00e9nalit\u00e9s statutaires": {
+ "Indemnit\u00e9s compensatrices": {
+ "account_number": "6731"
+ },
+ "P\u00e9nalit\u00e9s subies en tant qu'associ\u00e9 d\u00e9faillant": {
+ "account_number": "6733"
+ },
+ "Frais de poursuite": {
+ "account_number": "6735"
+ }
+ },
+ "675-Valeurs comptables des \u00e9l\u00e9ments d'actif c\u00e9d\u00e9s": {
+ "Immobilisations incorporelles": {
+ "account_number": "6751"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "6752"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_number": "6754"
+ },
+ "Immobilisations financi\u00e8res": {
+ "account_number": "6756"
+ }
+ },
+ "678-Autres charges exceptionnelles": {
+ "Malis provenant de clauses d'indexation": {
+ "account_number": "6781"
+ },
+ "Lots": {
+ "account_number": "6782"
+ },
+ "Malis provenant du rachat par l'entreprise d'actions et obligations \u00e9mises par elle-m\u00eame": {
+ "account_number": "6783"
+ },
+ "Charges exceptionnelles diverses": {
+ "account_number": "6788"
+ }
+ }
+ },
+ "68-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions": {
+ "account_type": "Depreciation",
+ "681-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions - Charges d'exploitation": {
+ "account_type": "Depreciation",
+ "6811-Dotations aux amortissements sur immobilisations incorporelles et corporelles": {
+ "account_type": "Depreciation",
+ "Immobilisations incorporelles": {
+ "account_type": "Depreciation",
+ "account_number": "68111"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_type": "Depreciation",
+ "account_number": "68112"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_type": "Depreciation",
+ "account_number": "68114"
+ }
+ },
+ "Dotations aux amortissements des charges d'exploitation \u00e0 r\u00e9partir": {
+ "account_type": "Depreciation",
+ "account_number": "6812"
+ },
+ "Dotations aux provisions d'exploitation": {
+ "account_type": "Depreciation",
+ "account_number": "6815"
+ },
+ "6816-Dotations pour d\u00e9pr\u00e9ciations des immobilisations incorporelles et corporelles": {
+ "account_type": "Depreciation",
+ "Immobilisations incorporelles": {
+ "account_type": "Depreciation",
+ "account_number": "68161"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_type": "Depreciation",
+ "account_number": "68162"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_type": "Depreciation",
+ "account_number": "68164"
+ }
+ },
+ "6817-Dotations pour d\u00e9pr\u00e9ciations des actifs circulants": {
+ "account_type": "Depreciation",
+ "Stocks et en-cours": {
+ "account_type": "Depreciation",
+ "account_number": "68173"
+ },
+ "Cr\u00e9ances": {
+ "account_type": "Depreciation",
+ "account_number": "68174"
+ }
+ }
+ },
+ "686-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions - Charges financi\u00e8res": {
+ "account_type": "Depreciation",
+ "Dotations aux amortissements des primes de remboursement des obligations": {
+ "account_type": "Depreciation",
+ "account_number": "6861"
+ },
+ "Dotations aux provisions financi\u00e8res": {
+ "account_type": "Depreciation",
+ "account_number": "6865"
+ },
+ "6866-Dotations pour d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": {
+ "account_type": "Depreciation",
+ "Immobilisations financi\u00e8res": {
+ "account_type": "Depreciation",
+ "account_number": "68662"
+ },
+ "Valeurs mobili\u00e8res de placement": {
+ "account_type": "Depreciation",
+ "account_number": "68665"
+ }
+ },
+ "Autres dotations": {
+ "account_type": "Depreciation",
+ "account_number": "6868"
+ }
+ },
+ "687-Dotations aux amortissements, aux d\u00e9pr\u00e9ciations et aux provisions - Charges exceptionnelles": {
+ "account_type": "Depreciation",
+ "Dotations aux amortissements exceptionnels des immobilisations": {
+ "account_type": "Depreciation",
+ "account_number": "6871"
+ },
+ "Dotations aux provisions r\u00e9glement\u00e9es (immobilisations)": {
+ "account_type": "Depreciation",
+ "Amortissements d\u00e9rogatoires": {
+ "account_type": "Depreciation",
+ "account_number": "68725"
+ }
+ },
+ "Dotations aux provisions r\u00e9glement\u00e9es (stocks)": {
+ "account_type": "Depreciation",
+ "account_number": "6873"
+ },
+ "Dotations aux autres provisions r\u00e9glement\u00e9es": {
+ "account_type": "Depreciation",
+ "account_number": "6874"
+ },
+ "Dotations aux provisions exceptionnelles": {
+ "account_type": "Depreciation",
+ "account_number": "6875"
+ },
+ "Dotations pour d\u00e9pr\u00e9ciations exceptionnelles": {
+ "account_type": "Depreciation",
+ "account_number": "6876"
+ }
+ }
+ },
+ "69-Participation des salari\u00e9s - Imp\u00f4ts sur les b\u00e9n\u00e9fices et assimil\u00e9s": {
+ "Participation des salari\u00e9s aux r\u00e9sultats": {
+ "account_number": "691"
+ },
+ "695-Imp\u00f4ts sur les b\u00e9n\u00e9fices": {
+ "Imp\u00f4ts dus en France": {
+ "account_number": "6951"
+ },
+ "Imp\u00f4ts dus \u00e0 l'\u00e9tranger": {
+ "account_number": "6954"
+ }
+ },
+ "Imposition forfaitaire annuelle des soci\u00e9t\u00e9s": {
+ "account_number": "697"
+ },
+ "698-Int\u00e9gration fiscale": {
+ "Int\u00e9gration fiscale - Charges": {
+ "account_number": "6981"
+ },
+ "Int\u00e9gration fiscale - Produits": {
+ "account_number": "6982"
+ }
+ },
+ "Produits - Reports en arri\u00e8re des d\u00e9ficits": {
+ "account_number": "699"
+ }
+ }
+ },
+ "7-Comptes de produits": {
+ "root_type": "Income",
+ "70-Ventes": {
+ "Ventes de produits v\u00e9g\u00e9taux": {
+ "account_number": "701"
+ },
+ "Ventes de produits animaux": {
+ "account_number": "702"
+ },
+ "Ventes de produits transform\u00e9s": {
+ "account_number": "703"
+ },
+ "704-Ventes d'animaux": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "7041"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "7042"
+ },
+ "Autres animaux": {
+ "account_number": "7045"
+ }
+ },
+ "Ventes de produits r\u00e9siduels": {
+ "account_number": "705"
+ },
+ "Travaux \u00e0 fa\u00e7on": {
+ "account_number": "706"
+ },
+ "707-Ventes de marchandises": {
+ "Marchandises": {
+ "account_number": "7071"
+ },
+ "Éco-participation": {
+ "account_type": "Income Account",
+ "account_number": "7079"
+ }
+ },
+ "708-Produits des activit\u00e9s annexes": {
+ "Produits des services exploit\u00e9s dans l'int\u00e9r\u00eat du personnel": {
+ "account_number": "7081"
+ },
+ "Commissions et courtages": {
+ "account_number": "7082"
+ },
+ "Locations diverses": {
+ "account_number": "7083"
+ },
+ "Prestations de services \u00e0 caract\u00e8re accessoire": {
+ "account_number": "7084"
+ },
+ "Ports et frais accessoires factur\u00e9s": {
+ "account_number": "7085"
+ },
+ "Bonis sur reprises d'emballages consign\u00e9s": {
+ "account_number": "7086"
+ },
+ "Bonifications obtenues des clients et primes sur ventes": {
+ "account_number": "7087"
+ },
+ "Autres produits d'activit\u00e9s annexes": {
+ "account_number": "7088"
+ }
+ },
+ "709-Rabais, remises et ristournes accord\u00e9s par l'entreprise": {
+ "RRR sur ventes de produits v\u00e9g\u00e9taux": {
+ "account_number": "7091"
+ },
+ "RRR sur ventes de produits animaux": {
+ "account_number": "7092"
+ },
+ "RRR sur ventes de produits transform\u00e9s": {
+ "account_number": "7093"
+ },
+ "RRR sur ventes d'animaux": {
+ "account_number": "7094"
+ },
+ "RRR sur ventes de produits r\u00e9siduels": {
+ "account_number": "7095"
+ },
+ "RRR sur travaux \u00e0 fa\u00e7on": {
+ "account_number": "7096"
+ },
+ "RRR sur ventes de marchandises": {
+ "account_number": "7097"
+ },
+ "RRR sur produits des activit\u00e9s annexes": {
+ "account_number": "7098"
+ }
+ }
+ },
+ "71-Variation d'inventaire (biens vivants, en-cours de production de biens et services, produits)": {
+ "712-Variation d'inventaire : animaux reproducteurs immobilis\u00e9s": {
+ "Animaux reproducteurs (adultes)": {
+ "account_number": "7121"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "7122"
+ }
+ },
+ "713-Variation d'inventaire : biens vivants non immobilis\u00e9s, en-cours de production de biens et services, produits": {
+ "Animaux (cycle long)": {
+ "account_number": "7131"
+ },
+ "Animaux (cycle court)": {
+ "account_number": "7132"
+ },
+ "V\u00e9g\u00e9taux en terre (cycle long)": {
+ "account_number": "7133"
+ },
+ "V\u00e9g\u00e9taux en terre (cycle court)": {
+ "account_number": "7134"
+ },
+ "En-cours de production de biens et services (cycle long)": {
+ "account_number": "7135"
+ },
+ "En-cours de production de biens et services (cycle court)": {
+ "account_number": "7136"
+ },
+ "Produits": {
+ "account_number": "7137"
+ }
+ }
+ },
+ "72-Production immobilis\u00e9e et autoconsomm\u00e9e": {
+ "Production immobilis\u00e9e - Immobilisations incorporelles": {
+ "account_number": "721"
+ },
+ "Production immobilis\u00e9e - Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "722"
+ },
+ "Production immobilis\u00e9e - Immobilisations corporelles (biens vivants)": {
+ "account_number": "724"
+ },
+ "Production autoconsomm\u00e9e": {
+ "account_number": "726"
+ }
+ },
+ "74-Indemnit\u00e9s et Subventions d'exploitation": {
+ "Remboursement forfaitaire de TVA": {
+ "account_number": "741"
+ },
+ "Indemnit\u00e9s d'assurance (exploitation)": {
+ "account_number": "742"
+ },
+ "Indemnit\u00e9s du Fond national de garantie des calamit\u00e9s agricoles": {
+ "account_number": "743"
+ },
+ "Autres indemnit\u00e9s d'exploitation": {
+ "account_number": "744"
+ },
+ "745-Subventions d'exploitation": {
+ "Subventions aux produits v\u00e9g\u00e9taux": {
+ "account_number": "7451"
+ },
+ "Subventions aux structures (et jach\u00e8res)": {
+ "account_number": "7452"
+ },
+ "Subventions au revenu": {
+ "account_number": "7453"
+ },
+ "Subventions aux animaux": {
+ "account_number": "7454"
+ },
+ "Autres subventions d'exploitation": {
+ "account_number": "7458"
+ }
+ }
+ },
+ "75-Autres produits de gestion courante": {
+ "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": {
+ "account_number": "751"
+ },
+ "Revenus des immeubles non affect\u00e9s \u00e0 des activit\u00e9s professionnelles": {
+ "account_number": "752"
+ },
+ "Jetons de pr\u00e9sence, r\u00e9mun\u00e9rations et indemnit\u00e9s d'administrateurs, etc": {
+ "account_number": "753"
+ },
+ "Ristournes per\u00e7ues des coop\u00e9ratives agricoles (provenant des exc\u00e9dents)": {
+ "account_number": "754"
+ },
+ "755-Quote-parts de r\u00e9sultat sur op\u00e9rations faites en commun": {
+ "Quote-part de perte transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {
+ "account_number": "7551"
+ },
+ "Quote-part de b\u00e9n\u00e9fice attribu\u00e9e (comptabilit\u00e9 des associ\u00e9s non - g\u00e9rants)": {
+ "account_number": "7555"
+ }
+ },
+ "756-Produits des cessions courantes d'\u00e9l\u00e9ments d'actif": {
+ "Animaux reproducteurs adultes": {
+ "account_number": "7561"
+ },
+ "Animaux reproducteurs (jeunes de renouvellement)": {
+ "account_number": "7562"
+ }
+ },
+ "Produits divers de gestion courante": {
+ "account_number": "758"
+ }
+ },
+ "76-Produits financiers": {
+ "761-Produits de participations": {
+ "Revenus des titres de participation": {
+ "account_number": "7611"
+ },
+ "Revenus des participations \u00e0 des organismes professionnels agricoles": {
+ "account_number": "7612"
+ },
+ "Revenus sur autres formes de participation": {
+ "account_number": "7616"
+ },
+ "Revenus des cr\u00e9ances rattach\u00e9es \u00e0 des participations": {
+ "account_number": "7617"
+ }
+ },
+ "762-Produits des autres immobilisations financi\u00e8res": {
+ "Revenus des titres immobilis\u00e9s": {
+ "account_number": "7621"
+ },
+ "Revenus des pr\u00eats": {
+ "account_number": "7626"
+ },
+ "Revenus des cr\u00e9ances immobilis\u00e9es": {
+ "account_number": "7627"
+ }
+ },
+ "763-Revenus des autres cr\u00e9ances": {
+ "Revenus des cr\u00e9ances commerciales": {
+ "account_number": "7631"
+ },
+ "Revenus des cr\u00e9ances diverses": {
+ "account_number": "7638"
+ }
+ },
+ "Revenus des valeurs mobili\u00e8res de placement": {
+ "account_number": "764"
+ },
+ "Escomptes obtenus": {
+ "account_number": "765"
+ },
+ "Gains de change": {
+ "account_type": "Round Off",
+ "account_number": "766"
+ },
+ "Produits nets sur cessions de valeurs mobili\u00e8res de placement": {
+ "account_number": "767"
+ },
+ "Autres produits financiers": {
+ "account_number": "768"
+ }
+ },
+ "77-Produits exceptionnels": {
+ "771-Produits exceptionnels sur op\u00e9rations de gestion": {
+ "D\u00e9dits et p\u00e9nalit\u00e9s per\u00e7us sur achats et sur ventes": {
+ "account_number": "7711"
+ },
+ "Lib\u00e9ralit\u00e9s re\u00e7ues": {
+ "account_number": "7713"
+ },
+ "Rentr\u00e9es sur cr\u00e9ances amorties": {
+ "account_number": "7714"
+ },
+ "Subventions d'\u00e9quilibre": {
+ "account_number": "7715"
+ },
+ "D\u00e9gr\u00e8vements d'imp\u00f4ts (autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices)": {
+ "account_number": "7717"
+ },
+ "Autres produits exceptionnels sur op\u00e9rations de gestion": {
+ "account_number": "7718"
+ }
+ },
+ "Produits sur exercices ant\u00e9rieurs": {
+ "account_number": "772"
+ },
+ "775-Produits des cessions d'\u00e9l\u00e9ments d'actif": {
+ "Immobilisations incorporelles": {
+ "account_number": "7751"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "7752"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_number": "7754"
+ },
+ "Immobilisations financi\u00e8res": {
+ "account_number": "7756"
+ }
+ },
+ "Quote-part des subventions d'investissement vir\u00e9e au r\u00e9sultat de l'exercice": {
+ "account_number": "777"
+ },
+ "778-Autres produits exceptionnels": {
+ "Bonis provenant de clauses d'indexation": {
+ "account_number": "7781"
+ },
+ "Lots": {
+ "account_number": "7782"
+ },
+ "Bonis provenant du rachat par l'entreprise de titres \u00e9mis par elle - m\u00eame": {
+ "account_number": "7783"
+ },
+ "Produits exceptionnels divers": {
+ "account_number": "7788"
+ }
+ }
+ },
+ "78-Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions": {
+ "781-Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits d'exploitation)": {
+ "7811-Reprises sur amortissements des immobilisations incorporelles et corporelles": {
+ "Immobilisations incorporelles": {
+ "account_number": "78111"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "78112"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_number": "78114"
+ }
+ },
+ "Reprises sur provisions d'exploitation": {
+ "account_number": "7815"
+ },
+ "7816-Reprises sur d\u00e9pr\u00e9ciations des immobilisations incorporelles et corporelles": {
+ "Immobilisations incorporelles": {
+ "account_number": "78161"
+ },
+ "Immobilisations corporelles (hors biens vivants)": {
+ "account_number": "78162"
+ },
+ "Immobilisations corporelles (biens vivants)": {
+ "account_number": "78164"
+ }
+ },
+ "7817-Reprises sur d\u00e9pr\u00e9ciations des actifs circulants": {
+ "Stocks et en-cours": {
+ "account_number": "78173"
+ },
+ "Cr\u00e9ances": {
+ "account_number": "78174"
+ }
+ }
+ },
+ "786-Reprises sur d\u00e9pr\u00e9ciations et sur provisions (\u00e0 inscrire dans les produits financiers)": {
+ "Reprises sur provisions financi\u00e8res": {
+ "account_number": "7865"
+ },
+ "7866-Reprises sur d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": {
+ "Immobilisations financi\u00e8res": {
+ "account_number": "78662"
+ },
+ "Valeurs mobili\u00e8res de placements": {
+ "account_number": "78665"
+ }
+ }
+ },
+ "787-Reprises sur d\u00e9pr\u00e9ciations et sur provisions (\u00e0 inscrire dans les produits exceptionnels)": {
+ "7872-Reprises sur provisions r\u00e9glement\u00e9es (immobilisations)": {
+ "Amortissements d\u00e9rogatoires": {
+ "account_number": "78725"
+ },
+ "Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {
+ "account_number": "78726"
+ },
+ "Plus-values r\u00e9investies": {
+ "account_number": "78727"
+ }
+ },
+ "Reprises sur provisions r\u00e9glement\u00e9es (stocks)": {
+ "account_number": "7873"
+ },
+ "Reprises sur autres provisions r\u00e9glement\u00e9es": {
+ "account_number": "7874"
+ },
+ "Reprises sur provisions exceptionnelles": {
+ "account_number": "7875"
+ },
+ "Reprises sur d\u00e9pr\u00e9ciations exceptionnelles": {
+ "account_number": "7876"
+ }
+ }
+ },
+ "79-Transferts de charges": {
+ "Transferts de charges d'exploitation": {
+ "account_number": "791"
+ },
+ "Transferts de charges financi\u00e8res": {
+ "account_number": "796"
+ },
+ "Transferts de charges exceptionnelles": {
+ "account_number": "797"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
index 2b741136f96..c77750cf9f0 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
@@ -281,7 +281,7 @@
},
{
"default": "0",
- "description": "Learn about Common Party",
+ "description": "Learn about Common Party",
"fieldname": "enable_common_party_accounting",
"fieldtype": "Check",
"label": "Enable Common Party Accounting"
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.js b/erpnext/accounts/doctype/bank_account/bank_account.js
index 202f750fb50..5173e0539f4 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.js
+++ b/erpnext/accounts/doctype/bank_account/bank_account.js
@@ -42,8 +42,4 @@ frappe.ui.form.on("Bank Account", {
});
}
},
-
- is_company_account: function (frm) {
- frm.set_df_property("account", "reqd", frm.doc.is_company_account);
- },
});
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.json b/erpnext/accounts/doctype/bank_account/bank_account.json
index 9ecd9c53503..b44ccb56835 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.json
+++ b/erpnext/accounts/doctype/bank_account/bank_account.json
@@ -52,6 +52,7 @@
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company Account",
+ "mandatory_depends_on": "is_company_account",
"options": "Account"
},
{
@@ -98,6 +99,7 @@
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Company",
+ "mandatory_depends_on": "is_company_account",
"options": "Company"
},
{
@@ -252,7 +254,7 @@
"link_fieldname": "default_bank_account"
}
],
- "modified": "2025-08-29 12:32:01.081687",
+ "modified": "2026-01-20 00:46:16.633364",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account",
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.py b/erpnext/accounts/doctype/bank_account/bank_account.py
index d8dc1191bf7..c0dc6467f8f 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.py
+++ b/erpnext/accounts/doctype/bank_account/bank_account.py
@@ -51,25 +51,29 @@ class BankAccount(Document):
delete_contact_and_address("Bank Account", self.name)
def validate(self):
- self.validate_company()
- self.validate_account()
+ self.validate_is_company_account()
self.update_default_bank_account()
- def validate_account(self):
- if self.account:
- if accounts := frappe.db.get_all(
- "Bank Account", filters={"account": self.account, "name": ["!=", self.name]}, as_list=1
- ):
- frappe.throw(
- _("'{0}' account is already used by {1}. Use another account.").format(
- frappe.bold(self.account),
- frappe.bold(comma_and([get_link_to_form(self.doctype, x[0]) for x in accounts])),
- )
- )
+ def validate_is_company_account(self):
+ if self.is_company_account:
+ if not self.company:
+ frappe.throw(_("Company is mandatory for company account"))
- def validate_company(self):
- if self.is_company_account and not self.company:
- frappe.throw(_("Company is mandatory for company account"))
+ if not self.account:
+ frappe.throw(_("Company Account is mandatory"))
+
+ self.validate_account()
+
+ def validate_account(self):
+ if accounts := frappe.db.get_all(
+ "Bank Account", filters={"account": self.account, "name": ["!=", self.name]}, as_list=1
+ ):
+ frappe.throw(
+ _("'{0}' account is already used by {1}. Use another account.").format(
+ frappe.bold(self.account),
+ frappe.bold(comma_and([get_link_to_form(self.doctype, x[0]) for x in accounts])),
+ )
+ )
def update_default_bank_account(self):
if self.is_default and not self.disabled:
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index c50eaa69a9f..caafdcedc23 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -115,15 +115,9 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends (
}
if (cint(doc.update_stock) != 1) {
- // show Make Delivery Note button only if Sales Invoice is not created from Delivery Note
- var from_delivery_note = false;
- from_delivery_note = this.frm.doc.items.some(function (item) {
- return item.delivery_note ? true : false;
- });
-
- if (!from_delivery_note && !is_delivered_by_supplier) {
+ if (!is_delivered_by_supplier) {
this.frm.add_custom_button(
- __("Delivery"),
+ __("Delivery Note"),
this.frm.cscript["Make Delivery Note"],
__("Create")
);
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index ebf2d2f4b00..2d32832d25c 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -778,8 +778,7 @@
},
{
"collapsible": 1,
- "collapsible_depends_on": "eval:doc.total_billing_amount > 0",
- "depends_on": "eval:!doc.is_return",
+ "collapsible_depends_on": "eval:doc.total_billing_amount > 0 || doc.total_billing_hours > 0",
"fieldname": "time_sheet_list",
"fieldtype": "Section Break",
"hide_border": 1,
@@ -793,7 +792,6 @@
"hide_days": 1,
"hide_seconds": 1,
"label": "Time Sheets",
- "no_copy": 1,
"options": "Sales Invoice Timesheet",
"print_hide": 1
},
@@ -2092,7 +2090,7 @@
"fieldtype": "Column Break"
},
{
- "depends_on": "eval:(!doc.is_return && doc.total_billing_amount > 0)",
+ "depends_on": "eval:doc.total_billing_amount > 0 || doc.total_billing_hours > 0",
"fieldname": "section_break_104",
"fieldtype": "Section Break"
},
@@ -2306,7 +2304,7 @@
"link_fieldname": "consolidated_invoice"
}
],
- "modified": "2025-10-09 14:48:59.472826",
+ "modified": "2025-12-24 18:29:50.242618",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index cad1a597386..befa1ddea24 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -352,10 +352,22 @@ class SalesInvoice(SellingController):
self.is_opening = "No"
self.set_against_income_account()
- self.validate_time_sheets_are_submitted()
+
+ if self.is_return and not self.return_against and self.timesheets:
+ frappe.throw(_("Direct return is not allowed for Timesheet."))
+
+ if not self.is_return:
+ self.validate_time_sheets_are_submitted()
+
self.validate_multiple_billing("Delivery Note", "dn_detail", "amount")
- if self.is_return:
- self.timesheets = []
+
+ if self.is_return and self.return_against:
+ for row in self.timesheets:
+ if row.billing_hours:
+ row.billing_hours = -abs(row.billing_hours)
+ if row.billing_amount:
+ row.billing_amount = -abs(row.billing_amount)
+
self.update_packing_list()
self.set_billing_hours_and_amount()
self.update_timesheet_billing_for_project()
@@ -484,7 +496,7 @@ class SalesInvoice(SellingController):
if cint(self.is_pos) != 1 and not self.is_return:
self.update_against_document_in_jv()
- self.update_time_sheet(self.name)
+ self.update_time_sheet(None if (self.is_return and self.return_against) else self.name)
if frappe.get_single_value("Selling Settings", "sales_update_frequency") == "Each Transaction":
update_company_current_month_sales(self.company)
@@ -564,7 +576,7 @@ class SalesInvoice(SellingController):
self.check_if_consolidated_invoice()
super().before_cancel()
- self.update_time_sheet(None)
+ self.update_time_sheet(self.return_against if (self.is_return and self.return_against) else None)
def on_cancel(self):
check_if_return_invoice_linked_with_payment_entry(self)
@@ -804,8 +816,20 @@ class SalesInvoice(SellingController):
for data in timesheet.time_logs:
if (
(self.project and args.timesheet_detail == data.name)
- or (not self.project and not data.sales_invoice)
- or (not sales_invoice and data.sales_invoice == self.name)
+ or (not self.project and not data.sales_invoice and args.timesheet_detail == data.name)
+ or (
+ not sales_invoice
+ and data.sales_invoice == self.name
+ and args.timesheet_detail == data.name
+ )
+ or (
+ self.is_return
+ and self.return_against
+ and data.sales_invoice
+ and data.sales_invoice == self.return_against
+ and not sales_invoice
+ and args.timesheet_detail == data.name
+ )
):
data.sales_invoice = sales_invoice
@@ -845,11 +869,26 @@ class SalesInvoice(SellingController):
payment.account = get_bank_cash_account(payment.mode_of_payment, self.company).get("account")
def validate_time_sheets_are_submitted(self):
+ # Note: This validation is skipped for return invoices
+ # to allow returns to reference already-billed timesheet details
for data in self.timesheets:
+ # Handle invoice duplication
+ if data.time_sheet and data.timesheet_detail:
+ if sales_invoice := frappe.db.get_value(
+ "Timesheet Detail", data.timesheet_detail, "sales_invoice"
+ ):
+ frappe.throw(
+ _("Row {0}: Sales Invoice {1} is already created for {2}").format(
+ data.idx, frappe.bold(sales_invoice), frappe.bold(data.time_sheet)
+ )
+ )
+
if data.time_sheet:
status = frappe.db.get_value("Timesheet", data.time_sheet, "status")
- if status not in ["Submitted", "Payslip"]:
- frappe.throw(_("Timesheet {0} is already completed or cancelled").format(data.time_sheet))
+ if status not in ["Submitted", "Payslip", "Partially Billed"]:
+ frappe.throw(
+ _("Timesheet {0} cannot be invoiced in its current state").format(data.time_sheet)
+ )
def set_pos_fields(self, for_validate=False):
"""Set retail related fields from POS Profiles"""
@@ -1283,7 +1322,12 @@ class SalesInvoice(SellingController):
timesheet.billing_amount = ts_doc.total_billable_amount
def update_timesheet_billing_for_project(self):
- if not self.timesheets and self.project and self.is_auto_fetch_timesheet_enabled():
+ if (
+ not self.is_return
+ and not self.timesheets
+ and self.project
+ and self.is_auto_fetch_timesheet_enabled()
+ ):
self.add_timesheet_data()
else:
self.calculate_billing_amount_for_timesheet()
@@ -2378,7 +2422,9 @@ def make_delivery_note(source_name, target_doc=None):
"cost_center": "cost_center",
},
"postprocess": update_item,
- "condition": lambda doc: doc.delivered_by_supplier != 1 and not doc.scio_detail,
+ "condition": lambda doc: doc.delivered_by_supplier != 1
+ and not doc.scio_detail
+ and not doc.dn_detail,
},
"Sales Taxes and Charges": {"doctype": "Sales Taxes and Charges", "reset_value": True},
"Sales Team": {
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 13eb0f6ae18..d14db8be7c6 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -2951,6 +2951,60 @@ class TestSalesInvoice(ERPNextTestSuite):
self.assertEqual(sales_invoice.items[0].item_tax_template, "_Test Account Excise Duty @ 10 - _TC")
self.assertEqual(sales_invoice.items[0].item_tax_rate, item_tax_map)
+ def test_item_tax_template_change_with_grand_total_discount(self):
+ """
+ Test that when item tax template changes due to discount on Grand Total,
+ the tax calculations are consistent.
+ """
+ item = create_item("Test Item With Multiple Tax Templates")
+
+ item.set("taxes", [])
+ item.append(
+ "taxes",
+ {
+ "item_tax_template": "_Test Account Excise Duty @ 10 - _TC",
+ "minimum_net_rate": 0,
+ "maximum_net_rate": 500,
+ },
+ )
+
+ item.append(
+ "taxes",
+ {
+ "item_tax_template": "_Test Account Excise Duty @ 12 - _TC",
+ "minimum_net_rate": 501,
+ "maximum_net_rate": 1000,
+ },
+ )
+
+ item.save()
+
+ si = create_sales_invoice(item=item.name, rate=700, do_not_save=True)
+ si.append(
+ "taxes",
+ {
+ "charge_type": "On Net Total",
+ "account_head": "_Test Account Excise Duty - _TC",
+ "cost_center": "_Test Cost Center - _TC",
+ "description": "Excise Duty",
+ "rate": 0,
+ },
+ )
+ si.insert()
+
+ self.assertEqual(si.items[0].item_tax_template, "_Test Account Excise Duty @ 12 - _TC")
+
+ si.apply_discount_on = "Grand Total"
+ si.discount_amount = 300
+ si.save()
+
+ # Verify template changed to 10%
+ self.assertEqual(si.items[0].item_tax_template, "_Test Account Excise Duty @ 10 - _TC")
+ self.assertEqual(si.taxes[0].tax_amount, 70) # 10% of 700
+ self.assertEqual(si.grand_total, 470) # 700 + 70 - 300
+
+ si.submit()
+
@IntegrationTestCase.change_settings("Selling Settings", {"enable_discount_accounting": 1})
def test_sales_invoice_with_discount_accounting_enabled(self):
discount_account = create_account(
diff --git a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json
index 1302fd38b26..cf9a90062b2 100644
--- a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json
+++ b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json
@@ -52,7 +52,6 @@
"fieldtype": "Data",
"hidden": 1,
"label": "Timesheet Detail",
- "no_copy": 1,
"print_hide": 1,
"read_only": 1
},
@@ -117,15 +116,16 @@
],
"istable": 1,
"links": [],
- "modified": "2024-03-27 13:10:36.562795",
+ "modified": "2025-12-23 13:54:17.677187",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice Timesheet",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
+ "row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 75e81d3b04c..0b4f59d6aae 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -877,11 +877,15 @@ class ReceivablePayableReport:
else:
entry_date = row.posting_date
+ row.range0 = 0.0
+
self.get_ageing_data(entry_date, row)
- # ageing buckets should not have amounts if due date is not reached
if getdate(entry_date) > getdate(self.age_as_on):
+ row.range0 = row.outstanding
[setattr(row, f"range{i}", 0.0) for i in self.range_numbers]
+ row.total_due = 0
+ return
row.total_due = sum(row[f"range{i}"] for i in self.range_numbers)
@@ -1281,6 +1285,8 @@ class ReceivablePayableReport:
ranges = [*self.ranges, _("Above")]
prev_range_value = 0
+ self.add_column(label=_("<0"), fieldname="range0", fieldtype="Currency")
+ self.ageing_column_labels.append(_("<0"))
for idx, curr_range_value in enumerate(ranges):
label = f"{prev_range_value}-{curr_range_value}"
self.add_column(label=label, fieldname="range" + str(idx + 1))
@@ -1296,7 +1302,9 @@ class ReceivablePayableReport:
for row in self.data:
row = frappe._dict(row)
if not cint(row.bold):
- values = [flt(row.get(f"range{i}", None), precision) for i in self.range_numbers]
+ values = [flt(row.get("range0", 0), precision)] + [
+ flt(row.get(f"range{i}", 0), precision) for i in self.range_numbers
+ ]
rows.append({"values": values})
self.chart = {
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
index a53cdcc1b40..6c245acf8d8 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
@@ -18,6 +18,8 @@ def execute(filters=None):
dimensions = filters.get("budget_against_filter")
else:
dimensions = get_budget_dimensions(filters)
+ if not dimensions:
+ return columns, [], None, None
budget_records = get_budget_records(filters, dimensions)
budget_map = build_budget_map(budget_records, filters)
diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py
index 00f9c3e38d5..52259059901 100644
--- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py
+++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py
@@ -219,13 +219,18 @@ def get_net_profit(
has_value = False
+ gross_income_roots = [row for row in (gross_income or []) if not flt(row.get("indent"))]
+ non_gross_income_roots = [row for row in (non_gross_income or []) if not flt(row.get("indent"))]
+ gross_expense_roots = [row for row in (gross_expense or []) if not flt(row.get("indent"))]
+ non_gross_expense_roots = [row for row in (non_gross_expense or []) if not flt(row.get("indent"))]
+
for period in period_list:
key = period if consolidated else period.key
- gross_income_for_period = flt(gross_income[0].get(key, 0)) if gross_income else 0
- non_gross_income_for_period = flt(non_gross_income[0].get(key, 0)) if non_gross_income else 0
- gross_expense_for_period = flt(gross_expense[0].get(key, 0)) if gross_expense else 0
- non_gross_expense_for_period = flt(non_gross_expense[0].get(key, 0)) if non_gross_expense else 0
+ gross_income_for_period = sum(flt(row.get(key, 0)) for row in gross_income_roots)
+ non_gross_income_for_period = sum(flt(row.get(key, 0)) for row in non_gross_income_roots)
+ gross_expense_for_period = sum(flt(row.get(key, 0)) for row in gross_expense_roots)
+ non_gross_expense_for_period = sum(flt(row.get(key, 0)) for row in non_gross_expense_roots)
total_income = gross_income_for_period + non_gross_income_for_period
total_expense = gross_expense_for_period + non_gross_expense_for_period
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index fa99ff8e42c..db73972bfb8 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -105,7 +105,7 @@ def _execute(filters=None, additional_table_columns=None, additional_conditions=
{
"total_tax": total_tax,
"total_other_charges": total_other_charges,
- "total": d.base_net_amount + total_tax,
+ "total": d.base_net_amount + total_tax + total_other_charges,
"currency": company_currency,
}
)
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 7dfe9041506..4e0079abf02 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -547,6 +547,7 @@ def reconcile_against_document(
doc.make_advance_gl_entries(entry=row)
else:
_delete_pl_entries(voucher_type, voucher_no)
+ _delete_adv_pl_entries(voucher_type, voucher_no)
gl_map = doc.build_gl_map()
# Make sure there is no overallocation
from erpnext.accounts.general_ledger import process_debit_credit_difference
diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
index aa4668923b8..f533af61b9e 100644
--- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py
@@ -1330,6 +1330,55 @@ class TestPurchaseOrder(IntegrationTestCase):
pi = make_pi_from_po(po.name)
self.assertEqual(pi.items[0].qty, 50)
+ def test_multiple_advances_against_purchase_order_are_allocated_across_partial_purchase_invoices(self):
+ # step - 1: create PO
+ po = create_purchase_order(qty=10, rate=10)
+
+ # step - 2: create first partial advance payment
+ pe1 = get_payment_entry("Purchase Order", po.name, bank_account="_Test Bank - _TC")
+ pe1.reference_no = "1"
+ pe1.reference_date = nowdate()
+ pe1.paid_amount = 50
+ pe1.references[0].allocated_amount = 50
+ pe1.save(ignore_permissions=True).submit()
+
+ # check first advance paid against PO
+ po.reload()
+ self.assertEqual(po.advance_paid, 50)
+
+ # step - 3: create first PI for partial qty and allocate first advance
+ pi_1 = make_pi_from_po(po.name)
+ pi_1.update_stock = 1
+ pi_1.allocate_advances_automatically = 1
+ pi_1.items[0].qty = 5
+ pi_1.save(ignore_permissions=True).submit()
+
+ # step - 4: create second advance payment for remaining
+ pe2 = get_payment_entry("Purchase Order", po.name, bank_account="_Test Bank - _TC")
+ pe2.reference_no = "2"
+ pe2.reference_date = nowdate()
+ pe2.paid_amount = 50
+ pe2.references[0].allocated_amount = 50
+ pe2.save(ignore_permissions=True).submit()
+
+ # check second advance paid against PO
+ po.reload()
+ self.assertEqual(po.advance_paid, 100)
+
+ # step - 5: create second PI for remaining qty and allocate second advance
+ pi_2 = make_pi_from_po(po.name)
+ pi_2.update_stock = 1
+ pi_2.allocate_advances_automatically = 1
+ pi_2.save(ignore_permissions=True).submit()
+
+ # check PO and PI status
+ po.reload()
+ pi_1.reload()
+ pi_2.reload()
+ self.assertEqual(pi_1.status, "Paid")
+ self.assertEqual(pi_2.status, "Paid")
+ self.assertEqual(po.status, "Completed")
+
def create_po_for_sc_testing():
from erpnext.controllers.tests.test_subcontracting_controller import (
diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json
index 125a8b6adb1..a801a2a601d 100644
--- a/erpnext/buying/doctype/supplier/supplier.json
+++ b/erpnext/buying/doctype/supplier/supplier.json
@@ -383,7 +383,7 @@
},
{
"fieldname": "primary_address",
- "fieldtype": "Text",
+ "fieldtype": "Text Editor",
"label": "Primary Address",
"read_only": 1
},
@@ -500,7 +500,7 @@
"link_fieldname": "party"
}
],
- "modified": "2025-06-29 05:30:50.398653",
+ "modified": "2026-01-16 15:56:31.139206",
"modified_by": "Administrator",
"module": "Buying",
"name": "Supplier",
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index f5005fbc12a..543b3726089 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -62,7 +62,7 @@ class Supplier(TransactionBase):
portal_users: DF.Table[PortalUser]
prevent_pos: DF.Check
prevent_rfqs: DF.Check
- primary_address: DF.Text | None
+ primary_address: DF.TextEditor | None
release_date: DF.Date | None
represents_company: DF.Link | None
supplier_details: DF.Text | None
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index 93f52d6ec42..4beb17d7cf6 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -16,6 +16,14 @@ erpnext.buying.SupplierQuotationController = class SupplierQuotationController e
return !doc.qty && me.frm.doc.has_unit_price_items ? "yellow" : "";
});
+ this.frm.set_query("warehouse", "items", (doc, cdt, cdn) => {
+ return {
+ filters: {
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ });
super.setup();
}
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 73cc888fc4a..a97fb4000fb 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -187,9 +187,8 @@ class AccountsController(TransactionBase):
msg = ""
if self.get("update_outstanding_for_self"):
- msg = (
- "We can see {0} is made against {1}. If you want {1}'s outstanding to be updated, "
- "uncheck '{2}' checkbox.
Or"
+ msg = _(
+ "We can see {0} is made against {1}. If you want {1}'s outstanding to be updated, uncheck the '{2}' checkbox."
).format(
frappe.bold(document_type),
get_link_to_form(self.doctype, self.get("return_against")),
@@ -200,8 +199,8 @@ class AccountsController(TransactionBase):
abs(flt(self.rounded_total) or flt(self.grand_total)) > flt(against_voucher_outstanding)
):
self.update_outstanding_for_self = 1
- msg = (
- "The outstanding amount {} in {} is lesser than {}. Updating the outstanding to this invoice.
And"
+ msg = _(
+ "The outstanding amount {0} in {1} is lesser than {2}. Updating the outstanding to this invoice."
).format(
against_voucher_outstanding,
get_link_to_form(self.doctype, self.get("return_against")),
@@ -209,11 +208,11 @@ class AccountsController(TransactionBase):
)
if msg:
- msg += " you can use {} tool to reconcile against {} later.".format(
+ msg += "
" + _("You can use {0} to reconcile against {1} later.").format(
get_link_to_form("Payment Reconciliation"),
get_link_to_form(self.doctype, self.get("return_against")),
)
- frappe.msgprint(_(msg))
+ frappe.msgprint(msg)
def validate(self):
if not self.get("is_return") and not self.get("is_debit_note"):
diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py
index c6daf7ead01..33c1edbcb72 100644
--- a/erpnext/controllers/subcontracting_controller.py
+++ b/erpnext/controllers/subcontracting_controller.py
@@ -610,7 +610,9 @@ class SubcontractingController(StockController):
and self.doctype != "Subcontracting Inward Order"
):
row.reserve_warehouse = self.set_reserve_warehouse or item.warehouse
- elif frappe.get_cached_value("Item", row.rm_item_code, "is_customer_provided_item"):
+ elif frappe.get_cached_value("Item", row.rm_item_code, "is_customer_provided_item") and self.get(
+ "customer_warehouse"
+ ):
row.warehouse = self.customer_warehouse
def __set_alternative_item(self, bom_item):
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 08b1fb32bf3..1f5a5c5a63f 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -39,17 +39,23 @@ class calculate_taxes_and_totals:
items = list(filter(lambda item: not item.get("is_alternative"), self.doc.get("items")))
return items
- def calculate(self):
+ def calculate(self, ignore_tax_template_validation=False):
if not len(self.doc.items):
return
self.discount_amount_applied = False
+ self.need_recomputation = False
+ self.ignore_tax_template_validation = ignore_tax_template_validation
+
self._calculate()
if self.doc.meta.get_field("discount_amount"):
self.set_discount_amount()
self.apply_discount_amount()
+ if not ignore_tax_template_validation and self.need_recomputation:
+ return self.calculate(ignore_tax_template_validation=True)
+
# Update grand total as per cash and non trade discount
if self.doc.apply_discount_on == "Grand Total" and self.doc.get("is_cash_or_non_trade_discount"):
self.doc.grand_total -= self.doc.discount_amount
@@ -79,6 +85,9 @@ class calculate_taxes_and_totals:
self.calculate_total_net_weight()
def validate_item_tax_template(self):
+ if self.ignore_tax_template_validation:
+ return
+
if self.doc.get("is_return") and self.doc.get("return_against"):
return
@@ -122,6 +131,10 @@ class calculate_taxes_and_totals:
)
)
+ # For correct tax_amount calculation re-computation is required
+ if self.discount_amount_applied and self.doc.apply_discount_on == "Grand Total":
+ self.need_recomputation = True
+
def update_item_tax_map(self):
for item in self.doc.items:
item.item_tax_rate = get_item_tax_map(
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 3b0f338cf84..ca7efec8e58 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -569,6 +569,7 @@ accounting_dimension_doctypes = [
"Payment Request",
"Asset Movement Item",
"Asset Depreciation Schedule",
+ "Advance Taxes and Charges",
]
get_matching_queries = (
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 34ce59e6e51..9b526508f31 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -92,6 +92,10 @@ frappe.ui.form.on("BOM", {
};
});
+ frm.events.set_company_filters(frm, "project");
+ frm.events.set_company_filters(frm, "default_source_warehouse");
+ frm.events.set_company_filters(frm, "default_target_warehouse");
+
frm.trigger("toggle_fields_for_semi_finished_goods");
},
@@ -104,6 +108,16 @@ frappe.ui.form.on("BOM", {
}
},
+ set_company_filters: function (frm, fieldname) {
+ frm.set_query(fieldname, () => {
+ return {
+ filters: {
+ company: frm.doc.company,
+ },
+ };
+ });
+ },
+
track_semi_finished_goods(frm) {
frm.trigger("toggle_fields_for_semi_finished_goods");
},
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js
index 0d99a923a00..e816c4690df 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order.js
@@ -829,7 +829,7 @@ erpnext.work_order = {
}
}
if (counter > 0) {
- var consumption_btn = frm.add_custom_button(
+ frm.add_custom_button(
__("Material Consumption"),
function () {
const backflush_raw_materials_based_on =
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index e6ff7407e29..faa6b08398d 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -502,8 +502,8 @@ class WorkOrder(Document):
def validate_work_order_against_so(self):
# already ordered qty
ordered_qty_against_so = frappe.db.sql(
- """select sum(qty) from `tabWork Order`
- where production_item = %s and sales_order = %s and docstatus < 2 and status != 'Closed' and name != %s""",
+ """select sum(qty - process_loss_qty) from `tabWork Order`
+ where production_item = %s and sales_order = %s and docstatus = 1 and status != 'Closed' and name != %s""",
(self.production_item, self.sales_order, self.name),
)[0][0]
@@ -512,13 +512,13 @@ class WorkOrder(Document):
# get qty from Sales Order Item table
so_item_qty = frappe.db.sql(
"""select sum(stock_qty) from `tabSales Order Item`
- where parent = %s and item_code = %s""",
+ where parent = %s and item_code = %s and docstatus = 1""",
(self.sales_order, self.production_item),
)[0][0]
# get qty from Packing Item table
dnpi_qty = frappe.db.sql(
"""select sum(qty) from `tabPacked Item`
- where parent = %s and parenttype = 'Sales Order' and item_code = %s""",
+ where parent = %s and parenttype = 'Sales Order' and item_code = %s and docstatus = 1""",
(self.sales_order, self.production_item),
)[0][0]
# total qty in SO
@@ -530,8 +530,10 @@ class WorkOrder(Document):
if total_qty > so_qty + (allowance_percentage / 100 * so_qty):
frappe.throw(
- _("Cannot produce more Item {0} than Sales Order quantity {1}").format(
- self.production_item, so_qty
+ _("Cannot produce more Item {0} than Sales Order quantity {1} {2}").format(
+ get_link_to_form("Item", self.production_item),
+ frappe.bold(so_qty),
+ frappe.bold(frappe.get_value("Item", self.production_item, "stock_uom")),
),
OverProductionError,
)
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index c82e257dc6c..6978d0a634e 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -458,3 +458,4 @@ erpnext.patches.v16_0.update_corrected_cancelled_status
erpnext.patches.v16_0.fix_barcode_typo
erpnext.patches.v16_0.set_post_change_gl_entries_on_pos_settings
execute:frappe.delete_doc_if_exists("Workspace Sidebar", "Opening & Closing")
+erpnext.patches.v15_0.create_accounting_dimensions_in_advance_taxes_and_charges
diff --git a/erpnext/patches/v15_0/create_accounting_dimensions_in_advance_taxes_and_charges.py b/erpnext/patches/v15_0/create_accounting_dimensions_in_advance_taxes_and_charges.py
new file mode 100644
index 00000000000..201b16b1e00
--- /dev/null
+++ b/erpnext/patches/v15_0/create_accounting_dimensions_in_advance_taxes_and_charges.py
@@ -0,0 +1,7 @@
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
+ create_accounting_dimensions_for_doctype,
+)
+
+
+def execute():
+ create_accounting_dimensions_for_doctype(doctype="Advance Taxes and Charges")
diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py
index ed815c45884..c1f6e8d5dd9 100644
--- a/erpnext/projects/doctype/timesheet/test_timesheet.py
+++ b/erpnext/projects/doctype/timesheet/test_timesheet.py
@@ -7,6 +7,7 @@ import frappe
from frappe.tests import IntegrationTestCase
from frappe.utils import add_to_date, now_datetime, nowdate
+from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_sales_return
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.projects.doctype.task.test_task import create_task
from erpnext.projects.doctype.timesheet.timesheet import OverlapError, make_sales_invoice
@@ -272,6 +273,60 @@ class TestTimesheet(ERPNextTestSuite):
ts.calculate_percentage_billed()
self.assertEqual(ts.per_billed, 100)
+ def test_partial_billing_and_return(self):
+ """
+ Test Timesheet status transitions during partial billing, full billing,
+ sales return, and return cancellation.
+
+ Scenario:
+ 1. Create a Timesheet with two billable time logs.
+ 2. Create a Sales Invoice billing only one time log → Timesheet becomes Partially Billed.
+ 3. Create another Sales Invoice billing the remaining time log → Timesheet becomes Billed.
+ 4. Create a Sales Return against the second invoice → Timesheet reverts to Partially Billed.
+ 5. Cancel the Sales Return → Timesheet returns to Billed status.
+
+ This test ensures Timesheet status is recalculated correctly
+ across billing and return lifecycle events.
+ """
+ emp = make_employee("test_employee_6@salary.com")
+
+ timesheet = make_timesheet(emp, simulate=True, is_billable=1, do_not_submit=True)
+ timesheet_detail = timesheet.append("time_logs", {})
+ timesheet_detail.is_billable = 1
+ timesheet_detail.activity_type = "_Test Activity Type"
+ timesheet_detail.from_time = timesheet.time_logs[0].to_time + datetime.timedelta(minutes=1)
+ timesheet_detail.hours = 2
+ timesheet_detail.to_time = timesheet_detail.from_time + datetime.timedelta(
+ hours=timesheet_detail.hours
+ )
+ timesheet.save().submit()
+
+ sales_invoice = make_sales_invoice(timesheet.name, "_Test Item", "_Test Customer", currency="INR")
+ sales_invoice.due_date = nowdate()
+ sales_invoice.timesheets.pop()
+ sales_invoice.submit()
+
+ timesheet_status = frappe.get_value("Timesheet", timesheet.name, "status")
+ self.assertEqual(timesheet_status, "Partially Billed")
+
+ sales_invoice2 = make_sales_invoice(timesheet.name, "_Test Item", "_Test Customer", currency="INR")
+ sales_invoice2.due_date = nowdate()
+ sales_invoice2.submit()
+
+ timesheet_status = frappe.get_value("Timesheet", timesheet.name, "status")
+ self.assertEqual(timesheet_status, "Billed")
+
+ sales_return = make_sales_return(sales_invoice2.name).submit()
+ timesheet_status = frappe.get_value("Timesheet", timesheet.name, "status")
+ self.assertEqual(timesheet_status, "Partially Billed")
+
+ sales_return.load_from_db()
+ sales_return.cancel()
+
+ timesheet.load_from_db()
+ self.assertEqual(timesheet.time_logs[1].sales_invoice, sales_invoice2.name)
+ self.assertEqual(timesheet.status, "Billed")
+
def make_timesheet(
employee,
@@ -283,6 +338,7 @@ def make_timesheet(
company=None,
currency=None,
exchange_rate=None,
+ do_not_submit=False,
):
update_activity_type(activity_type)
timesheet = frappe.new_doc("Timesheet")
@@ -311,7 +367,8 @@ def make_timesheet(
else:
timesheet.save(ignore_permissions=True)
- timesheet.submit()
+ if not do_not_submit:
+ timesheet.submit()
return timesheet
diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json
index 255f7e8ed97..0022ef9193b 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.json
+++ b/erpnext/projects/doctype/timesheet/timesheet.json
@@ -91,7 +91,7 @@
"in_standard_filter": 1,
"label": "Status",
"no_copy": 1,
- "options": "Draft\nSubmitted\nBilled\nPayslip\nCompleted\nCancelled",
+ "options": "Draft\nSubmitted\nPartially Billed\nBilled\nPayslip\nCompleted\nCancelled",
"print_hide": 1,
"read_only": 1
},
@@ -310,7 +310,7 @@
"idx": 1,
"is_submittable": 1,
"links": [],
- "modified": "2024-03-27 13:10:53.551907",
+ "modified": "2025-12-19 13:48:23.453636",
"modified_by": "Administrator",
"module": "Projects",
"name": "Timesheet",
@@ -386,8 +386,9 @@
"write": 1
}
],
+ "row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py
index 866281bf1ef..7645ee263cc 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.py
+++ b/erpnext/projects/doctype/timesheet/timesheet.py
@@ -51,7 +51,9 @@ class Timesheet(Document):
per_billed: DF.Percent
sales_invoice: DF.Link | None
start_date: DF.Date | None
- status: DF.Literal["Draft", "Submitted", "Billed", "Payslip", "Completed", "Cancelled"]
+ status: DF.Literal[
+ "Draft", "Submitted", "Partially Billed", "Billed", "Payslip", "Completed", "Cancelled"
+ ]
time_logs: DF.Table[TimesheetDetail]
title: DF.Data | None
total_billable_amount: DF.Currency
@@ -128,6 +130,9 @@ class Timesheet(Document):
if flt(self.per_billed, self.precision("per_billed")) >= 100.0:
self.status = "Billed"
+ if 0.0 < flt(self.per_billed, self.precision("per_billed")) < 100.0:
+ self.status = "Partially Billed"
+
if self.sales_invoice:
self.status = "Completed"
@@ -433,7 +438,7 @@ def make_sales_invoice(source_name, item_code=None, customer=None, currency=None
target.append("items", {"item_code": item_code, "qty": hours, "rate": billing_rate})
for time_log in timesheet.time_logs:
- if time_log.is_billable:
+ if time_log.is_billable and not time_log.sales_invoice:
target.append(
"timesheets",
{
diff --git a/erpnext/projects/doctype/timesheet/timesheet_list.js b/erpnext/projects/doctype/timesheet/timesheet_list.js
index 0de568ce589..b733cccc787 100644
--- a/erpnext/projects/doctype/timesheet/timesheet_list.js
+++ b/erpnext/projects/doctype/timesheet/timesheet_list.js
@@ -1,6 +1,10 @@
frappe.listview_settings["Timesheet"] = {
add_fields: ["status", "total_hours", "start_date", "end_date"],
get_indicator: function (doc) {
+ if (doc.status == "Partially Billed") {
+ return [__("Partially Billed"), "orange", "status,=," + "Partially Billed"];
+ }
+
if (doc.status == "Billed") {
return [__("Billed"), "green", "status,=," + "Billed"];
}
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index a77bd824f2f..54474305643 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -518,7 +518,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
barcode(doc, cdt, cdn) {
let row = locals[cdt][cdn];
- if (row.barcode) {
+ if (row.barcode && !frappe.flags.trigger_from_barcode_scanner) {
erpnext.stock.utils.set_item_details_using_barcode(this.frm, row, (r) => {
frappe.model.set_value(cdt, cdn, {
item_code: r.message.item_code,
@@ -945,11 +945,10 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
// Replace all occurences of comma with line feed
item.serial_no = item.serial_no.replace(/,/g, "\n");
item.conversion_factor = item.conversion_factor || 1;
- refresh_field("serial_no", item.name, item.parentfield);
if (!doc.is_return) {
setTimeout(() => {
me.update_qty(cdt, cdn);
- }, 3000);
+ }, 300);
}
}
}
@@ -1530,8 +1529,8 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
} else if (
this.frm.doc.price_list_currency === this.frm.doc.currency &&
this.frm.doc.plc_conversion_rate &&
- cint(this.frm.doc.plc_conversion_rate) != 1 &&
- cint(this.frm.doc.plc_conversion_rate) != cint(this.frm.doc.conversion_rate)
+ flt(this.frm.doc.plc_conversion_rate) != 1 &&
+ flt(this.frm.doc.plc_conversion_rate) != flt(this.frm.doc.conversion_rate)
) {
this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
}
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index ed25d70c1f8..116449a6fa8 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -735,6 +735,7 @@ erpnext.utils.update_child_items = function (opts) {
fieldname: "item_name",
label: __("Item Name"),
read_only: 1,
+ in_list_view: 1,
},
{
fieldtype: "Link",
@@ -792,7 +793,7 @@ erpnext.utils.update_child_items = function (opts) {
];
if (frm.doc.doctype == "Sales Order" || frm.doc.doctype == "Purchase Order") {
- fields.splice(2, 0, {
+ fields.splice(3, 0, {
fieldtype: "Date",
fieldname: frm.doc.doctype == "Sales Order" ? "delivery_date" : "schedule_date",
in_list_view: 1,
@@ -800,7 +801,7 @@ erpnext.utils.update_child_items = function (opts) {
default: frm.doc.doctype == "Sales Order" ? frm.doc.delivery_date : frm.doc.schedule_date,
reqd: 1,
});
- fields.splice(3, 0, {
+ fields.splice(4, 0, {
fieldtype: "Float",
fieldname: "conversion_factor",
label: __("Conversion Factor"),
diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js
index 2e580f83c18..9ee1029f345 100644
--- a/erpnext/public/js/utils/barcode_scanner.js
+++ b/erpnext/public/js/utils/barcode_scanner.js
@@ -138,7 +138,6 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner {
frappe.run_serially([
() => this.set_selector_trigger_flag(data),
- () => this.set_barcode_uom(row, uom),
() => this.set_serial_no(row, serial_no),
() => this.set_batch_no(row, batch_no),
() => this.set_barcode(row, barcode),
@@ -148,6 +147,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner {
this.show_scan_message(row.idx, !is_new_row, qty);
}),
() => this.clean_up(),
+ () => this.set_barcode_uom(row, uom),
() => this.revert_selector_flag(),
() => resolve(row),
]);
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index d86296f1eea..a2e4dbf1da1 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -157,7 +157,7 @@ erpnext.utils.get_address_display = function (frm, address_field, display_field,
args: { address_dict: frm.doc[address_field] },
callback: function (r) {
if (r.message) {
- frm.set_value(display_field, frappe.utils.html2text(r.message));
+ frm.set_value(display_field, r.message);
}
},
});
diff --git a/erpnext/selling/doctype/customer/customer.json b/erpnext/selling/doctype/customer/customer.json
index 7ddb8fc74cf..72798f32329 100644
--- a/erpnext/selling/doctype/customer/customer.json
+++ b/erpnext/selling/doctype/customer/customer.json
@@ -335,7 +335,7 @@
},
{
"fieldname": "primary_address",
- "fieldtype": "Text",
+ "fieldtype": "Text Editor",
"label": "Primary Address",
"read_only": 1
},
@@ -625,7 +625,7 @@
"link_fieldname": "party"
}
],
- "modified": "2025-11-25 09:35:56.772949",
+ "modified": "2026-01-16 15:56:05.967663",
"modified_by": "Administrator",
"module": "Selling",
"name": "Customer",
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 628173c2c7d..7003d491c32 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -83,7 +83,7 @@ class Customer(TransactionBase):
opportunity_name: DF.Link | None
payment_terms: DF.Link | None
portal_users: DF.Table[PortalUser]
- primary_address: DF.Text | None
+ primary_address: DF.TextEditor | None
prospect_name: DF.Link | None
represents_company: DF.Link | None
sales_team: DF.Table[SalesTeam]
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 480ca04b6a9..bb82310d9c5 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -36,6 +36,15 @@ frappe.ui.form.on("Quotation", {
};
});
+ frm.set_query("warehouse", "items", (doc, cdt, cdn) => {
+ return {
+ filters: {
+ company: doc.company,
+ is_group: 0,
+ },
+ };
+ });
+
frm.set_indicator_formatter("item_code", function (doc) {
return !doc.qty && frm.doc.has_unit_price_items ? "yellow" : "";
});
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index fb4f6f5e696..c228c45b175 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -1220,10 +1220,12 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
},
freeze: true,
callback: function (r) {
- if (!r.message) {
+ if (r.message.length === 0) {
frappe.msgprint({
title: __("Work Order not created"),
- message: __("No Items with Bill of Materials to Manufacture"),
+ message: __(
+ "No Items with Bill of Materials to Manufacture or all items already manufactured"
+ ),
indicator: "orange",
});
return;
@@ -1233,19 +1235,24 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
label: __("Items"),
fieldtype: "Table",
fieldname: "items",
+ cannot_add_rows: true,
description: __("Select BOM and Qty for Production"),
fields: [
{
- fieldtype: "Read Only",
+ fieldtype: "Link",
fieldname: "item_code",
+ options: "Item",
label: __("Item Code"),
in_list_view: 1,
+ read_only: 1,
},
{
- fieldtype: "Read Only",
+ fieldtype: "Data",
fieldname: "item_name",
label: __("Item Name"),
in_list_view: 1,
+ read_only: 1,
+ fetch_from: "item_code.item_name",
},
{
fieldtype: "Link",
@@ -1271,6 +1278,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
reqd: 1,
label: __("Sales Order Item"),
hidden: 1,
+ read_only: 1,
},
],
data: r.message,
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 81ab746fc0c..a43877f923a 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -1981,6 +1981,10 @@ def get_work_order_items(sales_order, for_raw_material_request=0):
)
]
+ overproduction_percentage_for_sales_order = (
+ frappe.get_single_value("Manufacturing Settings", "overproduction_percentage_for_sales_order")
+ / 100
+ )
for table in [so.items, so.packed_items]:
for i in table:
bom = get_default_bom(i.item_code)
@@ -1989,12 +1993,12 @@ def get_work_order_items(sales_order, for_raw_material_request=0):
if not for_raw_material_request:
total_work_order_qty = flt(
qb.from_(wo)
- .select(Sum(wo.qty))
+ .select(Sum(wo.qty - wo.process_loss_qty))
.where(
(wo.production_item == i.item_code)
& (wo.sales_order == so.name)
& (wo.sales_order_item == i.name)
- & (wo.docstatus.lt(2))
+ & (wo.docstatus == 1)
& (wo.status != "Closed")
)
.run()[0][0]
@@ -2003,7 +2007,10 @@ def get_work_order_items(sales_order, for_raw_material_request=0):
else:
pending_qty = stock_qty
- if pending_qty and i.item_code not in product_bundle_parents:
+ if not pending_qty:
+ pending_qty = stock_qty * overproduction_percentage_for_sales_order
+
+ if pending_qty > 0 and i.item_code not in product_bundle_parents:
items.append(
dict(
name=i.name,
diff --git a/erpnext/selling/page/point_of_sale/pos_controller.js b/erpnext/selling/page/point_of_sale/pos_controller.js
index 41b89259eca..eefc932bcc1 100644
--- a/erpnext/selling/page/point_of_sale/pos_controller.js
+++ b/erpnext/selling/page/point_of_sale/pos_controller.js
@@ -651,6 +651,9 @@ erpnext.PointOfSale.Controller = class {
async on_cart_update(args) {
frappe.dom.freeze();
+ if (this.frm.doc.set_warehouse !== this.settings.warehouse) {
+ this.frm.set_value("set_warehouse", this.settings.warehouse);
+ }
let item_row = undefined;
try {
let { field, value, item } = args;
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index def469e4fa3..5a2b6db83f2 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -11,7 +11,16 @@ from frappe.cache_manager import clear_defaults_cache
from frappe.contacts.address_and_contact import load_address_and_contact
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
from frappe.desk.page.setup_wizard.setup_wizard import make_records
-from frappe.utils import add_months, cint, formatdate, get_first_day, get_link_to_form, get_timestamp, today
+from frappe.utils import (
+ add_months,
+ cint,
+ formatdate,
+ get_first_day,
+ get_last_day,
+ get_link_to_form,
+ get_timestamp,
+ today,
+)
from frappe.utils.nestedset import NestedSet, rebuild_tree
from erpnext.accounts.doctype.account.account import get_account_currency
@@ -866,31 +875,41 @@ def install_country_fixtures(company, country):
def update_company_current_month_sales(company):
- from_date = get_first_day(today())
- to_date = get_first_day(add_months(from_date, 1))
+ """Update Company's Total Monthly Sales.
- results = frappe.db.sql(
- """
- SELECT
- SUM(base_grand_total) AS total,
- DATE_FORMAT(posting_date, '%%m-%%Y') AS month_year
- FROM
- `tabSales Invoice`
- WHERE
- posting_date >= %s
- AND posting_date < %s
- AND docstatus = 1
- AND company = %s
- GROUP BY
- month_year
- """,
- (from_date, to_date, company),
- as_dict=True,
+ Postgres compatibility:
+ - Avoid MariaDB-only DATE_FORMAT().
+ - Use a date range for the current month instead (portable + index-friendly).
+ """
+
+ # Local imports so you don't have to touch file-level imports
+ from frappe.query_builder.functions import Sum
+
+ start_date = get_first_day(today())
+ end_date = get_last_day(today())
+
+ si = frappe.qb.DocType("Sales Invoice")
+
+ total_monthly_sales = (
+ frappe.qb.from_(si)
+ .select(Sum(si.base_grand_total))
+ .where(
+ (si.docstatus == 1)
+ & (si.company == company)
+ & (si.posting_date >= start_date)
+ & (si.posting_date <= end_date)
+ )
+ ).run(pluck=True)[0] or 0
+
+ # Fieldname in standard ERPNext is `total_monthly_sales`
+ frappe.db.set_value(
+ "Company",
+ company,
+ "total_monthly_sales",
+ total_monthly_sales,
+ update_modified=False,
)
- monthly_total = results[0]["total"] if len(results) > 0 else 0
- frappe.db.set_value("Company", company, "total_monthly_sales", monthly_total)
-
def update_company_monthly_sales(company):
"""Cache past year monthly sales of every company based on sales invoices"""
diff --git a/erpnext/setup/doctype/uom/uom.js b/erpnext/setup/doctype/uom/uom.js
index 273e30fd197..eb61f63f034 100644
--- a/erpnext/setup/doctype/uom/uom.js
+++ b/erpnext/setup/doctype/uom/uom.js
@@ -1,7 +1,2 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
-
-//--------- ONLOAD -------------
-cur_frm.cscript.onload = function (doc, cdt, cdn) {};
-
-cur_frm.cscript.refresh = function (doc, cdt, cdn) {};
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 56cdb427acd..6f13428c22b 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -116,6 +116,11 @@ frappe.ui.form.on("Item", {
},
__("View")
);
+
+ frm.toggle_display(
+ ["opening_stock"],
+ frappe.model.can_create("Stock Entry") && frappe.model.can_write("Stock Entry")
+ );
}
if (frm.doc.is_fixed_asset) {
@@ -239,6 +244,8 @@ frappe.ui.form.on("Item", {
},
};
});
+
+ frm.toggle_display(["standard_rate"], frappe.model.can_create("Item Price"));
},
validate: function (frm) {
@@ -1063,7 +1070,7 @@ frappe.tour["Item"] = [
fieldname: "valuation_rate",
title: "Valuation Rate",
description: __(
- "There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit Item Valuation, FIFO and Moving Average."
+ "There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit Item Valuation, FIFO and Moving Average."
),
},
{
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index ca4cdf5d458..9d23eda3755 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -437,7 +437,7 @@ def get_vendor_invoices(doctype, txt, searchfield, start, page_len, filters):
query = get_vendor_invoice_query(filters)
if txt:
- query = query.where(doctype.name.like(f"%{txt}%"))
+ query = query.where(frappe.qb.DocType(doctype).name.like(f"%{txt}%"))
if start:
query = query.limit(page_len).offset(start)
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index b5c1c38729f..81c1b147697 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -266,7 +266,7 @@ erpnext.stock.PurchaseReceiptController = class PurchaseReceiptController extend
);
}
cur_frm.add_custom_button(
- __("Retention Stock Entry"),
+ __("Sample Retention Stock Entry"),
this.make_retention_stock_entry,
__("Create")
);
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 6ee22025565..b26bab3d1c4 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -4849,6 +4849,154 @@ class TestPurchaseReceipt(IntegrationTestCase):
self.assertEqual(return_entry.items[0].qty, -2)
self.assertEqual(return_entry.items[0].rejected_qty, 0) # 3-3=0
+ def test_do_not_use_batchwise_valuation_with_fifo(self):
+ from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
+
+ item_code = make_item(
+ "Test Item Do Not Use Batchwise Valuation with FIFO",
+ {
+ "is_stock_item": 1,
+ "has_batch_no": 1,
+ "batch_number_series": "BN-TESTDNUBVWF-.#####",
+ "valuation_method": "FIFO",
+ },
+ ).name
+
+ doc = frappe.new_doc("Batch")
+ doc.update(
+ {
+ "batch_id": "BN-TESTDNUBVWF-00001",
+ "item": item_code,
+ }
+ ).insert()
+
+ doc.db_set("use_batchwise_valuation", 0)
+ doc.reload()
+
+ self.assertTrue(doc.use_batchwise_valuation == 0)
+
+ doc = frappe.new_doc("Batch")
+ doc.update(
+ {
+ "batch_id": "BN-TESTDNUBVWF-00002",
+ "item": item_code,
+ }
+ ).insert()
+
+ self.assertTrue(doc.use_batchwise_valuation == 1)
+
+ warehouse = "_Test Warehouse - _TC"
+ make_stock_entry(
+ item_code=item_code,
+ qty=10,
+ rate=100,
+ target=warehouse,
+ batch_no="BN-TESTDNUBVWF-00001",
+ use_serial_batch_fields=1,
+ )
+
+ se1 = make_stock_entry(
+ item_code=item_code,
+ qty=10,
+ rate=200,
+ target=warehouse,
+ batch_no="BN-TESTDNUBVWF-00001",
+ use_serial_batch_fields=1,
+ )
+
+ stock_queue = frappe.db.get_value(
+ "Stock Ledger Entry",
+ {
+ "item_code": item_code,
+ "warehouse": warehouse,
+ "is_cancelled": 0,
+ "voucher_type": "Stock Entry",
+ "voucher_no": se1.name,
+ },
+ "stock_queue",
+ )
+
+ stock_queue = frappe.parse_json(stock_queue)
+
+ self.assertEqual(stock_queue, [[10, 100.0], [10, 200.0]])
+
+ se2 = make_stock_entry(
+ item_code=item_code,
+ qty=10,
+ rate=2,
+ target=warehouse,
+ batch_no="BN-TESTDNUBVWF-00002",
+ use_serial_batch_fields=1,
+ )
+
+ stock_queue = frappe.db.get_value(
+ "Stock Ledger Entry",
+ {
+ "item_code": item_code,
+ "warehouse": warehouse,
+ "is_cancelled": 0,
+ "voucher_type": "Stock Entry",
+ "voucher_no": se2.name,
+ },
+ "stock_queue",
+ )
+
+ stock_queue = frappe.parse_json(stock_queue)
+ self.assertEqual(stock_queue, [[10, 100.0], [10, 200.0]])
+
+ se3 = make_stock_entry(
+ item_code=item_code,
+ qty=20,
+ source=warehouse,
+ batch_no="BN-TESTDNUBVWF-00001",
+ use_serial_batch_fields=1,
+ )
+
+ ste_details = frappe.db.get_value(
+ "Stock Ledger Entry",
+ {
+ "item_code": item_code,
+ "warehouse": warehouse,
+ "is_cancelled": 0,
+ "voucher_type": "Stock Entry",
+ "voucher_no": se3.name,
+ },
+ ["stock_queue", "stock_value_difference"],
+ as_dict=1,
+ )
+
+ stock_queue = frappe.parse_json(ste_details.stock_queue)
+ self.assertEqual(stock_queue, [])
+ self.assertEqual(ste_details.stock_value_difference, 3000 * -1)
+
+ se4 = make_stock_entry(
+ item_code=item_code,
+ qty=20,
+ rate=0,
+ target=warehouse,
+ batch_no="BN-TESTDNUBVWF-00001",
+ use_serial_batch_fields=1,
+ do_not_submit=1,
+ )
+
+ se4.items[0].basic_rate = 0.0
+ se4.items[0].allow_zero_valuation_rate = 1
+ se4.submit()
+
+ stock_queue = frappe.db.get_value(
+ "Stock Ledger Entry",
+ {
+ "item_code": item_code,
+ "warehouse": warehouse,
+ "is_cancelled": 0,
+ "voucher_type": "Stock Entry",
+ "voucher_no": se4.name,
+ },
+ "stock_queue",
+ )
+
+ self.assertEqual(frappe.parse_json(stock_queue), [[20, 0.0]])
+
def prepare_data_for_internal_transfer():
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier
diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
index 8b50e1666ef..fce52748283 100644
--- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
+++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
@@ -12,7 +12,7 @@ import frappe.query_builder.functions
from frappe import _, _dict, bold
from frappe.model.document import Document
from frappe.model.naming import make_autoname
-from frappe.query_builder.functions import Sum
+from frappe.query_builder.functions import Concat_ws, Locate, Sum
from frappe.utils import (
cint,
cstr,
@@ -712,17 +712,16 @@ class SerialandBatchBundle(Document):
is_packed_item = True
stock_queue = []
- batches = []
- if prev_sle and prev_sle.stock_queue:
- batches = frappe.get_all(
- "Batch",
- filters={
- "name": ("in", [d.batch_no for d in self.entries if d.batch_no]),
- "use_batchwise_valuation": 0,
- },
- pluck="name",
- )
+ batches = frappe.get_all(
+ "Batch",
+ filters={
+ "name": ("in", [d.batch_no for d in self.entries if d.batch_no]),
+ "use_batchwise_valuation": 0,
+ },
+ pluck="name",
+ )
+ if prev_sle and prev_sle.stock_queue and parse_json(prev_sle.stock_queue):
if batches and valuation_method == "FIFO":
stock_queue = parse_json(prev_sle.stock_queue)
@@ -749,7 +748,7 @@ class SerialandBatchBundle(Document):
if d.qty:
d.stock_value_difference = flt(d.qty) * d.incoming_rate
- if stock_queue and valuation_method == "FIFO" and d.batch_no in batches:
+ if valuation_method == "FIFO" and d.batch_no in batches and d.incoming_rate is not None:
stock_queue.append([d.qty, d.incoming_rate])
d.stock_queue = json.dumps(stock_queue)
@@ -2986,7 +2985,15 @@ def get_ledgers_from_serial_batch_bundle(**kwargs) -> list[frappe._dict]:
def get_stock_ledgers_for_serial_nos(kwargs):
+ """
+ Fetch stock ledger entries based on various filters.
+ :param kwargs: Filters including posting_datetime, creation, warehouse, item_code, serial_nos, ignore_voucher_detail_no, voucher_no. Joins with Serial and Batch Entry table to filter based on serial numbers.
+ :return: List of stock ledger entries as dictionaries.
+ :rtype: list[dict]
+ """
+
stock_ledger_entry = frappe.qb.DocType("Stock Ledger Entry")
+ serial_batch_entry = frappe.qb.DocType("Serial and Batch Entry")
query = (
frappe.qb.from_(stock_ledger_entry)
@@ -3013,7 +3020,7 @@ def get_stock_ledgers_for_serial_nos(kwargs):
query = query.where(timestamp_condition)
- for field in ["warehouse", "item_code", "serial_no"]:
+ for field in ["warehouse", "item_code"]:
if not kwargs.get(field):
continue
@@ -3022,6 +3029,27 @@ def get_stock_ledgers_for_serial_nos(kwargs):
else:
query = query.where(stock_ledger_entry[field] == kwargs.get(field))
+ serial_nos = kwargs.get("serial_nos") or kwargs.get("serial_no")
+ if serial_nos and not isinstance(serial_nos, list):
+ serial_nos = [serial_nos]
+
+ if serial_nos:
+ query = (
+ query.left_join(serial_batch_entry)
+ .on(stock_ledger_entry.serial_and_batch_bundle == serial_batch_entry.parent)
+ .distinct()
+ )
+
+ bundle_match = serial_batch_entry.serial_no.isin(serial_nos)
+
+ padded_serial_no = Concat_ws("", "\n", stock_ledger_entry.serial_no, "\n")
+ direct_match = None
+ for sn in serial_nos:
+ cond = Locate(f"\n{sn}\n", padded_serial_no) > 0
+ direct_match = cond if direct_match is None else (direct_match | cond)
+
+ query = query.where(bundle_match | direct_match)
+
if kwargs.ignore_voucher_detail_no:
query = query.where(stock_ledger_entry.voucher_detail_no != kwargs.ignore_voucher_detail_no)
diff --git a/erpnext/stock/doctype/shipment/shipment.json b/erpnext/stock/doctype/shipment/shipment.json
index d7f0877a298..a5e0a2377cf 100644
--- a/erpnext/stock/doctype/shipment/shipment.json
+++ b/erpnext/stock/doctype/shipment/shipment.json
@@ -115,7 +115,7 @@
},
{
"fieldname": "pickup_address",
- "fieldtype": "Small Text",
+ "fieldtype": "Text Editor",
"read_only": 1
},
{
@@ -135,7 +135,7 @@
},
{
"fieldname": "pickup_contact",
- "fieldtype": "Small Text",
+ "fieldtype": "Text Editor",
"read_only": 1
},
{
@@ -193,7 +193,7 @@
},
{
"fieldname": "delivery_address",
- "fieldtype": "Small Text",
+ "fieldtype": "Text Editor",
"read_only": 1
},
{
@@ -214,7 +214,7 @@
{
"depends_on": "eval:doc.delivery_contact_name",
"fieldname": "delivery_contact",
- "fieldtype": "Small Text",
+ "fieldtype": "Text Editor",
"read_only": 1
},
{
@@ -441,11 +441,11 @@
],
"is_submittable": 1,
"links": [],
- "modified": "2026-01-07 19:24:23.566312",
+ "modified": "2026-01-16 14:59:28.547953",
"modified_by": "Administrator",
"module": "Stock",
"name": "Shipment",
- "naming_rule": "Expression (old style)",
+ "naming_rule": "Expression",
"owner": "Administrator",
"permissions": [
{
@@ -477,8 +477,9 @@
"write": 1
}
],
+ "row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/shipment/shipment.py b/erpnext/stock/doctype/shipment/shipment.py
index a2d6dee50dc..ae5a4214d24 100644
--- a/erpnext/stock/doctype/shipment/shipment.py
+++ b/erpnext/stock/doctype/shipment/shipment.py
@@ -27,10 +27,10 @@ class Shipment(Document):
awb_number: DF.Data | None
carrier: DF.Data | None
carrier_service: DF.Data | None
- delivery_address: DF.SmallText | None
+ delivery_address: DF.TextEditor | None
delivery_address_name: DF.Link
delivery_company: DF.Link | None
- delivery_contact: DF.SmallText | None
+ delivery_contact: DF.TextEditor | None
delivery_contact_email: DF.Data | None
delivery_contact_name: DF.Link | None
delivery_customer: DF.Link | None
@@ -42,10 +42,10 @@ class Shipment(Document):
pallets: DF.Literal["No", "Yes"]
parcel_template: DF.Link | None
pickup: DF.Data | None
- pickup_address: DF.SmallText | None
+ pickup_address: DF.TextEditor | None
pickup_address_name: DF.Link
pickup_company: DF.Link | None
- pickup_contact: DF.SmallText | None
+ pickup_contact: DF.TextEditor | None
pickup_contact_email: DF.Data | None
pickup_contact_name: DF.Link | None
pickup_contact_person: DF.Link | None
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index d106d097256..6155d2e5f77 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -440,12 +440,16 @@ frappe.ui.form.on("Stock Entry", {
if (
frm.doc.docstatus == 1 &&
- frm.doc.purpose == "Material Receipt" &&
+ ["Material Receipt", "Manufacture"].includes(frm.doc.purpose) &&
frm.get_sum("items", "sample_quantity")
) {
- frm.add_custom_button(__("Create Sample Retention Stock Entry"), function () {
- frm.trigger("make_retention_stock_entry");
- });
+ frm.add_custom_button(
+ __("Sample Retention Stock Entry"),
+ function () {
+ frm.trigger("make_retention_stock_entry");
+ },
+ __("Create")
+ );
}
frm.trigger("setup_quality_inspection");
@@ -568,10 +572,6 @@ frappe.ui.form.on("Stock Entry", {
if (r.message) {
var doc = frappe.model.sync(r.message)[0];
frappe.set_route("Form", doc.doctype, doc.name);
- } else {
- frappe.msgprint(
- __("Retention Stock Entry already created or Sample Quantity not provided")
- );
}
},
});
@@ -885,12 +885,11 @@ frappe.ui.form.on("Stock Entry", {
frm.doc.items.forEach((item) => {
if (item.is_finished_item) {
- fg_completed_qty += flt(item.transfer_qty);
+ fg_completed_qty += flt(item.transfer_qty + frm.doc.process_loss_qty);
}
});
- frm.doc.fg_completed_qty = fg_completed_qty;
- frm.refresh_field("fg_completed_qty");
+ frm.set_value("fg_completed_qty", fg_completed_qty);
},
});
@@ -1054,7 +1053,7 @@ frappe.ui.form.on("Stock Entry Detail", {
var validate_sample_quantity = function (frm, cdt, cdn) {
var d = locals[cdt][cdn];
- if (d.sample_quantity && frm.doc.purpose == "Material Receipt") {
+ if (d.sample_quantity && d.transfer_qty && frm.doc.purpose == "Material Receipt") {
frappe.call({
method: "erpnext.stock.doctype.stock_entry.stock_entry.validate_sample_quantity",
args: {
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 8c200715397..ed3c0d7658f 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -724,7 +724,7 @@ class StockEntry(StockController, SubcontractingInwardController):
"Subcontracting Return",
]
- validate_for_manufacture = any([d.bom_no for d in self.get("items")])
+ has_bom = any([d.bom_no for d in self.get("items")])
if self.purpose in source_mandatory and self.purpose not in target_mandatory:
self.to_warehouse = None
@@ -753,7 +753,7 @@ class StockEntry(StockController, SubcontractingInwardController):
frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
if self.purpose == "Manufacture":
- if validate_for_manufacture:
+ if has_bom:
if d.is_finished_item or d.is_scrap_item:
d.s_warehouse = None
if not d.t_warehouse:
@@ -763,6 +763,17 @@ class StockEntry(StockController, SubcontractingInwardController):
if not d.s_warehouse:
frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx))
+ if self.purpose == "Disassemble":
+ if has_bom:
+ if d.is_finished_item:
+ d.t_warehouse = None
+ if not d.s_warehouse:
+ frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx))
+ else:
+ d.s_warehouse = None
+ if not d.t_warehouse:
+ frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
+
if cstr(d.s_warehouse) == cstr(d.t_warehouse) and self.purpose not in [
"Material Transfer for Manufacture",
"Material Transfer",
@@ -927,7 +938,9 @@ class StockEntry(StockController, SubcontractingInwardController):
if matched_item := self.get_matched_items(item_code):
if flt(details.get("qty"), precision) != flt(matched_item.qty, precision):
frappe.throw(
- _("For the item {0}, the quantity should be {1} according to the BOM {2}.").format(
+ _(
+ "For the item {0}, the consumed quantity should be {1} according to the BOM {2}."
+ ).format(
frappe.bold(item_code),
flt(details.get("qty")),
get_link_to_form("BOM", self.bom_no),
@@ -992,12 +1005,37 @@ class StockEntry(StockController, SubcontractingInwardController):
)
def get_matched_items(self, item_code):
- for row in self.items:
+ items = [item for item in self.items if item.s_warehouse]
+ for row in items or self.get_consumed_items():
if row.item_code == item_code or row.original_item == item_code:
return row
return {}
+ def get_consumed_items(self):
+ """Get all raw materials consumed through consumption entries"""
+ parent = frappe.qb.DocType("Stock Entry")
+ child = frappe.qb.DocType("Stock Entry Detail")
+
+ query = (
+ frappe.qb.from_(parent)
+ .join(child)
+ .on(parent.name == child.parent)
+ .select(
+ child.item_code,
+ Sum(child.qty).as_("qty"),
+ child.original_item,
+ )
+ .where(
+ (parent.docstatus == 1)
+ & (parent.purpose == "Material Consumption for Manufacture")
+ & (parent.work_order == self.work_order)
+ )
+ .groupby(child.item_code, child.original_item)
+ )
+
+ return query.run(as_dict=True)
+
@frappe.whitelist()
def get_stock_and_rate(self):
"""
@@ -2162,9 +2200,12 @@ class StockEntry(StockController, SubcontractingInwardController):
def get_items_for_disassembly(self):
"""Get items for Disassembly Order"""
- if not self.work_order:
- frappe.throw(_("The Work Order is mandatory for Disassembly Order"))
+ if self.work_order:
+ return self._add_items_for_disassembly_from_work_order()
+ return self._add_items_for_disassembly_from_bom()
+
+ def _add_items_for_disassembly_from_work_order(self):
items = self.get_items_from_manufacture_entry()
s_warehouse = frappe.db.get_value("Work Order", self.work_order, "fg_warehouse")
@@ -2196,6 +2237,23 @@ class StockEntry(StockController, SubcontractingInwardController):
child_row.t_warehouse = row.s_warehouse
child_row.is_finished_item = 0 if row.is_finished_item else 1
+ def _add_items_for_disassembly_from_bom(self):
+ if not self.bom_no or not self.fg_completed_qty:
+ frappe.throw(_("BOM and Finished Good Quantity is mandatory for Disassembly"))
+
+ # Raw Materials
+ item_dict = self.get_bom_raw_materials(self.fg_completed_qty)
+
+ for item_row in item_dict.values():
+ item_row["to_warehouse"] = self.to_warehouse
+ item_row["from_warehouse"] = ""
+ item_row["is_finished_item"] = 0
+
+ self.add_to_stock_entry_detail(item_dict)
+
+ # Finished goods
+ self.load_items_from_bom()
+
def get_items_from_manufacture_entry(self):
return frappe.get_all(
"Stock Entry",
@@ -2560,6 +2618,7 @@ class StockEntry(StockController, SubcontractingInwardController):
expense_account = item.get("expense_account")
if not expense_account:
expense_account = frappe.get_cached_value("Company", self.company, "stock_adjustment_account")
+
args = {
"to_warehouse": to_warehouse,
"from_warehouse": "",
@@ -2570,8 +2629,18 @@ class StockEntry(StockController, SubcontractingInwardController):
"expense_account": expense_account,
"cost_center": item.get("buying_cost_center"),
"is_finished_item": 1,
+ "sample_quantity": item.get("sample_quantity"),
}
+ if self.purpose == "Disassemble":
+ args.update(
+ {
+ "from_warehouse": self.from_warehouse,
+ "to_warehouse": "",
+ "qty": flt(self.fg_completed_qty),
+ }
+ )
+
if (
self.work_order
and self.pro_doc.has_batch_no
@@ -3103,6 +3172,7 @@ class StockEntry(StockController, SubcontractingInwardController):
se_child.po_detail = item_row.get("po_detail")
se_child.sco_rm_detail = item_row.get("sco_rm_detail")
se_child.scio_detail = item_row.get("scio_detail")
+ se_child.sample_quantity = item_row.get("sample_quantity", 0)
for field in [
self.subcontract_data.rm_detail_field,
@@ -3408,13 +3478,14 @@ class StockEntry(StockController, SubcontractingInwardController):
@frappe.whitelist()
def move_sample_to_retention_warehouse(company, items):
- from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle import (
- get_batch_from_bundle,
+ from erpnext.stock.serial_batch_bundle import (
+ SerialBatchCreation,
+ get_batch_nos,
)
- from erpnext.stock.serial_batch_bundle import SerialBatchCreation
if isinstance(items, str):
items = json.loads(items)
+
retention_warehouse = frappe.get_single_value("Stock Settings", "sample_retention_warehouse")
stock_entry = frappe.new_doc("Stock Entry")
stock_entry.company = company
@@ -3422,38 +3493,64 @@ def move_sample_to_retention_warehouse(company, items):
stock_entry.set_stock_entry_type()
for item in items:
if item.get("sample_quantity") and item.get("serial_and_batch_bundle"):
- batch_no = get_batch_from_bundle(item.get("serial_and_batch_bundle"))
- sample_quantity = validate_sample_quantity(
- item.get("item_code"),
- item.get("sample_quantity"),
- item.get("transfer_qty") or item.get("qty"),
- batch_no,
+ warehouse = item.get("t_warehouse") or item.get("warehouse")
+ total_qty = 0
+ cls_obj = SerialBatchCreation(
+ {
+ "type_of_transaction": "Outward",
+ "serial_and_batch_bundle": item.get("serial_and_batch_bundle"),
+ "item_code": item.get("item_code"),
+ "warehouse": warehouse,
+ "do_not_save": True,
+ }
)
-
- if sample_quantity:
- cls_obj = SerialBatchCreation(
- {
- "type_of_transaction": "Outward",
- "serial_and_batch_bundle": item.get("serial_and_batch_bundle"),
- "item_code": item.get("item_code"),
- "warehouse": item.get("t_warehouse"),
- }
+ sabb = cls_obj.duplicate_package()
+ batches = get_batch_nos(item.get("serial_and_batch_bundle"))
+ sabe_list = []
+ for batch_no in batches.keys():
+ sample_quantity = validate_sample_quantity(
+ item.get("item_code"),
+ item.get("sample_quantity"),
+ item.get("transfer_qty") or item.get("qty"),
+ batch_no,
)
- cls_obj.duplicate_package()
+ sabe = next(item for item in sabb.entries if item.batch_no == batch_no)
+ if sample_quantity:
+ if sabb.has_serial_no:
+ new_sabe = [
+ entry
+ for entry in sabb.entries
+ if entry.batch_no == batch_no
+ and frappe.db.exists(
+ "Serial No", {"name": entry.serial_no, "warehouse": warehouse}
+ )
+ ][: int(sample_quantity)]
+ sabe_list.extend(new_sabe)
+ total_qty += len(new_sabe)
+ else:
+ total_qty += sample_quantity
+ sabe.qty = sample_quantity
+ else:
+ sabb.entries.remove(sabe)
+
+ if total_qty:
+ if sabe_list:
+ sabb.entries = sabe_list
+ sabb.save()
stock_entry.append(
"items",
{
"item_code": item.get("item_code"),
- "s_warehouse": item.get("t_warehouse"),
+ "s_warehouse": warehouse,
"t_warehouse": retention_warehouse,
- "qty": item.get("sample_quantity"),
+ "qty": total_qty,
"basic_rate": item.get("valuation_rate"),
"uom": item.get("uom"),
"stock_uom": item.get("stock_uom"),
"conversion_factor": item.get("conversion_factor") or 1.0,
- "serial_and_batch_bundle": cls_obj.serial_and_batch_bundle,
+ "serial_and_batch_bundle": sabb.name,
},
)
if stock_entry.get("items"):
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py
index 576d129ee2d..6e54fd4e3b9 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py
@@ -190,6 +190,7 @@ def make_stock_entry(**args):
"cost_center": args.cost_center,
"expense_account": args.expense_account,
"use_serial_batch_fields": args.use_serial_batch_fields,
+ "sample_quantity": frappe.get_value("Item", args.item, "sample_quantity") or 0,
},
)
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 935e86dcdc6..ced7d946f6f 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -2250,6 +2250,145 @@ class TestStockEntry(IntegrationTestCase):
material_request.reload()
self.assertEqual(material_request.transfer_status, "Completed")
+ def test_manufacture_entry_without_wo(self):
+ from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+
+ fg_item = make_item("_Mobiles", properties={"is_stock_item": 1}).name
+ rm_item1 = make_item("_Temper Glass", properties={"is_stock_item": 1}).name
+ rm_item2 = make_item("_Battery", properties={"is_stock_item": 1}).name
+ warehouse = "_Test Warehouse - _TC"
+ make_stock_entry(item_code=rm_item1, target=warehouse, qty=5, purpose="Material Receipt")
+ make_stock_entry(item_code=rm_item2, target=warehouse, qty=5, purpose="Material Receipt")
+
+ bom_no = make_bom(item=fg_item, raw_materials=[rm_item1, rm_item2]).name
+ se = make_stock_entry(item_code=fg_item, qty=1, purpose="Manufacture", do_not_save=True)
+ se.from_bom = 1
+ se.use_multi_level_bom = 1
+ se.bom_no = bom_no
+ se.fg_completed_qty = 1
+ se.from_warehouse = warehouse
+ se.to_warehouse = warehouse
+
+ se.get_items()
+ rm_items = {d.item_code: d.qty for d in se.items if d.item_code != fg_item}
+ self.assertEqual(rm_items[rm_item1], 1)
+ self.assertEqual(rm_items[rm_item2], 1)
+ se.calculate_rate_and_amount()
+ se.save()
+ se.submit()
+
+ def test_disassemble_entry_without_wo(self):
+ from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+
+ fg_item = make_item("_Disassemble Mobile", properties={"is_stock_item": 1}).name
+ rm_item1 = make_item("_Disassemble Temper Glass", properties={"is_stock_item": 1}).name
+ rm_item2 = make_item("_Disassemble Battery", properties={"is_stock_item": 1}).name
+ warehouse = "_Test Warehouse - _TC"
+
+ # Stock up the FG item (what we'll disassemble)
+ make_stock_entry(item_code=fg_item, target=warehouse, qty=5, purpose="Material Receipt")
+
+ bom_no = make_bom(item=fg_item, raw_materials=[rm_item1, rm_item2]).name
+
+ se = make_stock_entry(item_code=fg_item, qty=1, purpose="Disassemble", do_not_save=True)
+ se.from_bom = 1
+ se.use_multi_level_bom = 1
+ se.bom_no = bom_no
+ se.fg_completed_qty = 1
+ se.from_warehouse = warehouse
+ se.to_warehouse = warehouse
+
+ se.get_items()
+
+ # Verify FG as source (being consumed)
+ fg_items = [d for d in se.items if d.is_finished_item]
+ self.assertEqual(len(fg_items), 1)
+ self.assertEqual(fg_items[0].item_code, fg_item)
+ self.assertEqual(fg_items[0].qty, 1)
+ self.assertEqual(fg_items[0].s_warehouse, warehouse)
+ self.assertFalse(fg_items[0].t_warehouse)
+
+ # Verify RM as target (being received)
+ rm_items = {d.item_code: d for d in se.items if not d.is_finished_item}
+ self.assertEqual(len(rm_items), 2)
+ self.assertIn(rm_item1, rm_items)
+ self.assertIn(rm_item2, rm_items)
+ self.assertEqual(rm_items[rm_item1].qty, 1)
+ self.assertEqual(rm_items[rm_item2].qty, 1)
+ self.assertEqual(rm_items[rm_item1].t_warehouse, warehouse)
+ self.assertFalse(rm_items[rm_item1].s_warehouse)
+
+ se.calculate_rate_and_amount()
+ se.save()
+ se.submit()
+
+ @IntegrationTestCase.change_settings(
+ "Stock Settings", {"sample_retention_warehouse": "_Test Warehouse 1 - _TC"}
+ )
+ def test_sample_retention_stock_entry(self):
+ from erpnext.stock.doctype.stock_entry.stock_entry import move_sample_to_retention_warehouse
+
+ warehouse = "_Test Warehouse - _TC"
+ retain_sample_item = make_item(
+ "Retain Sample Item",
+ properties={
+ "is_stock_item": 1,
+ "retain_sample": 1,
+ "sample_quantity": 2,
+ "has_batch_no": 1,
+ "has_serial_no": 1,
+ "create_new_batch": 1,
+ "batch_number_series": "SAMPLE-RET-.#####",
+ "serial_no_series": "SAMPLE-RET-SN-.#####",
+ },
+ )
+ material_receipt = make_stock_entry(
+ item_code=retain_sample_item.item_code, target=warehouse, qty=10, purpose="Material Receipt"
+ )
+
+ source_sabb = frappe.get_doc(
+ "Serial and Batch Bundle", material_receipt.items[0].serial_and_batch_bundle
+ )
+ batch = source_sabb.entries[0].batch_no
+ serial_nos = [entry.serial_no for entry in source_sabb.entries]
+
+ sample_entry = frappe.get_doc(
+ move_sample_to_retention_warehouse(material_receipt.company, material_receipt.items)
+ )
+ sample_entry.submit()
+ target_sabb = frappe.get_doc("Serial and Batch Bundle", sample_entry.items[0].serial_and_batch_bundle)
+
+ self.assertEqual(sample_entry.items[0].transfer_qty, 2)
+ self.assertEqual(target_sabb.entries[0].batch_no, batch)
+ self.assertEqual([entry.serial_no for entry in target_sabb.entries], serial_nos[:2])
+
+ @IntegrationTestCase.change_settings(
+ "Manufacturing Settings",
+ {
+ "material_consumption": 1,
+ "backflush_raw_materials_based_on": "BOM",
+ "validate_components_quantities_per_bom": 1,
+ },
+ )
+ def test_validation_as_per_bom_with_continuous_raw_material_consumption(self):
+ from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+ from erpnext.manufacturing.doctype.work_order.work_order import make_stock_entry as _make_stock_entry
+ from erpnext.manufacturing.doctype.work_order.work_order import make_work_order
+
+ fg_item = make_item("_Mobiles", properties={"is_stock_item": 1}).name
+ rm_item1 = make_item("_Battery", properties={"is_stock_item": 1}).name
+ warehouse = "Stores - WP"
+ bom_no = make_bom(item=fg_item, raw_materials=[rm_item1]).name
+ make_stock_entry(item_code=rm_item1, target=warehouse, qty=5, rate=10, purpose="Material Receipt")
+
+ work_order = make_work_order(bom_no, fg_item, 5)
+ work_order.skip_transfer = 1
+ work_order.fg_warehouse = warehouse
+ work_order.submit()
+
+ frappe.get_doc(_make_stock_entry(work_order.name, "Material Consumption for Manufacture", 5)).submit()
+ frappe.get_doc(_make_stock_entry(work_order.name, "Manufacture", 5)).submit()
+
def make_serialized_item(self, **args):
args = frappe._dict(args)
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 59683e87e3d..64ac2a94928 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -75,6 +75,7 @@ class StockReconciliation(StockController):
self.validate_duplicate_serial_and_batch_bundle("items")
self.remove_items_with_no_change()
self.validate_data()
+ self.change_row_indexes()
self.validate_expense_account()
self.validate_customer_provided_item()
self.set_zero_value_for_customer_provided_items()
@@ -556,8 +557,7 @@ class StockReconciliation(StockController):
elif len(items) != len(self.items):
self.items = items
- for i, item in enumerate(self.items):
- item.idx = i + 1
+ self.change_idx = True
frappe.msgprint(_("Removed items with no change in quantity or value."))
def calculate_difference_amount(self, item, item_dict):
@@ -574,14 +574,14 @@ class StockReconciliation(StockController):
def validate_data(self):
def _get_msg(row_num, msg):
- return _("Row # {0}:").format(row_num + 1) + " " + msg
+ return _("Row #{0}:").format(row_num) + " " + msg
self.validation_messages = []
item_warehouse_combinations = []
default_currency = frappe.db.get_default("currency")
- for row_num, row in enumerate(self.items):
+ for row in self.items:
# find duplicates
key = [row.item_code, row.warehouse]
for field in ["serial_no", "batch_no"]:
@@ -594,7 +594,7 @@ class StockReconciliation(StockController):
if key in item_warehouse_combinations:
self.validation_messages.append(
- _get_msg(row_num, _("Same item and warehouse combination already entered."))
+ _get_msg(row.idx, _("Same item and warehouse combination already entered."))
)
else:
item_warehouse_combinations.append(key)
@@ -604,7 +604,7 @@ class StockReconciliation(StockController):
if row.serial_no and not row.qty:
self.validation_messages.append(
_get_msg(
- row_num,
+ row.idx,
f"Quantity should not be zero for the {bold(row.item_code)} since serial nos are specified",
)
)
@@ -612,17 +612,17 @@ class StockReconciliation(StockController):
# if both not specified
if row.qty in ["", None] and row.valuation_rate in ["", None]:
self.validation_messages.append(
- _get_msg(row_num, _("Please specify either Quantity or Valuation Rate or both"))
+ _get_msg(row.idx, _("Please specify either Quantity or Valuation Rate or both"))
)
# do not allow negative quantity
if flt(row.qty) < 0:
- self.validation_messages.append(_get_msg(row_num, _("Negative Quantity is not allowed")))
+ self.validation_messages.append(_get_msg(row.idx, _("Negative Quantity is not allowed")))
# do not allow negative valuation
if flt(row.valuation_rate) < 0:
self.validation_messages.append(
- _get_msg(row_num, _("Negative Valuation Rate is not allowed"))
+ _get_msg(row.idx, _("Negative Valuation Rate is not allowed"))
)
if row.qty and row.valuation_rate in ["", None]:
@@ -654,6 +654,11 @@ class StockReconciliation(StockController):
raise frappe.ValidationError(self.validation_messages)
+ def change_row_indexes(self):
+ if getattr(self, "change_idx", False):
+ for i, item in enumerate(self.items):
+ item.idx = i + 1
+
def validate_item(self, item_code, row):
from erpnext.stock.doctype.item.item import (
validate_cancelled_item,
diff --git a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py
index 172e0fa6a41..8afe1d72e27 100644
--- a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py
+++ b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py
@@ -42,9 +42,37 @@ def get_data(report_filters):
gl_data = voucher_wise_gl_data.get(key) or {}
d.account_value = gl_data.get("account_value", 0)
d.difference_value = d.stock_value - d.account_value
+ d.ledger_type = "Stock Ledger Entry"
if abs(d.difference_value) > 0.1:
data.append(d)
+ if key in voucher_wise_gl_data:
+ del voucher_wise_gl_data[key]
+
+ if voucher_wise_gl_data:
+ data += get_gl_ledgers_with_no_stock_ledger_entries(voucher_wise_gl_data)
+
+ return data
+
+
+def get_gl_ledgers_with_no_stock_ledger_entries(voucher_wise_gl_data):
+ data = []
+
+ for key in voucher_wise_gl_data:
+ gl_data = voucher_wise_gl_data.get(key) or {}
+ data.append(
+ {
+ "name": gl_data.get("name"),
+ "ledger_type": "GL Entry",
+ "voucher_type": gl_data.get("voucher_type"),
+ "voucher_no": gl_data.get("voucher_no"),
+ "posting_date": gl_data.get("posting_date"),
+ "stock_value": 0,
+ "account_value": gl_data.get("account_value", 0),
+ "difference_value": gl_data.get("account_value", 0) * -1,
+ }
+ )
+
return data
@@ -88,6 +116,7 @@ def get_gl_data(report_filters, filters):
"name",
"voucher_type",
"voucher_no",
+ "posting_date",
{
"SUB": [{"SUM": "debit_in_account_currency"}, {"SUM": "credit_in_account_currency"}],
"as": "account_value",
@@ -109,10 +138,15 @@ def get_columns(filters):
{
"label": _("Stock Ledger ID"),
"fieldname": "name",
- "fieldtype": "Link",
- "options": "Stock Ledger Entry",
+ "fieldtype": "Dynamic Link",
+ "options": "ledger_type",
"width": "80",
},
+ {
+ "label": _("Ledger Type"),
+ "fieldname": "ledger_type",
+ "fieldtype": "Data",
+ },
{"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date"},
{"label": _("Posting Time"), "fieldname": "posting_time", "fieldtype": "Time"},
{"label": _("Voucher Type"), "fieldname": "voucher_type", "width": "110"},
diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py
index 13d7b100855..50603eb609d 100644
--- a/erpnext/stock/serial_batch_bundle.py
+++ b/erpnext/stock/serial_batch_bundle.py
@@ -989,9 +989,10 @@ def get_batch_nos(serial_and_batch_bundle):
entries = frappe.get_all(
"Serial and Batch Entry",
- fields=["batch_no", "qty", "name"],
+ fields=["batch_no", {"SUM": "qty", "as": "qty"}],
filters={"parent": serial_and_batch_bundle, "batch_no": ("is", "set")},
order_by="idx",
+ group_by="batch_no",
)
if not entries:
@@ -1116,7 +1117,7 @@ class SerialBatchCreation:
id = self.serial_and_batch_bundle
package = frappe.get_doc("Serial and Batch Bundle", id)
- new_package = frappe.copy_doc(package)
+ new_package = frappe.copy_doc(package, ignore_no_copy=False)
if self.get("returned_serial_nos"):
self.remove_returned_serial_nos(new_package)
diff --git a/pyproject.toml b/pyproject.toml
index e450d675f02..d8acb83723b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -38,7 +38,7 @@ skip_namespaces = [
]
[tool.bench.frappe-dependencies]
-frappe = ">=16.0.0-dev,<17.0.0"
+frappe = ">=16.0.0,<17.0.0"
[tool.ruff]
line-length = 110