# Accounting 1 vs Accounting 2 — différences réelles

## But de cette page

ACC1 et ACC2 partagent le même moteur **By Module / Accounting**, mais ils ne diffèrent pas seulement par le thème visuel. Plusieurs différences sont encodées directement dans les **settings disponibles**, les **types d'entreprise**, la **forme juridique**, les **partenaires**, les **produits/services**, les **modules disponibles** et certaines branches de l'Answer Key.

Cette page répond à deux questions :

1. **Qu'est-ce qui est réellement différent entre ACC1 et ACC2 ?**
2. **Quand une modification doit-elle aller dans le commun, ACC1, ACC2 ou être testée dans les deux ?**

## Résumé fonctionnel

<table id="bkmrk-dimension-acc1-acc2-"><thead><tr><th>Dimension</th><th>ACC1</th><th>ACC2</th></tr></thead><tbody><tr><td>Univers métier</td><td>Entreprise spécialisée dans la vente de piscines.</td><td>Entreprise spécialisée dans la vente de café et de machines à café.</td></tr><tr><td>Objectif pédagogique</td><td>Compléter un cycle comptable.</td><td>Compléter un cycle comptable.</td></tr><tr><td>Framework technique</td><td>By Module + `acc_base`.</td><td>By Module + `acc_base`.</td></tr><tr><td>Type d'activité de l'entreprise</td><td>`our_company_type` disponible : commerciale / services / mixte selon le module.</td><td>Même système.</td></tr><tr><td>**Forme juridique**</td><td>Preference masquée; les defaults des modules sont essentiellement `single_owner`.</td><td>**Preference ACC2-only** : société en nom collectif, société par actions A, société par actions A+B. **PAS DE** `single_owner`.</td></tr><tr><td>Créances / effets à recevoir</td><td>Non exposés dans le wizard.</td><td>**`has_debts` et `has_interests` sont ACC2-only.**</td></tr><tr><td>Petite caisse</td><td>Le moteur commun existe, mais le module n'est pas disponible dans le wizard ACC1.</td><td>**`module_petty_cash` est ACC2-only.**</td></tr><tr><td>Co-propriétaire / actionnaires</td><td>Pas d'entités game-specific correspondantes dans `companies/partners`.</td><td>`our_company_co_owner`, `shareholder_group_a`, `shareholder_group_b`.</td></tr><tr><td>Companies</td><td>66.</td><td>67.</td></tr><tr><td>Partners</td><td>76.</td><td>77.</td></tr><tr><td>Products</td><td>77.</td><td>43.</td></tr><tr><td>Services</td><td>41.</td><td>58.</td></tr><tr><td>Tutoriels game-specific</td><td>Plusieurs scripts/prefabs ACC1 dédiés.</td><td>Pas d'équivalent dans le dossier ACC2 actuel.</td></tr></tbody></table>

## Attention : “Type d'entreprise” et “Forme juridique” sont deux settings différents

C'est important car les deux notions sont faciles à mélanger.

### our\_company\_type — disponible dans le framework des deux jeux

Le setting `our_company_type` décrit l'activité économique de l'entreprise :

- `products_company` — commerciale;
- `services_company` — de services;
- `products_and_services_company` — commerciale et de services.

Ce setting influence notamment :

- stock / inventaire;
- comptes visibles;
- types de bills disponibles;
- pages/relations liées aux ventes et services.

### company\_legal\_form — ACC2-only dans le wizard

Dans `preferences_settings_definitions.json` :

```json
"company_legal_form": {
  "category": "company",
  "type": "dropdown",
  "data_uid": "company_legal_form",
  "acc2_only": true
}
```

`PreferencesWizardPageControl.ShouldSkipPreference()` masque toute preference marquée `acc2Only` lorsque `CurrentGameUid != "acc2"`.

## Formes juridiques supportées par le moteur

Le moteur By Module connaît explicitement :

<table id="bkmrk-uid-libell%C3%A9-cons%C3%A9que"><thead><tr><th>UID</th><th>Libellé</th><th>Conséquence principale</th></tr></thead><tbody><tr><td>`single_owner`</td><td>Propriétaire unique</td><td>Capital et retraits d'un seul propriétaire.</td></tr><tr><td>`partnership`</td><td>Société en nom collectif</td><td>Deux propriétaires; capital, apports/retraits et profits peuvent être répartis.</td></tr><tr><td>`joint_stock_a`</td><td>Société par actions — groupe A</td><td>Capital-actions A + bénéfices non répartis.</td></tr><tr><td>`joint_stock_ab`</td><td>Société par actions — groupes A et B</td><td>Capital-actions A+B + bénéfices non répartis; deux groupes d'actionnaires.</td></tr></tbody></table>

