diff --git a/.eslintrc b/.eslintrc index 3b6ab7498d9..e40502acd6c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -151,6 +151,7 @@ "context": true, "before": true, "beforeEach": true, - "onScan": true + "onScan": true, + "extend_cscript": true } } diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index be425ec2d9d..e7fa354a2e9 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -8,5 +8,8 @@ # # $ git config blame.ignoreRevsFile .git-blame-ignore-revs +# Replace use of Class.extend with native JS class +1fe891b287a1b3f225d29ee3d07e7b1824aba9e7 + # This commit just changes spaces to tabs for indentation in some files 5f473611bd6ed57703716244a054d3fb5ba9cd23 diff --git a/.github/helper/install.sh b/.github/helper/install.sh index 7b0f944c669..f7a71223436 100644 --- a/.github/helper/install.sh +++ b/.github/helper/install.sh @@ -44,3 +44,4 @@ sed -i 's/redis_socketio:/# redis_socketio:/g' Procfile bench get-app erpnext "${GITHUB_WORKSPACE}" bench start & bench --site test_site reinstall --yes +bench build --app frappe diff --git a/.github/workflows/server-tests.yml b/.github/workflows/server-tests.yml index 92685e2177d..69afa15187d 100644 --- a/.github/workflows/server-tests.yml +++ b/.github/workflows/server-tests.yml @@ -1,6 +1,10 @@ name: Server -on: [pull_request, workflow_dispatch] +on: + pull_request: + workflow_dispatch: + push: + branches: [ develop ] jobs: test: @@ -87,6 +91,7 @@ jobs: coveralls env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} COVERALLS_FLAG_NAME: run-${{ matrix.container }} COVERALLS_SERVICE_NAME: ${{ github.event_name == 'pull_request' && 'github' || 'github-actions' }} COVERALLS_PARALLEL: true diff --git a/.gitignore b/.gitignore index 652fbdc3176..63c51c49765 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ latest_updates.json .wnf-lang-status *.egg-info dist/ +erpnext/public/dist erpnext/docs/current *.swp *.swo diff --git a/README.md b/README.md index 0a556f57b41..c6fc2512445 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@
ERP made simple
-[](https://github.com/frappe/erpnext/actions/workflows/ci-tests.yml) +[](https://github.com/frappe/erpnext/actions/workflows/server-tests.yml) [](https://www.codetriage.com/frappe/erpnext) [](https://coveralls.io/github/frappe/erpnext?branch=develop) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index a988d7217db..0c96d325c2e 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '13.2.0' +__version__ = '13.6.0' def get_default_company(user=None): '''Get default company for user''' diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general.json index da1d10deb97..d60c5596618 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general.json @@ -1,1609 +1,1609 @@ { - "country_code": "fr", - "name": "France - Plan Comptable General", + "country_code": "fr", + "name": "France - Plan Comptable General", "tree": { "1-Comptes de Capitaux": { "10-Capital et R\u00e9serves": { "101-Capital": { - "1011-Capital souscrit - non appel\u00e9": {}, - "1012-Capital souscrit - appel\u00e9, non vers\u00e9": {}, + "1011-Capital souscrit - non appel\u00e9": {}, + "1012-Capital souscrit - appel\u00e9, non vers\u00e9": {}, "1013-Capital souscrit - appel\u00e9, vers\u00e9": { - "10131-Capital non amorti": {}, + "10131-Capital non amorti": {}, "10132-Capital amorti": {} - }, + }, "1018-Capital souscrit soumis \u00e0 des r\u00e9glementations particuli\u00e8res": {} - }, - "102-Fonds fiduciaires": {}, + }, + "102-Fonds fiduciaires": {}, "104-Primes li\u00e9es au capital social": { - "1041-Primes d'\u00e9mission": {}, - "1042-Primes de fusion": {}, - "1043-Primes d'apport": {}, - "1044-Primes de conversion d'obligations en actions": {}, + "1041-Primes d'\u00e9mission": {}, + "1042-Primes de fusion": {}, + "1043-Primes d'apport": {}, + "1044-Primes de conversion d'obligations en actions": {}, "1045-Bons de souscription d'actions": {} - }, + }, "105-Ecarts de r\u00e9\u00e9valuation": { - "1051-R\u00e9serve sp\u00e9ciale de r\u00e9\u00e9valuation": {}, - "1052-Ecart de r\u00e9\u00e9valuation libre": {}, - "1053-R\u00e9serve de r\u00e9\u00e9valuation": {}, - "1055-Ecarts de r\u00e9\u00e9valuation (autres op\u00e9rations l\u00e9gales)": {}, - "1057-Autres \u00e9carts de r\u00e9\u00e9valuation en France": {}, + "1051-R\u00e9serve sp\u00e9ciale de r\u00e9\u00e9valuation": {}, + "1052-Ecart de r\u00e9\u00e9valuation libre": {}, + "1053-R\u00e9serve de r\u00e9\u00e9valuation": {}, + "1055-Ecarts de r\u00e9\u00e9valuation (autres op\u00e9rations l\u00e9gales)": {}, + "1057-Autres \u00e9carts de r\u00e9\u00e9valuation en France": {}, "1058-Autres \u00e9carts de r\u00e9\u00e9valuation \u00e0 l'\u00e9tranger": {} - }, + }, "106-R\u00e9serves": { "1061-R\u00e9serve l\u00e9gale": { - "10611-R\u00e9serve l\u00e9gale proprement dite": {}, + "10611-R\u00e9serve l\u00e9gale proprement dite": {}, "10612-Plus-values nettes \u00e0 long terme": {} - }, - "1062-R\u00e9serves indisponibles": {}, - "1063-R\u00e9serves statutaires ou contractuelles": {}, + }, + "1062-R\u00e9serves indisponibles": {}, + "1063-R\u00e9serves statutaires ou contractuelles": {}, "1064-R\u00e9serves r\u00e9glement\u00e9es": { - "10641-Plus-values nettes \u00e0 long terme": {}, - "10643-R\u00e9serves cons\u00e9cutives \u00e0 l'octroi de subventions d'investissement": {}, + "10641-Plus-values nettes \u00e0 long terme": {}, + "10643-R\u00e9serves cons\u00e9cutives \u00e0 l'octroi de subventions d'investissement": {}, "10648-Autres r\u00e9serves r\u00e9glement\u00e9es": {} - }, + }, "1068-Autres r\u00e9serves": { - "10681-R\u00e9serve de propre assureur": {}, + "10681-R\u00e9serve de propre assureur": {}, "10688-R\u00e9serves diverses": {} } - }, - "107-Ecarts d'\u00e9quivalence": {}, - "108-Compte de l'exploitant": {}, + }, + "107-Ecarts d'\u00e9quivalence": {}, + "108-Compte de l'exploitant": {}, "109-Actionnaires: Capital souscrit - non appel\u00e9": {} - }, + }, "11-Report \u00e0 Nouveau": { - "110-Report \u00e0 nouveau (solde cr\u00e9diteur)": {}, + "110-Report \u00e0 nouveau (solde cr\u00e9diteur)": {}, "119-Report \u00e0 nouveau (solde d\u00e9biteur)": {} - }, + }, "12-R\u00e9sultat de l'Exercice": { - "120-R\u00e9sultat de l'exercice (b\u00e9n\u00e9fice)": {}, + "120-R\u00e9sultat de l'exercice (b\u00e9n\u00e9fice)": {}, "129-R\u00e9sultat de l'exercice (perte)": {} - }, + }, "13-Subventions d'Investissement": { "131-Subventions d'\u00e9quipement": { - "1311-Etat": {}, - "1312-R\u00e9gions": {}, - "1313-D\u00e9partements": {}, - "1314-Communes": {}, - "1315-Collectivit\u00e9s publiques": {}, - "1316-Entreprises publiques": {}, - "1317-Entreprises et organismes priv\u00e9s": {}, + "1311-Etat": {}, + "1312-R\u00e9gions": {}, + "1313-D\u00e9partements": {}, + "1314-Communes": {}, + "1315-Collectivit\u00e9s publiques": {}, + "1316-Entreprises publiques": {}, + "1317-Entreprises et organismes priv\u00e9s": {}, "1318-Autres": {} - }, - "138-Autres subventions d'investissement (m\u00eame ventilation que celle du compte 131)": {}, + }, + "138-Autres subventions d'investissement (m\u00eame ventilation que celle du compte 131)": {}, "139-Subventions d'investissement inscrites au compte de r\u00e9sultat": { "1391-Subventions d'\u00e9quipement": { - "13911-Subventions d'\u00e9quipement": { - "13911-Etat": {}, - "13912-R\u00e9gions": {}, - "13913-D\u00e9partements": {}, - "13914-Communes": {}, - "13915-Collectivit\u00e9s publiques": {}, - "13916-Entreprises publiques": {}, - "13917-Entreprises et organismes priv\u00e9s": {}, - "13918-Autres": {} - } - }, + "13911-Etat": {}, + "13912-R\u00e9gions": {}, + "13913-D\u00e9partements": {}, + "13914-Communes": {}, + "13915-Collectivit\u00e9s publiques": {}, + "13916-Entreprises publiques": {}, + "13917-Entreprises et organismes priv\u00e9s": {}, + "13918-Autres": {} + }, "1398-Autres subventions d'investissement (m\u00eame ventilation que celle du compte 1391)": {} } - }, + }, "14-Provisions R\u00e9glement\u00e9es": { "142-Provisions r\u00e9glement\u00e9es relative aux immobilisations": { - "1423-Provisions pour reconstitution des gisements miniers et p\u00e9troliers": {}, + "1423-Provisions pour reconstitution des gisements miniers et p\u00e9troliers": {}, "1424-Provisions pour investissement (participation des salari\u00e9s)": {} - }, + }, "143-Provisions r\u00e9glement\u00e9es relatives aux stocks": { - "1431-Hausse des prix": {}, + "1431-Hausse des prix": {}, "1432-Fluctuation des cours": {} - }, - "144-Provisions r\u00e9glement\u00e9es relatives aux autres \u00e9l\u00e9ments de l'actif": {}, - "145-Amortissements d\u00e9rogatoires": {}, - "146-Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {}, - "147-Plus-values r\u00e9investies": {}, + }, + "144-Provisions r\u00e9glement\u00e9es relatives aux autres \u00e9l\u00e9ments de l'actif": {}, + "145-Amortissements d\u00e9rogatoires": {}, + "146-Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {}, + "147-Plus-values r\u00e9investies": {}, "148-Autres provisions r\u00e9glement\u00e9es": {} - }, + }, "15-Provisions": { "151-Provisions pour risques": { - "1511-Provisions pour litiges": {}, - "1512-Provisions pour garanties donn\u00e9es aux clients": {}, - "1513-Provisions pour pertes sur march\u00e9s \u00e0 terme": {}, - "1514-Provisions pour amendes et p\u00e9nalit\u00e9s": {}, - "1515-Provisions pour pertes de change": {}, - "1516-Provisions pour pertes sur contrats": {}, + "1511-Provisions pour litiges": {}, + "1512-Provisions pour garanties donn\u00e9es aux clients": {}, + "1513-Provisions pour pertes sur march\u00e9s \u00e0 terme": {}, + "1514-Provisions pour amendes et p\u00e9nalit\u00e9s": {}, + "1515-Provisions pour pertes de change": {}, + "1516-Provisions pour pertes sur contrats": {}, "1518-Autres provisions pour risques": {} - }, - "153-Provisions pour pensions et obligations similaires": {}, - "154-Provisions pour restructurations": {}, - "155-Provisions pour imp\u00f4ts": {}, - "156-Provisions pour renouvellement des immobilisations (entreprises concessionnaires) ": {}, + }, + "153-Provisions pour pensions et obligations similaires": {}, + "154-Provisions pour restructurations": {}, + "155-Provisions pour imp\u00f4ts": {}, + "156-Provisions pour renouvellement des immobilisations (entreprises concessionnaires) ": {}, "157-Provisions pour charges \u00e0 r\u00e9partir sur plusieurs exercices": { "1572-Provisions pour gros entretien ou grandes r\u00e9visions": {} - }, + }, "158-Autres provisions pour charges": { "1581-Provisions pour remises en \u00e9tat": {} } - }, + }, "16-Emprunts et Dettes Assimil\u00e9es": { - "161-Emprunts obligataires convertibles": {}, - "162-Obligations repr\u00e9sentatives de passifs nets remis en fiducie": {}, - "163-Autres emprunts obligataires": {}, - "164-Emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {}, + "161-Emprunts obligataires convertibles": {}, + "162-Obligations repr\u00e9sentatives de passifs nets remis en fiducie": {}, + "163-Autres emprunts obligataires": {}, + "164-Emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {}, "165-D\u00e9p\u00f4ts et cautionnements re\u00e7us": { - "1651-D\u00e9p\u00f4ts": {}, + "1651-D\u00e9p\u00f4ts": {}, "1655-Cautionnements": {} - }, + }, "166-Participation des salari\u00e9s aux r\u00e9sultats": { - "1661-Comptes bloqu\u00e9s": {}, + "1661-Comptes bloqu\u00e9s": {}, "1662-Fonds de participation": {} - }, + }, "167-Emprunts et dettes assortis de conditions particuli\u00e8res": { - "1671-Emissions de titres participatifs": {}, - "1674-Avances conditionn\u00e9es de l'Etat": {}, + "1671-Emissions de titres participatifs": {}, + "1674-Avances conditionn\u00e9es de l'Etat": {}, "1675-Emprunts participatifs": {} - }, + }, "168-Autres emprunts et dettes assimil\u00e9es": { - "1681-Autres emprunts": {}, - "1685-Rentes viag\u00e8res capitalis\u00e9es": {}, - "1687-Autres dettes": {}, + "1681-Autres emprunts": {}, + "1685-Rentes viag\u00e8res capitalis\u00e9es": {}, + "1687-Autres dettes": {}, "1688-Int\u00e9r\u00eats courus": { - "16881-Int\u00e9r\u00eats courus sur emprunts obligataires convertibles": {}, - "16883-Int\u00e9r\u00eats courus sur autres emprunts obligataires": {}, - "16884-Int\u00e9r\u00eats courus sur emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {}, - "16885-Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements re\u00e7us": {}, - "16886-Int\u00e9r\u00eats courus sur participation des salari\u00e9s aux r\u00e9sultats": {}, - "16887-Int\u00e9r\u00eats courus sur emprunts et dettes assortis de conditions particuli\u00e8res": {}, + "16881-Int\u00e9r\u00eats courus sur emprunts obligataires convertibles": {}, + "16883-Int\u00e9r\u00eats courus sur autres emprunts obligataires": {}, + "16884-Int\u00e9r\u00eats courus sur emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": {}, + "16885-Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements re\u00e7us": {}, + "16886-Int\u00e9r\u00eats courus sur participation des salari\u00e9s aux r\u00e9sultats": {}, + "16887-Int\u00e9r\u00eats courus sur emprunts et dettes assortis de conditions particuli\u00e8res": {}, "16888-Int\u00e9r\u00eats courus sur autres emprunts et dettes assimil\u00e9es": {} - }, + }, "169-Primes de remboursement des obligations": {} } - }, + }, "17-Dettes Rattach\u00e9es \u00e0 des Participations": { - "171-Dettes rattach\u00e9es \u00e0 des participations (groupe)": {}, - "174-Dettes rattach\u00e9es \u00e0 des participations (hors groupe)": {}, + "171-Dettes rattach\u00e9es \u00e0 des participations (groupe)": {}, + "174-Dettes rattach\u00e9es \u00e0 des participations (hors groupe)": {}, "178-Dettes rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": { - "1781-Principal": {}, + "1781-Principal": {}, "1788-Int\u00e9r\u00eats courus": {} } - }, + }, "18-Comptes de liaison des \u00e9tablisssements et soci\u00e9t\u00e9s en participation": { - "181-Comptes de liaison des \u00e9tablissements": {}, - "186-Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (charges)": {}, - "187-Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (produits)": {}, + "181-Comptes de liaison des \u00e9tablissements": {}, + "186-Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (charges)": {}, + "187-Biens et prestations de services \u00e9chang\u00e9s entre \u00e9tablissements (produits)": {}, "188-Comptes de liaison des soci\u00e9t\u00e9s en participation": {} - }, + }, "root_type": "Equity" - }, + }, "2-Comptes d'Immobilisations": { "20-Immobilisations incorporelles": { "201-Frais \u00e9tablissement": { - "2011-Frais de constitution": {}, + "2011-Frais de constitution": {}, "2012-Frais de premier \u00e9tablissement": { - "20121-Frais de prospection": {}, + "20121-Frais de prospection": {}, "20122-Frais de publicit\u00e9": {} - }, + }, "2013-Frais d'augmentation de capital et d'op\u00e9rations diverses (fusions, scissions, transformations)": {} - }, - "203-Frais de recherche et de d\u00e9veloppement": {}, - "205-Concessions et droits similaires, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": {}, - "206-Droit au bail": {}, - "207-Fonds commercial": {}, + }, + "203-Frais de recherche et de d\u00e9veloppement": {}, + "205-Concessions et droits similaires, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": {}, + "206-Droit au bail": {}, + "207-Fonds commercial": {}, "208-Autres immobilisations incorporelles": { "2081-Mali de fusion sur actifs incorporels": {} } - }, + }, "21-Immobilisations corporelles": { "211-Terrains": { "2111-Terrains nus": { "account_type": "Fixed Asset" - }, + }, "2112-Terrains am\u00e9nag\u00e9s": { "account_type": "Fixed Asset" - }, + }, "2113-Sous-sols et sur-sols": { "account_type": "Fixed Asset" - }, + }, "2114-Terrains de carri\u00e8res (tr\u00e9fonds)": { "account_type": "Fixed Asset" - }, + }, "2115-Terrains b\u00e2tis": { "21151-Ensembles immobiliers industriels (A, B)": { "account_type": "Fixed Asset" - }, + }, "21155-Ensembles immobiliers administratifs et commerciaux (A, B)": { "account_type": "Fixed Asset" - }, + }, "21158-Autres ensembles immobiliers": { "211581-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "211588-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "212-Agencements et am\u00e9nagements de terrains (m\u00eame ventilation que celle du compte 211)": { "account_type": "Fixed Asset" - }, + }, "213-Constructions": { "2131-B\u00e2timents": { "21311-Ensembles immobiliers industriels (A, B)": { "account_type": "Fixed Asset" - }, + }, "21315-Ensembles immobiliers administratifs et commerciaux (A, B)": { "account_type": "Fixed Asset" - }, + }, "21318-Autres ensembles immobiliers": { "213181-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "213188-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "2135-Installations g\u00e9n\u00e9rales, agencements, am\u00e9nagements des constructions": { "21351-Ensembles immobiliers industriels (A, B)": { "account_type": "Fixed Asset" - }, + }, "21355-Ensembles immobiliers administratifs et commerciaux (A, B)": { "account_type": "Fixed Asset" - }, + }, "21358-Autres ensembles immobiliers": { "213581-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "213588-Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "2138-Ouvrages d'infrastructure": { "21381-Voies de terre": { "account_type": "Fixed Asset" - }, + }, "21382-Voies de fer": { "account_type": "Fixed Asset" - }, + }, "21383-Voies d'eau": { "account_type": "Fixed Asset" - }, + }, "21384-Barrages": { "account_type": "Fixed Asset" - }, + }, "21385-Pistes d'a\u00e9rodromes": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "214-Constructions sur sol d'autrui (m\u00eame ventilation que celle du compte 213)": { "account_type": "Fixed Asset" - }, + }, "215-Installations techniques, mat\u00e9riel et outillage industriels": { "2151-Installations complexes sp\u00e9cialis\u00e9es": { "21511-Installations complexes sp\u00e9cialis\u00e9es - sur sol propre": { "account_type": "Fixed Asset" - }, + }, "21514-Installations complexes sp\u00e9cialis\u00e9es - sur sol d'autrui": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "2153-Installations \u00e0 caract\u00e8re sp\u00e9cifique": { "21531-Installations \u00e0 caract\u00e8re sp\u00e9cifique - sur sol propre": { "account_type": "Fixed Asset" - }, + }, "21534-Installations \u00e0 caract\u00e8re sp\u00e9cifique - sur sol d'autrui": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "2154-Mat\u00e9riel industriel": { "account_type": "Fixed Asset" - }, + }, "2155-Outillage industriel": { "account_type": "Fixed Asset" - }, + }, "2157-Agencements et am\u00e9nagements du mat\u00e9riel et outillage industriel": { "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, + }, "218-Autres immobilisations corporelles": { "2181-Installations g\u00e9n\u00e9rales, agencements, am\u00e9nagements divers": { "account_type": "Fixed Asset" - }, + }, "2182-Mat\u00e9riel de transport": { "account_type": "Fixed Asset" - }, + }, "2183-Mat\u00e9riel de bureau et mat\u00e9riel informatique": { "account_type": "Fixed Asset" - }, + }, "2184-Mobilier": { "account_type": "Fixed Asset" - }, + }, "2185-Cheptel": { "account_type": "Fixed Asset" - }, + }, "2186-Emballages r\u00e9cup\u00e9rables": { "account_type": "Fixed Asset" - }, - "2187-Mali de fusion sur actifs corporels": {}, + }, + "2187-Mali de fusion sur actifs corporels": {}, "account_type": "Fixed Asset" - }, + }, "account_type": "Fixed Asset" - }, - "22-Immobilisations mises en concession": {}, + }, + "22-Immobilisations mises en concession": {}, "23-Immobilisations en cours": { "231-Immobilisations corporelles en cours": { - "2312-Terrains": {}, - "2313-Constructions": {}, - "2315-Installations techniques, mat\u00e9riel et outillage industriels": {}, + "2312-Terrains": {}, + "2313-Constructions": {}, + "2315-Installations techniques, mat\u00e9riel et outillage industriels": {}, "2318-Autres immobilisations corporelles": {} - }, - "232-Immobilisations incorporelles en cours": {}, - "237-Avances et acomptes vers\u00e9s sur commandes d'immobilisations incorporelles": {}, + }, + "232-Immobilisations incorporelles en cours": {}, + "237-Avances et acomptes vers\u00e9s sur commandes d'immobilisations incorporelles": {}, "238-Avances et acomptes vers\u00e9s sur commandes d'immobilisations corporelles": { - "2382-Terrains": {}, - "2383-Constructions": {}, - "2385-Installations techniques, mat\u00e9riel et outillage industriels": {}, + "2382-Terrains": {}, + "2383-Constructions": {}, + "2385-Installations techniques, mat\u00e9riel et outillage industriels": {}, "2388-Autres immobilisations corporelles": {} } - }, + }, "25-Parts dans des entreprises li\u00e9es et cr\u00e9ances sur des entreprises li\u00e9es": { "is_group": 1 - }, + }, "26-Participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": { "261-Titres de participation": { - "2611-Actions": {}, + "2611-Actions": {}, "2618-Autres titres": {} - }, + }, "266-Autres formes de participation": { "2661-Droit repr\u00e9sentatifs d'actifs nets remis en fiducie": {} - }, + }, "267-Cr\u00e9ances rattach\u00e9es \u00e0 des participations": { - "2671-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (groupe)": {}, - "2674-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (hors groupe)": {}, - "2675-Versements repr\u00e9sentatifs d'apports non capitalis\u00e9s (appel de fonds)": {}, - "2676-Avances consolidables": {}, - "2677-Autres cr\u00e9ances rattach\u00e9es \u00e0 des participations": {}, + "2671-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (groupe)": {}, + "2674-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (hors groupe)": {}, + "2675-Versements repr\u00e9sentatifs d'apports non capitalis\u00e9s (appel de fonds)": {}, + "2676-Avances consolidables": {}, + "2677-Autres cr\u00e9ances rattach\u00e9es \u00e0 des participations": {}, "2678-Int\u00e9r\u00eats courus": {} - }, + }, "268-Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": { - "2681-Principal": {}, + "2681-Principal": {}, "2688-Int\u00e9r\u00eats courus": {} - }, + }, "269-Versements restant \u00e0 effectuer sur titres de participation non lib\u00e9r\u00e9s": {} - }, + }, "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)": { - "2711-Actions": {}, + "2711-Actions": {}, "2718-Autres titres": {} - }, + }, "272-Titres immobilis\u00e9s (droit de cr\u00e9ance)": { - "2721-Obligations": {}, + "2721-Obligations": {}, "2722-Bons": {} - }, - "273-Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {}, + }, + "273-Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": {}, "274-Pr\u00eats": { - "2741-Pr\u00eats participatifs": {}, - "2742-Pr\u00eats aux associ\u00e9s": {}, - "2743-Pr\u00eats au personnel": {}, + "2741-Pr\u00eats participatifs": {}, + "2742-Pr\u00eats aux associ\u00e9s": {}, + "2743-Pr\u00eats au personnel": {}, "2748-Autres pr\u00eats": {} - }, + }, "275-D\u00e9p\u00f4ts et cautionnements vers\u00e9s": { - "2751-D\u00e9p\u00f4ts": {}, + "2751-D\u00e9p\u00f4ts": {}, "2755-Cautionnements": {} - }, + }, "276-Autres cr\u00e9ances immobilis\u00e9es": { - "2761-Cr\u00e9ances diverses": {}, + "2761-Cr\u00e9ances diverses": {}, "2768-Int\u00e9r\u00eats courus": { - "27682-Int\u00e9r\u00eats courus sur titres immobilis\u00e9s (droit de cr\u00e9ance)": {}, - "27684-Int\u00e9r\u00eats courus sur pr\u00eats": {}, - "27685-Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements": {}, + "27682-Int\u00e9r\u00eats courus sur titres immobilis\u00e9s (droit de cr\u00e9ance)": {}, + "27684-Int\u00e9r\u00eats courus sur pr\u00eats": {}, + "27685-Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements": {}, "27688-Int\u00e9r\u00eats courus sur cr\u00e9ances diverses": {} } - }, + }, "277-(Actions propres ou parts propres)": { - "2771-Actions propres ou parts propres": {}, + "2771-Actions propres ou parts propres": {}, "2772-Actions propres ou parts propres en voie d'annulation": {} - }, - "278-Mali de fusion sur actifs financiers": {}, + }, + "278-Mali de fusion sur actifs financiers": {}, "279-Versements restant \u00e0 effectuer sur titres immobilis\u00e9s non lib\u00e9r\u00e9s": {} - }, + }, "28-Amortissements des immobilisations": { "280-Amortissements des immobilisations incorporelles": { "2801-Frais d'\u00e9tablissement (m\u00eame ventilation que celle du compte 212)": { "account_type": "Accumulated Depreciation" - }, + }, "2803-Frais de recherche et de d\u00e9veloppement": { "account_type": "Accumulated Depreciation" - }, + }, "2805-Concessions et droits similaires, brevets, licences, logiciels, droits et valeurs similaires": { "account_type": "Accumulated Depreciation" - }, + }, "2807-Fonds commercial": { "account_type": "Accumulated Depreciation" - }, + }, "2808-Autres immobilisations incorporelles": { "28081-Mali de fusion sur actifs incorporels": { "account_type": "Accumulated Depreciation" - }, + }, "account_type": "Accumulated Depreciation" - }, + }, "account_type": "Accumulated Depreciation" - }, + }, "281-Amortissements des immobilisations corporelles": { "2811-Terrains de gisement": { "account_type": "Accumulated Depreciation" - }, + }, "2812-Agencements, am\u00e9nagements de terrains (m\u00eame ventilation que celle du compte 212)": { "account_type": "Accumulated Depreciation" - }, + }, "2813-Constructions (m\u00eame ventilation que celle du compte 213)": { "account_type": "Accumulated Depreciation" - }, + }, "2814-Constructions sur sol d'autrui (m\u00eame ventilation que celle du compte du 214)": { "account_type": "Accumulated Depreciation" - }, + }, "2815-Installations techniques, mat\u00e9riel et outillage industriels (m\u00eame ventilation que celle du compte 218)": { "account_type": "Accumulated Depreciation" - }, + }, "2818-Autres immobilisations corporelles (m\u00eame ventilation que celle du compte 218)": { "28187-Mali de fusion sur actifs corporels": { "account_type": "Accumulated Depreciation" - }, + }, "account_type": "Accumulated Depreciation" - }, + }, "account_type": "Accumulated Depreciation" - }, - "282-Amortissements des immobilisations mises en concession": {}, + }, + "282-Amortissements des immobilisations mises en concession": {}, "account_type": "Accumulated Depreciation" - }, + }, "29-D\u00e9pr\u00e9ciations des immobilisations": { "290-D\u00e9pr\u00e9ciations des immobilisations incorporelles": { - "2905-Marques, proc\u00e9d\u00e9s, droits et valeurs similaires": {}, - "2906-Droit au bail": {}, - "2907-Fonds commercial": {}, + "2905-Marques, proc\u00e9d\u00e9s, droits et valeurs similaires": {}, + "2906-Droit au bail": {}, + "2907-Fonds commercial": {}, "2908-Autres immobilisations incorporelles": { "29081-Mali de fusion sur actifs incorporels": {} } - }, + }, "291-D\u00e9pr\u00e9ciations des immobilisations corporelles (m\u00eame ventilation que celle du compte 21)": { "2911-Terrains (autres que terrains de gisement)": { "29187-Mali de fusion sur actifs corporels": {} } - }, - "292-D\u00e9pr\u00e9ciations des immobilisations mises en concession": {}, + }, + "292-D\u00e9pr\u00e9ciations des immobilisations mises en concession": {}, "293-D\u00e9pr\u00e9ciations des immobilisations en cours": { - "2931-Immobilisations corporelles en cours": {}, + "2931-Immobilisations corporelles en cours": {}, "2932-Immobilisations incorporelles en cours": {} - }, + }, "296-D\u00e9pr\u00e9ciations des participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": { - "2961-Titres de participation": {}, - "2966-Autres formes de participation": {}, - "2967-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (m\u00eame ventilation que celle du compte 267)": {}, + "2961-Titres de participation": {}, + "2966-Autres formes de participation": {}, + "2967-Cr\u00e9ances rattach\u00e9es \u00e0 des participations (m\u00eame ventilation que celle du compte 267)": {}, "2968-Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation (m\u00eame ventilation que celle du compte 268)": {} - }, + }, "297-D\u00e9pr\u00e9ciations des autres immobilisations financi\u00e8res": { - "2971-Titres immobilis\u00e9s autres que les titres immobilis\u00e9s de l'activit\u00e9 de portefeuille - droit de propri\u00e9t\u00e9": {}, - "2972-Titres immobilis\u00e9s - droit de cr\u00e9ance (m\u00eame ventilation que celle du compte 272)": {}, - "2973- Titres immobilis\u00e9s de l'activit\u00e9 de portefuille": {}, - "2974-Pr\u00eats (m\u00eame ventilation que celle du compte 274)": {}, - "2975-D\u00e9p\u00f4ts et cautionnements vers\u00e9s (m\u00eame ventilation que celle du compte 275)": {}, + "2971-Titres immobilis\u00e9s autres que les titres immobilis\u00e9s de l'activit\u00e9 de portefeuille - droit de propri\u00e9t\u00e9": {}, + "2972-Titres immobilis\u00e9s - droit de cr\u00e9ance (m\u00eame ventilation que celle du compte 272)": {}, + "2973- Titres immobilis\u00e9s de l'activit\u00e9 de portefuille": {}, + "2974-Pr\u00eats (m\u00eame ventilation que celle du compte 274)": {}, + "2975-D\u00e9p\u00f4ts et cautionnements vers\u00e9s (m\u00eame ventilation que celle du compte 275)": {}, "2976-Autres cr\u00e9ances immobilis\u00e9es (m\u00eame ventilation que celle du compte 276)": { "29787-Mali de fusion sur actifs financiers": {} } } - }, + }, "root_type": "Asset" - }, + }, "3-Comptes de Stocks et En-Cours": { "31-Mati\u00e8res premi\u00e8res (et fournitures)": { - "311-Mati\u00e8res (ou groupe) A": {}, - "312-Mati\u00e8res (ou groupe) B": {}, + "311-Mati\u00e8res (ou groupe) A": {}, + "312-Mati\u00e8res (ou groupe) B": {}, "317-Fournitures A, B, C, ...": {} - }, + }, "32-Autres approvisionnements": { "321-Mat\u00e8res consommables": { - "3211-Mati\u00e8res (ou groupe) C": {}, + "3211-Mati\u00e8res (ou groupe) C": {}, "3212-Mati\u00e8res (ou groupe) D": {} - }, + }, "322-Fournitures consommables": { - "3221-Combustibles": {}, - "3222-Produits d'entretien": {}, - "3223-Fournitures d'atelier et d'usine": {}, - "3224-Fournitures de magasin": {}, + "3221-Combustibles": {}, + "3222-Produits d'entretien": {}, + "3223-Fournitures d'atelier et d'usine": {}, + "3224-Fournitures de magasin": {}, "3225-Fournitures de bureau": {} - }, + }, "326-Emballages": { - "3261-Emballages perdus": {}, - "3265-Emballages r\u00e9cup\u00e9rables non identifiables": {}, + "3261-Emballages perdus": {}, + "3265-Emballages r\u00e9cup\u00e9rables non identifiables": {}, "3267-Emballages \u00e0 usage mixte": {} } - }, + }, "33-En-cours de production de biens": { "331-Produits en cours": { - "3311-Produits en cours P1": {}, + "3311-Produits en cours P1": {}, "3312-Produits en cours P2": {} - }, + }, "335-Travaux en cours": { - "Travaux en cours T1": {}, - "Travaux en cours T2": {} + "3351-Travaux en cours T1": {}, + "3352-Travaux en cours T2": {} } - }, + }, "34-En-cours de production de services": { "341-Etudes en cours": { - "3411-Etudes en cours E1": {}, + "3411-Etudes en cours E1": {}, "3412-Etudes en cours E2": {} - }, + }, "345-Prestations de services en cours": { - "3451-Prestations de services S1": {}, + "3451-Prestations de services S1": {}, "3452-Prestations de services S2": {} } - }, + }, "35-Stocks de produits": { "351-Produits interm\u00e9diaires": { "3511-Produits interm\u00e9diaires (ou groupe) A": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "3512-Produits interm\u00e9diaires (ou groupe) B": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "account_type": "Stock" - }, + }, "355-Produits finis": { "3551-Produits finis (ou groupe) A": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "3552-Produits finis (ou groupe) B": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "account_type": "Stock" - }, + }, "358-Produits r\u00e9siduels (ou mati\u00e8res de r\u00e9cup\u00e9ration)": { "3581-D\u00e9chets": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "3585-Rebuts": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "3586-Mati\u00e8res de r\u00e9cup\u00e9ration": { - "account_type": "Stock", + "account_type": "Stock", "is_group": 1 - }, + }, "account_type": "Stock" - }, + }, "account_type": "Stock" - }, - "36-(Compte \u00e0 ouvrir, le cas \u00e9ch\u00e9ant, sous l'intitul\u00e9 \"stocks provenant d'immobilisations\")": {}, + }, + "36-(Compte \u00e0 ouvrir, le cas \u00e9ch\u00e9ant, sous l'intitul\u00e9 \"stocks provenant d'immobilisations\")": {}, "37-Stocks de marchandises": { - "371-Marchandises (ou groupe) A": {}, + "371-Marchandises (ou groupe) A": {}, "372-Marchandises (ou groupe) B": {} - }, - "38-Stocks en voie d'acheminement, mis en d\u00e9p\u00f4t ou donn\u00e9s en consignation (en cas d'inventaire permanent en comptabilit\u00e9 g\u00e9n\u00e9rale)": {}, + }, + "38-Stocks en voie d'acheminement, mis en d\u00e9p\u00f4t ou donn\u00e9s en consignation (en cas d'inventaire permanent en comptabilit\u00e9 g\u00e9n\u00e9rale)": { + "account_type": "Stock" + }, "39-D\u00e9pr\u00e9ciations des stocks et en-cours": { "391-D\u00e9pr\u00e9ciations des mati\u00e8res premi\u00e8res (et fournitures)": { - "3911-Mati\u00e8res (ou groupe) A": {}, - "3912-Mati\u00e8res (ou groupe) B": {}, + "3911-Mati\u00e8res (ou groupe) A": {}, + "3912-Mati\u00e8res (ou groupe) B": {}, "3917-Fournitures A, B, C, ...": {} - }, + }, "392-D\u00e9pr\u00e9ciations des autres approvisionnements": { - "3921-Mati\u00e8res consommables (m\u00eame ventilation que celle du compte 321)": {}, - "3922-Fournitures consommables (m\u00eame ventilation que celle du compte 322)": {}, + "3921-Mati\u00e8res consommables (m\u00eame ventilation que celle du compte 321)": {}, + "3922-Fournitures consommables (m\u00eame ventilation que celle du compte 322)": {}, "3926-Emballages (m\u00eame ventilation que celle du compte 326)": {} - }, + }, "393-D\u00e9pr\u00e9ciations des en-cours de production de biens": { - "3931-Etudes en cours (m\u00eame ventilation que celle du compte 341)": {}, + "3931-Etudes en cours (m\u00eame ventilation que celle du compte 341)": {}, "3935-Travaux en cours (m\u00eame ventilation que celle du compte 335)": {} - }, + }, "394-D\u00e9pr\u00e9ciations des en-cours de production de services": { - "3941-Etudes en cours (m\u00eame ventilation que celle du compte 341)": {}, + "3941-Etudes en cours (m\u00eame ventilation que celle du compte 341)": {}, "3945-Prestations de services en cours (m\u00eame ventilation que celle du compte 345)": {} - }, + }, "395-D\u00e9pr\u00e9ciations des stocks de produits": { - "3951-Produits interm\u00e9diaires (m\u00eame ventilation que celle du compte 351)": {}, + "3951-Produits interm\u00e9diaires (m\u00eame ventilation que celle du compte 351)": {}, "3955-Produits finis (m\u00eame ventilation que celle du compte 355)": {} - }, + }, "397-D\u00e9pr\u00e9ciations des stocks de marchandises": { - "3971-Marchandise (ou groupe) A": {}, + "3971-Marchandise (ou groupe) A": {}, "3972-Marchandise (ou groupe) B": {} } - }, + }, "root_type": "Asset" - }, + }, "4-Comptes de Tiers (ACTIF)": { "40-Fournisseurs et Comptes Rattach\u00e9s (ACTIF)": { "409-Fournisseurs d\u00e9biteurs": { - "4091-Fournisseurs - Avances et acomptes vers\u00e9s sur commandes": {}, - "4096-Fournisseurs - Cr\u00e9ances pour emballages et mat\u00e9riel \u00e0 rendre": {}, + "4091-Fournisseurs - Avances et acomptes vers\u00e9s sur commandes": {}, + "4096-Fournisseurs - Cr\u00e9ances pour emballages et mat\u00e9riel \u00e0 rendre": {}, "4097-Fournisseurs - Autres avoirs": { - "40971-Fournisseurs d'exploitation": {}, + "40971-Fournisseurs d'exploitation": {}, "40974-Fournisseurs d'immobilisation": {} - }, + }, "4098-Rabais, remises, ristournes \u00e0 obtenir et autres avoirs non encore re\u00e7us": {} } - }, + }, "41-Clients et comptes rattach\u00e9s (ACTIF)": { "410-Clients et Comptes rattach\u00e9s": { "account_type": "Receivable" - }, + }, "411-Clients": { "4111-Clients - Ventes de biens ou de prestations de services": { "account_type": "Receivable" - }, + }, "4117-Clients - Retenues de garantie": { "account_type": "Receivable" - }, + }, "account_type": "Receivable" - }, + }, "413-Clients - Effets \u00e0 recevoir": { "account_type": "Receivable" - }, + }, "416-Clients douteux ou litigieux": { "account_type": "Receivable" - }, + }, "418-Clients - Produits non encore factur\u00e9s": { "4181-Clients - Factures \u00e0 \u00e9tablir": { "account_type": "Receivable" - }, + }, "4188-Clients - Int\u00e9r\u00eats courus": { "account_type": "Receivable" - }, + }, "account_type": "Receivable" - }, + }, "account_type": "Receivable" - }, + }, "42-Personnel et comptes rattach\u00e9s (ACTIF)": { "425-Personnel - Avances et acomptes": {} - }, + }, "43-S\u00e9curit\u00e9 sociale et autres organismes sociaux (ACTIF)": { - "431-S\u00e9curit\u00e9 sociale": {}, - "437-Autres organismes sociaux": {}, + "431-S\u00e9curit\u00e9 sociale": {}, + "437-Autres organismes sociaux": {}, "438-Organismes sociaux - Produits \u00e0 recevoir": { "4387-Produits \u00e0 recevoir": {} } - }, + }, "44-Etat et autres collectivit\u00e9s publiques (ACTIF)": { "441-Etat - Subventions \u00e0 recevoir": { - "4411-Subventions d'investissement": {}, - "4417-Subventions d'exploitation": {}, - "4418-Subventions d'\u00e9quilibre": {}, + "4411-Subventions d'investissement": {}, + "4417-Subventions d'exploitation": {}, + "4418-Subventions d'\u00e9quilibre": {}, "4419-Avances sur subventions": {} - }, + }, "443-Op\u00e9rations particuli\u00e8res avec l'Etat, les collectivit\u00e9s publiques, les organismes internationaux": { - "4431-Cr\u00e9ances sur l'Etat r\u00e9sultant de la suppression de la r\u00e8gle du d\u00e9calage d'un mois en mati\u00e8re de TVA": {}, + "4431-Cr\u00e9ances sur l'Etat r\u00e9sultant de la suppression de la r\u00e8gle du d\u00e9calage d'un mois en mati\u00e8re de TVA": {}, "4438-Int\u00e9r\u00eats courus sur cr\u00e9ances figurant au compte 4431": {} - }, + }, "445-Etat - Taxes sur le chiffre d'affaires (ACTIF)": { - "4452-TVA due intracommunautaire": {}, + "4452-TVA due intracommunautaire": {}, "4456-Taxes sur le chiffre d'affaires d\u00e9ductibles": { - "44562-TVA sur immobilisations": {}, - "44563-TVA transf\u00e9r\u00e9e par d'autres entreprises": {}, + "44562-TVA sur immobilisations": {}, + "44563-TVA transf\u00e9r\u00e9e par d'autres entreprises": {}, "44566-TVA sur autres biens et services": { "tax_rate": 20.0 - }, - "44567-Cr\u00e9dit de TVA \u00e0 reporter": {}, + }, + "44567-Cr\u00e9dit de TVA \u00e0 reporter": {}, "44568-Taxes assimil\u00e9es \u00e0 la TVA": {} - }, + }, "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente (ACTIF)": { - "44581-Acomptes - R\u00e9gime simplifi\u00e9 d'imposition": {}, - "44582-Acomptes - R\u00e9gime du forfait": {}, - "44583-Remboursement de taxes sur le chiffre d'affaires demand\u00e9": {}, + "44581-Acomptes - R\u00e9gime simplifi\u00e9 d'imposition": {}, + "44582-Acomptes - R\u00e9gime du forfait": {}, + "44583-Remboursement de taxes sur le chiffre d'affaires demand\u00e9": {}, "44586-Taxes sur le chiffre d'affaires sur factures non parvenues": {} } - }, + }, "448-Etat - Charges \u00e0 payer et produits \u00e0 recevoir": { - "4482-Charges fiscales sur cong\u00e9s \u00e0 payer": {}, - "4486-Charges \u00e0 payer": {}, + "4482-Charges fiscales sur cong\u00e9s \u00e0 payer": {}, + "4486-Charges \u00e0 payer": {}, "4487-Produits \u00e0 recevoir": {} } - }, + }, "45-Groupe et associ\u00e9s (ACTIF)": { "456-Associ\u00e9s - Op\u00e9rations sur le capital (ACTIF)": { "4562-Apporteurs - Capital appel\u00e9, non vers\u00e9": { - "45621-Actionnaires - Capital souscrit et appel\u00e9, non vers\u00e9": {}, + "45621-Actionnaires - Capital souscrit et appel\u00e9, non vers\u00e9": {}, "45625-Associ\u00e9s - Capital appel\u00e9, non vers\u00e9": {} } } - }, + }, "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (ACTIF)": { - "462-Cr\u00e9ances sur cessions d'immobilisations": {}, - "465-Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {}, - "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs (ACTIF)": {}, + "462-Cr\u00e9ances sur cessions d'immobilisations": {}, + "465-Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {}, + "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs (ACTIF)": {}, "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir (ACTIF)": { "4687-Produits \u00e0 recevoir": {} } - }, + }, "47-Comptes transitoires ou d'attente (ACTIF)": { "471-Comptes d'attente (ACTIF)": { "account_type": "Temporary" - }, + }, "476-Diff\u00e9rences de conversion (ACTIF)": { - "4761-Diminution des cr\u00e9ances": {}, - "4762-Augmentation des dettes": {}, + "4761-Diminution des cr\u00e9ances": {}, + "4762-Augmentation des dettes": {}, "4768-Diff\u00e9rences compens\u00e9es par couverture de change": {} - }, + }, "478-Autres comptes transitoires (ACTIF)": { - "4781-Mali de fusion sur actif circulant": {}, + "4781-Mali de fusion sur actif circulant": {}, "4786-Diff\u00e9rences d'\u00e9valuation sur instruments de tr\u00e9sorerie (ACTIF)": {} } - }, + }, "48-Comptes de r\u00e9gularisation (ACTIF)": { "481-Charges \u00e0 r\u00e9partir sur plusieurs exercices": { "4816-Frais d'\u00e9mission des emprunts": {} - }, - "486-Charges constat\u00e9es d'avance": {}, + }, + "486-Charges constat\u00e9es d'avance": {}, "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits (ACTIF)": { "4886-Charges": {} } - }, + }, "49-D\u00e9pr\u00e9ciation des comptes de tiers (ACTIF)": { - "491-D\u00e9pr\u00e9ciations des comptes clients": {}, + "491-D\u00e9pr\u00e9ciations des comptes clients": {}, "495-D\u00e9pr\u00e9ciations des comptes du groupe et des associ\u00e9s": { - "4951-Comptes du groupe": {}, - "4955-Comptes courants des associ\u00e9s": {}, + "4951-Comptes du groupe": {}, + "4955-Comptes courants des associ\u00e9s": {}, "4958-Op\u00e9rations faites en commun et en GIE": {} - }, + }, "496-D\u00e9pr\u00e9ciations des comptes de d\u00e9biteurs divers": { - "4962-Cr\u00e9ances sur cessions d'immobilisations": {}, - "4965-Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {}, + "4962-Cr\u00e9ances sur cessions d'immobilisations": {}, + "4965-Cr\u00e9ances sur cessions de valeurs mobili\u00e8res de placement": {}, "4967-Autres comptes d\u00e9biteurs": {} } - }, + }, "root_type": "Asset" - }, + }, "4-Comptes de Tiers (PASSIF)": { "40-Fournisseurs et Comptes Rattach\u00e9s (PASSIF)": { "401-Fournisseurs": { "4011-Fournisseurs - Achats de biens ou de prestations de services": { "account_type": "Payable" - }, + }, "4017-Fournisseurs - Retenues de garantie": { "account_type": "Payable" - }, + }, "account_type": "Payable" - }, + }, "403-Fournisseurs - Effets \u00e0 payer": { "account_type": "Payable" - }, + }, "404-Fournisseurs d'immobilisations": { "4041-Fournisseurs - Achats d'immobilisations": { "account_type": "Payable" - }, + }, "4047-Fournisseurs d'immobilisations - Retenues de garantie": { "account_type": "Payable" - }, + }, "account_type": "Payable" - }, + }, "405-Fournisseurs d'immobilisations - Effets \u00e0 payer": { "account_type": "Payable" - }, + }, "408-Fournisseurs - Factures non parvenues": { "4081-Fournisseurs": { "account_type": "Stock Received But Not Billed" - }, + }, "4084-Fournisseurs d'immobilisations": { "account_type": "Stock Received But Not Billed" - }, + }, "4088-Fournisseurs - Int\u00e9r\u00eats courus": { "account_type": "Stock Received But Not Billed" - }, + }, "account_type": "Stock Received But Not Billed" - }, + }, "account_type": "Payable" - }, + }, "41-Clients et comptes rattach\u00e9s (PASSIF)": { "419-Clients cr\u00e9diteurs": { - "4191-Clients - Avances et acomptes re\u00e7us sur commandes": {}, - "4196-Clients - Dettes pour emballages et mat\u00e9riels consign\u00e9s": {}, - "4197-Clients - Autres avoirs": {}, + "4191-Clients - Avances et acomptes re\u00e7us sur commandes": {}, + "4196-Clients - Dettes pour emballages et mat\u00e9riels consign\u00e9s": {}, + "4197-Clients - Autres avoirs": {}, "4198-Rabais, remises, ristournes \u00e0 accorder et autres avoirs \u00e0 \u00e9tablir": {} } - }, + }, "42-Personnel et comptes rattach\u00e9s (PASSIF)": { - "421-Personnel - R\u00e9mun\u00e9rations dues": {}, - "422-Comit\u00e9s d'entreprises, d'\u00e9tablissement...": {}, + "421-Personnel - R\u00e9mun\u00e9rations dues": {}, + "422-Comit\u00e9s d'entreprises, d'\u00e9tablissement...": {}, "424-Participation des salari\u00e9s aux r\u00e9sultats": { - "4246-R\u00e9serve sp\u00e9ciale": {}, + "4246-R\u00e9serve sp\u00e9ciale": {}, "4248-Comptes courants": {} - }, - "426-Personnel - D\u00e9p\u00f4ts": {}, - "427-Personnel - Oppositions": {}, + }, + "426-Personnel - D\u00e9p\u00f4ts": {}, + "427-Personnel - Oppositions": {}, "428-Personnel - Charges \u00e0 payer et produits \u00e0 recevoir": { - "4282-Dettes provisionn\u00e9es pour cong\u00e9s \u00e0 payer": {}, - "4284-Dettes provisionn\u00e9es pour participation des salari\u00e9s aux r\u00e9sultats": {}, - "4286-Autres charges \u00e0 payer": {}, + "4282-Dettes provisionn\u00e9es pour cong\u00e9s \u00e0 payer": {}, + "4284-Dettes provisionn\u00e9es pour participation des salari\u00e9s aux r\u00e9sultats": {}, + "4286-Autres charges \u00e0 payer": {}, "4287-Produits \u00e0 recevoir": {} } - }, + }, "43-S\u00e9curit\u00e9 sociale et autres organismes sociaux (PASSIF)": { "438-Organismes sociaux - Charges \u00e0 payer": { - "4382-Charges sociales sur cong\u00e9s \u00e0 payer": {}, + "4382-Charges sociales sur cong\u00e9s \u00e0 payer": {}, "4386-Autres charges \u00e0 payer": {} } - }, + }, "44-Etat et autres collectivit\u00e9s publiques (PASSIF)": { "442-Etat - Imp\u00f4ts et taxes recouvrables sur des tiers": { - "4424-Obligataires": {}, + "4424-Obligataires": {}, "4425-Associ\u00e9s": {} - }, - "444-Etat - Imp\u00f4ts sur les b\u00e9n\u00e9fices": {}, + }, + "444-Etat - Imp\u00f4ts sur les b\u00e9n\u00e9fices": {}, "445-Etat - Taxes sur le chiffre d'affaires (PASSIF)": { "4455-Taxes sur le chiffre d'affaires \u00e0 d\u00e9caisser": { - "44551-TVA \u00e0 d\u00e9caisser": {}, + "44551-TVA \u00e0 d\u00e9caisser": {}, "44558-Taxes assimil\u00e9es \u00e0 la TVA": {} - }, + }, "4457-Taxes sur le chiffre d'affaires collect\u00e9es par l'entreprise": { "44571-TVA collect\u00e9e": { - "account_type": "Tax", + "account_type": "Tax", "is_group": 1 - }, + }, "44578-Taxes assimil\u00e9es \u00e0 la TVA": {} - }, + }, "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente (PASSIF)": { - "44584-TVA r\u00e9cup\u00e9r\u00e9e d'avance": {}, + "44584-TVA r\u00e9cup\u00e9r\u00e9e d'avance": {}, "44587-Taxes sur le chiffre d'affaires sur factures \u00e0 \u00e9tablir": {} } - }, - "446-Obligations cautionn\u00e9es": {}, - "447-Autres imp\u00f4ts, taxes et versements assimil\u00e9s": {}, + }, + "446-Obligations cautionn\u00e9es": {}, + "447-Autres imp\u00f4ts, taxes et versements assimil\u00e9s": {}, "449-Quotas d'\u00e9mission \u00e0 acqu\u00e9rir": {} - }, + }, "45-Groupe et associ\u00e9s (PASSIF)": { - "451-Groupe (PASSIF)": {}, + "451-Groupe (PASSIF)": {}, "455-Associ\u00e9s - Comptes courants (PASSIF)": { - "4551-Principal (PASSIF)": {}, + "4551-Principal (PASSIF)": {}, "4558-Int\u00e9r\u00eats courus (PASSIF)": {} - }, + }, "456-Associ\u00e9s - Op\u00e9rations sur le capital (PASSIF)": { "4561-Associ\u00e9s - Comptes d'apport en soci\u00e9t\u00e9": { - "45611-Apports en nature": {}, + "45611-Apports en nature": {}, "45615-Apports en num\u00e9raire": {} - }, - "4563-Associ\u00e9s - Versements re\u00e7us sur augmentation de capital": {}, - "4564-Associ\u00e9s - Versements anticip\u00e9s": {}, - "4566-Actionnaires d\u00e9faillants": {}, + }, + "4563-Associ\u00e9s - Versements re\u00e7us sur augmentation de capital": {}, + "4564-Associ\u00e9s - Versements anticip\u00e9s": {}, + "4566-Actionnaires d\u00e9faillants": {}, "4567-Associ\u00e9s - Capital \u00e0 rembourser": {} - }, - "457-Associ\u00e9s - Dividendes \u00e0 payer": {}, + }, + "457-Associ\u00e9s - Dividendes \u00e0 payer": {}, "458-Associ\u00e9s - Op\u00e9rations faites en commun et en GIE": { - "4581-Op\u00e9rations courantes": {}, + "4581-Op\u00e9rations courantes": {}, "4588-Int\u00e9r\u00eats courus": {} } - }, + }, "46-D\u00e9biteurs divers et cr\u00e9diteurs divers (PASSIF)": { - "464-Dettes sur acquisitions de valeurs mobili\u00e8res de placement": {}, - "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs (PASSIF)": {}, + "464-Dettes sur acquisitions de valeurs mobili\u00e8res de placement": {}, + "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs (PASSIF)": {}, "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir (PASSIF)": { "4686-Charges \u00e0 payer": {} } - }, + }, "47-Comptes transitoires ou d'attente (PASSIF)": { "471-Comptes d'attente (PASSIF)": { "account_type": "Temporary" - }, + }, "477-Diff\u00e9rences de conversion (PASSIF)": { - "4771-Augmentation des cr\u00e9ances": {}, - "4772-Diminution des dettes": {}, + "4771-Augmentation des cr\u00e9ances": {}, + "4772-Diminution des dettes": {}, "4778-Diff\u00e9rences compens\u00e9es par couverture de change": {} - }, + }, "478-Autres comptes transitoires (PASSIF)": { "4787-Diff\u00e9rences d'\u00e9valuation sur instruments de tr\u00e9sorerie (PASSIF)": {} } - }, + }, "48-Comptes de r\u00e9gularisation (PASSIF)": { - "487-Produits constat\u00e9s d'avance": {}, + "487-Produits constat\u00e9s d'avance": {}, "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits (PASSIF)": { "4887-Produits": {} } - }, + }, "root_type": "Liability" - }, + }, "5-Comptes Financiers": { "50-Valeurs mobili\u00e8res de placement": { - "501-Parts dans des entreprises li\u00e9es": {}, + "501-Parts dans des entreprises li\u00e9es": {}, "502-Actions propres": { - "5021-Actions destin\u00e9es \u00e0 \u00eatre attribu\u00e9es aux employ\u00e9s et affect\u00e9es \u00e0 des plans d\u00e9termin\u00e9s": {}, + "5021-Actions destin\u00e9es \u00e0 \u00eatre attribu\u00e9es aux employ\u00e9s et affect\u00e9es \u00e0 des plans d\u00e9termin\u00e9s": {}, "5022-Actions disponibles pour \u00eatre attribu\u00e9es aux employ\u00e9s ou pour la r\u00e9gularisation des cours de bourse": {} - }, + }, "503-Actions": { - "5031-Titres cot\u00e9s": {}, + "5031-Titres cot\u00e9s": {}, "5035-Titres non cot\u00e9s": {} - }, - "504-Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {}, - "505-Obligations et bons \u00e9mis par la soci\u00e9t\u00e9 et rachet\u00e9s par elle": {}, + }, + "504-Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {}, + "505-Obligations et bons \u00e9mis par la soci\u00e9t\u00e9 et rachet\u00e9s par elle": {}, "506-Obligations": { - "5061-Titres cot\u00e9s": {}, + "5061-Titres cot\u00e9s": {}, "5065-Titres non cot\u00e9s": {} - }, - "507-Bons du Tr\u00e9sor et bons de caisse \u00e0 court terme": {}, + }, + "507-Bons du Tr\u00e9sor et bons de caisse \u00e0 court terme": {}, "508-Autres valeurs mobili\u00e8res de placement et autres cr\u00e9ances assimil\u00e9es": { - "5081-Autres valeurs mobili\u00e8res": {}, - "5082-Bons de souscription": {}, + "5081-Autres valeurs mobili\u00e8res": {}, + "5082-Bons de souscription": {}, "5088-Int\u00e9r\u00eats courus sur obligations, bons et valeurs assimil\u00e9es": {} - }, + }, "509-Versements restant \u00e0 effectuer sur valeurs mobili\u00e8res de placement non lib\u00e9r\u00e9es": {} - }, + }, "51-Banques, \u00e9tablissements financiers et assimil\u00e9s": { "511-Valeurs \u00e0 l'encaissement": { - "5111-Coupons \u00e9chus \u00e0 l'encaissement": {}, - "5112-Ch\u00e8ques \u00e0 encaisser": {}, - "5113-Effets \u00e0 l'encaissement": {}, + "5111-Coupons \u00e9chus \u00e0 l'encaissement": {}, + "5112-Ch\u00e8ques \u00e0 encaisser": {}, + "5113-Effets \u00e0 l'encaissement": {}, "5114-Effets \u00e0 l'escompte": {} - }, + }, "512-Banques": { "5121-Comptes en monnaie nationale": { "account_type": "Bank" - }, + }, "5124-Comptes en devises": { "account_type": "Bank" - }, + }, "account_type": "Bank" - }, - "514-Ch\u00e8ques postaux": {}, - "515-\"Caisses\" du Tr\u00e9sor et des \u00e9tablissements publics": {}, - "516-Soci\u00e9t\u00e9s de bourse": {}, - "517-Autres organismes financiers": {}, + }, + "514-Ch\u00e8ques postaux": {}, + "515-\"Caisses\" du Tr\u00e9sor et des \u00e9tablissements publics": {}, + "516-Soci\u00e9t\u00e9s de bourse": {}, + "517-Autres organismes financiers": {}, "518-Int\u00e9r\u00eats courus": { - "5181-Int\u00e9r\u00eats courus \u00e0 payer": {}, + "5181-Int\u00e9r\u00eats courus \u00e0 payer": {}, "5188-Int\u00e9r\u00eats courus \u00e0 recevoir": {} - }, + }, "519-Concours bancaires courants": { - "5191-Cr\u00e9dit de mobilisation des cr\u00e9ances commerciales (CMCC)": {}, - "5193-Mobilisation de cr\u00e9ances n\u00e9es \u00e0 l'\u00e9tranger": {}, + "5191-Cr\u00e9dit de mobilisation des cr\u00e9ances commerciales (CMCC)": {}, + "5193-Mobilisation de cr\u00e9ances n\u00e9es \u00e0 l'\u00e9tranger": {}, "5198-Int\u00e9r\u00eats courus sur concours bancaires courants": {} } - }, + }, "52-Instruments de tr\u00e9sorerie": { "is_group": 1 - }, + }, "53-Caisse": { "531-Caisse si\u00e8ge social": { "5311-Caisse en monnaie nationale": { "account_type": "Cash" - }, + }, "5314-Caisse en devises": { "account_type": "Cash" - }, + }, "account_type": "Cash" - }, + }, "532-Caisse succursale (ou usine) A": { "account_type": "Cash" - }, + }, "533-Caisse succursale (ou usine) B": { "account_type": "Cash" - }, + }, "account_type": "Cash" - }, + }, "54-R\u00e9gies d'avance et accr\u00e9ditifs": { "is_group": 1 - }, + }, "58-Virements internes": { "is_group": 1 - }, + }, "59-D\u00e9pr\u00e9ciations des comptes financiers": { "590-D\u00e9pr\u00e9ciations des valeurs mobili\u00e8res de placement": { - "5903-Actions": {}, - "5904-Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {}, - "5906-Obligations": {}, + "5903-Actions": {}, + "5904-Autres titres conf\u00e9rant un droit de propri\u00e9t\u00e9": {}, + "5906-Obligations": {}, "5908-Autres valeurs mobili\u00e8res de placement et cr\u00e9ances assimil\u00e9es": {} } - }, + }, "root_type": "Asset" - }, + }, "6-Comptes de Charges": { "60-Achats (sauf 603)": { "601-Achats stock\u00e9s - Mati\u00e8res premi\u00e8res (et fournitures)": { "6011-Mati\u00e8res (ou groupe) A": { "account_type": "Cost of Goods Sold" - }, + }, "6012-Mati\u00e8res (ou groupe) B": { "account_type": "Cost of Goods Sold" - }, + }, "6017-Fournitures A, B, C...": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "602-Achats stock\u00e9s - Autres approvisionnements": { "6021-Mati\u00e8res consommables": { "60211-Mati\u00e8res (ou groupe) C": { "account_type": "Cost of Goods Sold" - }, + }, "60212-Mati\u00e8res (ou groupe) D": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "6022-Fournitures consommables": { "60221-Combustibles": { "account_type": "Cost of Goods Sold" - }, + }, "60222-Produits d'entretien": { "account_type": "Cost of Goods Sold" - }, + }, "60223-Fournitures d'atelier et d'usine": { "account_type": "Cost of Goods Sold" - }, + }, "60224-Fournitures de magasin": { "account_type": "Cost of Goods Sold" - }, + }, "60225-Fournitures de bureau": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "6026-Emballages": { "60261-Emballages perdus": { "account_type": "Cost of Goods Sold" - }, + }, "60265-Emballages r\u00e9cup\u00e9rables non identifiables": { "account_type": "Cost of Goods Sold" - }, + }, "60267-Emballages \u00e0 usage mixte": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "603-Variations des stocks (approvisionnements et marchandises)": { "6031-Variation des stocks de mati\u00e8res premi\u00e8res (et fournitures)": { "account_type": "Stock Adjustment" - }, + }, "6032-Variation des stocks des autres approvisionnements": { "account_type": "Stock Adjustment" - }, + }, "6037-Variation des stocks de marchandises": { "account_type": "Stock Adjustment" - }, + }, "account_type": "Stock Adjustment" - }, + }, "604-Achats d'\u00e9tudes et prestations de service": { "account_type": "Cost of Goods Sold" - }, + }, "605-Achats de mat\u00e9riel, \u00e9quipements et travaux": { "account_type": "Cost of Goods Sold" - }, + }, "606-Achats non stock\u00e9s de mati\u00e8res et founitures": { "6061-Fournitures non stockables (eau, \u00e9nergie...)": { "account_type": "Cost of Goods Sold" - }, + }, "6063-Fournitures d'entretien et de petit \u00e9quipement": { "account_type": "Cost of Goods Sold" - }, + }, "6064-Fournitures administratives": { "account_type": "Cost of Goods Sold" - }, + }, "6068-Autres mati\u00e8res et fournitures": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "607-Achats de marchandises": { "6071-Marchandises (ou groupe) A": { "account_type": "Cost of Goods Sold" - }, + }, "6072-Marchandises (ou groupe) B": { "account_type": "Cost of Goods Sold" - }, + }, "account_type": "Cost of Goods Sold" - }, + }, "608-(Compte r\u00e9serv\u00e9, le cas \u00e9ch\u00e9ant, \u00e0 la recapitulation des Frais accessoires incorpor\u00e9s aux achats)": { "account_type": "Expenses Included In Valuation" - }, + }, "609-Rabais, remises et ristournes obtenus sur achats": { - "6091-Rabais, remises et ristournes obtenus sur achats - de mati\u00e8res premi\u00e8res (et fournitures)": {}, - "6092-Rabais, remises et ristournes obtenus sur achats - d'autres approvisionnements stock\u00e9s": {}, - "6094-Rabais, remises et ristournes obtenus sur achats - d'\u00e9tudes et prestations de services": {}, - "6095-Rabais, remises et ristournes obtenus sur achats - de mat\u00e9riel, \u00e9quipements et travaux": {}, - "6096-Rabais, remises et ristournes obtenus sur achats - d'approvisionnements non stock\u00e9s": {}, - "6097-Rabais, remises et ristournes obtenus sur achats - de marchandises": {}, + "6091-Rabais, remises et ristournes obtenus sur achats - de mati\u00e8res premi\u00e8res (et fournitures)": {}, + "6092-Rabais, remises et ristournes obtenus sur achats - d'autres approvisionnements stock\u00e9s": {}, + "6094-Rabais, remises et ristournes obtenus sur achats - d'\u00e9tudes et prestations de services": {}, + "6095-Rabais, remises et ristournes obtenus sur achats - de mat\u00e9riel, \u00e9quipements et travaux": {}, + "6096-Rabais, remises et ristournes obtenus sur achats - d'approvisionnements non stock\u00e9s": {}, + "6097-Rabais, remises et ristournes obtenus sur achats - de marchandises": {}, "6098-Rabais, remises et ristournes non affect\u00e9s": {} } - }, + }, "61-Services ext\u00e9rieurs": { - "611-Sous-traitance g\u00e9n\u00e9rale": {}, + "611-Sous-traitance g\u00e9n\u00e9rale": {}, "612-Redevances de cr\u00e9dit-bail": { - "6122-Cr\u00e9dit-bail mobilier": {}, + "6122-Cr\u00e9dit-bail mobilier": {}, "6125-Cr\u00e9dit-bail immobilier": {} - }, + }, "613-Locations": { - "6132-Locations immobili\u00e8res": {}, - "6135-Locations mobili\u00e8res": {}, + "6132-Locations immobili\u00e8res": {}, + "6135-Locations mobili\u00e8res": {}, "6136-Malis sur emballages": {} - }, - "614-Charges locatives et de copropri\u00e9t\u00e9": {}, + }, + "614-Charges locatives et de copropri\u00e9t\u00e9": {}, "615-Entretiens et r\u00e9parations": { - "6152-Entretiens et r\u00e9parations - sur biens immobiliers": {}, - "6155-Entretiens et r\u00e9parations - sur biens mobiliers": {}, + "6152-Entretiens et r\u00e9parations - sur biens immobiliers": {}, + "6155-Entretiens et r\u00e9parations - sur biens mobiliers": {}, "6156-Maintenance": {} - }, + }, "616-Primes d'assurance": { - "6161-Multirisques": {}, - "6162-Assurance obligatoire dommage construction": {}, + "6161-Multirisques": {}, + "6162-Assurance obligatoire dommage construction": {}, "6163-Assurance-transport": { - "61636-Assurance-transport - sur achats": {}, - "61637-Assurance-transport - sur ventes": {}, + "61636-Assurance-transport - sur achats": {}, + "61637-Assurance-transport - sur ventes": {}, "61638-Assurance-transport - sur autres biens": {} - }, - "6164-Risques d'exploitation": {}, + }, + "6164-Risques d'exploitation": {}, "6165-Insolvabilit\u00e9 clients": {} - }, - "617-Etudes et recherches": {}, + }, + "617-Etudes et recherches": {}, "618-Divers": { - "6181-Documentation g\u00e9n\u00e9rale": {}, - "6183-Documentation technique": {}, + "6181-Documentation g\u00e9n\u00e9rale": {}, + "6183-Documentation technique": {}, "6185-Frais de colloques, s\u00e9minaires, conf\u00e9rences": {} - }, + }, "619-Rabais, remises et ristournes obtenus sur services ext\u00e9rieurs": {} - }, + }, "62-Autres services ext\u00e9rieurs": { "621-Personnel ext\u00e9rieur \u00e0 l'entreprise": { - "6211-Personnel int\u00e9rimaire": {}, + "6211-Personnel int\u00e9rimaire": {}, "6214-Personnel d\u00e9tach\u00e9 ou pr\u00eat\u00e9 \u00e0 l'entreprise": {} - }, + }, "622-R\u00e9mun\u00e9rations d'interm\u00e9diaires et honoraires": { - "6221-Commissions et courtages sur achats": {}, - "6222-Commissions et courtages sur ventes": {}, - "6224-R\u00e9mun\u00e9rations des transitaires": {}, - "6225-R\u00e9mun\u00e9rations d'affacturage": {}, - "6226-Honoraires": {}, - "6227-Frais d'actes et de contentieux": {}, + "6221-Commissions et courtages sur achats": {}, + "6222-Commissions et courtages sur ventes": {}, + "6224-R\u00e9mun\u00e9rations des transitaires": {}, + "6225-R\u00e9mun\u00e9rations d'affacturage": {}, + "6226-Honoraires": {}, + "6227-Frais d'actes et de contentieux": {}, "6228-Divers": {} - }, + }, "623-Publicit\u00e9, publications, relations publiques": { - "6231-Annonces et insertions": {}, - "6232-Echantillons": {}, - "6233-Foires et expositions": {}, - "6234-Cadeaux \u00e0 la client\u00e8le": {}, - "6235-Primes": {}, - "6236-Catalogues et imprim\u00e9s": {}, - "6237-Publications": {}, + "6231-Annonces et insertions": {}, + "6232-Echantillons": {}, + "6233-Foires et expositions": {}, + "6234-Cadeaux \u00e0 la client\u00e8le": {}, + "6235-Primes": {}, + "6236-Catalogues et imprim\u00e9s": {}, + "6237-Publications": {}, "6238-Divers (pourboires, dons courants...)": {} - }, + }, "624-Transports de biens et transports collectifs du personnel": { - "6241-Transports sur achats": {}, + "6241-Transports sur achats": {}, "6242-Transports sur ventes": { "account_type": "Chargeable" - }, - "6243-Transports entre \u00e9tablissements ou chantiers": {}, - "6244-Transports administratifs": {}, - "6247-Transports collectifs du personnel": {}, + }, + "6243-Transports entre \u00e9tablissements ou chantiers": {}, + "6244-Transports administratifs": {}, + "6247-Transports collectifs du personnel": {}, "6248-Divers": {} - }, + }, "625-D\u00e9placements, missions et r\u00e9ceptions": { - "6251-Voyages et d\u00e9placements": {}, - "6255-Frais de d\u00e9m\u00e9nagement": {}, - "6256-Missions": {}, + "6251-Voyages et d\u00e9placements": {}, + "6255-Frais de d\u00e9m\u00e9nagement": {}, + "6256-Missions": {}, "6257-R\u00e9ceptions": {} - }, - "626-Frais postaux et de t\u00e9l\u00e9communications": {}, + }, + "626-Frais postaux et de t\u00e9l\u00e9communications": {}, "627-Services bancaires et assimil\u00e9s": { - "6271-Frais sur titres (achat, vente, garde)": {}, - "6272-Commissions et frais sur \u00e9mission d'emprunts": {}, - "6275-Frais sur effets": {}, - "6276-Location de coffres": {}, + "6271-Frais sur titres (achat, vente, garde)": {}, + "6272-Commissions et frais sur \u00e9mission d'emprunts": {}, + "6275-Frais sur effets": {}, + "6276-Location de coffres": {}, "6278-Autres frais et commissions sur prestations de services": {} - }, + }, "628-Divers": { - "6281-Concours divers (cotisations...)": {}, + "6281-Concours divers (cotisations...)": {}, "6284-Frais de recrutement de personnel": {} - }, + }, "629-Rabais, remises et ristournes obtenus sur autres services ext\u00e9rieurs": {} - }, + }, "63-Imp\u00f4ts, taxes et versements assimil\u00e9s": { "631-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (administrations des imp\u00f4ts)": { - "6311-Taxes sur les salaires": {}, - "6312-Taxe d'apprentissage": {}, - "6313-Participation des employeurs \u00e0 la formation professionnelle continue": {}, - "6314-Cotisation pour d\u00e9faut d'investissement obligatoire dans la construction": {}, + "6311-Taxes sur les salaires": {}, + "6312-Taxe d'apprentissage": {}, + "6313-Participation des employeurs \u00e0 la formation professionnelle continue": {}, + "6314-Cotisation pour d\u00e9faut d'investissement obligatoire dans la construction": {}, "6318-Autres": {} - }, + }, "633-Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (autres organismes)": { - "6331-Versement de transport": {}, - "6332-Allocations logement": {}, - "6333-Participation des employeurs \u00e0 la formation professionnelle continue": {}, - "6334-Participation des employeurs \u00e0 l'effort de construction": {}, - "6335-Versements lib\u00e9ratoires ouvrant droit \u00e0 l'\u00e9xon\u00e9ration de la taxe d'apprentissage": {}, + "6331-Versement de transport": {}, + "6332-Allocations logement": {}, + "6333-Participation des employeurs \u00e0 la formation professionnelle continue": {}, + "6334-Participation des employeurs \u00e0 l'effort de construction": {}, + "6335-Versements lib\u00e9ratoires ouvrant droit \u00e0 l'\u00e9xon\u00e9ration de la taxe d'apprentissage": {}, "6338-Autres": {} - }, + }, "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)": { - "63511-Contribution \u00e9conomique territoriale": {}, - "63512-Taxes fonci\u00e8res": {}, - "63513-Autres imp\u00f4ts locaux": {}, + "63511-Contribution \u00e9conomique territoriale": {}, + "63512-Taxes fonci\u00e8res": {}, + "63513-Autres imp\u00f4ts locaux": {}, "63514-Taxe sur les v\u00e9hicules des soci\u00e9t\u00e9s": {} - }, - "6352-Taxes sur le chiffre d'affaires non r\u00e9cup\u00e9rables": {}, - "6353-Imp\u00f4ts indirects": {}, + }, + "6352-Taxes sur le chiffre d'affaires non r\u00e9cup\u00e9rables": {}, + "6353-Imp\u00f4ts indirects": {}, "6354-Droits d'enregistrement et de timbre": { "63541-Droits de mutation": {} - }, + }, "6358-Autres droits": {} - }, + }, "637-Autres imp\u00f4ts, taxes et versements assimil\u00e9s (autres organismes)": { - "6371-Contribution sociale de solidarit\u00e9 \u00e0 la charge des soci\u00e9t\u00e9s": {}, - "6372-Taxes per\u00e7ues par les organismes publics internationaux": {}, - "6374-Imp\u00f4ts et taxes exigibles \u00e0 l'\u00e9tranger": {}, + "6371-Contribution sociale de solidarit\u00e9 \u00e0 la charge des soci\u00e9t\u00e9s": {}, + "6372-Taxes per\u00e7ues par les organismes publics internationaux": {}, + "6374-Imp\u00f4ts et taxes exigibles \u00e0 l'\u00e9tranger": {}, "6378-Taxes diverses": {} } - }, + }, "64-Charges de personnel": { "641-R\u00e9mun\u00e9rations du personnel": { - "6411-Salaires, appointements": {}, - "6412-Cong\u00e9s pay\u00e9s": {}, - "6413-Primes et gratifications": {}, - "6414-Indemnit\u00e9s et avantages divers": {}, + "6411-Salaires, appointements": {}, + "6412-Cong\u00e9s pay\u00e9s": {}, + "6413-Primes et gratifications": {}, + "6414-Indemnit\u00e9s et avantages divers": {}, "6415-Suppl\u00e9ment familial": {} - }, - "644-R\u00e9mun\u00e9ration du travail de l'exploitant": {}, + }, + "644-R\u00e9mun\u00e9ration du travail de l'exploitant": {}, "645-Charges de s\u00e9curit\u00e9 sociale et de pr\u00e9voyance": { - "6451-Cotisations \u00e0 l'URSSAF": {}, - "6452-Cotisations aux mutuelles": {}, - "6453-Cotisations aux caisses de retraites": {}, + "6451-Cotisations \u00e0 l'URSSAF": {}, + "6452-Cotisations aux mutuelles": {}, + "6453-Cotisations aux caisses de retraites": {}, "6454-Cotisations aux ASSEDIC": {} - }, - "646-Cotisations sociales personnelles de l'exploitant": {}, + }, + "646-Cotisations sociales personnelles de l'exploitant": {}, "647-Autres charges sociales": { "is_group": 1 - }, + }, "648-Autres charges de personnel": {} - }, + }, "65-Autres charges de gestion courante": { "651-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": { - "6511-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": {}, - "6516-Droits d'auteur et de reproduction": {}, + "6511-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": {}, + "6516-Droits d'auteur et de reproduction": {}, "6518-Autres droits et valeurs similaires": {} - }, - "653-Jetons de pr\u00e9sence": {}, + }, + "653-Jetons de pr\u00e9sence": {}, "654-Pertes sur cr\u00e9ances irr\u00e9couvrables": { - "6541-Cr\u00e9ances de l'exercice": {}, + "6541-Cr\u00e9ances de l'exercice": {}, "6544-Cr\u00e9ances des exercices ant\u00e9rieurs": {} - }, + }, "655-Quotes-parts de r\u00e9sultat sur op\u00e9rations faites en commun": { - "6551-Quote-part de b\u00e9n\u00e9fice transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {}, + "6551-Quote-part de b\u00e9n\u00e9fice transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {}, "6555-Quote-part de perte support\u00e9e (comptabilit\u00e9 des associ\u00e9s non g\u00e9rants)": {} - }, - "656-Pertes de change sur cr\u00e9ances et dettes commerciales": {}, + }, + "656-Pertes de change sur cr\u00e9ances et dettes commerciales": {}, "658-Charges diverses de gestion courante": {} - }, + }, "66-Charges financi\u00e8res": { "661-Charges d'int\u00e9r\u00eats": { "6611-Int\u00e9r\u00eats des emprunts et dettes": { - "66116-Int\u00e9r\u00eats des emprunts et dettes - des emprunts et dettes assimil\u00e9es": {}, + "66116-Int\u00e9r\u00eats des emprunts et dettes - des emprunts et dettes assimil\u00e9es": {}, "66117-Int\u00e9r\u00eats des emprunts et dettes - des dettes rattach\u00e9es \u00e0 des participations": {} - }, - "6612-Charges de la fiducie, r\u00e9sultat de la p\u00e9riode": {}, - "6615-Int\u00e9r\u00eats des comptes courants et des d\u00e9p\u00f4ts cr\u00e9diteurs": {}, - "6616-Int\u00e9r\u00eats bancaires et sur op\u00e9rations de financement (escompte...)": {}, - "6617-Int\u00e9r\u00eats des obligations cautionn\u00e9es": {}, + }, + "6612-Charges de la fiducie, r\u00e9sultat de la p\u00e9riode": {}, + "6615-Int\u00e9r\u00eats des comptes courants et des d\u00e9p\u00f4ts cr\u00e9diteurs": {}, + "6616-Int\u00e9r\u00eats bancaires et sur op\u00e9rations de financement (escompte...)": {}, + "6617-Int\u00e9r\u00eats des obligations cautionn\u00e9es": {}, "6618-Int\u00e9r\u00eats des autres dettes": { - "66181-Int\u00e9r\u00eats des autres dettes - des dettes commerciales": {}, + "66181-Int\u00e9r\u00eats des autres dettes - des dettes commerciales": {}, "66188-Int\u00e9r\u00eats des autres dettes - des dettes diverses": {} } - }, - "664-Pertes sur cr\u00e9ances li\u00e9es \u00e0 des participations": {}, - "665-Escomptes accord\u00e9s": {}, + }, + "664-Pertes sur cr\u00e9ances li\u00e9es \u00e0 des participations": {}, + "665-Escomptes accord\u00e9s": {}, "666-Pertes de change financi\u00e8res": { "account_type": "Round Off" - }, - "667-Charges nettes sur cessions de valeurs mobili\u00e8res de placement": {}, + }, + "667-Charges nettes sur cessions de valeurs mobili\u00e8res de placement": {}, "668-Autres charges financi\u00e8res": {} - }, + }, "67-Charges exceptionnelles": { "671-Charges exceptionnelles sur op\u00e9rations de gestion": { - "6711-P\u00e9nalit\u00e9s sur march\u00e9s (et d\u00e9dits pay\u00e9s sur achats et ventes)": {}, - "6712-P\u00e9nalit\u00e9s, amendes fiscales et p\u00e9nales": {}, - "6713-Dons, lib\u00e9ralit\u00e9s": {}, - "6714-Cr\u00e9ances devenues irr\u00e9couvrables dans l'exercice": {}, - "6715-Subventions accord\u00e9es": {}, - "6717-Rappel d'imp\u00f4ts (autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices)": {}, + "6711-P\u00e9nalit\u00e9s sur march\u00e9s (et d\u00e9dits pay\u00e9s sur achats et ventes)": {}, + "6712-P\u00e9nalit\u00e9s, amendes fiscales et p\u00e9nales": {}, + "6713-Dons, lib\u00e9ralit\u00e9s": {}, + "6714-Cr\u00e9ances devenues irr\u00e9couvrables dans l'exercice": {}, + "6715-Subventions accord\u00e9es": {}, + "6717-Rappel d'imp\u00f4ts (autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices)": {}, "6718-Autres charges exceptionnelles sur op\u00e9rations de gestion": {} - }, - "672-(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les charges sur exercices ant\u00e9rieurs)": {}, + }, + "672-(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les charges sur exercices ant\u00e9rieurs)": {}, "674-Op\u00e9rations de constitution ou liquidation des fiducies": { - "6741-Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": {}, + "6741-Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": {}, "6742-Op\u00e9rations li\u00e9es \u00e0 la liquidation de la fiducie": {} - }, + }, "675-Valeurs comptables des \u00e9l\u00e9ments d'actif c\u00e9d\u00e9s": { - "6751-Immobilisations incorporelles": {}, - "6752-Immobilisations corporelles": {}, - "6756-Immobilisations financi\u00e8res": {}, + "6751-Immobilisations incorporelles": {}, + "6752-Immobilisations corporelles": {}, + "6756-Immobilisations financi\u00e8res": {}, "6758-Autres \u00e9l\u00e9ments d'actif": {} - }, + }, "678-Autres charges exceptionnelles": { - "6781-Mali provenant de clauses d'indexation": {}, - "6782-Lots": {}, - "6783-Malis provenant du rachat par l'entreprise d'actions et obligations \u00e9mises par elles-m\u00eame": {}, + "6781-Mali provenant de clauses d'indexation": {}, + "6782-Lots": {}, + "6783-Malis provenant du rachat par l'entreprise d'actions et obligations \u00e9mises par elles-m\u00eame": {}, "6788-Charges exceptionnelles diverses": {} } - }, + }, "68-Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions": { "681-Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions - Charges d'exploitation": { "6811-Dotations aux amortissements sur immobilisations incorporelles et corporelles": { "68111-Immobilisations incorporelles": { "account_type": "Depreciation" - }, + }, "68112-Immobilisations corporelles": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "6812-Dotations aux amortissements des charges d'exploitation \u00e0 r\u00e9partir": { "account_type": "Depreciation" - }, + }, "6815-Dotations aux provisions d'exploitation": { "account_type": "Depreciation" - }, + }, "6816-Dotations aux d\u00e9pr\u00e9ciations des immobilisations incorporelles et corporelles": { "68161-Immobilisations incorporelles": { "account_type": "Depreciation" - }, + }, "68162-Immobilisations corporelles": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "6817-Dotations pour d\u00e9pr\u00e9ciations des actifs circulants": { "68173-Stocks et en-cours": { "account_type": "Depreciation" - }, + }, "68174-Cr\u00e9ances": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "686-Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions - Charges financi\u00e8res": { "6861-Dotations aux amortissements des primes de remboursement des obligations": { "account_type": "Depreciation" - }, + }, "6865-Dotations aux provisions financi\u00e8res": { "account_type": "Depreciation" - }, + }, "6866-Dotations aux d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": { "68662-Immobilisations financi\u00e8res": { "account_type": "Depreciation" - }, + }, "68665-Valeurs mobili\u00e8res de placement": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "6868-Autres dotations": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "687-Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions - Charges exceptionnelles": { "6871-Dotations aux amortissements exceptionnels des immobilisations": { "account_type": "Depreciation" - }, + }, "6872-Dotations aux provisions r\u00e9glement\u00e9es (immobilisations)": { "68725-Amortissements d\u00e9rogatoires": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "6873-Dotations aux provisions r\u00e9glement\u00e9es (stocks)": { "account_type": "Depreciation" - }, + }, "6874-Dotations aux autres provisions r\u00e9glement\u00e9es": { "account_type": "Depreciation" - }, + }, "6875-Dotations aux provisions exceptionnelles": { "account_type": "Depreciation" - }, + }, "6876-Dotations aux d\u00e9pr\u00e9ciations exceptionnelles": { "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "account_type": "Depreciation" - }, + }, "69-Participation des salari\u00e9s, imp\u00f4ts sur les b\u00e9n\u00e9fices et assimil\u00e9s": { - "691-Participation des salari\u00e9s aux r\u00e9sultats": {}, + "691-Participation des salari\u00e9s aux r\u00e9sultats": {}, "695-Imp\u00f4ts sur les b\u00e9n\u00e9fices": { - "6951-Imp\u00f4ts dus en France": {}, - "6952-Contribution additionnelle \u00e0 l'imp\u00f4t sur les b\u00e9n\u00e9fices": {}, + "6951-Imp\u00f4ts dus en France": {}, + "6952-Contribution additionnelle \u00e0 l'imp\u00f4t sur les b\u00e9n\u00e9fices": {}, "6954-Imp\u00f4ts dus \u00e0 l'\u00e9tranger": {} - }, - "696-Suppl\u00e9ments d'imp\u00f4ts sur les soci\u00e9t\u00e9s, li\u00e9s aux distributions": {}, + }, + "696-Suppl\u00e9ments d'imp\u00f4ts sur les soci\u00e9t\u00e9s, li\u00e9s aux distributions": {}, "698-Int\u00e9gration fiscale": { - "6981-Int\u00e9gration fiscale - Charges": {}, + "6981-Int\u00e9gration fiscale - Charges": {}, "6989-Int\u00e9gration fiscale - Produits": {} - }, + }, "699-Produits - Report en arri\u00e8re des d\u00e9ficits": {} - }, + }, "root_type": "Expense" - }, + }, "7-Comptes de Produits": { "70-Ventes de produits fabriqu\u00e9s, prestations de services, marchandises": { "701-Ventes de produits finis": { - "7011-Produits finis (ou groupe) A": {}, + "7011-Produits finis (ou groupe) A": {}, "7012-Produits (ou groupe) B": {} - }, - "702-Ventes de produits interm\u00e9diaires": {}, - "703-Ventes de produits r\u00e9siduels": {}, + }, + "702-Ventes de produits interm\u00e9diaires": {}, + "703-Ventes de produits r\u00e9siduels": {}, "704-Travaux": { - "7041-Travaux de cat\u00e9gorie (ou activit\u00e9) A": {}, + "7041-Travaux de cat\u00e9gorie (ou activit\u00e9) A": {}, "7042-Travaux de cat\u00e9gorie (ou activit\u00e9) B": {} - }, - "705-Etudes": {}, - "706-Prestations de services": {}, + }, + "705-Etudes": {}, + "706-Prestations de services": {}, "707-Ventes de marchandises": { - "7071-Marchandises (ou groupe) A": {}, + "7071-Marchandises (ou groupe) A": {}, "7072-Marchandises (ou groupe) B": {} - }, + }, "708-Produits des activit\u00e9s annexes": { - "7081-Produits des services exploit\u00e9s dans l'int\u00e9r\u00eat du personnel": {}, - "7082-Commissions et courtages": {}, - "7083-Locations diverses": {}, - "7084-Mise \u00e0 disposition de personnel factur\u00e9e": {}, - "7085-Ports et frais accessoires factur\u00e9s": {}, - "7086-Bonis sur reprises d'emballages consign\u00e9s": {}, - "7087-Bonifications obtenues des clients et primes sur ventes": {}, + "7081-Produits des services exploit\u00e9s dans l'int\u00e9r\u00eat du personnel": {}, + "7082-Commissions et courtages": {}, + "7083-Locations diverses": {}, + "7084-Mise \u00e0 disposition de personnel factur\u00e9e": {}, + "7085-Ports et frais accessoires factur\u00e9s": {}, + "7086-Bonis sur reprises d'emballages consign\u00e9s": {}, + "7087-Bonifications obtenues des clients et primes sur ventes": {}, "7088-Autres produits d'activit\u00e9s annexes (cessions d'approvisionnements...)": {} - }, + }, "709-Rabais, remises et ristournes accord\u00e9s par l'entreprise": { - "7091-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits finis": {}, - "7092-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits interm\u00e9diaires": {}, - "7094-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur travaux": {}, - "7095-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur \u00e9tudes": {}, - "7096-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur prestations de services": {}, - "7097-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de marchandises": {}, + "7091-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits finis": {}, + "7092-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits interm\u00e9diaires": {}, + "7094-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur travaux": {}, + "7095-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur \u00e9tudes": {}, + "7096-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur prestations de services": {}, + "7097-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de marchandises": {}, "7098-Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur produits des activit\u00e9s annexes": {} } - }, + }, "71-Production stock\u00e9e (ou d\u00e9stockage)": { "713-Variation des stocks (en-cours de production, produits)": { "7133-Variation des en-cours de production de biens": { - "71331-Produits en cours": {}, + "71331-Produits en cours": {}, "71335-Travaux en cours": {} - }, + }, "7134-Variation des en-cours de production de services": { - "71341-Etudes en cours": {}, + "71341-Etudes en cours": {}, "71345-Prestations de services en cours": {} - }, + }, "7135-Variation des stocks de produits": { - "71351-Produits interm\u00e9diaires": {}, - "71355-Produits finis": {}, + "71351-Produits interm\u00e9diaires": {}, + "71355-Produits finis": {}, "71358-Produits r\u00e9siduels": {} } } - }, + }, "72-Production immobilis\u00e9e": { - "721-Immobilisations incorporelles": {}, + "721-Immobilisations incorporelles": {}, "722-Immobilisations corporelles": {} - }, + }, "74-Subventions d'exploitation": { "is_group": 1 - }, + }, "75-Autres produits de gestion courante": { "751-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": { - "7511-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": {}, - "7516-Droits d'auteur et de reproduction": {}, + "7511-Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": {}, + "7516-Droits d'auteur et de reproduction": {}, "7518-Autres droits et valeurs similaires": {} - }, - "752-Revenus des immeubles non affect\u00e9s aux activit\u00e9s professionnelles": {}, - "753-Jetons de pr\u00e9sence et r\u00e9mun\u00e9rations d'administrateurs, g\u00e9rants...": {}, - "754-Ristournes per\u00e7ues des coop\u00e9ratives (provenant des exc\u00e9dents)": {}, + }, + "752-Revenus des immeubles non affect\u00e9s aux activit\u00e9s professionnelles": {}, + "753-Jetons de pr\u00e9sence et r\u00e9mun\u00e9rations d'administrateurs, g\u00e9rants...": {}, + "754-Ristournes per\u00e7ues des coop\u00e9ratives (provenant des exc\u00e9dents)": {}, "755-Quotes-parts de r\u00e9sultats sur op\u00e9rations faites en commun": { - "7551-Quote-part de perte transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {}, + "7551-Quote-part de perte transf\u00e9r\u00e9e (comptabilit\u00e9 du g\u00e9rant)": {}, "7555-Quote-part de b\u00e9n\u00e9fice attribu\u00e9 (comptabilit\u00e9 des associ\u00e9s non g\u00e9rants)": {} - }, - "756-Gains de change sur cr\u00e9ances et dettes commerciales": {}, + }, + "756-Gains de change sur cr\u00e9ances et dettes commerciales": {}, "758-Produits divers de gestion courante": {} - }, + }, "76-Produits financiers": { "761-Produits de participations": { - "7611-Revenus des titres de participation": {}, - "7612-Produits de la fiducie, r\u00e9sultat de la p\u00e9riode": {}, - "7616-Revenus sur autres formes de participation": {}, + "7611-Revenus des titres de participation": {}, + "7612-Produits de la fiducie, r\u00e9sultat de la p\u00e9riode": {}, + "7616-Revenus sur autres formes de participation": {}, "7617-Revenus des cr\u00e9ances rattach\u00e9es \u00e0 des participations": {} - }, + }, "762-Produits des autres immobilisations financi\u00e8res": { - "7621-Revenus des titres immobilis\u00e9s": {}, - "7626-Revenus des pr\u00eats": {}, + "7621-Revenus des titres immobilis\u00e9s": {}, + "7626-Revenus des pr\u00eats": {}, "7627-Revenus des cr\u00e9ances immobilis\u00e9es": {} - }, + }, "763-Revenus des autres cr\u00e9ances": { - "7631-Revenus des cr\u00e9ances commerciales": {}, + "7631-Revenus des cr\u00e9ances commerciales": {}, "7638-Revenus des cr\u00e9ances diverses": {} - }, - "764-Revenus des valeurs mobili\u00e8res de placement": {}, - "765-Escomptes obtenus": {}, + }, + "764-Revenus des valeurs mobili\u00e8res de placement": {}, + "765-Escomptes obtenus": {}, "766-Gains de change financi\u00e8res": { "account_type": "Round Off" - }, - "767-Produits nets sur cessions de valeurs mobili\u00e8res de placement": {}, + }, + "767-Produits nets sur cessions de valeurs mobili\u00e8res de placement": {}, "768-Autres produits financiers": {} - }, + }, "77-Produits exceptionnels": { "771-Produits exceptionnels sur op\u00e9rations de gestion": { - "7711-D\u00e9dits et p\u00e9nalit\u00e9s per\u00e7us sur achats et sur ventes": {}, - "7713-Lib\u00e9ralit\u00e9s re\u00e7ues": {}, - "7714-Rentr\u00e9es sur cr\u00e9ances amorties": {}, - "7715-Subventions d'\u00e9quilibre": {}, - "7717-D\u00e9gr\u00e8vements d'imp\u00f4ts autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices": {}, + "7711-D\u00e9dits et p\u00e9nalit\u00e9s per\u00e7us sur achats et sur ventes": {}, + "7713-Lib\u00e9ralit\u00e9s re\u00e7ues": {}, + "7714-Rentr\u00e9es sur cr\u00e9ances amorties": {}, + "7715-Subventions d'\u00e9quilibre": {}, + "7717-D\u00e9gr\u00e8vements d'imp\u00f4ts autres qu'imp\u00f4ts sur les b\u00e9n\u00e9fices": {}, "7718-Autres produits exceptionnels sur op\u00e9rations de gestion": {} - }, - "772-(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les Produits sur exercices ant\u00e9rieurs)": {}, + }, + "772-(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les Produits sur exercices ant\u00e9rieurs)": {}, "774-Op\u00e9rations de constitution ou liquidation des fiducies": { - "7741-Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": {}, + "7741-Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": {}, "7742-Op\u00e9rations li\u00e9es \u00e0 la liquidation de la fiducie": {} - }, + }, "775-Produits des cessions d'\u00e9l\u00e9ments d'actif": { - "7751-Immobilisations incorporelles": {}, - "7752-Immobilisations corporelles": {}, - "7756-Immobilisations financi\u00e8res": {}, + "7751-Immobilisations incorporelles": {}, + "7752-Immobilisations corporelles": {}, + "7756-Immobilisations financi\u00e8res": {}, "7758-Autres \u00e9l\u00e9ments d'actif": {} - }, - "777-Quote-part des subventions d'investissement vir\u00e9e au r\u00e9sultat de l'exercice": {}, + }, + "777-Quote-part des subventions d'investissement vir\u00e9e au r\u00e9sultat de l'exercice": {}, "778-Autres produits exceptionnels": { - "7781-Bonis provenant de clauses d'indexation": {}, - "7782-Lots": {}, - "7783-Bonis provenant du rachat par l'entreprise d'actions et d'obligations \u00e9mises par elle-m\u00eame": {}, + "7781-Bonis provenant de clauses d'indexation": {}, + "7782-Lots": {}, + "7783-Bonis provenant du rachat par l'entreprise d'actions et d'obligations \u00e9mises par elle-m\u00eame": {}, "7788-Produits exceptionnels divers": {} } - }, + }, "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": { - "78111-Immobilisations incorporelles": {}, + "78111-Immobilisations incorporelles": {}, "78112-Immobilisations corporelles": {} - }, - "7815-Reprises sur provisions d'exploitation": {}, + }, + "7815-Reprises sur provisions d'exploitation": {}, "7816-Reprises sur d\u00e9pr\u00e9ciations des immobilisations corporelles et incorporelles": { - "78161-Immobilisations incorporelles": {}, + "78161-Immobilisations incorporelles": {}, "78162-Immobilisations corporelles": {} - }, + }, "7817-Reprises sur d\u00e9pr\u00e9ciations des actifs circulants": { - "78173-Stocks et en-cours": {}, + "78173-Stocks et en-cours": {}, "78174-Cr\u00e9ances": {} } - }, + }, "786-Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits financiers)": { - "7865-Reprises sur provisions financi\u00e8res": {}, + "7865-Reprises sur provisions financi\u00e8res": {}, "7866-Reprises sur d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": { - "78662-Immobilisations financi\u00e8res": {}, + "78662-Immobilisations financi\u00e8res": {}, "78665-Valeurs mobili\u00e8res de placement": {} } - }, + }, "787-Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits exceptionnels)": { "7872-Reprises sur provisions r\u00e9glement\u00e9es (immobilisations)": { - "78725-Amortissements d\u00e9rogatoires": {}, - "78726-Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {}, + "78725-Amortissements d\u00e9rogatoires": {}, + "78726-Provision sp\u00e9ciale de r\u00e9\u00e9valuation": {}, "78727-Plus-values r\u00e9investies": {} - }, - "7873-Reprises sur provisions r\u00e9glement\u00e9es (stocks)": {}, - "7874-Reprises sur autres provisions r\u00e9glement\u00e9es": {}, - "7875-Reprises sur provisions exceptionnelles": {}, + }, + "7873-Reprises sur provisions r\u00e9glement\u00e9es (stocks)": {}, + "7874-Reprises sur autres provisions r\u00e9glement\u00e9es": {}, + "7875-Reprises sur provisions exceptionnelles": {}, "7876-Reprises sur d\u00e9pr\u00e9ciations exceptionnelles": {} } - }, + }, "79-Transferts de charges": { - "791-Transferts de charges d'exploitation": {}, - "796-Transferts de charges financi\u00e8res": {}, + "791-Transferts de charges d'exploitation": {}, + "796-Transferts de charges financi\u00e8res": {}, "797-Transferts de charges exceptionnelles": {} - }, + }, "root_type": "Income" } } diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general_avec_code.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general_avec_code.json new file mode 100644 index 00000000000..b6673795bea --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/fr_plan_comptable_general_avec_code.json @@ -0,0 +1,3144 @@ +{ + "country_code": "fr", + "name": "France - Plan Comptable General avec code", + "tree": { + "Comptes de Capitaux": { + "root_type": "Equity", + "Capital et R\u00e9serves": { + "Capital": { + "Capital souscrit - non appel\u00e9": { + "account_number": "1011" + }, + "Capital souscrit - appel\u00e9, non vers\u00e9": { + "account_number": "1012" + }, + "Capital souscrit - appel\u00e9, vers\u00e9": { + "Capital non amorti": { + "account_number": "10131" + }, + "Capital amorti": { + "account_number": "10132" + }, + "account_number": "1013" + }, + "Capital souscrit soumis \u00e0 des r\u00e9glementations particuli\u00e8res": { + "account_number": "1018" + }, + "account_number": "101" + }, + "Fonds fiduciaires": { + "account_number": "102" + }, + "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" + }, + "account_number": "104" + }, + "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'\u00e9tranger": { + "account_number": "1058" + }, + "account_number": "105" + }, + "R\u00e9serves": { + "R\u00e9serve l\u00e9gale": { + "R\u00e9serve l\u00e9gale proprement dite": { + "account_number": "10611" + }, + "Plus-values nettes \u00e0 long terme": { + "account_number": "10612" + }, + "account_number": "1061" + }, + "R\u00e9serves indisponibles": { + "account_number": "1062" + }, + "R\u00e9serves statutaires ou contractuelles": { + "account_number": "1063" + }, + "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" + }, + "account_number": "1064" + }, + "Autres r\u00e9serves": { + "R\u00e9serve de propre assureur": { + "account_number": "10681" + }, + "R\u00e9serves diverses": { + "account_number": "10688" + }, + "account_number": "1068" + }, + "account_number": "106" + }, + "Ecarts d'\u00e9quivalence": { + "account_number": "107" + }, + "Compte de l'exploitant": { + "account_number": "108" + }, + "Actionnaires: Capital souscrit - non appel\u00e9": { + "account_number": "109" + }, + "account_number": "10" + }, + "Report \u00e0 Nouveau": { + "Report \u00e0 nouveau (solde cr\u00e9diteur)": { + "account_number": "110" + }, + "Report \u00e0 nouveau (solde d\u00e9biteur)": { + "account_number": "119" + }, + "account_number": "11" + }, + "R\u00e9sultat de l'Exercice": { + "R\u00e9sultat de l'exercice (b\u00e9n\u00e9fice)": { + "account_number": "120" + }, + "R\u00e9sultat de l'exercice (perte)": { + "account_number": "129" + }, + "account_number": "12" + }, + "Subventions d'Investissement": { + "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" + }, + "account_number": "131" + }, + "Autres subventions d'investissement (m\u00eame ventilation que celle du compte 131)": { + "account_number": "138" + }, + "Subventions d'investissement inscrites au compte de r\u00e9sultat": { + "Subventions d'\u00e9quipement": { + "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" + }, + "account_number": "1391" + }, + "Autres subventions d'investissement (m\u00eame ventilation que celle du compte 1391)": { + "account_number": "1398" + }, + "account_number": "139" + }, + "account_number": "13" + }, + "Provisions R\u00e9glement\u00e9es": { + "Provisions r\u00e9glement\u00e9es relative aux immobilisations": { + "Provisions pour reconstitution des gisements miniers et p\u00e9troliers": { + "account_number": "1423" + }, + "Provisions pour investissement (participation des salari\u00e9s)": { + "account_number": "1424" + }, + "account_number": "142" + }, + "Provisions r\u00e9glement\u00e9es relatives aux stocks": { + "Hausse des prix": { + "account_number": "1431" + }, + "Fluctuation des cours": { + "account_number": "1432" + }, + "account_number": "143" + }, + "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" + }, + "account_number": "14" + }, + "Provisions": { + "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" + }, + "account_number": "151" + }, + "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 (entreprises concessionnaires) ": { + "account_number": "156" + }, + "Provisions pour charges \u00e0 r\u00e9partir sur plusieurs exercices": { + "Provisions pour gros entretien ou grandes r\u00e9visions": { + "account_number": "1572" + }, + "account_number": "157" + }, + "Autres provisions pour charges": { + "Provisions pour remises en \u00e9tat": { + "account_number": "1581" + }, + "account_number": "158" + }, + "account_number": "15" + }, + "Emprunts et Dettes Assimil\u00e9es": { + "Emprunts obligataires convertibles": { + "account_number": "161" + }, + "Obligations repr\u00e9sentatives de passifs nets remis en fiducie": { + "account_number": "162" + }, + "Autres emprunts obligataires": { + "account_number": "163" + }, + "Emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": { + "account_number": "164" + }, + "D\u00e9p\u00f4ts et cautionnements re\u00e7us": { + "D\u00e9p\u00f4ts": { + "account_number": "1651" + }, + "Cautionnements": { + "account_number": "1655" + }, + "account_number": "165" + }, + "Participation des salari\u00e9s aux r\u00e9sultats": { + "Comptes bloqu\u00e9s": { + "account_number": "1661" + }, + "Fonds de participation": { + "account_number": "1662" + }, + "account_number": "166" + }, + "Emprunts et dettes assortis de conditions particuli\u00e8res": { + "Emissions de titres participatifs": { + "account_number": "1671" + }, + "Avances conditionn\u00e9es de l'Etat": { + "account_number": "1674" + }, + "Emprunts participatifs": { + "account_number": "1675" + }, + "account_number": "167" + }, + "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": { + "Int\u00e9r\u00eats courus sur emprunts obligataires convertibles": { + "account_number": "16881" + }, + "Int\u00e9r\u00eats courus sur autres emprunts obligataires": { + "account_number": "16883" + }, + "Int\u00e9r\u00eats courus sur emprunts aupr\u00e8s des \u00e9tablissements de cr\u00e9dit": { + "account_number": "16884" + }, + "Int\u00e9r\u00eats courus sur d\u00e9p\u00f4ts et cautionnements re\u00e7us": { + "account_number": "16885" + }, + "Int\u00e9r\u00eats courus sur participation des salari\u00e9s aux r\u00e9sultats": { + "account_number": "16886" + }, + "Int\u00e9r\u00eats courus sur emprunts et dettes assortis de conditions particuli\u00e8res": { + "account_number": "16887" + }, + "Int\u00e9r\u00eats courus sur autres emprunts et dettes assimil\u00e9es": { + "account_number": "16888" + }, + "account_number": "1688" + }, + "Primes de remboursement des obligations": { + "account_number": "169" + }, + "account_number": "168" + }, + "account_number": "16" + }, + "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": { + "Principal": { + "account_number": "1781" + }, + "Int\u00e9r\u00eats courus": { + "account_number": "1788" + }, + "account_number": "178" + }, + "account_number": "17" + }, + "Comptes de liaison des \u00e9tablisssements 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" + }, + "account_number": "18" + }, + "account_number": "1" + }, + "Comptes d'Immobilisations": { + "root_type": "Asset", + "Immobilisations incorporelles": { + "Frais \u00e9tablissement": { + "Frais de constitution": { + "account_number": "2011" + }, + "Frais de premier \u00e9tablissement": { + "Frais de prospection": { + "account_number": "20121" + }, + "Frais de publicit\u00e9": { + "account_number": "20122" + }, + "account_number": "2012" + }, + "Frais d'augmentation de capital et d'op\u00e9rations diverses (fusions, scissions, transformations)": { + "account_number": "2013" + }, + "account_number": "201" + }, + "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" + }, + "Fonds commercial": { + "account_number": "207" + }, + "Autres immobilisations incorporelles": { + "Mali de fusion sur actifs incorporels": { + "account_number": "2081" + }, + "account_number": "208" + }, + "account_number": "20" + }, + "Immobilisations corporelles": { + "account_type": "Fixed Asset", + "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", + "Ensembles immobiliers industriels (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21151" + }, + "Ensembles immobiliers administratifs et commerciaux (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21155" + }, + "Autres ensembles immobiliers": { + "account_type": "Fixed Asset", + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "211581" + }, + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "211588" + }, + "account_number": "21158" + }, + "account_number": "2115" + }, + "account_number": "211" + }, + "Agencements et am\u00e9nagements de terrains (m\u00eame ventilation que celle du compte 211)": { + "account_type": "Fixed Asset", + "account_number": "212" + }, + "Constructions": { + "account_type": "Fixed Asset", + "B\u00e2timents": { + "account_type": "Fixed Asset", + "Ensembles immobiliers industriels (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21311" + }, + "Ensembles immobiliers administratifs et commerciaux (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21315" + }, + "Autres ensembles immobiliers": { + "account_type": "Fixed Asset", + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "213181" + }, + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "213188" + }, + "account_number": "21318" + }, + "account_number": "2131" + }, + "Installations g\u00e9n\u00e9rales, agencements, am\u00e9nagements des constructions": { + "account_type": "Fixed Asset", + "Ensembles immobiliers industriels (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21351" + }, + "Ensembles immobiliers administratifs et commerciaux (A, B)": { + "account_type": "Fixed Asset", + "account_number": "21355" + }, + "Autres ensembles immobiliers": { + "account_type": "Fixed Asset", + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "213581" + }, + "Autres ensembles immobiliers affect\u00e9s aux op\u00e9rations non professionnelles (A, B)": { + "account_type": "Fixed Asset", + "account_number": "213588" + }, + "account_number": "21358" + }, + "account_number": "2135" + }, + "Ouvrages d'infrastructure": { + "account_type": "Fixed Asset", + "Voies de terre": { + "account_type": "Fixed Asset", + "account_number": "21381" + }, + "Voies de fer": { + "account_type": "Fixed Asset", + "account_number": "21382" + }, + "Voies d'eau": { + "account_type": "Fixed Asset", + "account_number": "21383" + }, + "Barrages": { + "account_type": "Fixed Asset", + "account_number": "21384" + }, + "Pistes d'a\u00e9rodromes": { + "account_type": "Fixed Asset", + "account_number": "21385" + }, + "account_number": "2138" + }, + "account_number": "213" + }, + "Constructions sur sol d'autrui (m\u00eame ventilation que celle du compte 213)": { + "account_type": "Fixed Asset", + "account_number": "214" + }, + "Installations techniques, mat\u00e9riel et outillage industriels": { + "account_type": "Fixed Asset", + "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" + }, + "account_number": "2151" + }, + "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" + }, + "account_number": "2153" + }, + "Mat\u00e9riel industriel": { + "account_type": "Fixed Asset", + "account_number": "2154" + }, + "Outillage industriel": { + "account_type": "Fixed Asset", + "account_number": "2155" + }, + "Agencements et am\u00e9nagements du mat\u00e9riel et outillage industriel": { + "account_type": "Fixed Asset", + "account_number": "2157" + }, + "account_number": "215" + }, + "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_number": "2187" + }, + "account_number": "218" + }, + "account_number": "21" + }, + "Immobilisations mises en concession": { + "account_number": "22" + }, + "Immobilisations en cours": { + "Immobilisations corporelles en cours": { + "Terrains": { + "account_number": "2312" + }, + "Constructions": { + "account_number": "2313" + }, + "Installations techniques, mat\u00e9riel et outillage industriels": { + "account_number": "2315" + }, + "Autres immobilisations corporelles": { + "account_number": "2318" + }, + "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": { + "Terrains": { + "account_number": "2382" + }, + "Constructions": { + "account_number": "2383" + }, + "Installations techniques, mat\u00e9riel et outillage industriels": { + "account_number": "2385" + }, + "Autres immobilisations corporelles": { + "account_number": "2388" + }, + "account_number": "238" + }, + "account_number": "23" + }, + "Parts dans des entreprises li\u00e9es et cr\u00e9ances sur des entreprises li\u00e9es": { + "is_group": 1, + "account_number": "25" + }, + "Participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": { + "Titres de participation": { + "Actions": { + "account_number": "2611" + }, + "Autres titres": { + "account_number": "2618" + }, + "account_number": "261" + }, + "Autres formes de participation": { + "Droit repr\u00e9sentatifs d'actifs nets remis en fiducie": { + "account_number": "2661" + }, + "account_number": "266" + }, + "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" + }, + "account_number": "267" + }, + "Cr\u00e9ances rattach\u00e9es \u00e0 des soci\u00e9t\u00e9s en participation": { + "Principal": { + "account_number": "2681" + }, + "Int\u00e9r\u00eats courus": { + "account_number": "2688" + }, + "account_number": "268" + }, + "Versements restant \u00e0 effectuer sur titres de participation non lib\u00e9r\u00e9s": { + "account_number": "269" + }, + "account_number": "26" + }, + "Autres immobilisations financi\u00e8res": { + "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" + }, + "account_number": "271" + }, + "Titres immobilis\u00e9s (droit de cr\u00e9ance)": { + "Obligations": { + "account_number": "2721" + }, + "Bons": { + "account_number": "2722" + }, + "account_number": "272" + }, + "Titres immobilis\u00e9s de l'activit\u00e9 de portefeuille": { + "account_number": "273" + }, + "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" + }, + "account_number": "274" + }, + "D\u00e9p\u00f4ts et cautionnements vers\u00e9s": { + "D\u00e9p\u00f4ts": { + "account_number": "2751" + }, + "Cautionnements": { + "account_number": "2755" + }, + "account_number": "275" + }, + "Autres cr\u00e9ances immobilis\u00e9es": { + "Cr\u00e9ances diverses": { + "account_number": "2761" + }, + "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" + }, + "account_number": "2768" + }, + "account_number": "276" + }, + "(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" + }, + "account_number": "277" + }, + "Mali de fusion sur actifs financiers": { + "account_number": "278" + }, + "Versements restant \u00e0 effectuer sur titres immobilis\u00e9s non lib\u00e9r\u00e9s": { + "account_number": "279" + }, + "account_number": "27" + }, + "Amortissements des immobilisations": { + "account_type": "Accumulated Depreciation", + "Amortissements des immobilisations incorporelles": { + "account_type": "Accumulated Depreciation", + "Frais d'\u00e9tablissement (m\u00eame ventilation que celle du compte 212)": { + "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" + }, + "Autres immobilisations incorporelles": { + "account_type": "Accumulated Depreciation", + "Mali de fusion sur actifs incorporels": { + "account_type": "Accumulated Depreciation", + "account_number": "28081" + }, + "account_number": "2808" + }, + "account_number": "280" + }, + "Amortissements des immobilisations corporelles": { + "account_type": "Accumulated Depreciation", + "Terrains de gisement": { + "account_type": "Accumulated Depreciation", + "account_number": "2811" + }, + "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 du 214)": { + "account_type": "Accumulated Depreciation", + "account_number": "2814" + }, + "Installations techniques, mat\u00e9riel et outillage industriels (m\u00eame ventilation que celle du compte 218)": { + "account_type": "Accumulated Depreciation", + "account_number": "2815" + }, + "Autres immobilisations corporelles (m\u00eame ventilation que celle du compte 218)": { + "account_type": "Accumulated Depreciation", + "Mali de fusion sur actifs corporels": { + "account_type": "Accumulated Depreciation", + "account_number": "28187" + }, + "account_number": "2818" + }, + "account_number": "281" + }, + "Amortissements des immobilisations mises en concession": { + "account_number": "282" + }, + "account_number": "28" + }, + "D\u00e9pr\u00e9ciations des immobilisations": { + "D\u00e9pr\u00e9ciations des immobilisations incorporelles": { + "Marques, proc\u00e9d\u00e9s, droits et valeurs similaires": { + "account_number": "2905" + }, + "Droit au bail": { + "account_number": "2906" + }, + "Fonds commercial": { + "account_number": "2907" + }, + "Autres immobilisations incorporelles": { + "Mali de fusion sur actifs incorporels": { + "account_number": "29081" + }, + "account_number": "2908" + }, + "account_number": "290" + }, + "D\u00e9pr\u00e9ciations des immobilisations corporelles (m\u00eame ventilation que celle du compte 21)": { + "Terrains (autres que terrains de gisement)": { + "Mali de fusion sur actifs corporels": { + "account_number": "29187" + }, + "account_number": "2911" + }, + "account_number": "291" + }, + "D\u00e9pr\u00e9ciations des immobilisations mises en concession": { + "account_number": "292" + }, + "D\u00e9pr\u00e9ciations des immobilisations en cours": { + "Immobilisations corporelles en cours": { + "account_number": "2931" + }, + "Immobilisations incorporelles en cours": { + "account_number": "2932" + }, + "account_number": "293" + }, + "D\u00e9pr\u00e9ciations des participations et cr\u00e9ances rattach\u00e9es \u00e0 des participations": { + "Titres de participation": { + "account_number": "2961" + }, + "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" + }, + "account_number": "296" + }, + "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 (m\u00eame ventilation que celle du compte 272)": { + "account_number": "2972" + }, + " Titres immobilis\u00e9s de l'activit\u00e9 de portefuille": { + "account_number": "2973" + }, + "Pr\u00eats (m\u00eame ventilation que celle du compte 274)": { + "account_number": "2974" + }, + "D\u00e9p\u00f4ts et cautionnements vers\u00e9s (m\u00eame ventilation que celle du compte 275)": { + "account_number": "2975" + }, + "Autres cr\u00e9ances immobilis\u00e9es (m\u00eame ventilation que celle du compte 276)": { + "Mali de fusion sur actifs financiers": { + "account_number": "29787" + }, + "account_number": "2976" + }, + "account_number": "297" + }, + "account_number": "29" + }, + "account_number": "2" + }, + "Comptes de Stocks et En-Cours": { + "root_type": "Asset", + "Mati\u00e8res premi\u00e8res (et fournitures)": { + "Mati\u00e8res (ou groupe) A": { + "account_number": "311" + }, + "Mati\u00e8res (ou groupe) B": { + "account_number": "312" + }, + "Fournitures A, B, C, ...": { + "account_number": "317" + }, + "account_number": "31" + }, + "Autres approvisionnements": { + "Mat\u00e8res consommables": { + "Mati\u00e8res (ou groupe) C": { + "account_number": "3211" + }, + "Mati\u00e8res (ou groupe) D": { + "account_number": "3212" + }, + "account_number": "321" + }, + "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" + }, + "account_number": "322" + }, + "Emballages": { + "Emballages perdus": { + "account_number": "3261" + }, + "Emballages r\u00e9cup\u00e9rables non identifiables": { + "account_number": "3265" + }, + "Emballages \u00e0 usage mixte": { + "account_number": "3267" + }, + "account_number": "326" + }, + "account_number": "32" + }, + "En-cours de production de biens": { + "Produits en cours": { + "Produits en cours P1": { + "account_number": "3311" + }, + "Produits en cours P2": { + "account_number": "3312" + }, + "account_number": "331" + }, + "Travaux en cours": { + "Travaux en cours T1": { + "account_number": "3351" + }, + "Travaux en cours T2": { + "account_number": "3352" + }, + "account_number": "335" + }, + "account_number": "33" + }, + "En-cours de production de services": { + "Etudes en cours": { + "Etudes en cours E1": { + "account_number": "3411" + }, + "Etudes en cours E2": { + "account_number": "3412" + }, + "account_number": "341" + }, + "Prestations de services en cours": { + "Prestations de services S1": { + "account_number": "3451" + }, + "Prestations de services S2": { + "account_number": "3452" + }, + "account_number": "345" + }, + "account_number": "34" + }, + "Stocks de produits": { + "account_type": "Stock", + "Produits interm\u00e9diaires": { + "account_type": "Stock", + "Produits interm\u00e9diaires (ou groupe) A": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3511" + }, + "Produits interm\u00e9diaires (ou groupe) B": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3512" + }, + "account_number": "351" + }, + "Produits finis": { + "account_type": "Stock", + "Produits finis (ou groupe) A": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3551" + }, + "Produits finis (ou groupe) B": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3552" + }, + "account_number": "355" + }, + "Produits r\u00e9siduels (ou mati\u00e8res de r\u00e9cup\u00e9ration)": { + "account_type": "Stock", + "D\u00e9chets": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3581" + }, + "Rebuts": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3585" + }, + "Mati\u00e8res de r\u00e9cup\u00e9ration": { + "account_type": "Stock", + "is_group": 1, + "account_number": "3586" + }, + "account_number": "358" + }, + "account_number": "35" + }, + "(Compte \u00e0 ouvrir, le cas \u00e9ch\u00e9ant, sous l'intitul\u00e9 \"stocks provenant d'immobilisations\")": { + "account_number": "36" + }, + "Stocks de marchandises": { + "Marchandises (ou groupe) A": { + "account_number": "371" + }, + "Marchandises (ou groupe) B": { + "account_number": "372" + }, + "account_number": "37" + }, + "Stocks en voie d'acheminement, mis en d\u00e9p\u00f4t ou donn\u00e9s en consignation (en cas d'inventaire permanent en comptabilit\u00e9 g\u00e9n\u00e9rale)": { + "account_type": "Stock", + "account_number": "38" + }, + "D\u00e9pr\u00e9ciations des stocks et en-cours": { + "D\u00e9pr\u00e9ciations des mati\u00e8res premi\u00e8res (et fournitures)": { + "Mati\u00e8res (ou groupe) A": { + "account_number": "3911" + }, + "Mati\u00e8res (ou groupe) B": { + "account_number": "3912" + }, + "Fournitures A, B, C, ...": { + "account_number": "3917" + }, + "account_number": "391" + }, + "D\u00e9pr\u00e9ciations des autres approvisionnements": { + "Mati\u00e8res consommables (m\u00eame ventilation que celle du compte 321)": { + "account_number": "3921" + }, + "Fournitures consommables (m\u00eame ventilation que celle du compte 322)": { + "account_number": "3922" + }, + "Emballages (m\u00eame ventilation que celle du compte 326)": { + "account_number": "3926" + }, + "account_number": "392" + }, + "D\u00e9pr\u00e9ciations des en-cours de production de biens": { + "Etudes en cours (m\u00eame ventilation que celle du compte 341)": { + "account_number": "3931" + }, + "Travaux en cours (m\u00eame ventilation que celle du compte 335)": { + "account_number": "3935" + }, + "account_number": "393" + }, + "D\u00e9pr\u00e9ciations des en-cours de production de services": { + "Etudes en cours (m\u00eame ventilation que celle du compte 341)": { + "account_number": "3941" + }, + "Prestations de services en cours (m\u00eame ventilation que celle du compte 345)": { + "account_number": "3945" + }, + "account_number": "394" + }, + "D\u00e9pr\u00e9ciations des stocks de produits": { + "Produits interm\u00e9diaires (m\u00eame ventilation que celle du compte 351)": { + "account_number": "3951" + }, + "Produits finis (m\u00eame ventilation que celle du compte 355)": { + "account_number": "3955" + }, + "account_number": "395" + }, + "D\u00e9pr\u00e9ciations des stocks de marchandises": { + "Marchandise (ou groupe) A": { + "account_number": "3971" + }, + "Marchandise (ou groupe) B": { + "account_number": "3972" + }, + "account_number": "397" + }, + "account_number": "39" + }, + "account_number": "3" + }, + "4-Comptes de Tiers (ACTIF)": { + "root_type": "Asset", + "40-Fournisseurs et Comptes Rattach\u00e9s (ACTIF)": { + "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" + }, + "Fournisseurs - Autres avoirs": { + "Fournisseurs d'exploitation": { + "account_number": "40971" + }, + "Fournisseurs d'immobilisation": { + "account_number": "40974" + }, + "account_number": "4097" + }, + "Rabais, remises, ristournes \u00e0 obtenir et autres avoirs non encore re\u00e7us": { + "account_number": "4098" + }, + "account_number": "409" + } + }, + "41-Clients et comptes rattach\u00e9s (ACTIF)": { + "account_type": "Receivable", + "Clients et Comptes rattach\u00e9s": { + "account_type": "Receivable", + "account_number": "410" + }, + "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" + }, + "account_number": "411" + }, + "Clients - Effets \u00e0 recevoir": { + "account_type": "Receivable", + "account_number": "413" + }, + "Clients douteux ou litigieux": { + "account_type": "Receivable", + "account_number": "416" + }, + "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" + }, + "account_number": "418" + } + }, + "42-Personnel et comptes rattach\u00e9s (ACTIF)": { + "Personnel - Avances et acomptes": { + "account_number": "425" + } + }, + "43-S\u00e9curit\u00e9 sociale et autres organismes sociaux (ACTIF)": { + "S\u00e9curit\u00e9 sociale": { + "account_number": "431" + }, + "Autres organismes sociaux": { + "account_number": "437" + }, + "438-Organismes sociaux - Produits \u00e0 recevoir": { + "Produits \u00e0 recevoir": { + "account_number": "4387" + } + } + }, + "44-Etat et autres collectivit\u00e9s publiques (ACTIF)": { + "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" + }, + "account_number": "441" + }, + "Op\u00e9rations particuli\u00e8res avec l'Etat, les collectivit\u00e9s publiques, les organismes internationaux": { + "Cr\u00e9ances sur l'Etat r\u00e9sultant de la suppression de la r\u00e8gle du d\u00e9calage d'un mois en mati\u00e8re de TVA": { + "account_number": "4431" + }, + "Int\u00e9r\u00eats courus sur cr\u00e9ances figurant au compte 4431": { + "account_number": "4438" + }, + "account_number": "443" + }, + "Etat - Taxes sur le chiffre d'affaires (ACTIF)": { + "TVA due intracommunautaire": { + "account_number": "4452" + }, + "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" + }, + "TVA sur autres biens et services": { + "tax_rate": 20, + "account_number": "44566" + }, + "Cr\u00e9dit de TVA \u00e0 reporter": { + "account_number": "44567" + }, + "Taxes assimil\u00e9es \u00e0 la TVA": { + "account_number": "44568" + }, + "account_number": "4456" + }, + "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente (ACTIF)": { + "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" + } + } + }, + "Etat - Charges \u00e0 payer et produits \u00e0 recevoir": { + "Charges fiscales sur cong\u00e9s \u00e0 payer": { + "account_number": "4482" + }, + "Charges \u00e0 payer": { + "account_number": "4486" + }, + "Produits \u00e0 recevoir": { + "account_number": "4487" + }, + "account_number": "448" + } + }, + "45-Groupe et associ\u00e9s (ACTIF)": { + "Associ\u00e9s - Op\u00e9rations sur le capital (ACTIF)": { + "456-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" + }, + "account_number": "4562" + } + } + }, + "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" + }, + "467-Autres comptes d\u00e9biteurs ou cr\u00e9diteurs (ACTIF)": {}, + "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir (ACTIF)": { + "Produits \u00e0 recevoir": { + "account_number": "4687" + } + } + }, + "47-Comptes transitoires ou d'attente (ACTIF)": { + "471-Comptes d'attente (ACTIF)": { + "account_type": "Temporary" + }, + "Diff\u00e9rences 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" + }, + "account_number": "476" + }, + "Autres comptes transitoires (ACTIF)": { + "Mali de fusion sur actif circulant": { + "account_number": "4781" + }, + "478-Diff\u00e9rences d'\u00e9valuation sur instruments de tr\u00e9sorerie (ACTIF)": { + "account_number": "4786" + } + } + }, + "48-Comptes de r\u00e9gularisation (ACTIF)": { + "Charges \u00e0 r\u00e9partir sur plusieurs exercices": { + "Frais d'\u00e9mission des emprunts": { + "account_number": "4816" + }, + "account_number": "481" + }, + "Charges constat\u00e9es d'avance": { + "account_number": "486" + }, + "488-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits (ACTIF)": { + "Charges": { + "account_number": "4886" + } + } + }, + "49-D\u00e9pr\u00e9ciation des comptes de tiers (ACTIF)": { + "D\u00e9pr\u00e9ciations des comptes clients": { + "account_number": "491" + }, + "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" + }, + "account_number": "495" + }, + "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" + }, + "account_number": "496" + } + } + }, + "4-Comptes de Tiers (PASSIF)": { + "root_type": "Liability", + "40-Fournisseurs et Comptes Rattach\u00e9s (PASSIF)": { + "account_type": "Payable", + "Fournisseurs": { + "account_type": "Payable", + "Fournisseurs - Achats de biens ou de prestations de services": { + "account_type": "Payable", + "account_number": "4011" + }, + "Fournisseurs - Retenues de garantie": { + "account_type": "Payable", + "account_number": "4017" + }, + "account_number": "401" + }, + "Fournisseurs - Effets \u00e0 payer": { + "account_type": "Payable", + "account_number": "403" + }, + "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" + }, + "account_number": "404" + }, + "Fournisseurs d'immobilisations - Effets \u00e0 payer": { + "account_type": "Payable", + "account_number": "405" + }, + "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": "Stock Received But Not Billed", + "account_number": "4084" + }, + "Fournisseurs - Int\u00e9r\u00eats courus": { + "account_type": "Stock Received But Not Billed", + "account_number": "4088" + }, + "account_number": "408" + } + }, + "41-Clients et comptes rattach\u00e9s (PASSIF)": { + "Clients cr\u00e9diteurs": { + "Clients - Avances et acomptes re\u00e7us sur commandes": { + "account_number": "4191" + }, + "Clients - Dettes pour 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" + }, + "account_number": "419" + } + }, + "42-Personnel et comptes rattach\u00e9s (PASSIF)": { + "Personnel - R\u00e9mun\u00e9rations dues": { + "account_number": "421" + }, + "Comit\u00e9s d'entreprises, d'\u00e9tablissement...": { + "account_number": "422" + }, + "Participation des salari\u00e9s aux r\u00e9sultats": { + "R\u00e9serve sp\u00e9ciale": { + "account_number": "4246" + }, + "Comptes courants": { + "account_number": "4248" + }, + "account_number": "424" + }, + "Personnel - D\u00e9p\u00f4ts": { + "account_number": "426" + }, + "Personnel - Oppositions": { + "account_number": "427" + }, + "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" + }, + "account_number": "428" + } + }, + "43-S\u00e9curit\u00e9 sociale et autres organismes sociaux (PASSIF)": { + "438-Organismes sociaux - Charges \u00e0 payer": { + "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)": { + "Etat - Imp\u00f4ts et taxes recouvrables sur des tiers": { + "Obligataires": { + "account_number": "4424" + }, + "Associ\u00e9s": { + "account_number": "4425" + }, + "account_number": "442" + }, + "Etat - Imp\u00f4ts sur les b\u00e9n\u00e9fices": { + "account_number": "444" + }, + "Etat - Taxes sur le chiffre d'affaires (PASSIF)": { + "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" + }, + "account_number": "4455" + }, + "Taxes sur le chiffre d'affaires collect\u00e9es par l'entreprise": { + "TVA collect\u00e9e": { + "account_type": "Tax", + "is_group": 1, + "account_number": "44571" + }, + "Taxes assimil\u00e9es \u00e0 la TVA": { + "account_number": "44578" + }, + "account_number": "4457" + }, + "4458-Taxes sur le chiffre d'affaires \u00e0 r\u00e9gulariser ou en attente (PASSIF)": { + "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 (PASSIF)": { + "account_number": "451" + }, + "Associ\u00e9s - Comptes courants (PASSIF)": { + "Principal (PASSIF)": { + "account_number": "4551" + }, + "Int\u00e9r\u00eats courus (PASSIF)": { + "account_number": "4558" + }, + "account_number": "455" + }, + "Associ\u00e9s - Op\u00e9rations sur le capital (PASSIF)": { + "456-Associ\u00e9s - Comptes d'apport en soci\u00e9t\u00e9": { + "Apports en nature": { + "account_number": "45611" + }, + "Apports en num\u00e9raire": { + "account_number": "45615" + }, + "account_number": "4561" + }, + "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" + }, + "Associ\u00e9s - Op\u00e9rations faites en commun et en GIE": { + "Op\u00e9rations courantes": { + "account_number": "4581" + }, + "Int\u00e9r\u00eats courus": { + "account_number": "4588" + }, + "account_number": "458" + } + }, + "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 (PASSIF)": {}, + "468-Divers - Charges \u00e0 payer et produits \u00e0 recevoir (PASSIF)": { + "Charges \u00e0 payer": { + "account_number": "4686" + } + } + }, + "47-Comptes transitoires ou d'attente (PASSIF)": { + "471-Comptes d'attente (PASSIF)": { + "account_type": "Temporary" + }, + "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" + }, + "account_number": "477" + }, + "478-Autres comptes transitoires (PASSIF)": { + "Diff\u00e9rences d'\u00e9valuation sur instruments de tr\u00e9sorerie (PASSIF)": { + "account_number": "4787" + } + } + }, + "48-Comptes de r\u00e9gularisation (PASSIF)": { + "Produits constat\u00e9s d'avance": { + "account_number": "487" + }, + "448-Comptes de r\u00e9partition p\u00e9riodique des charges et des produits (PASSIF)": { + "Produits": { + "account_number": "4887" + } + } + } + }, + "Comptes Financiers": { + "root_type": "Asset", + "Valeurs mobili\u00e8res de placement": { + "Parts dans des entreprises li\u00e9es": { + "account_number": "501" + }, + "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" + }, + "account_number": "502" + }, + "Actions": { + "Titres cot\u00e9s": { + "account_number": "5031" + }, + "Titres non cot\u00e9s": { + "account_number": "5035" + }, + "account_number": "503" + }, + "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" + }, + "Obligations": { + "Titres cot\u00e9s": { + "account_number": "5061" + }, + "Titres non cot\u00e9s": { + "account_number": "5065" + }, + "account_number": "506" + }, + "Bons du Tr\u00e9sor et bons de caisse \u00e0 court terme": { + "account_number": "507" + }, + "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\u00e9es": { + "account_number": "5088" + }, + "account_number": "508" + }, + "Versements restant \u00e0 effectuer sur valeurs mobili\u00e8res de placement non lib\u00e9r\u00e9es": { + "account_number": "509" + }, + "account_number": "50" + }, + "Banques, \u00e9tablissements financiers et assimil\u00e9s": { + "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" + }, + "account_number": "511" + }, + "Banques": { + "account_type": "Bank", + "Comptes en monnaie nationale": { + "account_type": "Bank", + "account_number": "5121" + }, + "Comptes en devises": { + "account_type": "Bank", + "account_number": "5124" + }, + "account_number": "512" + }, + "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" + }, + "Int\u00e9r\u00eats courus": { + "Int\u00e9r\u00eats courus \u00e0 payer": { + "account_number": "5181" + }, + "Int\u00e9r\u00eats courus \u00e0 recevoir": { + "account_number": "5188" + }, + "account_number": "518" + }, + "Concours bancaires courants": { + "Cr\u00e9dit de mobilisation des cr\u00e9ances commerciales (CMCC)": { + "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" + }, + "account_number": "519" + }, + "account_number": "51" + }, + "Instruments de tr\u00e9sorerie": { + "is_group": 1, + "account_number": "52" + }, + "Caisse": { + "account_type": "Cash", + "Caisse si\u00e8ge social": { + "account_type": "Cash", + "Caisse en monnaie nationale": { + "account_type": "Cash", + "account_number": "5311" + }, + "Caisse en devises": { + "account_type": "Cash", + "account_number": "5314" + }, + "account_number": "531" + }, + "Caisse succursale (ou usine) A": { + "account_type": "Cash", + "account_number": "532" + }, + "Caisse succursale (ou usine) B": { + "account_type": "Cash", + "account_number": "533" + }, + "account_number": "53" + }, + "R\u00e9gies d'avance et accr\u00e9ditifs": { + "is_group": 1, + "account_number": "54" + }, + "Virements internes": { + "is_group": 1, + "account_number": "58" + }, + "D\u00e9pr\u00e9ciations des comptes financiers": { + "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" + }, + "account_number": "590" + }, + "account_number": "59" + }, + "account_number": "5" + }, + "Comptes de Charges": { + "root_type": "Expense", + "Achats (sauf 603)": { + "Achats stock\u00e9s - Mati\u00e8res premi\u00e8res (et fournitures)": { + "account_type": "Cost of Goods Sold", + "Mati\u00e8res (ou groupe) A": { + "account_type": "Cost of Goods Sold", + "account_number": "6011" + }, + "Mati\u00e8res (ou groupe) B": { + "account_type": "Cost of Goods Sold", + "account_number": "6012" + }, + "Fournitures A, B, C...": { + "account_type": "Cost of Goods Sold", + "account_number": "6017" + }, + "account_number": "601" + }, + "Achats stock\u00e9s - Autres approvisionnements": { + "account_type": "Cost of Goods Sold", + "Mati\u00e8res consommables": { + "account_type": "Cost of Goods Sold", + "Mati\u00e8res (ou groupe) C": { + "account_type": "Cost of Goods Sold", + "account_number": "60211" + }, + "Mati\u00e8res (ou groupe) D": { + "account_type": "Cost of Goods Sold", + "account_number": "60212" + }, + "account_number": "6021" + }, + "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" + }, + "Fournitures de bureau": { + "account_type": "Cost of Goods Sold", + "account_number": "60225" + }, + "account_number": "6022" + }, + "Emballages": { + "account_type": "Cost of Goods Sold", + "Emballages perdus": { + "account_type": "Cost of Goods Sold", + "account_number": "60261" + }, + "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" + }, + "account_number": "6026" + }, + "account_number": "602" + }, + "Variations des stocks (approvisionnements et 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" + }, + "account_number": "603" + }, + "Achats d'\u00e9tudes et prestations de service": { + "account_type": "Cost of Goods Sold", + "account_number": "604" + }, + "Achats de mat\u00e9riel, \u00e9quipements et travaux": { + "account_type": "Cost of Goods Sold", + "account_number": "605" + }, + "Achats non stock\u00e9s de mati\u00e8res et founitures": { + "account_type": "Cost of Goods Sold", + "Fournitures non stockables (eau, \u00e9nergie...)": { + "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" + }, + "account_number": "606" + }, + "Achats de marchandises": { + "account_type": "Cost of Goods Sold", + "Marchandises (ou groupe) A": { + "account_type": "Cost of Goods Sold", + "account_number": "6071" + }, + "Marchandises (ou groupe) B": { + "account_type": "Cost of Goods Sold", + "account_number": "6072" + }, + "account_number": "607" + }, + "(Compte r\u00e9serv\u00e9, le cas \u00e9ch\u00e9ant, \u00e0 la recapitulation des Frais accessoires incorpor\u00e9s aux achats)": { + "account_type": "Expenses Included In Valuation", + "account_number": "608" + }, + "Rabais, remises et ristournes obtenus sur achats": { + "Rabais, remises et ristournes obtenus sur achats - de mati\u00e8res premi\u00e8res (et fournitures)": { + "account_number": "6091" + }, + "Rabais, remises et ristournes obtenus sur achats - d'autres approvisionnements stock\u00e9s": { + "account_number": "6092" + }, + "Rabais, remises et ristournes obtenus sur achats - d'\u00e9tudes et prestations de services": { + "account_number": "6094" + }, + "Rabais, remises et ristournes obtenus sur achats - de mat\u00e9riel, \u00e9quipements et travaux": { + "account_number": "6095" + }, + "Rabais, remises et ristournes obtenus sur achats - d'approvisionnements non stock\u00e9s": { + "account_number": "6096" + }, + "Rabais, remises et ristournes obtenus sur achats - de marchandises": { + "account_number": "6097" + }, + "Rabais, remises et ristournes non affect\u00e9s": { + "account_number": "6098" + }, + "account_number": "609" + }, + "account_number": "60" + }, + "Services ext\u00e9rieurs": { + "Sous-traitance g\u00e9n\u00e9rale": { + "account_number": "611" + }, + "Redevances de cr\u00e9dit-bail": { + "Cr\u00e9dit-bail mobilier": { + "account_number": "6122" + }, + "Cr\u00e9dit-bail immobilier": { + "account_number": "6125" + }, + "account_number": "612" + }, + "Locations": { + "Locations immobili\u00e8res": { + "account_number": "6132" + }, + "Locations mobili\u00e8res": { + "account_number": "6135" + }, + "Malis sur emballages": { + "account_number": "6136" + }, + "account_number": "613" + }, + "Charges locatives et de copropri\u00e9t\u00e9": { + "account_number": "614" + }, + "Entretiens et r\u00e9parations": { + "Entretiens et r\u00e9parations - sur biens immobiliers": { + "account_number": "6152" + }, + "Entretiens et r\u00e9parations - sur biens mobiliers": { + "account_number": "6155" + }, + "Maintenance": { + "account_number": "6156" + }, + "account_number": "615" + }, + "Primes d'assurance": { + "Multirisques": { + "account_number": "6161" + }, + "Assurance obligatoire dommage construction": { + "account_number": "6162" + }, + "Assurance-transport": { + "Assurance-transport - sur achats": { + "account_number": "61636" + }, + "Assurance-transport - sur ventes": { + "account_number": "61637" + }, + "Assurance-transport - sur autres biens": { + "account_number": "61638" + }, + "account_number": "6163" + }, + "Risques d'exploitation": { + "account_number": "6164" + }, + "Insolvabilit\u00e9 clients": { + "account_number": "6165" + }, + "account_number": "616" + }, + "Etudes et recherches": { + "account_number": "617" + }, + "Divers": { + "Documentation g\u00e9n\u00e9rale": { + "account_number": "6181" + }, + "Documentation technique": { + "account_number": "6183" + }, + "Frais de colloques, s\u00e9minaires, conf\u00e9rences": { + "account_number": "6185" + }, + "account_number": "618" + }, + "Rabais, remises et ristournes obtenus sur services ext\u00e9rieurs": { + "account_number": "619" + }, + "account_number": "61" + }, + "Autres services ext\u00e9rieurs": { + "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" + }, + "account_number": "621" + }, + "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" + }, + "account_number": "622" + }, + "Publicit\u00e9, publications, relations publiques": { + "Annonces et insertions": { + "account_number": "6231" + }, + "Echantillons": { + "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" + }, + "account_number": "623" + }, + "Transports de biens et transports collectifs du personnel": { + "Transports sur achats": { + "account_number": "6241" + }, + "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" + }, + "account_number": "624" + }, + "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" + }, + "account_number": "625" + }, + "Frais postaux et de t\u00e9l\u00e9communications": { + "account_number": "626" + }, + "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" + }, + "account_number": "627" + }, + "Divers": { + "Concours divers (cotisations...)": { + "account_number": "6281" + }, + "Frais de recrutement de personnel": { + "account_number": "6284" + }, + "account_number": "628" + }, + "Rabais, remises et ristournes obtenus sur autres services ext\u00e9rieurs": { + "account_number": "629" + }, + "account_number": "62" + }, + "Imp\u00f4ts, taxes et versements assimil\u00e9s": { + "Imp\u00f4ts, taxes et versements assimil\u00e9s sur r\u00e9mun\u00e9rations (administrations des imp\u00f4ts)": { + "Taxes 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" + }, + "account_number": "631" + }, + "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'\u00e9xon\u00e9ration de la taxe d'apprentissage": { + "account_number": "6335" + }, + "Autres": { + "account_number": "6338" + }, + "account_number": "633" + }, + "Autres imp\u00f4ts, taxes et versements assimil\u00e9s (administrations des imp\u00f4ts)": { + "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" + }, + "account_number": "6351" + }, + "Taxes sur le chiffre d'affaires non r\u00e9cup\u00e9rables": { + "account_number": "6352" + }, + "Imp\u00f4ts indirects": { + "account_number": "6353" + }, + "Droits d'enregistrement et de timbre": { + "Droits de mutation": { + "account_number": "63541" + }, + "account_number": "6354" + }, + "Autres droits": { + "account_number": "6358" + }, + "account_number": "635" + }, + "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" + }, + "account_number": "637" + }, + "account_number": "63" + }, + "Charges de personnel": { + "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" + }, + "account_number": "641" + }, + "R\u00e9mun\u00e9ration du travail de l'exploitant": { + "account_number": "644" + }, + "Charges 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 aux ASSEDIC": { + "account_number": "6454" + }, + "account_number": "645" + }, + "Cotisations sociales personnelles de l'exploitant": { + "account_number": "646" + }, + "Autres charges sociales": { + "is_group": 1, + "account_number": "647" + }, + "Autres charges de personnel": { + "account_number": "648" + }, + "account_number": "64" + }, + "Autres charges de gestion courante": { + "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": { + "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": { + "account_number": "6511" + }, + "Droits d'auteur et de reproduction": { + "account_number": "6516" + }, + "Autres droits et valeurs similaires": { + "account_number": "6518" + }, + "account_number": "651" + }, + "Jetons de pr\u00e9sence": { + "account_number": "653" + }, + "Pertes sur cr\u00e9ances irr\u00e9couvrables": { + "Cr\u00e9ances de l'exercice": { + "account_number": "6541" + }, + "Cr\u00e9ances des exercices ant\u00e9rieurs": { + "account_number": "6544" + }, + "account_number": "654" + }, + "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" + }, + "account_number": "655" + }, + "Pertes de change sur cr\u00e9ances et dettes commerciales": { + "account_number": "656" + }, + "Charges diverses de gestion courante": { + "account_number": "658" + }, + "account_number": "65" + }, + "Charges financi\u00e8res": { + "Charges d'int\u00e9r\u00eats": { + "Int\u00e9r\u00eats des emprunts et dettes": { + "Int\u00e9r\u00eats des emprunts et dettes - des emprunts et dettes assimil\u00e9es": { + "account_number": "66116" + }, + "Int\u00e9r\u00eats des emprunts et dettes - des dettes rattach\u00e9es \u00e0 des participations": { + "account_number": "66117" + }, + "account_number": "6611" + }, + "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...)": { + "account_number": "6616" + }, + "Int\u00e9r\u00eats des obligations cautionn\u00e9es": { + "account_number": "6617" + }, + "Int\u00e9r\u00eats des autres dettes": { + "Int\u00e9r\u00eats des autres dettes - des dettes commerciales": { + "account_number": "66181" + }, + "Int\u00e9r\u00eats des autres dettes - des dettes diverses": { + "account_number": "66188" + }, + "account_number": "6618" + }, + "account_number": "661" + }, + "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" + }, + "Charges nettes sur cessions de valeurs mobili\u00e8res de placement": { + "account_number": "667" + }, + "Autres charges financi\u00e8res": { + "account_number": "668" + }, + "account_number": "66" + }, + "Charges exceptionnelles": { + "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" + }, + "account_number": "671" + }, + "(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les charges sur exercices ant\u00e9rieurs)": { + "account_number": "672" + }, + "Op\u00e9rations de constitution ou liquidation des fiducies": { + "Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": { + "account_number": "6741" + }, + "Op\u00e9rations li\u00e9es \u00e0 la liquidation de la fiducie": { + "account_number": "6742" + }, + "account_number": "674" + }, + "Valeurs comptables des \u00e9l\u00e9ments d'actif c\u00e9d\u00e9s": { + "Immobilisations incorporelles": { + "account_number": "6751" + }, + "Immobilisations corporelles": { + "account_number": "6752" + }, + "Immobilisations financi\u00e8res": { + "account_number": "6756" + }, + "Autres \u00e9l\u00e9ments d'actif": { + "account_number": "6758" + }, + "account_number": "675" + }, + "Autres charges exceptionnelles": { + "Mali 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 elles-m\u00eame": { + "account_number": "6783" + }, + "Charges exceptionnelles diverses": { + "account_number": "6788" + }, + "account_number": "678" + }, + "account_number": "67" + }, + "Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions": { + "account_type": "Depreciation", + "Dotations aux amortissements, d\u00e9pr\u00e9ciations et provisions - Charges d'exploitation": { + "account_type": "Depreciation", + "Dotations aux amortissements sur immobilisations incorporelles et corporelles": { + "account_type": "Depreciation", + "Immobilisations incorporelles": { + "account_type": "Depreciation", + "account_number": "68111" + }, + "Immobilisations corporelles": { + "account_type": "Depreciation", + "account_number": "68112" + }, + "account_number": "6811" + }, + "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" + }, + "Dotations aux 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" + }, + "account_number": "6816" + }, + "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" + }, + "account_number": "6817" + }, + "account_number": "681" + }, + "Dotations aux amortissements, d\u00e9pr\u00e9ciations et 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" + }, + "Dotations aux 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" + }, + "account_number": "6866" + }, + "Autres dotations": { + "account_type": "Depreciation", + "account_number": "6868" + }, + "account_number": "686" + }, + "Dotations aux amortissements, d\u00e9pr\u00e9ciations et 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" + }, + "account_number": "6872" + }, + "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 aux d\u00e9pr\u00e9ciations exceptionnelles": { + "account_type": "Depreciation", + "account_number": "6876" + }, + "account_number": "687" + }, + "account_number": "68" + }, + "Participation des salari\u00e9s, imp\u00f4ts sur les b\u00e9n\u00e9fices et assimil\u00e9s": { + "Participation des salari\u00e9s aux r\u00e9sultats": { + "account_number": "691" + }, + "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" + }, + "account_number": "695" + }, + "Suppl\u00e9ments d'imp\u00f4ts sur les soci\u00e9t\u00e9s, li\u00e9s aux distributions": { + "account_number": "696" + }, + "Int\u00e9gration fiscale": { + "Int\u00e9gration fiscale - Charges": { + "account_number": "6981" + }, + "Int\u00e9gration fiscale - Produits": { + "account_number": "6989" + }, + "account_number": "698" + }, + "Produits - Report en arri\u00e8re des d\u00e9ficits": { + "account_number": "699" + }, + "account_number": "69" + }, + "account_number": "6" + }, + "Comptes de Produits": { + "root_type": "Income", + "Ventes de produits fabriqu\u00e9s, prestations de services, marchandises": { + "Ventes de produits finis": { + "Produits finis (ou groupe) A": { + "account_number": "7011" + }, + "Produits (ou groupe) B": { + "account_number": "7012" + }, + "account_number": "701" + }, + "Ventes de produits interm\u00e9diaires": { + "account_number": "702" + }, + "Ventes de produits r\u00e9siduels": { + "account_number": "703" + }, + "Travaux": { + "Travaux de cat\u00e9gorie (ou activit\u00e9) A": { + "account_number": "7041" + }, + "Travaux de cat\u00e9gorie (ou activit\u00e9) B": { + "account_number": "7042" + }, + "account_number": "704" + }, + "Etudes": { + "account_number": "705" + }, + "Prestations de services": { + "account_number": "706" + }, + "Ventes de marchandises": { + "Marchandises (ou groupe) A": { + "account_number": "7071" + }, + "Marchandises (ou groupe) B": { + "account_number": "7072" + }, + "account_number": "707" + }, + "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" + }, + "account_number": "708" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise": { + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits finis": { + "account_number": "7091" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de produits interm\u00e9diaires": { + "account_number": "7092" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur travaux": { + "account_number": "7094" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur \u00e9tudes": { + "account_number": "7095" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur prestations de services": { + "account_number": "7096" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur ventes de marchandises": { + "account_number": "7097" + }, + "Rabais, remises et ristournes accord\u00e9s par l'entreprise - sur produits des activit\u00e9s annexes": { + "account_number": "7098" + }, + "account_number": "709" + }, + "account_number": "70" + }, + "Production stock\u00e9e (ou d\u00e9stockage)": { + "Variation des stocks (en-cours de production, produits)": { + "Variation des en-cours de production de biens": { + "Produits en cours": { + "account_number": "71331" + }, + "Travaux en cours": { + "account_number": "71335" + }, + "account_number": "7133" + }, + "Variation des en-cours de production de services": { + "Etudes en cours": { + "account_number": "71341" + }, + "Prestations de services en cours": { + "account_number": "71345" + }, + "account_number": "7134" + }, + "Variation des stocks de produits": { + "Produits interm\u00e9diaires": { + "account_number": "71351" + }, + "Produits finis": { + "account_number": "71355" + }, + "Produits r\u00e9siduels": { + "account_number": "71358" + }, + "account_number": "7135" + }, + "account_number": "713" + }, + "account_number": "71" + }, + "Production immobilis\u00e9e": { + "Immobilisations incorporelles": { + "account_number": "721" + }, + "Immobilisations corporelles": { + "account_number": "722" + }, + "account_number": "72" + }, + "Subventions d'exploitation": { + "is_group": 1, + "account_number": "74" + }, + "Autres produits de gestion courante": { + "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels, droits et valeurs similaires": { + "Redevances pour concessions, brevets, licences, marques, proc\u00e9d\u00e9s, logiciels": { + "account_number": "7511" + }, + "Droits d'auteur et de reproduction": { + "account_number": "7516" + }, + "Autres droits et valeurs similaires": { + "account_number": "7518" + }, + "account_number": "751" + }, + "Revenus des immeubles non affect\u00e9s aux activit\u00e9s professionnelles": { + "account_number": "752" + }, + "Jetons de pr\u00e9sence et r\u00e9mun\u00e9rations d'administrateurs, g\u00e9rants...": { + "account_number": "753" + }, + "Ristournes per\u00e7ues des coop\u00e9ratives (provenant des exc\u00e9dents)": { + "account_number": "754" + }, + "Quotes-parts de r\u00e9sultats 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\u00e9 (comptabilit\u00e9 des associ\u00e9s non g\u00e9rants)": { + "account_number": "7555" + }, + "account_number": "755" + }, + "Gains de change sur cr\u00e9ances et dettes commerciales": { + "account_number": "756" + }, + "Produits divers de gestion courante": { + "account_number": "758" + }, + "account_number": "75" + }, + "Produits financiers": { + "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" + }, + "account_number": "761" + }, + "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" + }, + "account_number": "762" + }, + "Revenus des autres cr\u00e9ances": { + "Revenus des cr\u00e9ances commerciales": { + "account_number": "7631" + }, + "Revenus des cr\u00e9ances diverses": { + "account_number": "7638" + }, + "account_number": "763" + }, + "Revenus des valeurs mobili\u00e8res de placement": { + "account_number": "764" + }, + "Escomptes obtenus": { + "account_number": "765" + }, + "Gains de change financi\u00e8res": { + "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" + }, + "account_number": "76" + }, + "Produits exceptionnels": { + "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" + }, + "account_number": "771" + }, + "(Compte \u00e0 la disposition des entit\u00e9s pour enregistrer, en cours d'exercice, les Produits sur exercices ant\u00e9rieurs)": { + "account_number": "772" + }, + "Op\u00e9rations de constitution ou liquidation des fiducies": { + "Op\u00e9rations li\u00e9es \u00e0 la constitution de la fiducie - transfert des \u00e9l\u00e9ments": { + "account_number": "7741" + }, + "Op\u00e9rations li\u00e9es \u00e0 la liquidation de la fiducie": { + "account_number": "7742" + }, + "account_number": "774" + }, + "Produits des cessions d'\u00e9l\u00e9ments d'actif": { + "Immobilisations incorporelles": { + "account_number": "7751" + }, + "Immobilisations corporelles": { + "account_number": "7752" + }, + "Immobilisations financi\u00e8res": { + "account_number": "7756" + }, + "Autres \u00e9l\u00e9ments d'actif": { + "account_number": "7758" + }, + "account_number": "775" + }, + "Quote-part des subventions d'investissement vir\u00e9e au r\u00e9sultat de l'exercice": { + "account_number": "777" + }, + "Autres produits exceptionnels": { + "Bonis provenant de clauses d'indexation": { + "account_number": "7781" + }, + "Lots": { + "account_number": "7782" + }, + "Bonis provenant du rachat par l'entreprise d'actions et d'obligations \u00e9mises par elle-m\u00eame": { + "account_number": "7783" + }, + "Produits exceptionnels divers": { + "account_number": "7788" + }, + "account_number": "778" + }, + "account_number": "77" + }, + "Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions": { + "Reprises sur amortissements, d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits d'exploitation)": { + "Reprises sur amortissements des immobilisations incorporelles et corporelles": { + "Immobilisations incorporelles": { + "account_number": "78111" + }, + "Immobilisations corporelles": { + "account_number": "78112" + }, + "account_number": "7811" + }, + "Reprises sur provisions d'exploitation": { + "account_number": "7815" + }, + "Reprises sur d\u00e9pr\u00e9ciations des immobilisations corporelles et incorporelles": { + "Immobilisations incorporelles": { + "account_number": "78161" + }, + "Immobilisations corporelles": { + "account_number": "78162" + }, + "account_number": "7816" + }, + "Reprises sur d\u00e9pr\u00e9ciations des actifs circulants": { + "Stocks et en-cours": { + "account_number": "78173" + }, + "Cr\u00e9ances": { + "account_number": "78174" + }, + "account_number": "7817" + }, + "account_number": "781" + }, + "Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits financiers)": { + "Reprises sur provisions financi\u00e8res": { + "account_number": "7865" + }, + "Reprises sur d\u00e9pr\u00e9ciations des \u00e9l\u00e9ments financiers": { + "Immobilisations financi\u00e8res": { + "account_number": "78662" + }, + "Valeurs mobili\u00e8res de placement": { + "account_number": "78665" + }, + "account_number": "7866" + }, + "account_number": "786" + }, + "Reprises sur d\u00e9pr\u00e9ciations et provisions (\u00e0 inscrire dans les produits exceptionnels)": { + "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" + }, + "account_number": "7872" + }, + "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" + }, + "account_number": "787" + }, + "account_number": "78" + }, + "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" + }, + "account_number": "79" + }, + "account_number": "7" + } + } +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js index f7d471b725e..78e7ff6ea29 100644 --- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js +++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js @@ -15,7 +15,7 @@ frappe.ui.form.on("Bank Reconciliation Tool", { }, refresh: function (frm) { - frappe.require("assets/js/bank-reconciliation-tool.min.js", () => + frappe.require("bank-reconciliation-tool.bundle.js", () => frm.trigger("make_reconciliation_tool") ); frm.upload_statement_button = frm.page.set_secondary_action( diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js index 016f29a7b51..0a2e0bc9ba3 100644 --- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js +++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js @@ -320,7 +320,7 @@ frappe.ui.form.on("Bank Statement Import", { return; } - frappe.require("/assets/js/data_import_tools.min.js", () => { + frappe.require("data_import_tools.bundle.js", () => { frm.import_preview = new frappe.data_import.ImportPreview({ wrapper: frm.get_field("import_preview").$wrapper, doctype: frm.doc.reference_doctype, diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index d76641dc9bd..957a50f0132 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -194,19 +194,19 @@ var update_jv_details = function(doc, r) { refresh_field("accounts"); } -erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ - onload: function() { +erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Controller { + onload() { this.load_defaults(); this.setup_queries(); this.setup_balance_formatter(); erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); - }, + } - onload_post_render: function() { + onload_post_render() { cur_frm.get_field("accounts").grid.set_multiple_add("account"); - }, + } - load_defaults: function() { + load_defaults() { //this.frm.show_print_first = true; if(this.frm.doc.__islocal && this.frm.doc.company) { frappe.model.set_default_values(this.frm.doc); @@ -216,9 +216,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ var posting_date = this.frm.doc.posting_date; if(!this.frm.doc.amended_from) this.frm.set_value('posting_date', posting_date || frappe.datetime.get_today()); } - }, + } - setup_queries: function() { + setup_queries() { var me = this; me.frm.set_query("account", "accounts", function(doc, cdt, cdn) { @@ -324,9 +324,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ }); - }, + } - setup_balance_formatter: function() { + setup_balance_formatter() { const formatter = function(value, df, options, doc) { var currency = frappe.meta.get_field_currency(df, doc); var dr_or_cr = value ? ('') : ""; @@ -337,9 +337,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ }; this.frm.fields_dict.accounts.grid.update_docfield_property('balance', 'formatter', formatter); this.frm.fields_dict.accounts.grid.update_docfield_property('party_balance', 'formatter', formatter); - }, + } - reference_name: function(doc, cdt, cdn) { + reference_name(doc, cdt, cdn) { var d = frappe.get_doc(cdt, cdn); if(d.reference_name) { @@ -351,9 +351,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ this.get_outstanding('Journal Entry', d.reference_name, doc.company, d); } } - }, + } - get_outstanding: function(doctype, docname, company, child, due_date) { + get_outstanding(doctype, docname, company, child, due_date) { var me = this; var args = { "doctype": doctype, @@ -375,9 +375,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ } } }); - }, + } - accounts_add: function(doc, cdt, cdn) { + accounts_add(doc, cdt, cdn) { var row = frappe.get_doc(cdt, cdn); $.each(doc.accounts, function(i, d) { if(d.account && d.party && d.party_type) { @@ -400,9 +400,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({ cur_frm.cscript.update_totals(doc); erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'accounts'); - }, + } -}); +}; cur_frm.script_manager.make(erpnext.accounts.JournalEntry); diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js index b2e86267c8f..a8c07d6bb9b 100644 --- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js +++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js @@ -49,7 +49,15 @@ frappe.ui.form.on('Opening Invoice Creation Tool', { doc: frm.doc, btn: $(btn_primary), method: "make_invoices", - freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type]) + freeze: 1, + freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type]), + callback: function(r) { + if (r.message.length == 1) { + frappe.msgprint(__("{0} Invoice created successfully.", [frm.doc.invoice_type])); + } else if (r.message.length < 50) { + frappe.msgprint(__("{0} Invoices created successfully.", [frm.doc.invoice_type])); + } + } }); }); diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py index 29dc96e8c6f..d76d9099628 100644 --- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py +++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py @@ -216,7 +216,8 @@ def start_import(invoices): return names def publish(index, total, doctype): - if total < 5: return + if total < 50: + return frappe.publish_realtime( "opening_invoice_creation_progress", dict( @@ -241,4 +242,3 @@ def get_temporary_opening_account(company=None): return accounts[0].name - diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index d3ac3a66760..439b1edbce6 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -7,6 +7,8 @@ cur_frm.cscript.tax_table = "Advance Taxes and Charges"; frappe.ui.form.on('Payment Entry', { onload: function(frm) { + frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice']; + if(frm.doc.__islocal) { if (!frm.doc.paid_from) frm.set_value("paid_from_account_currency", null); if (!frm.doc.paid_to) frm.set_value("paid_to_account_currency", null); diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js index d1523cd7aca..c71a62dfb3c 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js @@ -34,8 +34,8 @@ frappe.ui.form.on("Payment Reconciliation Payment", { } }); -erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.extend({ - onload: function() { +erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends frappe.ui.form.Controller { + onload() { var me = this; this.frm.set_query("party", function() { @@ -84,18 +84,18 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext frappe.throw({message: __("Please Select Both Company and Party Type First"), title: title}); } }; - }, + } - refresh: function() { + refresh() { this.frm.disable_save(); this.toggle_primary_action(); - }, + } - onload_post_render: function() { + onload_post_render() { this.toggle_primary_action(); - }, + } - party: function() { + party() { var me = this if (!me.frm.doc.receivable_payable_account && me.frm.doc.party_type && me.frm.doc.party) { return frappe.call({ @@ -112,9 +112,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext } }); } - }, + } - get_unreconciled_entries: function() { + get_unreconciled_entries() { var me = this; return this.frm.call({ doc: me.frm.doc, @@ -125,9 +125,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext } }); - }, + } - reconcile: function() { + reconcile() { var me = this; var show_dialog = me.frm.doc.payments.filter(d => d.difference_amount && !d.difference_account); @@ -209,9 +209,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext } else { this.reconcile_payment_entries(); } - }, + } - reconcile_payment_entries: function() { + reconcile_payment_entries() { var me = this; return this.frm.call({ @@ -222,9 +222,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext me.toggle_primary_action(); } }); - }, + } - set_invoice_options: function() { + set_invoice_options() { var me = this; var invoices = []; @@ -244,9 +244,9 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext } refresh_field("payments"); - }, + } - toggle_primary_action: function() { + toggle_primary_action() { if ((this.frm.doc.payments || []).length) { this.frm.fields_dict.reconcile.$input && this.frm.fields_dict.reconcile.$input.addClass("btn-primary"); @@ -260,6 +260,6 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext } } -}); +}; -$.extend(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm})); +extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm})); diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py index b0a5b04de64..9cfb47876c8 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -142,7 +142,7 @@ class PeriodClosingVoucher(AccountsController): sum(t1.debit_in_account_currency) - sum(t1.credit_in_account_currency) as bal_in_account_currency, sum(t1.debit) - sum(t1.credit) as bal_in_company_currency from `tabGL Entry` t1, `tabAccount` t2 - where t1.account = t2.name and t2.report_type = 'Profit and Loss' + where t1.is_cancelled = 0 and t1.account = t2.name and t2.report_type = 'Profit and Loss' and t2.docstatus < 2 and t2.company = %s and t1.posting_date between %s and %s group by t1.account, {dimension_fields} diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js index 493bd448024..181e9f8ec09 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js @@ -4,18 +4,18 @@ {% include 'erpnext/selling/sales_common.js' %}; frappe.provide("erpnext.accounts"); -erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend({ +erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnext.selling.SellingController { setup(doc) { this.setup_posting_date_time_check(); - this._super(doc); - }, + super.setup(doc); + } - company: function() { + company() { erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype); - }, + } onload(doc) { - this._super(); + super.onload(); this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log']; if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') { this.frm.script_manager.trigger("is_pos"); @@ -23,10 +23,10 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( } erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); - }, + } refresh(doc) { - this._super(); + super.refresh(); if (doc.docstatus == 1 && !doc.is_return) { this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create')); this.frm.page.set_inner_btn_group_as_primary(__('Create')); @@ -36,13 +36,13 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( this.frm.return_print_format = "Sales Invoice Return"; this.frm.set_value('consolidated_invoice', ''); } - }, + } - is_pos: function() { + is_pos() { this.set_pos_data(); - }, + } - set_pos_data: async function() { + async set_pos_data() { if(this.frm.doc.is_pos) { this.frm.set_value("allocate_advances_automatically", 0); if(!this.frm.doc.company) { @@ -69,7 +69,7 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( } } } - }, + } customer() { if (!this.frm.doc.customer) return @@ -86,13 +86,13 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( }, () => { this.apply_pricing_rule(); }); - }, + } - amount: function(){ + amount(){ this.write_off_outstanding_amount_automatically() - }, + } - change_amount: function(){ + change_amount(){ if(this.frm.doc.paid_amount > this.frm.doc.grand_total){ this.calculate_write_off_amount(); }else { @@ -101,16 +101,16 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( } this.frm.refresh_fields(); - }, + } - loyalty_amount: function(){ + loyalty_amount(){ this.calculate_outstanding_amount(); this.frm.refresh_field("outstanding_amount"); this.frm.refresh_field("paid_amount"); this.frm.refresh_field("base_paid_amount"); - }, + } - write_off_outstanding_amount_automatically: function() { + write_off_outstanding_amount_automatically() { if(cint(this.frm.doc.write_off_outstanding_amount_automatically)) { frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]); // this will make outstanding amount 0 @@ -125,17 +125,17 @@ erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend( this.calculate_outstanding_amount(false); this.frm.refresh_fields(); - }, + } - make_sales_return: function() { + make_sales_return() { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return", frm: cur_frm }) - }, -}) + } +} -$.extend(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm })) +extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm })) frappe.ui.form.on('POS Invoice', { redeem_loyalty_points: function(frm) { @@ -235,4 +235,4 @@ frappe.ui.form.on('POS Invoice', { }); }); } -}); \ No newline at end of file +}); diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html index 7328f168e3d..f8d191cc3f8 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html @@ -106,4 +106,4 @@ {{ terms_and_conditions }} {% endif %} - \ No newline at end of file + diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json index 27a5f50ce2a..295a3b86a9e 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json @@ -286,7 +286,7 @@ } ], "links": [], - "modified": "2021-05-21 10:14:22.426672", + "modified": "2021-05-21 11:14:22.426672", "modified_by": "Administrator", "module": "Accounts", "name": "Process Statement Of Accounts", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index dc9094c3e91..7562418fd2f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -4,10 +4,10 @@ frappe.provide("erpnext.accounts"); {% include 'erpnext/public/js/controllers/buying.js' %}; -erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ - setup: function(doc) { +erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.BuyingController { + setup(doc) { this.setup_posting_date_time_check(); - this._super(doc); + super.setup(doc); // formatter for purchase invoice item if(this.frm.doc.update_stock) { @@ -25,10 +25,10 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } }; }); - }, + } - onload: function() { - this._super(); + onload() { + super.onload(); if(!this.frm.doc.__islocal) { // show credit_to in print format @@ -44,11 +44,11 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); - }, + } - refresh: function(doc) { + refresh(doc) { const me = this; - this._super(); + super.refresh(); hide_fields(this.frm.doc); // Show / Hide button @@ -157,26 +157,26 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } this.frm.set_df_property("tax_withholding_category", "hidden", doc.apply_tds ? 0 : 1); - }, + } - unblock_invoice: function() { + unblock_invoice() { const me = this; frappe.call({ 'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice', 'args': {'name': me.frm.doc.name}, 'callback': (r) => me.frm.reload_doc() }); - }, + } - block_invoice: function() { + block_invoice() { this.make_comment_dialog_and_block_invoice(); - }, + } - change_release_date: function() { + change_release_date() { this.make_dialog_and_set_release_date(); - }, + } - can_change_release_date: function(date) { + can_change_release_date(date) { const diff = frappe.datetime.get_diff(date, frappe.datetime.nowdate()); if (diff < 0) { frappe.throw(__('New release date should be in the future')); @@ -184,9 +184,9 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } else { return true; } - }, + } - make_comment_dialog_and_block_invoice: function(){ + make_comment_dialog_and_block_invoice(){ const me = this; const title = __('Block Invoice'); @@ -228,9 +228,9 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ }); this.dialog.show(); - }, + } - make_dialog_and_set_release_date: function() { + make_dialog_and_set_release_date() { const me = this; const title = __('Set New Release Date'); @@ -259,17 +259,17 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ }); this.dialog.show(); - }, + } - set_release_date: function(data) { + set_release_date(data) { return frappe.call({ 'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date', 'args': data, 'callback': (r) => this.frm.reload_doc() }); - }, + } - supplier: function() { + supplier() { var me = this; // Do not update if inter company reference is there as the details will already be updated @@ -291,9 +291,9 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ me.frm.set_df_property("apply_tds", "read_only", me.frm.supplier_tds ? 0 : 1); me.frm.set_df_property("tax_withholding_category", "hidden", me.frm.supplier_tds ? 0 : 1); }) - }, + } - apply_tds: function(frm) { + apply_tds(frm) { var me = this; if (!me.frm.doc.apply_tds) { @@ -303,9 +303,9 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ me.frm.set_value("tax_withholding_category", me.frm.supplier_tds); me.frm.set_df_property("tax_withholding_category", "hidden", 0); } - }, + } - credit_to: function() { + credit_to() { var me = this; if(this.frm.doc.credit_to) { me.frm.call({ @@ -323,16 +323,16 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } }); } - }, + } - make_inter_company_invoice: function(frm) { + make_inter_company_invoice(frm) { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_inter_company_sales_invoice", frm: frm }); - }, + } - is_paid: function() { + is_paid() { hide_fields(this.frm.doc); if(cint(this.frm.doc.is_paid)) { this.frm.set_value("allocate_advances_automatically", 0); @@ -343,44 +343,44 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } this.calculate_outstanding_amount(); this.frm.refresh_fields(); - }, + } - write_off_amount: function() { + write_off_amount() { this.set_in_company_currency(this.frm.doc, ["write_off_amount"]); this.calculate_outstanding_amount(); this.frm.refresh_fields(); - }, + } - paid_amount: function() { + paid_amount() { this.set_in_company_currency(this.frm.doc, ["paid_amount"]); this.write_off_amount(); this.frm.refresh_fields(); - }, + } - allocated_amount: function() { + allocated_amount() { this.calculate_total_advance(); this.frm.refresh_fields(); - }, + } - items_add: function(doc, cdt, cdn) { + items_add(doc, cdt, cdn) { var row = frappe.get_doc(cdt, cdn); this.frm.script_manager.copy_from_first_row("items", row, ["expense_account", "cost_center", "project"]); - }, + } - on_submit: function() { + on_submit() { $.each(this.frm.doc["items"] || [], function(i, row) { if(row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt) }) - }, + } - make_debit_note: function() { + make_debit_note() { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_debit_note", frm: cur_frm }) - }, -}); + } +}; cur_frm.script_manager.make(erpnext.accounts.PurchaseInvoice); diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 45d89ad1c87..c1cc092554d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -517,6 +517,8 @@ class PurchaseInvoice(BuyingController): if d.category in ('Valuation', 'Total and Valuation') and flt(d.base_tax_amount_after_discount_amount)] + exchange_rate_map, net_rate_map = get_purchase_document_details(self) + for item in self.get("items"): if flt(item.base_net_amount): account_currency = get_account_currency(item.expense_account) @@ -634,6 +636,34 @@ class PurchaseInvoice(BuyingController): "project": item.project or self.project }, account_currency, item=item)) + # check if the exchange rate has changed + if item.get('purchase_receipt'): + if exchange_rate_map[item.purchase_receipt] and \ + self.conversion_rate != exchange_rate_map[item.purchase_receipt] and \ + item.net_rate == net_rate_map[item.pr_detail]: + + discrepancy_caused_by_exchange_rate_difference = (item.qty * item.net_rate) * \ + (exchange_rate_map[item.purchase_receipt] - self.conversion_rate) + + gl_entries.append( + self.get_gl_dict({ + "account": expense_account, + "against": self.supplier, + "debit": discrepancy_caused_by_exchange_rate_difference, + "cost_center": item.cost_center, + "project": item.project or self.project + }, account_currency, item=item) + ) + gl_entries.append( + self.get_gl_dict({ + "account": self.get_company_default("exchange_gain_loss_account"), + "against": self.supplier, + "credit": discrepancy_caused_by_exchange_rate_difference, + "cost_center": item.cost_center, + "project": item.project or self.project + }, account_currency, item=item) + ) + # If asset is bought through this document and not linked to PR if self.update_stock and item.landed_cost_voucher_amount: expenses_included_in_asset_valuation = self.get_company_default("expenses_included_in_asset_valuation") @@ -1141,6 +1171,36 @@ class PurchaseInvoice(BuyingController): if update: self.db_set('status', self.status, update_modified = update_modified) +# to get details of purchase invoice/receipt from which this doc was created for exchange rate difference handling +def get_purchase_document_details(doc): + if doc.doctype == 'Purchase Invoice': + doc_reference = 'purchase_receipt' + items_reference = 'pr_detail' + parent_doctype = 'Purchase Receipt' + child_doctype = 'Purchase Receipt Item' + else: + doc_reference = 'purchase_invoice' + items_reference = 'purchase_invoice_item' + parent_doctype = 'Purchase Invoice' + child_doctype = 'Purchase Invoice Item' + + purchase_receipts_or_invoices = [] + items = [] + + for item in doc.get('items'): + if item.get(doc_reference): + purchase_receipts_or_invoices.append(item.get(doc_reference)) + if item.get(items_reference): + items.append(item.get(items_reference)) + + exchange_rate_map = frappe._dict(frappe.get_all(parent_doctype, filters={'name': ('in', + purchase_receipts_or_invoices)}, fields=['name', 'conversion_rate'], as_list=1)) + + net_rate_map = frappe._dict(frappe.get_all(child_doctype, filters={'name': ('in', + items)}, fields=['name', 'net_rate'], as_list=1)) + + return exchange_rate_map, net_rate_map + def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context list_context = get_list_context(context) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 2f5d36c8fab..ec93314c0f6 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -230,6 +230,27 @@ class TestPurchaseInvoice(unittest.TestCase): self.assertEqual(expected_values[gle.account][1], gle.debit) self.assertEqual(expected_values[gle.account][2], gle.credit) + def test_purchase_invoice_with_exchange_rate_difference(self): + pr = make_purchase_receipt(currency = "USD", conversion_rate = 70) + pi = make_purchase_invoice(currency = "USD", conversion_rate = 80, do_not_save = "True") + + pi.items[0].purchase_receipt = pr.name + pi.items[0].pr_detail = pr.items[0].name + + pi.insert() + pi.submit() + + # fetching the latest GL Entry with 'Exchange Gain/Loss - _TC' account + gl_entries = frappe.get_all('GL Entry', filters = {'account': 'Exchange Gain/Loss - _TC'}) + voucher_no = frappe.get_value('GL Entry', gl_entries[0]['name'], 'voucher_no') + + self.assertEqual(pi.name, voucher_no) + + exchange_gain_loss_amount = frappe.get_value('GL Entry', gl_entries[0]['name'], 'debit') + discrepancy_caused_by_exchange_rate_diff = abs(pi.items[0].base_net_amount - pr.items[0].base_net_amount) + + self.assertEqual(exchange_gain_loss_amount, discrepancy_caused_by_exchange_rate_diff) + def test_purchase_invoice_change_naming_series(self): pi = frappe.copy_doc(test_records[1]) pi.insert() diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 8a55ff87e39..b39022dd758 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -854,7 +854,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2021-06-16 19:57:03.101571", + "modified": "2021-06-16 19:43:51.099386", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index f813425e6b5..bb556516702 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -5,17 +5,17 @@ frappe.provide("erpnext.accounts"); -erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.extend({ - setup: function(doc) { +erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends erpnext.selling.SellingController { + setup(doc) { this.setup_posting_date_time_check(); - this._super(doc); - }, - company: function() { + super.setup(doc); + } + company() { erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype); - }, - onload: function() { + } + onload() { var me = this; - this._super(); + super.onload(); this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice', 'Timesheet', 'POS Invoice Merge Log', 'POS Closing Entry']; if(!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) { @@ -35,11 +35,11 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } erpnext.queries.setup_warehouse_query(this.frm); erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); - }, + } - refresh: function(doc, dt, dn) { + refresh(doc, dt, dn) { const me = this; - this._super(); + super.refresh(); if(cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) { // hide new msgbox cur_frm.msgbox.hide(); @@ -138,16 +138,16 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte }, __('Create')); } } - }, + } - make_maintenance_schedule: function() { + make_maintenance_schedule() { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_maintenance_schedule", frm: cur_frm }) - }, + } - on_submit: function(doc, dt, dn) { + on_submit(doc, dt, dn) { var me = this; if (frappe.get_route()[0] != 'Form') { @@ -157,9 +157,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte $.each(doc["items"], function(i, row) { if(row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note) }) - }, + } - set_default_print_format: function() { + set_default_print_format() { // set default print format to POS type or Credit Note if(cur_frm.doc.is_pos) { if(cur_frm.pos_print_format) { @@ -180,9 +180,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte cur_frm.meta._default_print_format = null; } } - }, + } - sales_order_btn: function() { + sales_order_btn() { var me = this; this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'), function() { @@ -201,9 +201,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }) }, __("Get Items From")); - }, + } - quotation_btn: function() { + quotation_btn() { var me = this; this.$quotation_btn = this.frm.add_custom_button(__('Quotation'), function() { @@ -225,9 +225,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }) }, __("Get Items From")); - }, + } - delivery_note_btn: function() { + delivery_note_btn() { var me = this; this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'), function() { @@ -253,12 +253,12 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }); }, __("Get Items From")); - }, + } - tc_name: function() { + tc_name() { this.get_terms(); - }, - customer: function() { + } + customer() { if (this.frm.doc.is_pos){ var pos_profile = this.frm.doc.pos_profile; } @@ -289,16 +289,16 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }); } - }, + } - make_inter_company_invoice: function() { + make_inter_company_invoice() { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_inter_company_purchase_invoice", frm: me.frm }); - }, + } - debit_to: function() { + debit_to() { var me = this; if(this.frm.doc.debit_to) { me.frm.call({ @@ -316,14 +316,14 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }); } - }, + } - allocated_amount: function() { + allocated_amount() { this.calculate_total_advance(); this.frm.refresh_fields(); - }, + } - write_off_outstanding_amount_automatically: function() { + write_off_outstanding_amount_automatically() { if(cint(this.frm.doc.write_off_outstanding_amount_automatically)) { frappe.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]); // this will make outstanding amount 0 @@ -338,39 +338,39 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte this.calculate_outstanding_amount(false); this.frm.refresh_fields(); - }, + } - write_off_amount: function() { + write_off_amount() { this.set_in_company_currency(this.frm.doc, ["write_off_amount"]); this.write_off_outstanding_amount_automatically(); - }, + } - items_add: function(doc, cdt, cdn) { + items_add(doc, cdt, cdn) { var row = frappe.get_doc(cdt, cdn); this.frm.script_manager.copy_from_first_row("items", row, ["income_account", "cost_center"]); - }, + } - set_dynamic_labels: function() { - this._super(); + set_dynamic_labels() { + super.set_dynamic_labels(); this.frm.events.hide_fields(this.frm) - }, + } - items_on_form_rendered: function() { + items_on_form_rendered() { erpnext.setup_serial_or_batch_no(); - }, + } - packed_items_on_form_rendered: function(doc, grid_row) { + packed_items_on_form_rendered(doc, grid_row) { erpnext.setup_serial_or_batch_no(); - }, + } - make_sales_return: function() { + make_sales_return() { frappe.model.open_mapped_doc({ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_sales_return", frm: cur_frm }) - }, + } - asset: function(frm, cdt, cdn) { + asset(frm, cdt, cdn) { var row = locals[cdt][cdn]; if(row.asset) { frappe.call({ @@ -384,18 +384,18 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } }) } - }, + } - is_pos: function(frm){ + is_pos(frm){ this.set_pos_data(); - }, + } - pos_profile: function() { + pos_profile() { this.frm.doc.taxes = [] this.set_pos_data(); - }, + } - set_pos_data: function() { + set_pos_data() { if(this.frm.doc.is_pos) { this.frm.set_value("allocate_advances_automatically", 0); if(!this.frm.doc.company) { @@ -425,13 +425,13 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } } else this.frm.trigger("refresh"); - }, + } - amount: function(){ + amount(){ this.write_off_outstanding_amount_automatically() - }, + } - change_amount: function(){ + change_amount(){ if(this.frm.doc.paid_amount > this.frm.doc.grand_total){ this.calculate_write_off_amount(); }else { @@ -440,18 +440,18 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } this.frm.refresh_fields(); - }, + } - loyalty_amount: function(){ + loyalty_amount(){ this.calculate_outstanding_amount(); this.frm.refresh_field("outstanding_amount"); this.frm.refresh_field("paid_amount"); this.frm.refresh_field("base_paid_amount"); } -}); +}; // for backward compatibility: combine new and previous states -$.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm})); +extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm})); cur_frm.cscript['Make Delivery Note'] = function() { frappe.model.open_mapped_doc({ diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 114b7d2d352..fe531d3b227 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -1957,6 +1957,33 @@ class TestSalesInvoice(unittest.TestCase): einvoice = make_einvoice(si) validate_totals(einvoice) + def test_item_tax_net_range(self): + item = create_item("T Shirt") + + 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() + + sales_invoice = create_sales_invoice(item = "T Shirt", rate=700, do_not_submit=True) + self.assertEqual(sales_invoice.items[0].item_tax_template, "_Test Account Excise Duty @ 12 - _TC") + + # Apply discount + sales_invoice.apply_discount_on = 'Net Total' + sales_invoice.discount_amount = 300 + sales_invoice.save() + self.assertEqual(sales_invoice.items[0].item_tax_template, "_Test Account Excise Duty @ 10 - _TC") + def get_sales_invoice_for_e_invoice(): si = make_sales_invoice_for_ewaybill() si.naming_series = 'INV-2020-.#####' @@ -1985,33 +2012,6 @@ def get_sales_invoice_for_e_invoice(): return si - def test_item_tax_net_range(self): - item = create_item("T Shirt") - - 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() - - sales_invoice = create_sales_invoice(item = "T Shirt", rate=700, do_not_submit=True) - self.assertEqual(sales_invoice.items[0].item_tax_template, "_Test Account Excise Duty @ 12 - _TC") - - # Apply discount - sales_invoice.apply_discount_on = 'Net Total' - sales_invoice.discount_amount = 300 - sales_invoice.save() - self.assertEqual(sales_invoice.items[0].item_tax_template, "_Test Account Excise Duty @ 10 - _TC") - def make_test_address_for_ewaybill(): if not frappe.db.exists('Address', '_Test Address for Eway bill-Billing'): address = frappe.get_doc({ diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.py b/erpnext/accounts/report/profitability_analysis/profitability_analysis.py index 60e675f2f1f..48bd7308bca 100644 --- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.py +++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.py @@ -168,21 +168,24 @@ def get_columns(filters): "label": _("Income"), "fieldtype": "Currency", "options": "currency", - "width": 120 + "width": 305 + }, { "fieldname": "expense", "label": _("Expense"), "fieldtype": "Currency", "options": "currency", - "width": 120 + "width": 305 + }, { "fieldname": "gross_profit_loss", "label": _("Gross Profit / Loss"), "fieldtype": "Currency", "options": "currency", - "width": 120 + "width": 307 + } ] diff --git a/erpnext/accounts/report/tax_detail/__init__.py b/erpnext/accounts/report/tax_detail/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/report/tax_detail/tax_detail.js b/erpnext/accounts/report/tax_detail/tax_detail.js new file mode 100644 index 00000000000..ed6fac4e605 --- /dev/null +++ b/erpnext/accounts/report/tax_detail/tax_detail.js @@ -0,0 +1,451 @@ +// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +// Contributed by Case Solved and sponsored by Nulight Studios +/* eslint-disable */ + +frappe.provide('frappe.query_reports'); + +frappe.query_reports["Tax Detail"] = { + filters: [ + { + fieldname: "company", + label: __("Company"), + fieldtype: "Link", + options: "Company", + default: frappe.defaults.get_user_default("company"), + reqd: 1 + }, + { + fieldname: "from_date", + label: __("From Date"), + fieldtype: "Date", + default: frappe.datetime.month_start(frappe.datetime.get_today()), + reqd: 1, + width: "60px" + }, + { + fieldname: "to_date", + label: __("To Date"), + fieldtype: "Date", + default: frappe.datetime.month_end(frappe.datetime.get_today()), + reqd: 1, + width: "60px" + }, + { + fieldname: "report_name", + label: __("Report Name"), + fieldtype: "Read Only", + default: frappe.query_report.report_name, + hidden: 1, + reqd: 1 + }, + { + fieldname: "mode", + label: __("Mode"), + fieldtype: "Read Only", + default: "edit", + hidden: 1, + reqd: 1 + } + ], + onload: function onload(report) { + // Remove Add Column and Save from menu + report.page.add_inner_button(__("New Report"), () => new_report(), __("Custom Report")); + report.page.add_inner_button(__("Load Report"), () => load_report(), __("Custom Report")); + hide_filters(report); + } +}; + +function hide_filters(report) { + report.page.page_form[0].querySelectorAll('.form-group.frappe-control').forEach(function setHidden(field) { + if (field.dataset.fieldtype == "Read Only") { + field.classList.add("hidden"); + } + }); +} + +erpnext.TaxDetail = class TaxDetail { + constructor() { + this.patch(); + this.load_report(); + } + // Monkey patch the QueryReport class + patch() { + this.qr = frappe.query_report; + this.super = { + refresh_report: this.qr.refresh_report, + show_footer_message: this.qr.show_footer_message + } + this.qr.refresh_report = () => this.refresh_report(); + this.qr.show_footer_message = () => this.show_footer_message(); + } + show_footer_message() { + // The last thing to run after datatable_render in refresh() + this.super.show_footer_message.apply(this.qr); + if (this.qr.report_name !== 'Tax Detail') { + this.show_help(); + if (this.loading) { + this.set_section(''); + } else { + this.reload_component(''); + } + } + this.loading = false; + } + refresh_report() { + // Infrequent report build (onload), load filters & data + // super function runs a refresh() serially + // already run within frappe.run_serially + this.loading = true; + this.super.refresh_report.apply(this.qr); + if (this.qr.report_name !== 'Tax Detail') { + frappe.call({ + method: 'erpnext.accounts.report.tax_detail.tax_detail.get_custom_reports', + args: {name: this.qr.report_name} + }).then((r) => { + const data = JSON.parse(r.message[this.qr.report_name]['json']); + this.create_controls(); + this.sections = data.sections || {}; + this.controls['show_detail'].set_input(data.show_detail); + }); + } + } + load_report() { + // One-off report build like titles, menu, etc + // Run when this object is created which happens in qr.load_report + this.qr.menu_items = this.get_menu_items(); + } + get_menu_items() { + // Replace Save action + let new_items = []; + const save = __('Save'); + + for (let item of this.qr.menu_items) { + if (item.label === save) { + new_items.push({ + label: save, + action: () => this.save_report(), + standard: false + }); + } else { + new_items.push(item); + } + } + return new_items; + } + save_report() { + this.check_datatable(); + if (this.qr.report_name !== 'Tax Detail') { + frappe.call({ + method:'erpnext.accounts.report.tax_detail.tax_detail.save_custom_report', + args: { + reference_report: 'Tax Detail', + report_name: this.qr.report_name, + data: { + columns: this.qr.get_visible_columns(), + sections: this.sections, + show_detail: this.controls['show_detail'].get_input_value() + } + }, + freeze: true + }).then((r) => { + this.set_section(''); + }); + } + } + check_datatable() { + if (!this.qr.datatable) { + frappe.throw(__('Please change the date range to load data first')); + } + } + set_section(name) { + // Sets the given section name and then reloads the data + if (name && !this.sections[name]) { + this.sections[name] = {}; + } + let options = Object.keys(this.sections); + options.unshift(''); + this.controls['section_name'].$wrapper.find("select").empty().add_options(options); + const org_mode = this.qr.get_filter_value('mode'); + let refresh = false; + if (name) { + this.controls['section_name'].set_input(name); + this.qr.set_filter_value('mode', 'edit'); + if (org_mode === 'run') { + refresh = true; + } + } else { + this.controls['section_name'].set_input(''); + this.qr.set_filter_value('mode', 'run'); + if (org_mode === 'edit') { + refresh = true; + } + } + if (refresh) { + this.qr.refresh(); + } + this.reload_component(''); + } + reload_component(component_name) { + const section_name = this.controls['section_name'].get_input_value(); + if (section_name) { + const section = this.sections[section_name]; + const component_names = Object.keys(section); + component_names.unshift(''); + this.controls['component'].$wrapper.find("select").empty().add_options(component_names); + this.controls['component'].set_input(component_name); + if (component_name) { + this.controls['component_type'].set_input(section[component_name].type); + } + } else { + this.controls['component'].$wrapper.find("select").empty(); + this.controls['component'].set_input(''); + } + this.set_table_filters(); + } + set_table_filters() { + let filters = {}; + const section_name = this.controls['section_name'].get_input_value(); + const component_name = this.controls['component'].get_input_value(); + if (section_name && component_name) { + const component_type = this.sections[section_name][component_name].type; + if (component_type === 'filter') { + filters = this.sections[section_name][component_name]['filters']; + } + } + this.setAppliedFilters(filters); + } + setAppliedFilters(filters) { + if (this.qr.datatable) { + Array.from(this.qr.datatable.header.querySelectorAll('.dt-filter')).map(function setFilters(input) { + let idx = input.dataset.colIndex; + if (filters[idx]) { + input.value = filters[idx]; + } else { + input.value = null; + } + }); + this.qr.datatable.columnmanager.applyFilter(filters); + } + } + delete(name, type) { + if (type === 'section') { + delete this.sections[name]; + const new_section = Object.keys(this.sections)[0] || ''; + this.set_section(new_section); + } + if (type === 'component') { + const cur_section = this.controls['section_name'].get_input_value(); + delete this.sections[cur_section][name]; + this.reload_component(''); + } + } + create_controls() { + let controls = {}; + // SELECT in data.js + controls['section_name'] = this.qr.page.add_field({ + label: __('Section'), + fieldtype: 'Select', + fieldname: 'section_name', + change: (e) => { + this.set_section(this.controls['section_name'].get_input_value()); + } + }); + // BUTTON in button.js + controls['new_section'] = this.qr.page.add_field({ + label: __('New Section'), + fieldtype: 'Button', + fieldname: 'new_section', + click: () => { + frappe.prompt({ + label: __('Section Name'), + fieldname: 'name', + fieldtype: 'Data' + }, (values) => { + this.set_section(values.name); + }); + } + }); + controls['delete_section'] = this.qr.page.add_field({ + label: __('Delete Section'), + fieldtype: 'Button', + fieldname: 'delete_section', + click: () => { + let cur_section = this.controls['section_name'].get_input_value(); + if (cur_section) { + frappe.confirm(__('Are you sure you want to delete section') + ' ' + cur_section + '?', + () => {this.delete(cur_section, 'section')}); + } + } + }); + controls['component'] = this.qr.page.add_field({ + label: __('Component'), + fieldtype: 'Select', + fieldname: 'component', + change: (e) => { + this.reload_component(this.controls['component'].get_input_value()); + } + }); + controls['component_type'] = this.qr.page.add_field({ + label: __('Component Type'), + fieldtype: 'Select', + fieldname: 'component_type', + default: 'filter', + options: [ + {label: __('Filtered Row Subtotal'), value: 'filter'}, + {label: __('Section Subtotal'), value: 'section'} + ] + }); + controls['add_component'] = this.qr.page.add_field({ + label: __('Add Component'), + fieldtype: 'Button', + fieldname: 'add_component', + click: () => { + this.check_datatable(); + let section_name = this.controls['section_name'].get_input_value(); + if (section_name) { + const component_type = this.controls['component_type'].get_input_value(); + let idx = 0; + const names = Object.keys(this.sections[section_name]); + if (names.length > 0) { + const idxs = names.map((key) => parseInt(key.match(/\d+$/)) || 0); + idx = Math.max(...idxs) + 1; + } + const filters = this.qr.datatable.columnmanager.getAppliedFilters(); + if (component_type === 'filter') { + const name = 'Filter' + idx.toString(); + let data = { + type: component_type, + filters: filters + } + this.sections[section_name][name] = data; + this.reload_component(name); + } else if (component_type === 'section') { + if (filters && Object.keys(filters).length !== 0) { + frappe.show_alert({ + message: __('Column filters ignored'), + indicator: 'yellow' + }); + } + let data = { + type: component_type + } + frappe.prompt({ + label: __('Section'), + fieldname: 'section', + fieldtype: 'Select', + options: Object.keys(this.sections) + }, (values) => { + this.sections[section_name][values.section] = data; + this.reload_component(values.section); + }); + } else { + frappe.throw(__('Please select the Component Type first')); + } + } else { + frappe.throw(__('Please select the Section first')); + } + } + }); + controls['delete_component'] = this.qr.page.add_field({ + label: __('Delete Component'), + fieldtype: 'Button', + fieldname: 'delete_component', + click: () => { + const component = this.controls['component'].get_input_value(); + if (component) { + frappe.confirm(__('Are you sure you want to delete component') + ' ' + component + '?', + () => {this.delete(component, 'component')}); + } + } + }); + controls['save'] = this.qr.page.add_field({ + label: __('Save & Run'), + fieldtype: 'Button', + fieldname: 'save', + click: () => { + this.save_report(); + } + }); + controls['show_detail'] = this.qr.page.add_field({ + label: __('Show Detail'), + fieldtype: 'Check', + fieldname: 'show_detail', + default: 1 + }); + this.controls = controls; + } + show_help() { + const help = __('Your custom report is built from General Ledger Entries within the date range. You can add multiple sections to the report using the New Section button. Each component added to a section adds a subset of the data into the specified section. Beware of duplicated data rows. The Filtered Row component type saves the datatable column filters to specify the added data. The Section component type refers to the data in a previously defined section, but it cannot refer to its parent section. The Amount column is summed to give the section subtotal. Use the Show Detail box to see the data rows included in each section in the final report. Once finished, hit Save & Run. Report contributed by'); + this.qr.$report_footer.append('Fluid to make widgets
| Item | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tTaxable Amount | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tVAT on Purchases | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
|---|---|---|
| Widget Fluid 1Litre | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 426.40\n\t\t\t\t\t\t\n\t\t\t\t\t | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(20.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 85.28\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t | \n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
Used
Used
New
| Item | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tTaxable Amount | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tVAT on Sales | \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
|---|---|---|
| Dunlop tyres | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 200.00\n\t\t\t\t\t\t\n\t\t\t\t\t | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(20.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 40.00\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t | \n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
| Continental tyres | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 65.00\n\t\t\t\t\t\t\n\t\t\t\t\t | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(5.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 3.25\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t | \n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
| Toyo tyres | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 560.00\n\t\t\t\t\t\t\n\t\t\t\t\t | \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(0.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 0.00\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t | \n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\
@@ -38,9 +38,9 @@ erpnext.ExerciseEditor = Class.extend({
this.make_cards(frm);
this.make_buttons(frm);
}
- },
+ }
- make_cards: function(frm) {
+ make_cards(frm) {
var me = this;
$(me.exercise_cards).empty();
@@ -60,9 +60,9 @@ erpnext.ExerciseEditor = Class.extend({
`, {image_src: step.image, title: step.title, description: step.description, col_id: "col-"+i, card_id: "card-"+i, id: i})).appendTo(me.row);
});
- },
+ }
- make_buttons: function(frm) {
+ make_buttons(frm) {
let me = this;
$('.btn-edit').on('click', function() {
let id = $(this).attr('data-id');
@@ -82,9 +82,9 @@ erpnext.ExerciseEditor = Class.extend({
frm.dirty();
}, 300);
});
- },
+ }
- show_add_card_dialog: function(frm) {
+ show_add_card_dialog(frm) {
let me = this;
let d = new frappe.ui.Dialog({
title: __('Add Exercise Step'),
@@ -137,9 +137,9 @@ erpnext.ExerciseEditor = Class.extend({
primary_action_label: __('Add')
});
d.show();
- },
+ }
- show_edit_card_dialog: function(frm, id) {
+ show_edit_card_dialog(frm, id) {
let new_dialog = new frappe.ui.Dialog({
title: __("Edit Exercise Step"),
fields: [
@@ -183,4 +183,4 @@ erpnext.ExerciseEditor = Class.extend({
});
new_dialog.show();
}
-});
+};
diff --git a/erpnext/healthcare/doctype/patient/patient.py b/erpnext/healthcare/doctype/patient/patient.py
index cebcb2068ea..56a34007ffb 100644
--- a/erpnext/healthcare/doctype/patient/patient.py
+++ b/erpnext/healthcare/doctype/patient/patient.py
@@ -40,7 +40,6 @@ class Patient(Document):
customer.customer_group = self.customer_group
if self.territory:
customer.territory = self.territory
-
customer.customer_name = self.patient_name
customer.default_price_list = self.default_price_list
customer.default_currency = self.default_currency
diff --git a/erpnext/healthcare/doctype/patient_history_settings/test_patient_history_settings.py b/erpnext/healthcare/doctype/patient_history_settings/test_patient_history_settings.py
index c93b788aed7..33119d8185f 100644
--- a/erpnext/healthcare/doctype/patient_history_settings/test_patient_history_settings.py
+++ b/erpnext/healthcare/doctype/patient_history_settings/test_patient_history_settings.py
@@ -6,7 +6,7 @@ from __future__ import unicode_literals
import frappe
import unittest
import json
-from frappe.utils import getdate
+from frappe.utils import getdate, strip_html
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_patient
class TestPatientHistorySettings(unittest.TestCase):
@@ -44,9 +44,9 @@ class TestPatientHistorySettings(unittest.TestCase):
self.assertTrue(medical_rec)
medical_rec = frappe.get_doc("Patient Medical Record", medical_rec)
- expected_subject = "Date: {0}
Rating: 3
Feedback: Test Patient History Settings
".format(
+ expected_subject = "Date: {0}Rating: 3Feedback: Test Patient History Settings".format(
frappe.utils.format_date(getdate()))
- self.assertEqual(medical_rec.subject, expected_subject)
+ self.assertEqual(strip_html(medical_rec.subject), expected_subject)
self.assertEqual(medical_rec.patient, patient)
self.assertEqual(medical_rec.communication_date, getdate())
@@ -101,4 +101,4 @@ def create_doc(patient):
}).insert()
doc.submit()
- return doc
\ No newline at end of file
+ return doc
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 8ad77a1524d..3da606b68b8 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -15,10 +15,11 @@ app_logo_url = "/assets/erpnext/images/erpnext-logo.svg"
develop_version = '13.x.x-develop'
-app_include_js = "/assets/js/erpnext.min.js"
-app_include_css = "/assets/css/erpnext.css"
-web_include_js = "/assets/js/erpnext-web.min.js"
-web_include_css = "/assets/css/erpnext-web.css"
+app_include_js = "erpnext.bundle.js"
+app_include_css = "erpnext.bundle.css"
+web_include_js = "erpnext-web.bundle.js"
+web_include_css = "erpnext-web.bundle.css"
+email_css = "email_erpnext.bundle.css"
doctype_js = {
"Address": "public/js/address.js",
@@ -227,6 +228,7 @@ standard_queries = {
doc_events = {
"*": {
+ "validate": "erpnext.support.doctype.service_level_agreement.service_level_agreement.apply",
"on_submit": "erpnext.healthcare.doctype.patient_history_settings.patient_history_settings.create_medical_record",
"on_update_after_submit": "erpnext.healthcare.doctype.patient_history_settings.patient_history_settings.update_medical_record",
"on_cancel": "erpnext.healthcare.doctype.patient_history_settings.patient_history_settings.delete_medical_record"
@@ -241,6 +243,9 @@ doc_events = {
"on_update": ["erpnext.hr.doctype.employee.employee.update_user_permissions",
"erpnext.portal.utils.set_default_role"]
},
+ "Communication": {
+ "on_update": "erpnext.support.doctype.service_level_agreement.service_level_agreement.update_hold_time"
+ },
("Sales Taxes and Charges Template", 'Price List'): {
"on_update": "erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings.validate_cart_settings"
},
@@ -331,8 +336,8 @@ scheduler_events = {
"erpnext.projects.doctype.project.project.hourly_reminder",
"erpnext.projects.doctype.project.project.collect_project_status",
"erpnext.hr.doctype.shift_type.shift_type.process_auto_attendance_for_all_shifts",
- "erpnext.support.doctype.issue.issue.set_service_level_agreement_variance",
- "erpnext.erpnext_integrations.connectors.shopify_connection.sync_old_orders"
+ "erpnext.erpnext_integrations.connectors.shopify_connection.sync_old_orders",
+ "erpnext.support.doctype.service_level_agreement.service_level_agreement.set_service_level_agreement_variance"
],
"hourly_long": [
"erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.repost_entries"
diff --git a/erpnext/hr/doctype/attendance/attendance.js b/erpnext/hr/doctype/attendance/attendance.js
index c3c3cb82f94..7964078c7f0 100644
--- a/erpnext/hr/doctype/attendance/attendance.js
+++ b/erpnext/hr/doctype/attendance/attendance.js
@@ -11,5 +11,5 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) {
return{
query: "erpnext.controllers.queries.employee_query"
- }
+ }
}
diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py
index f3b8a799b3c..3412675d811 100644
--- a/erpnext/hr/doctype/attendance/attendance.py
+++ b/erpnext/hr/doctype/attendance/attendance.py
@@ -15,6 +15,7 @@ class Attendance(Document):
validate_status(self.status, ["Present", "Absent", "On Leave", "Half Day", "Work From Home"])
self.validate_attendance_date()
self.validate_duplicate_record()
+ self.validate_employee_status()
self.check_leave_record()
def validate_attendance_date(self):
@@ -38,6 +39,10 @@ class Attendance(Document):
frappe.throw(_("Attendance for employee {0} is already marked for the date {1}").format(
frappe.bold(self.employee), frappe.bold(self.attendance_date)))
+ def validate_employee_status(self):
+ if frappe.db.get_value("Employee", self.employee, "status") == "Inactive":
+ frappe.throw(_("Cannot mark attendance for an Inactive employee {0}").format(self.employee))
+
def check_leave_record(self):
leave_record = frappe.db.sql("""
select leave_type, half_day, half_day_date
diff --git a/erpnext/hr/doctype/attendance/attendance_list.js b/erpnext/hr/doctype/attendance/attendance_list.js
index 0c7eafe9c61..9a3bac0eb23 100644
--- a/erpnext/hr/doctype/attendance/attendance_list.js
+++ b/erpnext/hr/doctype/attendance/attendance_list.js
@@ -21,6 +21,9 @@ frappe.listview_settings['Attendance'] = {
label: __('For Employee'),
fieldtype: 'Link',
options: 'Employee',
+ get_query: () => {
+ return {query: "erpnext.controllers.queries.employee_query"}
+ },
reqd: 1,
onchange: function() {
dialog.set_df_property("unmarked_days", "hidden", 1);
diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js
index c21d4b893cc..5639cc9ea46 100755
--- a/erpnext/hr/doctype/employee/employee.js
+++ b/erpnext/hr/doctype/employee/employee.js
@@ -2,8 +2,8 @@
// License: GNU General Public License v3. See license.txt
frappe.provide("erpnext.hr");
-erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({
- setup: function() {
+erpnext.hr.EmployeeController = class EmployeeController extends frappe.ui.form.Controller {
+ setup() {
this.frm.fields_dict.user_id.get_query = function(doc, cdt, cdn) {
return {
query: "frappe.core.doctype.user.user.user_query",
@@ -12,30 +12,30 @@ erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({
}
this.frm.fields_dict.reports_to.get_query = function(doc, cdt, cdn) {
return { query: "erpnext.controllers.queries.employee_query"} }
- },
+ }
- refresh: function() {
+ refresh() {
var me = this;
erpnext.toggle_naming_series();
- },
+ }
- date_of_birth: function() {
+ date_of_birth() {
return cur_frm.call({
method: "get_retirement_date",
args: {date_of_birth: this.frm.doc.date_of_birth}
});
- },
+ }
- salutation: function() {
+ salutation() {
if(this.frm.doc.salutation) {
this.frm.set_value("gender", {
"Mr": "Male",
"Ms": "Female"
}[this.frm.doc.salutation]);
}
- },
+ }
-});
+};
frappe.ui.form.on('Employee',{
setup: function(frm) {
frm.set_query("leave_policy", function() {
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
index 3205a92b1b6..ab965d54e3b 100644
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
+++ b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
@@ -68,13 +68,13 @@ erpnext.employee_attendance_tool = {
}
}
-erpnext.MarkedEmployee = Class.extend({
- init: function(frm, wrapper, employee) {
+erpnext.MarkedEmployee = class MarkedEmployee {
+ constructor(frm, wrapper, employee) {
this.wrapper = wrapper;
this.frm = frm;
this.make(frm, employee);
- },
- make: function(frm, employee) {
+ }
+ make(frm, employee) {
var me = this;
$(this.wrapper).empty();
@@ -104,16 +104,16 @@ erpnext.MarkedEmployee = Class.extend({
})).appendTo(row);
});
}
-});
+};
-erpnext.EmployeeSelector = Class.extend({
- init: function(frm, wrapper, employee) {
+erpnext.EmployeeSelector = class EmployeeSelector {
+ constructor(frm, wrapper, employee) {
this.wrapper = wrapper;
this.frm = frm;
this.make(frm, employee);
- },
- make: function(frm, employee) {
+ }
+ make(frm, employee) {
var me = this;
$(this.wrapper).empty();
@@ -266,6 +266,6 @@ erpnext.EmployeeSelector = Class.extend({
mark_employee_toolbar.appendTo($(this.wrapper));
}
-});
+};
diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.json b/erpnext/hr/doctype/employee_referral/employee_referral.json
index bfd404b4352..3ae73a9e4d9 100644
--- a/erpnext/hr/doctype/employee_referral/employee_referral.json
+++ b/erpnext/hr/doctype/employee_referral/employee_referral.json
@@ -9,16 +9,18 @@
"first_name",
"last_name",
"full_name",
- "email",
- "contact_no",
- "resume",
- "resume_link",
"column_break_6",
"date",
"status",
"for_designation",
+ "referral_details_section",
+ "email",
+ "contact_no",
+ "resume_link",
+ "column_break_12",
"current_employer",
"current_job_title",
+ "resume",
"referrer_details_section",
"referrer",
"referrer_name",
@@ -189,12 +191,21 @@
"label": "Referral Bonus Payment Status",
"options": "\nUnpaid\nPaid",
"read_only": 1
+ },
+ {
+ "fieldname": "referral_details_section",
+ "fieldtype": "Section Break",
+ "label": "Referral Details"
+ },
+ {
+ "fieldname": "column_break_12",
+ "fieldtype": "Column Break"
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2021-04-26 21:21:38.094086",
+ "modified": "2021-05-04 17:03:26.134560",
"modified_by": "Administrator",
"module": "HR",
"name": "Employee Referral",
diff --git a/erpnext/hr/doctype/holiday_list/holiday_list.py b/erpnext/hr/doctype/holiday_list/holiday_list.py
index 8af8cea605d..f65e6e12074 100644
--- a/erpnext/hr/doctype/holiday_list/holiday_list.py
+++ b/erpnext/hr/doctype/holiday_list/holiday_list.py
@@ -23,7 +23,7 @@ class HolidayList(Document):
last_idx = max([cint(d.idx) for d in self.get("holidays")] or [0,])
for i, d in enumerate(date_list):
ch = self.append('holidays', {})
- ch.description = self.weekly_off
+ ch.description = _(self.weekly_off)
ch.holiday_date = d
ch.weekly_off = 1
ch.idx = last_idx + i + 1
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
index bff06e6a91c..fdcd533660b 100644
--- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
@@ -5,7 +5,6 @@ import unittest
from frappe.utils import nowdate, add_months, getdate, add_days
from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation, expire_allocation
-
class TestLeaveAllocation(unittest.TestCase):
@classmethod
def setUpClass(cls):
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.js b/erpnext/hr/doctype/staffing_plan/staffing_plan.js
index 04af2323c72..228391ba001 100644
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan.js
+++ b/erpnext/hr/doctype/staffing_plan/staffing_plan.js
@@ -103,4 +103,4 @@ var set_total_estimated_budget = function(frm) {
})
frm.set_value('total_estimated_budget', estimated_budget);
}
-}
\ No newline at end of file
+};
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
index 29aa85484a8..bbafc820764 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
@@ -5,19 +5,19 @@
frappe.provide("erpnext.hr");
-erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
- onload: function() {
+erpnext.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui.form.Controller {
+ onload() {
this.frm.set_value("att_fr_date", frappe.datetime.get_today());
this.frm.set_value("att_to_date", frappe.datetime.get_today());
- },
+ }
- refresh: function() {
+ refresh() {
this.frm.disable_save();
this.show_upload();
this.setup_import_progress();
- },
+ }
- get_template:function() {
+ get_template() {
if(!this.frm.doc.att_fr_date || !this.frm.doc.att_to_date) {
frappe.msgprint(__("Attendance From Date and Attendance To Date is mandatory"));
return;
@@ -28,7 +28,7 @@ erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
from_date: this.frm.doc.att_fr_date,
to_date: this.frm.doc.att_to_date,
});
- },
+ }
show_upload() {
var $wrapper = $(cur_frm.fields_dict.upload_html.wrapper).empty();
@@ -36,7 +36,7 @@ erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
wrapper: $wrapper,
method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload'
});
- },
+ }
setup_import_progress() {
var $log_wrapper = $(this.frm.fields_dict.import_log.wrapper).empty();
@@ -64,6 +64,6 @@ erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
}
});
}
-})
+}
cur_frm.cscript = new erpnext.hr.AttendanceControlPanel({frm: cur_frm});
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
index 92715d34453..e86fa2b1c42 100644
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
+++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
@@ -47,7 +47,7 @@ def get_data(filters, leave_types):
user = frappe.session.user
conditions = get_conditions(filters)
- active_employees = frappe.get_all("Employee",
+ active_employees = frappe.get_list("Employee",
filters=conditions,
fields=["name", "employee_name", "department", "user_id", "leave_approver"])
@@ -72,4 +72,4 @@ def get_data(filters, leave_types):
data.append(row)
- return data
\ No newline at end of file
+ return data
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
index c5929c6bf99..bcb0ee4d0da 100644
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
+++ b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
@@ -57,10 +57,10 @@ def execute(filters=None):
data = []
+ leave_types = frappe.db.get_list("Leave Type")
leave_list = None
if filters.summarized_view:
- leave_types = frappe.db.sql("""select name from `tabLeave Type`""", as_list=True)
- leave_list = [d[0] + ":Float:120" for d in leave_types]
+ leave_list = [d.name + ":Float:120" for d in leave_types]
columns.extend(leave_list)
columns.extend([_("Total Late Entries") + ":Float:120", _("Total Early Exits") + ":Float:120"])
@@ -72,11 +72,11 @@ def execute(filters=None):
if (att_map_set & emp_map_set):
parameter_row = [""+ parameter + ""] + ['' for day in range(filters["total_days_in_month"] + 2)]
data.append(parameter_row)
- record, emp_att_data = add_data(emp_map[parameter], att_map, filters, holiday_map, conditions, default_holiday_list, leave_list=leave_list)
+ record, emp_att_data = add_data(emp_map[parameter], att_map, filters, holiday_map, conditions, default_holiday_list, leave_types=leave_types)
emp_att_map.update(emp_att_data)
data += record
else:
- record, emp_att_map = add_data(emp_map, att_map, filters, holiday_map, conditions, default_holiday_list, leave_list=leave_list)
+ record, emp_att_map = add_data(emp_map, att_map, filters, holiday_map, conditions, default_holiday_list, leave_types=leave_types)
data += record
chart_data = get_chart_data(emp_att_map, days)
@@ -126,7 +126,7 @@ def get_chart_data(emp_att_map, days):
return chart
-def add_data(employee_map, att_map, filters, holiday_map, conditions, default_holiday_list, leave_list=None):
+def add_data(employee_map, att_map, filters, holiday_map, conditions, default_holiday_list, leave_types=None):
record = []
emp_att_map = {}
@@ -204,9 +204,9 @@ def add_data(employee_map, att_map, filters, holiday_map, conditions, default_ho
else:
leaves[d.leave_type] = d.count
- for d in leave_list:
- if d in leaves:
- row.append(leaves[d])
+ for d in leave_types:
+ if d.name in leaves:
+ row.append(leaves[d.name])
else:
row.append("0.0")
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
index 44712d543b7..546a68f268b 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
@@ -41,9 +41,9 @@ frappe.ui.form.on('Maintenance Schedule', {
})
// TODO commonify this code
-erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
- refresh: function () {
- frappe.dynamic_link = { doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer' };
+erpnext.maintenance.MaintenanceSchedule = class MaintenanceSchedule extends frappe.ui.form.Controller {
+ refresh() {
+ frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
var me = this;
@@ -138,33 +138,29 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
}, __('Create'));
}
}
- },
+ }
- start_date: function (doc, cdt, cdn) {
+ start_date(doc, cdt, cdn) {
this.set_no_of_visits(doc, cdt, cdn);
- },
+ }
- end_date: function (doc, cdt, cdn) {
+ end_date(doc, cdt, cdn) {
this.set_no_of_visits(doc, cdt, cdn);
- },
+ }
- periodicity: function (doc, cdt, cdn) {
+ periodicity(doc, cdt, cdn) {
this.set_no_of_visits(doc, cdt, cdn);
+ }
- },
- no_of_visits: function (doc, cdt, cdn) {
- this.set_no_of_visits(doc, cdt, cdn);
- },
-
- set_no_of_visits: function (doc, cdt, cdn) {
+ set_no_of_visits(doc, cdt, cdn) {
var item = frappe.get_doc(cdt, cdn);
let me = this;
if (item.start_date && item.periodicity) {
me.frm.call('validate_end_date_visits');
}
- },
-});
+ }
+};
-$.extend(cur_frm.cscript, new erpnext.maintenance.MaintenanceSchedule({ frm: cur_frm }));
+extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceSchedule({frm: cur_frm}));
diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
index d6105c657ef..53ecdf5a61f 100644
--- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
@@ -64,9 +64,9 @@ frappe.ui.form.on('Maintenance Visit', {
})
// TODO commonify this code
-erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
- refresh: function () {
- frappe.dynamic_link = { doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer' };
+erpnext.maintenance.MaintenanceVisit = class MaintenanceVisit extends frappe.ui.form.Controller {
+ refresh() {
+ frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
var me = this;
@@ -119,7 +119,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
})
}, __("Get Items From"));
}
- },
-});
+ }
+};
-$.extend(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({ frm: cur_frm }));
\ No newline at end of file
+extend_cscript(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({frm: cur_frm}));
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 27019dbbae2..c56668840e5 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -325,8 +325,7 @@ frappe.ui.form.on("BOM", {
freeze: true,
args: {
update_parent: true,
- from_child_bom:false,
- save: frm.doc.docstatus === 1 ? true : false
+ from_child_bom:false
},
callback: function(r) {
refresh_field("items");
@@ -359,16 +358,16 @@ frappe.ui.form.on("BOM", {
}
});
-erpnext.bom.BomController = erpnext.TransactionController.extend({
- conversion_rate: function(doc) {
+erpnext.bom.BomController = class BomController extends erpnext.TransactionController {
+ conversion_rate(doc) {
if(this.frm.doc.currency === this.get_company_currency()) {
this.frm.set_value("conversion_rate", 1.0);
} else {
erpnext.bom.update_cost(doc);
}
- },
+ }
- item_code: function(doc, cdt, cdn){
+ item_code(doc, cdt, cdn){
var scrap_items = false;
var child = locals[cdt][cdn];
if (child.doctype == 'BOM Scrap Item') {
@@ -380,19 +379,19 @@ erpnext.bom.BomController = erpnext.TransactionController.extend({
}
get_bom_material_detail(doc, cdt, cdn, scrap_items);
- },
+ }
- buying_price_list: function(doc) {
+ buying_price_list(doc) {
this.apply_price_list();
- },
+ }
- plc_conversion_rate: function(doc) {
+ plc_conversion_rate(doc) {
if (!this.in_apply_price_list) {
this.apply_price_list(null, true);
}
- },
+ }
- conversion_factor: function(doc, cdt, cdn) {
+ conversion_factor(doc, cdt, cdn) {
if (frappe.meta.get_docfield(cdt, "stock_qty", cdn)) {
var item = frappe.get_doc(cdt, cdn);
frappe.model.round_floats_in(item, ["qty", "conversion_factor"]);
@@ -401,10 +400,10 @@ erpnext.bom.BomController = erpnext.TransactionController.extend({
this.toggle_conversion_factor(item);
this.frm.events.update_cost(this.frm);
}
- },
-});
+ }
+};
-$.extend(cur_frm.cscript, new erpnext.bom.BomController({frm: cur_frm}));
+extend_cscript(cur_frm.cscript, new erpnext.bom.BomController({frm: cur_frm}));
cur_frm.cscript.hour_rate = function(doc) {
erpnext.bom.calculate_op_cost(doc);
@@ -654,4 +653,4 @@ frappe.ui.form.on("BOM", "with_operations", function(frm) {
if(!cint(frm.doc.with_operations)) {
frm.set_value("operations", []);
}
-});
\ No newline at end of file
+});
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 3e855603b48..c58f017258e 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -1,7 +1,8 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
-from __future__ import unicode_literals
+from typing import List
+from collections import deque
import frappe, erpnext
from frappe.utils import cint, cstr, flt, today
from frappe import _
@@ -16,14 +17,85 @@ from frappe.model.mapper import get_mapped_doc
import functools
-from six import string_types
-
from operator import itemgetter
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
}
+
+class BOMTree:
+ """Full tree representation of a BOM"""
+
+ # specifying the attributes to save resources
+ # ref: https://docs.python.org/3/reference/datamodel.html#slots
+ __slots__ = ["name", "child_items", "is_bom", "item_code", "exploded_qty", "qty"]
+
+ def __init__(self, name: str, is_bom: bool = True, exploded_qty: float = 1.0, qty: float = 1) -> None:
+ self.name = name # name of node, BOM number if is_bom else item_code
+ self.child_items: List["BOMTree"] = [] # list of child items
+ self.is_bom = is_bom # true if the node is a BOM and not a leaf item
+ self.item_code: str = None # item_code associated with node
+ self.qty = qty # required unit quantity to make one unit of parent item.
+ self.exploded_qty = exploded_qty # total exploded qty required for making root of tree.
+ if not self.is_bom:
+ self.item_code = self.name
+ else:
+ self.__create_tree()
+
+ def __create_tree(self):
+ bom = frappe.get_cached_doc("BOM", self.name)
+ self.item_code = bom.item
+
+ for item in bom.get("items", []):
+ qty = item.qty / bom.quantity # quantity per unit
+ exploded_qty = self.exploded_qty * qty
+ if item.bom_no:
+ child = BOMTree(item.bom_no, exploded_qty=exploded_qty, qty=qty)
+ self.child_items.append(child)
+ else:
+ self.child_items.append(
+ BOMTree(item.item_code, is_bom=False, exploded_qty=exploded_qty, qty=qty)
+ )
+
+ def level_order_traversal(self) -> List["BOMTree"]:
+ """Get level order traversal of tree.
+ E.g. for following tree the traversal will return list of nodes in order from top to bottom.
+ BOM:
+ - SubAssy1
+ - item1
+ - item2
+ - SubAssy2
+ - item3
+ - item4
+
+ returns = [SubAssy1, item1, item2, SubAssy2, item3, item4]
+ """
+ traversal = []
+ q = deque()
+ q.append(self)
+
+ while q:
+ node = q.popleft()
+
+ for child in node.child_items:
+ traversal.append(child)
+ q.append(child)
+
+ return traversal
+
+ def __str__(self) -> str:
+ return (
+ f"{self.item_code}{' - ' + self.name if self.is_bom else ''} qty(per unit): {self.qty}"
+ f" exploded_qty: {self.exploded_qty}"
+ )
+
+ def __repr__(self, level: int = 0) -> str:
+ rep = "┃ " * (level - 1) + "┣━ " * (level > 0) + str(self) + "\n"
+ for child in self.child_items:
+ rep += child.__repr__(level=level + 1)
+ return rep
+
class BOM(WebsiteGenerator):
website = frappe._dict(
# page_title_field = "item_name",
@@ -152,7 +224,7 @@ class BOM(WebsiteGenerator):
if not args:
args = frappe.form_dict.get('args')
- if isinstance(args, string_types):
+ if isinstance(args, str):
import json
args = json.loads(args)
@@ -600,6 +672,11 @@ class BOM(WebsiteGenerator):
if not d.batch_size or d.batch_size <= 0:
d.batch_size = 1
+ def get_tree_representation(self) -> BOMTree:
+ """Get a complete tree representation preserving order of child items."""
+ return BOMTree(self.name)
+
+
def get_bom_item_rate(args, bom_doc):
if bom_doc.rm_cost_as_per == 'Valuation Rate':
rate = get_valuation_rate(args) * (args.get("conversion_factor") or 1)
diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py
index 1f443fb95ae..57a54587269 100644
--- a/erpnext/manufacturing/doctype/bom/test_bom.py
+++ b/erpnext/manufacturing/doctype/bom/test_bom.py
@@ -2,14 +2,13 @@
# License: GNU General Public License v3. See license.txt
-from __future__ import unicode_literals
+from collections import deque
import unittest
import frappe
from frappe.utils import cstr, flt
from frappe.test_runner import make_test_records
from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import create_stock_reconciliation
from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import update_cost
-from six import string_types
from erpnext.stock.doctype.item.test_item import make_item
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
from erpnext.tests.test_subcontracting import set_backflush_based_on
@@ -227,11 +226,88 @@ class TestBOM(unittest.TestCase):
supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
self.assertEqual(bom_items, supplied_items)
+ def test_bom_tree_representation(self):
+ bom_tree = {
+ "Assembly": {
+ "SubAssembly1": {"ChildPart1": {}, "ChildPart2": {},},
+ "SubAssembly2": {"ChildPart3": {}},
+ "SubAssembly3": {"SubSubAssy1": {"ChildPart4": {}}},
+ "ChildPart5": {},
+ "ChildPart6": {},
+ "SubAssembly4": {"SubSubAssy2": {"ChildPart7": {}}},
+ }
+ }
+ parent_bom = create_nested_bom(bom_tree, prefix="")
+ created_tree = parent_bom.get_tree_representation()
+
+ reqd_order = level_order_traversal(bom_tree)[1:] # skip first item
+ created_order = created_tree.level_order_traversal()
+
+ self.assertEqual(len(reqd_order), len(created_order))
+
+ for reqd_item, created_item in zip(reqd_order, created_order):
+ self.assertEqual(reqd_item, created_item.item_code)
+
+
def get_default_bom(item_code="_Test FG Item 2"):
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})
+
+
+
+def level_order_traversal(node):
+ traversal = []
+ q = deque()
+ q.append(node)
+
+ while q:
+ node = q.popleft()
+
+ for node_name, subtree in node.items():
+ traversal.append(node_name)
+ q.append(subtree)
+
+ return traversal
+
+def create_nested_bom(tree, prefix="_Test bom "):
+ """ Helper function to create a simple nested bom from tree describing item names. (along with required items)
+ """
+
+ def create_items(bom_tree):
+ for item_code, subtree in bom_tree.items():
+ bom_item_code = prefix + item_code
+ if not frappe.db.exists("Item", bom_item_code):
+ frappe.get_doc(doctype="Item", item_code=bom_item_code, item_group="_Test Item Group").insert()
+ create_items(subtree)
+ create_items(tree)
+
+ def dfs(tree, node):
+ """naive implementation for searching right subtree"""
+ for node_name, subtree in tree.items():
+ if node_name == node:
+ return subtree
+ else:
+ result = dfs(subtree, node)
+ if result is not None:
+ return result
+
+ order_of_creating_bom = reversed(level_order_traversal(tree))
+
+ for item in order_of_creating_bom:
+ child_items = dfs(tree, item)
+ if child_items:
+ bom_item_code = prefix + item
+ bom = frappe.get_doc(doctype="BOM", item=bom_item_code)
+ for child_item in child_items.keys():
+ bom.append("items", {"item_code": prefix + child_item})
+ bom.insert()
+ bom.submit()
+
+ return bom # parent bom is last bom
+
+
def reset_item_valuation_rate(item_code, warehouse_list=None, qty=None, rate=None):
- if warehouse_list and isinstance(warehouse_list, string_types):
+ if warehouse_list and isinstance(warehouse_list, str):
warehouse_list = [warehouse_list]
if not warehouse_list:
diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py
index cb1ee92196f..68de0b29d3e 100644
--- a/erpnext/manufacturing/doctype/work_order/test_work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py
@@ -389,17 +389,12 @@ class TestWorkOrder(unittest.TestCase):
ste.submit()
stock_entries.append(ste)
- job_cards = frappe.get_all('Job Card', filters = {'work_order': work_order.name})
+ job_cards = frappe.get_all('Job Card', filters = {'work_order': work_order.name}, order_by='creation asc')
self.assertEqual(len(job_cards), len(bom.operations))
for i, job_card in enumerate(job_cards):
doc = frappe.get_doc("Job Card", job_card)
- doc.append("time_logs", {
- "from_time": add_to_date(None, i),
- "hours": 1,
- "to_time": add_to_date(None, i + 1),
- "completed_qty": doc.for_quantity
- })
+ doc.time_logs[0].completed_qty = 1
doc.submit()
ste1 = frappe.get_doc(make_stock_entry(work_order.name, "Manufacture", 1))
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index e343ed2dd38..180815d80e4 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -1,7 +1,6 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
-from __future__ import unicode_literals
import frappe
import json
import math
@@ -30,9 +29,6 @@ class ItemHasVariantError(frappe.ValidationError): pass
class SerialNoQtyError(frappe.ValidationError):
pass
-form_grid_templates = {
- "operations": "templates/form_grid/work_order_grid.html"
-}
class WorkOrder(Document):
def onload(self):
@@ -472,46 +468,47 @@ class WorkOrder(Document):
def set_work_order_operations(self):
"""Fetch operations from BOM and set in 'Work Order'"""
- self.set('operations', [])
+ def _get_operations(bom_no, qty=1):
+ return frappe.db.sql(
+ f"""select
+ operation, description, workstation, idx,
+ base_hour_rate as hour_rate, time_in_mins * {qty} as time_in_mins,
+ "Pending" as status, parent as bom, batch_size, sequence_id
+ from
+ `tabBOM Operation`
+ where
+ parent = %s order by idx
+ """, bom_no, as_dict=1)
+
+
+ self.set('operations', [])
if not self.bom_no:
return
- if self.use_multi_level_bom:
- bom_list = frappe.get_doc("BOM", self.bom_no).traverse_tree()
+ operations = []
+ if not self.use_multi_level_bom:
+ bom_qty = frappe.db.get_value("BOM", self.bom_no, "quantity")
+ operations.extend(_get_operations(self.bom_no, qty=1.0/bom_qty))
else:
- bom_list = [self.bom_no]
+ bom_tree = frappe.get_doc("BOM", self.bom_no).get_tree_representation()
+ bom_traversal = list(reversed(bom_tree.level_order_traversal()))
+ bom_traversal.append(bom_tree) # add operation on top level item last
+
+ for d in bom_traversal:
+ if d.is_bom:
+ operations.extend(_get_operations(d.name, qty=d.exploded_qty))
+
+ for correct_index, operation in enumerate(operations, start=1):
+ operation.idx = correct_index
- operations = frappe.db.sql("""
- select
- operation, description, workstation, idx,
- base_hour_rate as hour_rate, time_in_mins,
- "Pending" as status, parent as bom, batch_size, sequence_id
- from
- `tabBOM Operation`
- where
- parent in (%s) order by idx
- """ % ", ".join(["%s"]*len(bom_list)), tuple(bom_list), as_dict=1)
self.set('operations', operations)
-
- if self.use_multi_level_bom and self.get('operations') and self.get('items'):
- raw_material_operations = [d.operation for d in self.get('items')]
- operations = [d.operation for d in self.get('operations')]
-
- for operation in raw_material_operations:
- if operation not in operations:
- self.append('operations', {
- 'operation': operation
- })
-
self.calculate_time()
def calculate_time(self):
- bom_qty = frappe.db.get_value("BOM", self.bom_no, "quantity")
-
for d in self.get("operations"):
- d.time_in_mins = flt(d.time_in_mins) / flt(bom_qty) * (flt(self.qty) / flt(d.batch_size))
+ d.time_in_mins = flt(d.time_in_mins) * (flt(self.qty) / flt(d.batch_size))
self.calculate_operating_cost()
diff --git a/erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json b/erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json
index 6d8fb80e319..f7b8787a0b3 100644
--- a/erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json
+++ b/erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json
@@ -2,7 +2,6 @@
"actions": [],
"creation": "2014-10-16 14:35:41.950175",
"doctype": "DocType",
- "editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"details",
@@ -49,6 +48,7 @@
{
"fieldname": "bom",
"fieldtype": "Link",
+ "in_list_view": 1,
"label": "BOM",
"no_copy": 1,
"options": "BOM",
@@ -68,6 +68,7 @@
"fieldtype": "Column Break"
},
{
+ "columns": 1,
"description": "Operation completed for how many finished goods?",
"fieldname": "completed_qty",
"fieldtype": "Float",
@@ -77,6 +78,7 @@
"read_only": 1
},
{
+ "columns": 1,
"default": "Pending",
"fieldname": "status",
"fieldtype": "Select",
@@ -119,6 +121,7 @@
"fieldtype": "Column Break"
},
{
+ "columns": 1,
"description": "in Minutes",
"fieldname": "time_in_mins",
"fieldtype": "Float",
@@ -205,7 +208,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2021-01-12 14:48:31.061286",
+ "modified": "2021-06-24 14:36:12.835543",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Work Order Operation",
@@ -214,4 +217,4 @@
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 2b1fc43a1c0..986b0c5711e 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -286,7 +286,9 @@ erpnext.patches.v13_0.germany_fill_debtor_creditor_number
erpnext.patches.v13_0.set_pos_closing_as_failed
execute:frappe.rename_doc("Workspace", "Loan Management", "Loans", force=True)
erpnext.patches.v13_0.update_timesheet_changes
+erpnext.patches.v13_0.add_doctype_to_sla #14-06-2021
erpnext.patches.v13_0.set_training_event_attendance
+erpnext.patches.v13_0.bill_for_rejected_quantity_in_purchase_invoice
erpnext.patches.v13_0.rename_issue_status_hold_to_on_hold
erpnext.patches.v13_0.bill_for_rejected_quantity_in_purchase_invoice
erpnext.patches.v13_0.update_job_card_details
diff --git a/erpnext/patches/v13_0/add_doctype_to_sla.py b/erpnext/patches/v13_0/add_doctype_to_sla.py
new file mode 100644
index 00000000000..e2c7fd268aa
--- /dev/null
+++ b/erpnext/patches/v13_0/add_doctype_to_sla.py
@@ -0,0 +1,21 @@
+# Copyright (c) 2020, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+
+import frappe
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+ frappe.reload_doc('support', 'doctype', 'sla_fulfilled_on_status')
+ frappe.reload_doc('support', 'doctype', 'service_level_agreement')
+ if frappe.db.has_column('Service Level Agreement', 'enable'):
+ rename_field('Service Level Agreement', 'enable', 'enabled')
+
+ for sla in frappe.get_all('Service Level Agreement'):
+ agreement = frappe.get_doc('Service Level Agreement', sla.name)
+ agreement.document_type = 'Issue'
+ agreement.apply_sla_for_resolution = 1
+ agreement.append('sla_fulfilled_on', {'status': 'Resolved'})
+ agreement.append('sla_fulfilled_on', {'status': 'Closed'})
+ agreement.save()
\ No newline at end of file
diff --git a/erpnext/patches/v13_0/bill_for_rejected_quantity_in_purchase_invoice.py b/erpnext/patches/v13_0/bill_for_rejected_quantity_in_purchase_invoice.py
index be85cfdeeff..7de9fa1e23e 100644
--- a/erpnext/patches/v13_0/bill_for_rejected_quantity_in_purchase_invoice.py
+++ b/erpnext/patches/v13_0/bill_for_rejected_quantity_in_purchase_invoice.py
@@ -5,4 +5,4 @@ def execute():
frappe.reload_doctype("Buying Settings")
buying_settings = frappe.get_single("Buying Settings")
buying_settings.bill_for_rejected_quantity_in_purchase_invoice = 0
- buying_settings.save()
\ No newline at end of file
+ buying_settings.save()
diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
index f2892600d12..496c37b2fad 100644
--- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
+++ b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js
@@ -135,10 +135,26 @@ frappe.ui.form.on('Payroll Entry', {
});
frm.set_query('employee', 'employees', () => {
- if (!frm.doc.company) {
- frappe.msgprint(__("Please set a Company"));
- return [];
+ let error_fields = [];
+ let mandatory_fields = ['company', 'payroll_frequency', 'start_date', 'end_date'];
+
+ let message = __('Mandatory fields required in {0}', [__(frm.doc.doctype)]);
+
+ mandatory_fields.forEach(field => {
+ if (!frm.doc[field]) {
+ error_fields.push(frappe.unscrub(field));
+ }
+ });
+
+ if (error_fields && error_fields.length) {
+ message = message + '
No payment mode selected in pos profile
").appendTo(multimode_payments) } - }, + } - set_outstanding_amount: function() { + set_outstanding_amount(){ this.selected_mode = $(this.$body).find(repl("input[idx='%(idx)s']",{'idx': this.idx})); this.highlight_selected_row(); this.payment_val = 0.0; @@ -98,15 +98,16 @@ erpnext.payments = erpnext.stock.StockController.extend({ } this.selected_mode.select() this.bind_amount_change_event(); - }, + } - bind_keyboard_event() { + bind_keyboard_event(){ + var me = this; this.payment_val = ''; this.bind_form_control_event(); this.bind_numeric_keys_event(); - }, + } - bind_form_control_event: function() { + bind_form_control_event() { var me = this; $(this.$body).find('.pos-payment-row').click(function() { me.idx = $(this).attr("idx"); @@ -126,7 +127,7 @@ erpnext.payments = erpnext.stock.StockController.extend({ $(this.$body).find('.change_amount').change(function() { me.change_amount(flt($(this).val()), precision("change_amount")); }); - }, + } highlight_selected_row() { var selected_row = $(this.$body).find(repl(".pos-payment-row[idx='%(idx)s']", {'idx': this.idx})); @@ -134,9 +135,9 @@ erpnext.payments = erpnext.stock.StockController.extend({ selected_row.addClass('selected-payment-mode'); $(this.$body).find('.amount').attr('disabled', true); this.selected_mode.attr('disabled', false); - }, + } - bind_numeric_keys_event: function() { + bind_numeric_keys_event() { var me = this; $(this.$body).find('.pos-keyboard-key').click(function(){ me.payment_val += $(this).text(); @@ -152,7 +153,7 @@ erpnext.payments = erpnext.stock.StockController.extend({ me.update_paid_amount(); }) - }, + } bind_amount_change_event() { var me = this; @@ -162,9 +163,9 @@ erpnext.payments = erpnext.stock.StockController.extend({ me.idx = me.selected_mode.attr("idx"); me.update_payment_amount(); }); - }, + } - clear_amount: function() { + clear_amount() { var me = this; $(this.$body).find('.clr').click(function(e) { e.stopPropagation(); @@ -175,7 +176,7 @@ erpnext.payments = erpnext.stock.StockController.extend({ me.highlight_selected_row(); me.update_payment_amount(); }); - }, + } write_off_amount(write_off_amount) { this.frm.doc.write_off_amount = flt(write_off_amount, precision("write_off_amount")); @@ -183,17 +184,17 @@ erpnext.payments = erpnext.stock.StockController.extend({ precision("base_write_off_amount")); this.calculate_outstanding_amount(false); this.show_amounts(); - }, + } - change_amount: function(change_amount) { + change_amount(change_amount) { var me = this; this.frm.doc.change_amount = flt(change_amount, precision("change_amount")); this.calculate_write_off_amount(); this.show_amounts(); - }, + } - update_paid_amount: function(update_write_off) { + update_paid_amount(update_write_off) { var me = this; if (in_list(['change_amount', 'write_off_amount'], this.idx)) { var value = me.selected_mode.val(); @@ -208,9 +209,9 @@ erpnext.payments = erpnext.stock.StockController.extend({ } else { this.update_payment_amount(); } - }, + } - update_payment_amount: function() { + update_payment_amount(){ var me = this; $.each(this.frm.doc.payments, function(index, data) { @@ -221,9 +222,9 @@ erpnext.payments = erpnext.stock.StockController.extend({ this.calculate_outstanding_amount(false); this.show_amounts(); - }, + } - show_amounts: function() { + show_amounts(){ var me = this; $(this.$body).find(".write_off_amount").val(format_currency(this.frm.doc.write_off_amount, this.frm.doc.currency)); $(this.$body).find('.paid_amount').text(format_currency(this.frm.doc.paid_amount, this.frm.doc.currency)); @@ -231,4 +232,4 @@ erpnext.payments = erpnext.stock.StockController.extend({ $(this.$body).find('.outstanding_amount').text(format_currency(this.frm.doc.outstanding_amount, frappe.get_doc(":Company", this.frm.doc.company).default_currency)); this.update_invoice(); } -}) \ No newline at end of file +} diff --git a/erpnext/public/js/point-of-sale.bundle.js b/erpnext/public/js/point-of-sale.bundle.js new file mode 100644 index 00000000000..fbc4bbbbb36 --- /dev/null +++ b/erpnext/public/js/point-of-sale.bundle.js @@ -0,0 +1,8 @@ +import "../../selling/page/point_of_sale/pos_item_selector.js"; +import "../../selling/page/point_of_sale/pos_item_cart.js"; +import "../../selling/page/point_of_sale/pos_item_details.js"; +import "../../selling/page/point_of_sale/pos_number_pad.js"; +import "../../selling/page/point_of_sale/pos_payment.js"; +import "../../selling/page/point_of_sale/pos_past_order_list.js"; +import "../../selling/page/point_of_sale/pos_past_order_summary.js"; +import "../../selling/page/point_of_sale/pos_controller.js"; diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js index 140c9dc90b6..dfe2c88ea82 100644 --- a/erpnext/public/js/stock_analytics.js +++ b/erpnext/public/js/stock_analytics.js @@ -2,8 +2,8 @@ // License: GNU General Public License v3. See license.txt -erpnext.StockAnalytics = erpnext.StockGridReport.extend({ - init: function(wrapper, opts) { +erpnext.StockAnalytics = class StockAnalytics extends erpnext.StockGridReport { + constructor(wrapper, opts) { var args = { title: __("Stock Analytics"), parent: $(wrapper).find('.layout-main'), @@ -30,9 +30,33 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ if(opts) $.extend(args, opts); - this._super(args); - }, - setup_columns: function() { + super(args); + + this.filters = [ + {fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty", + options:[{label:__("Value"), value:"Value"}, {label:__("Quantity"), value:"Quantity"}], + filter: function(val, item, opts, me) { + return me.apply_zero_filter(val, item, opts, me); + }}, + {fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand", + default_value: __("Select Brand..."), filter: function(val, item, opts) { + return val == opts.default_value || item.brand == val || item._show; + }, link_formatter: {filter_input: "brand"}}, + {fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse", + default_value: __("Select Warehouse...")}, + {fieldtype:"Date", label: __("From Date"), fieldname: "from_date"}, + {fieldtype:"Date", label: __("To Date"), fieldname: "to_date"}, + {fieldtype:"Select", label: __("Range"), fieldname: "range", + options:[ + {label:__("Daily"), value:"Daily"}, + {label:__("Weekly"), value:"Weekly"}, + {label:__("Monthly"), value:"Monthly"}, + {label:__("Quarterly"), value:"Quarterly"}, + {label:__("Yearly"), value:"Yearly"}, + ]} + ]; + } + setup_columns() { var std_columns = [ {id: "name", name: __("Item"), field: "name", width: 300}, {id: "brand", name: __("Brand"), field: "brand", width: 100}, @@ -43,43 +67,21 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ this.make_date_range_columns(); this.columns = std_columns.concat(this.columns); - }, - filters: [ - {fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty", - options:[{label:__("Value"), value:"Value"}, {label:__("Quantity"), value:"Quantity"}], - filter: function(val, item, opts, me) { - return me.apply_zero_filter(val, item, opts, me); - }}, - {fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand", - default_value: __("Select Brand..."), filter: function(val, item, opts) { - return val == opts.default_value || item.brand == val || item._show; - }, link_formatter: {filter_input: "brand"}}, - {fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse", - default_value: __("Select Warehouse...")}, - {fieldtype:"Date", label: __("From Date"), fieldname: "from_date"}, - {fieldtype:"Date", label: __("To Date"), fieldname: "to_date"}, - {fieldtype:"Select", label: __("Range"), fieldname: "range", - options:[ - {label:__("Daily"), value:"Daily"}, - {label:__("Weekly"), value:"Weekly"}, - {label:__("Monthly"), value:"Monthly"}, - {label:__("Quarterly"), value:"Quarterly"}, - {label:__("Yearly"), value:"Yearly"}, - ]} - ], - setup_filters: function() { + } + + setup_filters() { var me = this; - this._super(); + super.setup_filters(); this.trigger_refresh_on_change(["value_or_qty", "brand", "warehouse", "range"]); this.show_zero_check(); - }, - init_filter_values: function() { - this._super(); + } + init_filter_values() { + super.init_filter_values(); this.filter_inputs.range && this.filter_inputs.range.val('Monthly'); - }, - prepare_data: function() { + } + prepare_data() { var me = this; if(!this.data) { @@ -112,8 +114,8 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ this.prepare_balances(); this.update_groups(); - }, - prepare_balances: function() { + } + prepare_balances() { var me = this; var from_date = frappe.datetime.str_to_obj(this.from_date); var to_date = frappe.datetime.str_to_obj(this.to_date); @@ -164,8 +166,8 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ item.closing_qty_value += diff; } } - }, - update_groups: function() { + } + update_groups() { var me = this; $.each(this.data, function(i, item) { // update groups @@ -192,8 +194,8 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ } } }); - }, - show_stock_ledger: function(item_code) { + } + show_stock_ledger(item_code) { frappe.route_options = { item_code: item_code, from_date: this.from_date, @@ -201,5 +203,5 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ }; frappe.set_route("query-report", "Stock Ledger"); } -}); +}; diff --git a/erpnext/public/js/stock_grid_report.js b/erpnext/public/js/stock_grid_report.js index 832fd3eccf6..752fafdb971 100644 --- a/erpnext/public/js/stock_grid_report.js +++ b/erpnext/public/js/stock_grid_report.js @@ -1,16 +1,16 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ - get_item_warehouse: function(warehouse, item) { +erpnext.StockGridReport = class StockGridReport extends frappe.views.TreeGridReport { + get_item_warehouse(warehouse, item) { if(!this.item_warehouse[item]) this.item_warehouse[item] = {}; if(!this.item_warehouse[item][warehouse]) this.item_warehouse[item][warehouse] = { balance_qty: 0.0, balance_value: 0.0, fifo_stack: [] }; return this.item_warehouse[item][warehouse]; - }, + } - get_value_diff: function(wh, sl, is_fifo) { + get_value_diff(wh, sl, is_fifo) { // value if(sl.qty > 0) { // incoming - rate is given @@ -59,8 +59,8 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ wh.balance_qty += sl.qty; wh.balance_value += value_diff; return value_diff; - }, - get_fifo_value_diff: function(wh, sl) { + } + get_fifo_value_diff(wh, sl) { // get exact rate from fifo stack var fifo_stack = (wh.fifo_stack || []).reverse(); var fifo_value_diff = 0.0; @@ -89,9 +89,9 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ // reset the updated stack wh.fifo_stack = fifo_stack.reverse(); return -fifo_value_diff; - }, + } - get_serialized_value_diff: function(sl) { + get_serialized_value_diff(sl) { var me = this; var value_diff = 0.0; @@ -103,9 +103,9 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ }); return value_diff; - }, + } - get_serialized_buying_rates: function() { + get_serialized_buying_rates() { var serialized_buying_rates = {}; if (frappe.report_dump.data["Serial No"]) { @@ -115,5 +115,5 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ } return serialized_buying_rates; - }, -}); + } +}; diff --git a/erpnext/public/js/telephony.js b/erpnext/public/js/telephony.js index 9548d6c5f36..1c3e3147976 100644 --- a/erpnext/public/js/telephony.js +++ b/erpnext/public/js/telephony.js @@ -1,19 +1,19 @@ -frappe.ui.form.ControlData = frappe.ui.form.ControlData.extend( { +frappe.ui.form.ControlData = class ControlData extends frappe.ui.form.ControlData { make_input() { - this._super(); + super.make_input(); if (this.df.options == 'Phone') { this.setup_phone(); } if (this.frm && this.frm.fields_dict) { Object.values(this.frm.fields_dict).forEach(function(field) { - if (field.df.read_only === 1 && field.df.options === 'Phone' + if (field.df.read_only === 1 && field.df.options === 'Phone' && field.disp_area.style[0] != 'display' && !field.has_icon) { field.setup_phone(); field.has_icon = true; } }); } - }, + } setup_phone() { if (frappe.phone_call.handler) { let control = this.df.read_only ? '.control-value' : '.control-input'; @@ -30,4 +30,4 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlData.extend( { }); } } -}); +}; diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index ce40ced11f2..db7c034596a 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -749,6 +749,151 @@ $(document).on('app_ready', function() { } }); +// Show SLA dashboard +$(document).on('app_ready', function() { + frappe.call({ + method: 'erpnext.support.doctype.service_level_agreement.service_level_agreement.get_sla_doctypes', + callback: function(r) { + if (!r.message) + return; + + $.each(r.message, function(_i, d) { + frappe.ui.form.on(d, { + onload: function(frm) { + if (!frm.doc.service_level_agreement) + return; + + frappe.call({ + method: 'erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_filters', + args: { + doctype: frm.doc.doctype, + name: frm.doc.service_level_agreement, + customer: frm.doc.customer + }, + callback: function (r) { + if (r && r.message) { + frm.set_query('priority', function() { + return { + filters: { + 'name': ['in', r.message.priority], + } + }; + }); + frm.set_query('service_level_agreement', function() { + return { + filters: { + 'name': ['in', r.message.service_level_agreements], + } + }; + }); + } + } + }); + }, + + refresh: function(frm) { + if (frm.doc.status !== 'Closed' && frm.doc.service_level_agreement + && frm.doc.agreement_status === 'Ongoing') { + frappe.call({ + 'method': 'frappe.client.get', + args: { + doctype: 'Service Level Agreement', + name: frm.doc.service_level_agreement + }, + callback: function(data) { + let statuses = data.message.pause_sla_on; + const hold_statuses = []; + $.each(statuses, (_i, entry) => { + hold_statuses.push(entry.status); + }); + if (hold_statuses.includes(frm.doc.status)) { + frm.dashboard.clear_headline(); + let message = {'indicator': 'orange', 'msg': __('SLA is on hold since {0}', [moment(frm.doc.on_hold_since).fromNow(true)])}; + frm.dashboard.set_headline_alert( + '