ACC1 contient les textes/structures génériques nécessaires au moteur, mais la preference est explicitement masquée dans son wizard. ACC2 expose réellement cette variation au professeur.

## Impact technique de la forme juridique

Ce n'est pas un simple label. `company_legal_form` traverse plusieurs moteurs.

### 1. BillCreationContext / BillContext

Les deux contextes lisent :

```javascript
this._companyLegalForm =
    utilsByModule.getModulePreference(
        moduleSettings,
        utilsByModule.constants.modulesPreferences.COMPANY_LEGAL_FORM
    );
```

Pour une partnership, `ourCompanyOwnerShares` vaut par défaut 50 si aucune valeur n'est présente.

### 2. Répartition propriétaire / co-propriétaire

`BillContext.getOwnerPaymentAmount()` répartit un montant entre propriétaire/co-propriétaire lorsque la forme est :

- `partnership`;
- `joint_stock_ab` pour certains calculs actionnaires.

### 3. Génération de bills

`BillCreationContext.getPayingOwnerUid()` peut choisir un ou les deux propriétaires pour une partnership. Le `BillFactory` possède aussi des branches spécifiques pour :

- les paiements des propriétaires;
- les retraits;
- la Petite caisse;
- la création de plusieurs bills lorsque plusieurs propriétaires paient.

### 4. Comptes visibles

`accounts.json` possède des conditions de visibilité basées sur la forme juridique. Exemples :

- capital du propriétaire;
- capital du co-propriétaire;
- retraits/apports du co-propriétaire;
- capital-actions;
- bénéfices non répartis.

### 5. État des capitaux propres

L'Answer Key change réellement la structure :

- **single owner** → capital du propriétaire;
- **partnership** → capital propriétaire + co-propriétaire;
- **joint stock** → capital-actions + bénéfices non répartis;
- **joint\_stock\_ab** → deux groupes de capital-actions.

### 6. Clôture

Dans `byModule_utils_answer_key_module.js` :

- une partnership répartit le résultat entre `our_company_capital` et `our_company_co_owner_capital`;
- une société par actions transfère le résultat vers `retained_earnings`;
- un propriétaire unique utilise le capital propriétaire.

Donc toute modification touchant capital, fermeture, equity, dividends, owner bills ou financial statements doit être testée avec **plusieurs formes juridiques ACC2**.

## Différences ACC2-only encodées dans le framework partagé

Un grep de `acc2_only` dans la static data By Module montre actuellement ces différences explicites :

<table id="bkmrk-feature-fichier-effe"><thead><tr><th>Feature</th><th>Fichier</th><th>Effet</th></tr></thead><tbody><tr><td>`company_legal_form`</td><td>`preferences_settings_definitions.json`</td><td>Preference visible seulement dans ACC2.</td></tr><tr><td>`has_debts`</td><td>`preferences_settings_definitions.json`</td><td>Créances activables seulement dans ACC2 via le wizard.</td></tr><tr><td>`has_interests`</td><td>`preferences_settings_definitions.json`</td><td>Effets à recevoir / intérêts activables seulement dans ACC2 via le wizard.</td></tr><tr><td>`module_petty_cash`</td><td>`modules_settings_definitions.json`</td><td>Module proposé uniquement dans ACC2.</td></tr></tbody></table>

### Filtrage du module Petite caisse

`ModuleDataAndNameWizardPageControl` vérifie `moduleDefinition.acc2Only` et ignore le module lorsqu'on n'est pas dans ACC2.

### Filtrage des preferences

`PreferencesWizardPageControl.ShouldSkipPreference()` applique le même principe aux preferences ACC2-only.

## ACC2 — Créances et effets à recevoir

Les preferences :

- `has_debts` — libellé FR actuel : *Créances*;
- `has_interests` — libellé FR actuel : *Effets à recevoir*.

Elles sont référencées dans plusieurs définitions de modules : General Journal, Auxiliary Journals, Regularizations, Balance Sheet, Financial Statements, etc. Elles peuvent donc affecter :

- bills clients;
- radiation de client;
- provisions;
- notes à recevoir;
- intérêts;
- ledger;
- trial balance;
- financial statements;
- Answer Key / Grading.

Une modification de ces chemins doit être testée dans ACC2 avec les toggles ON et OFF.

## ACC2 — Module Petite caisse

`module_petty_cash` est marqué `acc2_only: true` dans `modules_settings_definitions.json`.

### Contenu game-specific ACC2

ACC2 possède notamment :

- `ModulePettyCashScenarioPages.asset`;
- `petty_cash` comme partenaire/contexte;
- fournisseurs Petite caisse : convenience, maintenance, mail, florist, stationery;
- `petty_cash_initial_fund`;
- dépenses : lait, pain, papier hygiénique, timbres, enveloppes, colle, vis, ruban, fleurs, papeterie, etc.;
- retraits personnels;
- textes/références régionaux QC/ON/NB/PE.

### Moteur commun malgré tout

Les classes techniques de Petite caisse sont dans le commun By Module, par exemple :

- `PettyCashDeclarationBill`;
- `PettyCashReplenishmentCheckBill`;
- branches Petty Cash du `BillFactory`;
- journal/Answer Key/Grading correspondants.

Autrement dit : **le moteur est partagé, mais ACC2 est le jeu qui expose officiellement le module.**

## Différences de partenaires / companies

### ACC1 — 66 companies

Les fournisseurs principaux sont liés aux piscines et à l'extérieur :

- `motor_company`;
- `pipe_company`;
- `aluminium_company`;
- `wood_company`;
- `chlore_company` / `chlore_salt_company`;
- `solar_canvas_company` / `winter_canvas_company`;
- `stairs_company`;
- `light_company`;
- `outdoor_company`;
- `toys_company`;
- `barbecue_company`.

### ACC2 — 67 companies

Les fournisseurs principaux sont liés au café :

- `coffee_company`;
- `espresso_company`;
- `beans_company`;
- `brew_company`;
- `blend_company`;
- `grind_company`;
- `roast_company`;
- `barista_company`.

ACC2 ajoute en plus des entités structurelles absentes des companies ACC1 :

- `our_company_co_owner`;
- `shareholder_group_a`;
- `shareholder_group_b`;
- `petty_cash`;
- les fournisseurs de Petite caisse.

## Partner subtypes différents

ACC2 possède des `partner_sub_type` supplémentaires :

- `our_company_co_owner`;
- `shareholder_group_a`;
- `shareholder_group_b`;
- `petty_cash`;
- `petty_cash_convenience_oc`;
- `petty_cash_maintenance_oc`;
- `petty_cash_mail_oc`;
- `petty_cash_florist_oc`;
- `petty_cash_stationery_oc`.

Ces différences ne sont pas décoratives : `BillFactory` et plusieurs bill classes sélectionnent les partenaires selon leur subtype.

## Produits : univers complètement différent

### ACC1 — 77 products

Types et exemples :

- **piscines** : `above_pool_*`, `mid_pool_*`, `in_pool_*`;
- **entretien** : chlore, algicide, robot cleaner;
- **extérieur** : sofa, gazebo, toys, barbecue;
- **composants de piscine** : moteurs, tuyaux, aluminium, bois, chauffe-eau, systèmes chlore, toiles, escaliers, lumières;
- plus les produits techniques communs : deposit/withdrawals, bank, office supplies, loans, etc.

### ACC2 — 43 products

Types et exemples :

- **espresso machines** : regular/highend/deluxe;
- **coffee machines** : regular/highend/deluxe;
- **beans** : raw/roasted/blends;
- **retail/accessoires** : brush, descaler, air blower, grinders, roasters, filters, scales, tampers, cups;
- plus les produits techniques communs.

### Product types propres à ACC2

- `espresso_machine`;
- `coffee_machine`;
- `beans`;
- `our_company_co_owner`;
- `shareholder_group_a`;
- `shareholder_group_b`.

## Services : ACC2 en contient davantage

### ACC1 — 41 services

Une grosse partie est liée aux piscines :

- fermeture de piscine par type/taille;
- nettoyage;
- maintenance;
- installation;
- installation de chauffe-eau;
- services/operating costs communs.

### ACC2 — 58 services

ACC2 ajoute de nombreuses familles :

- **Petite caisse** : fonds initial, consommables, dépenses et retraits;
- **formation barista** : novice / advanced / expert;
- **coffee shop** : installation, cleaning, maintenance;
- **maintenance machines** : repair, cleaning, descaling;
- **maintenance équipements** : grinder sharpening, scale calibration, parts replacing;
- **eau / steam wand**;
- **stocks/actionnaires**.

## Ce qui reste commun dans les datasets

Dans l'état actuel du dépôt, les différences les plus importantes ne viennent pas de :

- `conditions.json`;
- `employees.json`;
- `salaries.json`.

Les différences sont surtout dans `companies`, `partners`, `products`, `services`, les ScenarioPages, les assets et les settings ACC2-only.

## Server scripts ACC1 vs ACC2

Côté serveur, les wrappers restent volontairement presque identiques.

### Commandes présentes dans les deux

- `answer_key_module`;
- `change_module_item_index`;
- `change_module_sort_index`;
- `change_module_visibility`;
- `create_team`;
- `custom_command`;
- `generate_new_good_decisions`;
- `generate_results`;
- `get_new_good_decisions`;
- `reopen_module`;
- `set_correction_mode_off`.

### acc1\_utils.js vs acc2\_utils.js

Ils sont actuellement identiques à part le GameUid et les noms de classes :

```javascript
GameSpecificUtilsAcc1 -> GameSpecificUtilsAccBase("acc1")
GameSpecificUtilsAcc2 -> GameSpecificUtilsAccBase("acc2")
```

Donc une règle comptable commune doit aller dans `acc_base` ou `_utils/by_module`, pas être dupliquée dans les deux fichiers.

### Exception historique ACC1

`acc1_module_sort_name.js` existe uniquement dans ACC1 et ne fait qu'inclure `acc_base_change_module_sort_index`. C'est un alias historique, pas une différence métier.

## UI / scenes / skins

<table id="bkmrk-acc1-acc2-acc1studen"><thead><tr><th>ACC1</th><th>ACC2</th></tr></thead><tbody><tr><td>`Acc1Student.unity`</td><td>`Acc2Student.unity`</td></tr><tr><td>`Acc1Teacher.unity`</td><td>`Acc2Teacher.unity`</td></tr><tr><td>`MainControlStudentAcc1.prefab`</td><td>`MainControlStudentAcc2.prefab`</td></tr><tr><td>`MainControlTeacherAcc1.prefab`</td><td>`MainControlTeacherAcc2.prefab`</td></tr><tr><td>`Acc1Skin.asset`</td><td>`Acc2Skin.asset`</td></tr><tr><td>Doozy graphs ACC1</td><td>Doozy graphs ACC2</td></tr></tbody></table>

## Tutoriels : différence ACC1 importante

ACC1 contient actuellement toute une couche game-specific absente d'ACC2 :

- `AccGeneralTutorials.cs`;
- `GenericAcc1Tutorial.cs`;
- `GenericAcc1TutorialNoModules.cs`;
- `TutorialButtonAcc1Async.cs`;
- `TutorialButtonAcc1Sync.cs`;
- `TutorialPopupControlAcc1Async.cs`;
- `TutorialPopupControlAcc1Sync.cs`;
- prefabs `TutorialPopupControlAcc1*`.

Ils couvrent navigation générale, correction, pratique, fin summative, téléchargement/impression, deuxième fenêtre et report aux grands livres.

Si une UI commune By Module est modifiée, tester que les UIDs ciblés par ces tutoriels ACC1 existent toujours.

## ScenarioPages

Les deux jeux possèdent la majorité des mêmes ScenarioPages Accounting :

- Accounting Cycle;
- Accounting Journal;
- General Journal;
- Auxiliary Journals / Ledgers;
- Taxes;
- Income Taxes / Employer Income Taxes;
- Regularizations;
- Financial Statements;
- Closure;
- Balance Sheet.

ACC2 possède en plus `ModulePettyCashScenarioPages.asset`. Plusieurs assets homologues ont également des différences de contenu/références : ne pas copier un asset ACC1 sur ACC2 ou inversement sans diff.

## Quand modifier où ?

<table id="bkmrk-changement-emplaceme"><thead><tr><th>Changement</th><th>Emplacement attendu</th></tr></thead><tbody><tr><td>Règle comptable valable pour ACC1 + ACC2</td><td>`acc_base` / By Module commun.</td></tr><tr><td>Nouveau bill générique</td><td>Pipeline Bills commun.</td></tr><tr><td>Support d'une nouvelle forme juridique</td><td>Framework commun + settings, puis exposition selon le jeu.</td></tr><tr><td>Modification du comportement partnership/joint stock</td><td>BillContext/BillFactory/Answer Key/Grading communs; tester ACC2.</td></tr><tr><td>Nouvelle feature créances/intérêts</td><td>Framework commun, mais activation ACC2-only tant que le produit reste ainsi.</td></tr><tr><td>Nouveau contenu Petite caisse</td><td>ACC2 data; moteur commun si logique.</td></tr><tr><td>Nouveau fournisseur piscine</td><td>ACC1 static data.</td></tr><tr><td>Nouveau fournisseur café</td><td>ACC2 static data.</td></tr><tr><td>Changement visuel</td><td>GameSpecific concerné.</td></tr><tr><td>Changement tutoriel général ACC1</td><td>GameSpecific ACC1.</td></tr></tbody></table>

## Matrice de test recommandée

Une feature Accounting qui touche une zone commune ne devrait pas être validée sur un seul jeu.

<table id="bkmrk-feature-touch%C3%A9e-test"><thead><tr><th>Feature touchée</th><th>Tests minimum</th></tr></thead><tbody><tr><td>Bills/journaux/ledger généraux</td><td>ACC1 + ACC2.</td></tr><tr><td>Inventory</td><td>ACC1 + ACC2 avec company type/stock type pertinent.</td></tr><tr><td>Capital/equity/closing</td><td>ACC1 default + ACC2 single owner + partnership + joint stock A + joint stock AB.</td></tr><tr><td>Owner bills</td><td>ACC1 owner unique + ACC2 partnership.</td></tr><tr><td>Dividends / retained earnings</td><td>ACC2 joint stock.</td></tr><tr><td>Créances / effets à recevoir</td><td>ACC2 ON/OFF.</td></tr><tr><td>Petite caisse</td><td>ACC2.</td></tr><tr><td>Tutoriel/UI modules</td><td>ACC1 + ACC2; vérifier ACC1 tutorial targets.</td></tr><tr><td>Scenario</td><td>Asset du même module dans les deux jeux.</td></tr></tbody></table>

## Fichiers clés pour comprendre les différences

- `Assets/GameSpecific/acc1/Resources/data_acc1/`
- `Assets/GameSpecific/acc2/Resources/data_acc2/`
- `Assets/GameSpecific/byModule/Resources/data_byModule/preferences_settings_definitions.json`
- `Assets/GameSpecific/byModule/Resources/data_byModule/modules_settings_definitions.json`
- `Assets/Src/UI/SimByModule/UI/Wizards/SaveModule/PreferencesWizardPageControl.cs`
- `Assets/Src/UI/SimByModule/Data/ModuleDataAndNameWizardPageControl.cs`
- `node.js/backend/braincloud/server_scripts/_utils/by_module/contexts/BillCreationContext.js`
- `node.js/backend/braincloud/server_scripts/_utils/by_module/contexts/BillContext.js`
- `node.js/backend/braincloud/server_scripts/_utils/by_module/factories/BillFactory.js`
- `node.js/backend/braincloud/server_scripts/_utils/by_module/byModule_utils_answer_key_module.js`

## Pages liées

- [Architecture By Module / Accounting](https://wiki.uniksim.com/books/game/page/architecture-by-module-accounting)
- [Contextes Accounting](https://wiki.uniksim.com/books/game/page/contextes-accounting-cycle-heritage-et-donnees-entre-periodes)
- [Configuration Accounting — guide des JSON](https://wiki.uniksim.com/books/game/page/configuration-accounting-guide-des-json)
- [Pipeline des Bills](https://wiki.uniksim.com/books/game/page/pipeline-des-bills-architecture-et-ajout-dun-nouveau-type)
- [acc\_base, ACC1 et ACC2 — séparation des responsabilités](https://wiki.uniksim.com/books/game/page/acc-base-acc1-et-acc2-separation-des-responsabilites)