Programmeur

Installation

Unity Hub : https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.exe

Putty + Pagent + PuttyGen : https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Git : https://git-scm.com/downloads

GitExtensions : https://github.com/gitextensions

Meld : http://meldmerge.org/

Node.js : https://nodejs.org/en/

"npm install" dans le root de node.js

Multiple Unity instance : https://support.unity3d.com/hc/en-us/articles/115003118426-Running-multiple-instances-of-Unity-referencing-the-same-project
cd (NewSimFolder)
mkdir game
cd game
mklink /D Assets (Simfolder)\game\Assets
mklink /D ProjectSettings (SimFolder)\game\ProjectSettings
mklink /D Packages (SimFolder)\game\Packages

S'il y a un problème de plugins une fois unity ouvert, supprimez le folder qui vient d'être créé et dupliqué l'original, supprimé les folders "Assets" et "ProjectSettings" de ce nouveau folder et executé de nouveau les commande de mklink pour "Assets" et "ProjectSettings"

 

 

Update les textes : Éxécuter "exportText.bat" dans "Simulation"\node.js (tabs UI, Dialogs, Scenario)

Update le data : Éxécuter "exportAllData.bat" dans "Simulation"\node.js (toutes les autres tabs)

Setup Local Server : https://wiki.uniksim.com/books/programmeur/page/setup-local-server

Copier une simulation de live vers preview :

node data_importer.js copySim simUid

MongoDB en local : https://www.mongodb.com/try/download/community avec les paramètres d'installation par défaut.

Dev Notes

Dev Notes

Login avec le token de cheneliere

Pour se logger avec le token de cheneliere, le lien va d'abbord pointer vers clogin avec le user, le token, l'expiration et le isbn:

cheneliere.uniksim.com/clogin?username=test@iplusinteractif.com&token=59306298493CBB05D3FCE13793A5227E&expiration=1561105287&isbn=SIM2765058038

 

Dans LoginController::cheneliereAutologin

 - Le server (uniksim/master) poke le serveur cheneliere pour savoir les produits de ce user.

 - Le serveur node.js est poker sur le port 8085 pour créer le user GameSparks

 - si c'est bon, on l'envoie vers le bon jeu avec le ISBN, et on lui donne le token et l'expiration

 

Dans le jeu, on va poker notre serveur avec

getcodeInfo/{productId?}/{token}/{expiration}
Notre server repoke cheneliere pour etre sur que ce user est bon, et envoie les login info au jeu,
dans LoginController::getLoginInfo
Dev Notes

Implémenter un nouveau jeu

Pour faire un nouveau jeu dans la structure il faut:

  • Dupliquer la structure de dossier dans Assets\GameSpecific\Ent1
  • Intégrer le jeu dans le login control
  • Mettre [gameUid]_login_subtitle et [gameUid]_login_title dans sharedText
  • Faire le skin pour le jeu
  • Faire les Doozy game spec
  • Faire les scenes de loading pour le jeu
  • Faire le static data du jeu
  • Faire les commandes spécifiques sur le serveur
  • ajouter le gameUid dans server.js
  • Faire la génération de résultats spécifique
  • Faire l'évaluation spécifique.
    • Scenario
    • Segment (if needed)
    • SimPerf
      • Ajouter les pondérations dans les Google Sheets

 

Scenario (Client)

  • Add ScenarioPages in GameSpecific/{GameUid}/Resources/data_{GameUid}
    • Create ScenarioSegGridControlBase if needed
  • Fill the Google Sheets
    • Do not forget to export the data
Dev Notes

Informations sur les jeux

Mk1

  • Score du produit
    • Éthique ou non (3 pts)
    • Couleur (1 pts)
    • Type de matériaux (1 pts)
  • Score de communication
    • Média 1 (1 pts)
    • Média 2 (1 pts)
  • Score du budget de communication
    • Budget / budget moyen dans le segment
  • Score de distribution
    • Type (1 pts)
    • Intensité (1 pts)
  • Score du budget de distribution
    • Budget / budget moyen dans le segment
  • Bonus de l'année de création du produit
    • 0 année depuis la création -> Bonus de 0.75
    • 1 année depuis la création -> Bonus de 1.1
    • 2 année depuis la création -> Bonus de 0.5
  • Score du prix 
    • Prix moyen du segment / prix de vente
  • Score d'un produit lancé 
    • ((Score du produit + Score de communication + Score du budget de communication + Score du budget de distribution + Bonus de l'année de création du produit) / 5) * score du prix * score de distribution
  • Calcul du nombre de produit vendu
    • Calcul le score de chaque produit lancé dans un même segment 
    • Calcul le nombre maximal de vente possible 
      •  

Mk2

Ent1

Hr1

Appartenance -> sur chaque type d'employé

  • Score de chaque année et s'ils sont là depuis longtemps
    • Moyenne du taux de rétention depuis le début (cap 80%)
    • taux appartenance pour année -> renvoyer / employée totaux
    •  cas (10 employé, 2 employés partent, 2 congédié (taux d'appartenance 60% qui est monté à 80% puisque minimum))

 

Mgt1

 

Dev Notes

Fix le changement d'email de chenelière

PhpMyAdmin

  1. Renommmer le "email" dans la table "users"
  2. Modifier le "code" dans "products_code"
  3. Dans gamesparks, changer le user aussi relié au compte
    1.  mettre l'acien user dans query: { "userName" : "shirleydgrace@yahoo.com_chen_4191" }
    2. et le changer pour le nouveau 
  4.  

Modifier le mot de passe du user

  1. Se connecter en tant que la personne sur test harness
  2. { "@class": ".ChangeUserDetailsRequest", "newPassword": "{new-email}_chen_{products_code:oid}" }

https://docs.gamesparks.com/tutorials/cloud-code-and-the-test-harness/changing-player-passwords.html

 

Dev Notes

ByYear vs ByModule

Generation Mode

  • ByYear

    • Bouton : Générer pour toutes les équipes de la simulation.
    • Calendrier : Générer pour toutes les équipes lorsque le champs "nextGenerate" est passé.  
  • ByModule

    • Bouton : Génère le module selectionné pour toutes équipes qui n'ont pas de temps supplémentaire et set le                  nextGenerate (situé dans "teamsModules") au temps désiré pour les équipes avec du temps                              supplémentaires.
    • Calendrier : Génère le module selectionné lorsque le "nextGenerate" est atteint. Les équipes avec du temps                         supplémentaires sont généré plutard (nextGenerate + temps supplémentaire).

 

Results generations

  • ByYear

    • est calculé à partir du yearData (situé dans "teams").
  • ByModule

    • est calculé à partir de "teamsModules".
      • Le seed permet d'avoir des résultats différents pour chaque équipe

 

Saved results

  • Dans les deux types, les résultats sont sauvés partiellement dans "teams" (seulement les résultats d'une équipe) et dans "results" (les résultats de toutes les équipes).

VS

  • Le code est séparé par le namespace "SimByModule" et "SimByYear" afin qu'une simulation n'est pas accès aux informations spécifique de l'autre type.

 

  • Classe (SimulationByYear)
    • Contient le status de l'année courante (started, generating, finished).
    • Des évènements par année.
    • Présence par année pour un étudiant. 
    • Année de pratique et réouvrir une année
  • Classe (SimulationByModule)
    • Permets d'ajouter module à la simulation ainsi que de le commencer et finir.
    • Ajouter du temps supplémentaires à une équipe sur un module.

Unity UI

Création de simulation

  • ByYear à un champ supplémentaire (Nombre maximum de générations).

Vu Global

  • ByYear

    • Contient le nombre d'année ainsi que l'état de chaque année.
  • ByModule

    • Contients une liste des modules actifs ainsi que l'état de chacun.

 

 

Dev Notes

Loop d'initialisation des données dans Unity

Version 2.0

Dev Notes

Unit Testing ACC1

Pour unit tester ACC1, il faut décomposer chaque module et chaque fonction en bout de code testable avec un input et un output attendu.

Chaque module a 4 étapes distinctes:

  1. Generate module type data
  2. Answer Key
  3. Grading
  4. Re-Assemble (un grading post-process)

Par exemple, on veut tester le module de remises de taxes, il faut commencer par voir ce qui se passe dans ce module.

On commence par généré une commande dans unity qui nous redémarre le module en pratique.

data = {
"commandUid":"restart_student_module",
"commandData": {
"teamUid":"be86465e-a8bf-42e5-bef1-447e94acc461",
"actUid":"91dc1bce-d867-4c27-872d-84bd41d56ae9",
"actModuleUid":"45d718be-2cab-4dcf-9328-737b46ed5ccd",
"moduleType":"practice",
"lastPraticeGrade":"-1"
}
};

Code standard

Server (BrainCloud: JavaScript)

Scripts Naming (Voir BrainCloud:Scripts)

  • On organise le nom des scripts de la manière suivantes : {folderName}_{subFolderName}_{ScriptName}
  • Dans le cas des scripts appelable par le client on ajoute "Cmd" comme prefix du "ScriptName"
  • Exemples: 
    • acc1_CmdCreateTeam (pour les commandes de create team)
    • ent1_Utils (pour les scripts utilaire spécifique à un jeu)
    • acc1_Bills
    • CmdSaveSegment (Pour une commande générique) 

 


Server (GS: JavaScript)

Collection

  • shortenedCollectionName = collectionName (collectionKey)
    • eval = evaluation (studentUid)
    • evalTeam = evaluationTeam (teamUid)
    • result = results (simUid)
    • sim = simulation (simUid)
    • team = teams (teamU
    • user = userdetails (userUid)

How to name Events (generic code)

  • {Action}{Collection}{WhatItDoes} PascalCase
    • GetSimGroup
    • CreateTeam
    • CreateSimCustomEval
    • GetEvalScenario
    • JoinSim
    • JoinTeam
    • ReopenSimYear
    • EditUserStudent

How to get a Collection

  • var {shortenedCollectionName}Entry = API.getItem("{collectionName}", {collectionKey}).document();
    var {shortenedCollectionName}Data = {shortenedCollectionName}Entry.getData();

Set a Response

  • use sendMessageTo{Receiver}({specificToTheMethod}, {messageType}, {messageData}) when you MODIFY data
    •  messageType
      • Actions
        • deleted, changed, created
      • {dataObject}_{field}_{action}
        • ex.: team_cash_changed
      • {dataObject}_{fieldOne}_{fieldTwo}_{etc.}_{action}
        • ex.: sim_year_yearState_changed
      • {dataObject}_{fieldParent}_{fieldChild}_{etc.}_{action}
        • ex.: team_yearData_factory_changed
    • messageData
      • Information you want to send to the Client.
      • send teamUid and/or studentUid when you send message to teacher (so that the teacher can filter the message)
  • use Spark.setScriptData('{ObjectName}', {Object}) when you GET data

Client (VS: C#)

Standard

  • Cases
    • Class PascalCase
    • Methods PascalCase
    • Private members  _camelCase
    • Public members camelCase
  • Document
    • Formatting order (each of those section should be surrounded by region with sub-region if necessary)
      1. Public members
      2. Public property
      3. Constructors
      4. Methods
      5. Private property
      6. Private Members
  • Whenever possible surround code with #region MyRegion {code} #endregion to make the .cs clearer
  • use Stubs when the interface only need partial information instead of loading all the data.
    • exemples : studentStub, EvalStudentStub.
  • if you want to do Lazy loading or Lazy Initialization make a Property (the reference is always private)
    • public : under public members
    • private : over private members
    • ex.: 
      private Dictionary<string, TextMeshProUGUI> TeamEvalTexts
      {
      get
      {
      if (_teamEvalTexts == null)
      {
      _teamEvalTexts = new Dictionary<string, TextMeshProUGUI>();
      _teamEvalTexts[Simulation.SIM_PERF_NAME] = simPerfNoteText;
      _teamEvalTexts[Simulation.LOGBOOK_NAME] = logbookNoteText;
      }
      return _teamEvalTexts;
      }
      }
      private Dictionary<string, TextMeshProUGUI> _teamEvalTexts;
  • Plugin edition :
//UNIKSIM BEGIN [name] [reason]
//old code in comment
....
//UNIKSIM END

Data

  • SetListeners in the data contructors
  • the data Update itself and fire a relevent Action
  • Filter the Response with teamUid and/or studentUid when the teacher receive the message

Client (Unity)

Boutons

  • ConfirmButton are always to the right 
  • CancelButton are always to the left

Prefabs

  • Use the basic Prefab  when ever you need them. (NormalButton, EditButton, InputText, Dropdown, etc.)

Popup

  • X on the top-right corner VS CancelButton
    • When there is no action, only information, put X on the top-right corner and close on click outside.
    • When there is an action,  inputs, put a CancelButton with a confirmation to close.


Google sheets 

  • shared_text is used by all the projects.
  • Each project has a Google Sheet containing their project specific texts.

 

Client Unity : Structure

Structure générale

Control (UI)

  • Script utilisé directement dans les différents prefabs en tant que component. 
  • Contrôle les interfaces et 

Build & Deploy

Pour builder et déployer un nouveau build:

Cloud Build 

  • Incérmenter version.txt manuellement
  • Pusher le fichier texte
  • aller sur https://developer.cloud.unity3d.com/
  • Choisir uniksim
  • Appuyer sur le bouton Build:Build
  • Attendre que le build se termine (environ 30 minutes)
  • downloader le zip
  • extraire dans game\Build
  • ouvrir un shell MINGW64 (Ouvrir Git bash via Git Extensions)
  • executer ./deployBuild.sh
    • Si une erreur bloque le déploiement :
      • Ouvrir PuTTY, accéder à l'onglet Session, charger les paramètres par défaut et sauvegarder (Même si le port 22 est bel et bien inscrit, il ne semble pas pas être chargé correment.)
      • Ouvrir un Command Prompt et inscrire la commande suivante : plink.exe forge@198.199.78.53
  • Changer la version du build dans MySql
  • Builder une version du server dans gamesparks
    • Home page
    • Snapshots
    • Create
    • Publish après
    • 2019-11-18-10_10_13-Uniksim---Live---GameSparks-Portal.png

Setup local server

  • Clone the uniksim depot with the old_login branch : https://bitbucket.org/gypso/uniksim.git
  • Run npm install in the main directory
  • Install and run Xampp v7.3.31 (Installation location (by default) -> C:\xampp )
  • Make the <uniksimroot>/public folder the root of a php virtual host
    • Add the following lines to C:\xampp\apache\conf\extra\httpd-vhosts.conf

<VirtualHost *:80>
     ServerAdmin webmaster@localhost
     DocumentRoot <uniksimroot>/public
     ServerName uniksimdev
     ServerAlias www.uniksimdev
     <Directory "<uniksimroot>/public">
         Options All
         AllowOverride All
         Require all granted
     </Directory>
</VirtualHost>


    • Add the following lines to C:\windows\system32\drivers\etc\hosts

127.0.0.1 localhost

127.0.0.1 uniksimdev


  • Edit your user variables
    • Right-click on your Computer in the File Explorer and go to Properties
    • Go to the Advanced system settings and click on Environment Variables
    • Find Path in the system variables box, and add the following path to the end of the Path variable string.

                   ;C:\xampp\php


  • Run php composer.phar install in the main directory (<uniksimroot>)
  • Start the Apache and the MySQL modules in the Xampp Control Panel
  • Setup in phpMyAdmin
    • Open the Admin panel of the MySQL module in the Xampp Control Panel
    • Create a new database named uniksim with the utf8_general_ci collation
    • Within the SQL tab in the new database, setup the database structure by running the content of <uniksimroot>/uniksim_example.sql 
  • Setup the game
    • Get the current game version for the client in the constant table within the uniksim database in phpMyAdmin and add the folders builds/<client_version> in <uniksimroot>/public/
    • Copy your Unity build to the <client_version> folder
  • Duplicate <uniksimroot>/.env.example and rename it .env
    • Insure the name of the database is correct
      • DB_DATABASE=uniksim
        DB_USERNAME=root
        DB_PASSWORD=''
  • Install Redis for Windows
  • Install Visual Studio Code and open it, drag and drop <uniksimroot>/node.js, and run the
    GameSparks Live or preview configuration

 

 

 

 

 

BrainCloud

Scripts

  • On organise le nom des scripts de la manière suivantes : {folderName}_{subFolderName}_{ScriptName}
  • Dans le cas des scripts appelable par le client on ajoute "Cmd" comme prefix du "ScriptName"
  • Exemples: 
    • acc1_CmdCreateTeam (pour les commandes de create team)
    • ent1_Utils (pour les scripts utilaire spécifique à un jeu)
    • acc1_Bills
    • CmdSaveSegment (Pour une commande générique) 

 

Faire qu'un user se log comme un autre user

Si un étudiant se fait changer de date par Cheneiliere en cours de session et qu'il veut continuer sur son ancien user, nous pouvons editer l'attribute userUid du User braincloud.

C'est le même système que pour les user copiés.

Message/Events

  • Code clients : Assez simple, On ajoute les binding pour get les events dans le backendBrainCloud qui ajouterai une entrée dans le messageDispatcher.
  • Code Serveur : Il faudrait faire un systeme plus centralisé sur le serveur afin de ne pas avoir plusieurs moyen de send des events
  • Les events semblent mieux que les messages pour gerer notre systeme de live update

 

Documents Save/Load 

  • On peut modifier le système déjà mis en place, documents_utils, et cela devrait être fonctionnel pour tout le monde.
  • Create : Dans gamesparks lorsqu'on crée un object, il n'est pas directement créer, il faut le save par la suite sinon il ne sera pas persisté. Cependant, dans braincloud lorsqu'on crée un object il est directement créer avec les informations spécifiuer.

 

Document Queries

  • Possible d'ajouter des single et des compound indexes en json (MongoDB). Il n'y a pas beaucoup de documentation sur BrainCloud sur les indexes, mais il y en a dans celle de MongoDB.
  • La boîte Options dans le popup de création d'indexes sert pour ajouter les propriétés aux indexes (comme sparse, TTL, case insensitive).
  • Portal: Plus de capacités de recherche que GameSparks, mais sans l'interface user-friendly. Les Where Queries sont faites avec du json. Pour faire une query avec un champ spécifique du document, il faut utiliser le prefix "data." La documentation en lien avec les queries est assez simple et compréhensible.
  • Code: Pour un élément spécifique, il est possible d'utiliser getRandomEntitiesMatching. Pour plusieurs éléments (comme pour obtenir toutes les simulations d'un prof), il serait plus favorable d'utiliser getEntityPage.
  • Semble avoir la même limite de 100 objets retournés pour une requête particulière. La documentation suggère d'utiliser getEntityPageOffset pour obtenir le reste des objets (ex: si 150 objets sont demandés). ***À tester***

 

Scheduled Scripts

  • En utilisant la Job Queue dans l'onglet Monitoring, puis Global Monitoring, il est très facile d'exécuter une job planifiée et il est possible d'exécuter le même script à nouveau en appelant scheduleRunScriptMillisUTC (ne fonctionne pas pour l'instant) scheduleRunScriptUTC (depricated depuis la version 4.6) du script service.
  • En se construisant un script Template pour les Scheduled Jobs, il sera possible compartimenté les scripts appelés dans des jobs individuelles.
  • Malgré un script de ScheduledJob qui permettrait d'ignorer les délais d'exécution, certains délais supplémentaires sont ajouter en recréant une nouvelle job.
  • param pour schedule la job: /_job/_scheduled_job

 

{ 
    "timerDelay": 1, 
    "scriptName": "/_job/generate_results_job", 
    "scriptData": {},
    "lastExecutedTime" : -1
}

 

REST API / nodeJS Client

  • We can use https://www.npmjs.com/package/braincloud?activeTab=readme in combination with the S2S request to call differents scripts
  • The nodejs is relatively simple, the hard thing is to find the right objectName or methodName but they can be found here http://getbraincloud.com/apidocs/apiref/?java#capi 
    ex.:
    var scriptData = {
    "profil1": "ec11299f-ce5c-4485-9725-072205223783"
    };
    brainCloud.script.runScript("SendMessage", scriptData, OnSendMessageResponse);
  • Pour la création d'utlisateur on n'a pas accès aux bonne méthodes à partir de nodeJS mais, on peut run un script qui, lui, peut créer un user. Sinon notre autre option serait de s'authentifier directement comme le user que nous voulont créer à partir de nodeJS

 

Deployment to Live

  • Les Global Entities doivent être manuellement exporter/importer lors d'un déploiement. Étant donné qu'il est possible de migrer le data des custom entities avec le déploiement, il serait plus avantageux de les utiliser pour le static data.

 

 

Acc

Acc

Correction Acc1

 

Préparation


Avant de commencer la correction, plusieurs informations sont stocker dans differents dictionnaires afin qu'elles soient plus facile d'accès par la suite.

Par la suite, le score des différents modules pages est calculés.

Journal des Achats, Ventes, Encaissements, Décaissements, Salaires 
  1. Regarder chacune des rows de la table
    1. Certains champs sont requis pour effectuer la correction d'une rangée (dépends du modulePage)
      • si manquant, ajoute une erreur ("row_input_value_missing")
    2. Trouver la facture de reference avec les champs appropriées (dépend du modulePage)
      • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_not_found")
    3. Correction des différents inputs de la row selon les informations de la facture trouvée
      • Voir la section, Aide à la correction 1
    4. Vérifier que les identifiants ne sont pas déjà utilisé
      • Voir la section, Aide à la correction 2
  2. Vérifier que toutes les factures sont présentes
    • s'il manque des factures, ajoute l'erreur ("bill_missing")
  3. Calculer le score total du journal
    • s'il n'y a pas de rows dans la table, ajoute l'erreur ("empty_table")

 

Grand livre auxiliaire des Fournisseurs/Clients
  1. Vérifier qu'il y a des Fournisseurs/Clients d'ajouter
    • s'il y en a pas, ajoute l'erreur ("no_dynamic_dropdown_data")
  2. Pour chacun des Fournisseurs/Clients, faire les vérification suivantes
    1. Vérifier les conditions de la compagnie
      • Si la condition choisi n'est pas la bonne, ajouter l'erreur ("dynamic_dropdown_data_secondary_wrong_answer")
    2. Vérifier qu'il y a des décisions prise pour le Fournisseurs/clients
      • s'il y en a pas, ajoute l'erreur ("empty_table")
    3. Pour chacune des rows du Fournisseurs/clients, effectuer les vérification suivantes
      1. Vérifier l'ordre des lignes selon la date
        • s'il ne le sont pas, ajoute l'erreur ("row_wrong_order")
      2. Trouver la ligne de reference (une ligne des Journaux) avec les champs appropriées (dépend du modulePage)
        • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_not_found")
      3. Correction des différents inputs de la row selon les informations de le ligne de référence trouvée et de la balance qui est modifier selon les autres inputs de la row
        • Voir la section, Aide à la correction 1
      4. Vérifier que les identifiants ne sont pas déjà utilisé
        • Voir la section, Aide à la correction 2
    4. Vérifier qu'il y a des lignes de présentes
      • s'il y en a pas, ajoute l'erreur ("empty_table")
    5. Vérifier que toutes les rows sont présentes
      • si ce n'est pas le cas, ajoute l'erreur ("referenced_row_missing") 
    6. Calculer le score de la table
  3. Calculer le score total du modulePage
Grand livre
  1. Calculer la balance de tout les comptes ainsi que les montants finaux du  journal general(Cela sera utilisés durant la correction).
  2. Pour chacune des tables (chaque table est associé à un compte)
    1. Pour chacune des rows dans la table 
      1. Vérifier l'ordre des rows avec la date
        • si l'ordre n'est pas le bon, ajoute l'erreur ("row_wrong_order") 
      2. Trouver la ligne de reference (une ligne des Journaux) avec les champs appropriées (dépend du modulePage)
        • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_missing")
      3. Correction des différents inputs de la row selon les informations du compte de référence trouvée et de la balance qui est modifier selon les autres inputs de la row
        • Voir la section, Aide à la correction 1
      4. Vérifier que les identifiants ne sont pas déjà utilisé
        • Voir la section, Aide à la correction 2
    2. Vérifier qu'il y a des lignes de présentes
      • s'il y en a pas, ajoute l'erreur ("empty_table")
    3. Vérifier que toutes les comptes sont présents
      • si ce n'est pas le cas, ajoute l'erreur ("referenced_page_missing") 
    4. Calculer le score de la table
  3. Vérifier que tout les comptes soit présents
    • si un compte n'est pas présent, ajoute l'erreur ("account_empty")
  4. Calculer le score total du modulePage
    1. s'il n'y a pas de comptes, ajoute l'erreur ("no_accounts")
Journal Général
  1. Trier les differentes sections (écritures) du modulePage en plusieurs differentes catégories (charges, produits, équité).
  2. Vérifier l'ordre des rows dans les catégories, 
    • s'il ne sont pas dans le bon ordre, ajoute l'erreur ("row_wrong_order") 
  3. Pour chacune des rows des catégories 
    1. Correction des différents inputs de la row selon les informations du compte de référence et de la catégorie
      • Voir la section, Aide à la correction 1
    2. Vérifier que les identifiants ne sont pas déjà utilisé
      • Voir la section, Aide à la correction 2
  4. Vérifier que tout les comptes "produit" ou "charges" sont bien présents
    • S'il en manquent, ajoute l'erreur ("table_account_missing")
  5. Calculuer le score final du journal
    • Si une catégorie est vide, ajoute l'erreur ("group_empty")
Balance de vérification
  1. Regarder chacune des rows de la table
    1. Certains champs sont requis pour effectuer la correction d'une rangée (Numero de compte, nom de compte)
      • si manquant, ajoute une erreur ("row_input_value_missing")
    2. Vérifier que l'ordre de la row est le bon
      • s'il l'ordre n'est pas le bon, ajoute l'erreur ("row_wrong_order")
    3. Correction des différents inputs de la row selon les informations du compte trouvé
      • Voir la section, Aide à la correction 1
    4. Vérifier que les identifiants ne sont pas déjà utilisé
      • Voir la section, Aide à la correction 2
  2. Vérifier que tous les comptes sont présents
    • si un compte est manquant, ajoute l'erreur ("table_account_missing")
  3. Vérifier que le module page n'est pas vide
    1. si c'est le cas, ajoute l'erreur ("empty_table")
  4. Calculer le score du module page

 

État des résultats
  1. Pour chaque section de la table
    1. Pour chaque rows de la section
      1. Trouver le compte de référence
        • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_missing")
      2. Vérifier que le compte est dans la bonne section (Chaque section à des comptes spécifiques)
        • Si le compte n'est pas dans la bonne section, ajoute l'erreur ("row_wrong_section")
      3. Correction des différents inputs de la row selon les informations du compte de référence trouvée et de la balance qui est modifier selon les autres inputs de la row
        • Voir la section, Aide à la correction 1
      4. Vérifier que les identifiants ne sont pas déjà utilisé
        • Voir la section, Aide à la correction 2
  2. Correction des différents inputs de la table (leurs valeurs dépends de la valeur des inputs de la table)
    • Voir la section, Aide à la correction 1
  3. Vérifier que tout les comptes sont présents
    • s'il en manque, ajoute l'erreur ("table_account_missing")
  4. Calculer de score des options de la table
    • Voir la section, Aide à la correction 3
  5. Calculer le score final du journal
    • Si une catégorie est vide, ajoute l'erreur ("empty_table")
État des capitaux propres
  1. Pour chaque rows de la table
    1. Trouver le compte de référence
      • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_missing")
    2. Correction des différents inputs de la row selon les informations du compte de référence trouvée et de la balance qui est modifier selon les autres inputs de la row
      • Voir la section, Aide à la correction 1
    3. Vérifier que les identifiants ne sont pas déjà utilisé
      • Voir la section, Aide à la correction 2
  2. Correction des différents inputs de la table (leurs valeurs dépends de la valeur des inputs de la table)
    • Voir la section, Aide à la correction 1
  3. Calculer de score des options de la table
    • Voir la section, Aide à la correction 3
  4. Calculer le score final du journal
    • Si une catégorie est vide, ajoute l'erreur ("empty_table")
Bilan
  1. Pour chaque section de la table
    1. Pour chaque rows de la section
      1. Trouver le compte de référence
        • si la référence n'est pas trouvée, ajoute une erreur ("row_reference_missing")
      2. Vérifier que le compte est dans la bonne section (Chaque section à des comptes spécifiques)
        • Si le compte n'est pas dans la bonne section, ajoute l'erreur ("row_wrong_section") 
      3. Correction des différents inputs de la row selon les informations du compte de référence trouvée et de la balance qui est modifier selon les autres inputs de la row
        • Voir la section, Aide à la correction 1
      4. Vérifier que les identifiants ne sont pas déjà utilisé
        • Voir la section, Aide à la correction 2
  2. Correction des différents inputs de la table (leurs valeurs dépends de la valeur des inputs de la table)
    • Voir la section, Aide à la correction 1
  3. Vérifier que tout les comptes sont présents
    • s'il en manque, ajoute l'erreur ("table_account_missing")
  4. Calculer de score des options de la table
    • Voir la section, Aide à la correction 3
  5. Calculer le score final du journal
    • Si une catégorie est vide, ajoute l'erreur ("empty_table")

 

  •  

Aide à la correction

  1. Méthodologie pour corriger les bonne réponses d'une série d'input
    1. Regarder chacun des inputs et les comparé a une liste de bonne réponse
      • Si la réponses d'input est mauvaise, ajoute une erreur ("row_input_value_wrong_answer")
      • Si l'input n'as pas de valeur, ajoute l'erreur ("row_input_value_missing")
      • si l'input à une valeur mais ne devrait pas encore avoir, ajoute l'erreur ("row_input_value_should_be_empty")
  2. Vérifier que la référence d'une row n'est pas utiliser à multiples reprises
    1. Comparer les identifiants envoyer avec les identifiants des autres rows  
      • si une autre row à les même identifiants, conserver le meilleur score et ajoute l'erreur ("row_reference_used") 
  3. Méthodologie pour calculer le score des options d'un module page
    1. Les informations pour les options voulu sont stocker dans le staticData 
      • Si les critère ne sont pas respecter, 3 erreurs peuvent se produire pour les options d'input dans une row
        • Si l'input à une options mais ne devrait pas l'avoir, ("row_input_option_should_be_empty")
        • Si l'input à la mauvaise réponse, ("row_input_option_wrong_answer")
        • Si l'input n'a pas d'option mais devrait en avoir, ("row_input_option_missing")
      • et 3 autres erreurs sont possible pour les options d'input dans une table
        • Si l'input à une options mais ne devrait pas l'avoir, ("table_input_option_should_be_empty")
        • Si l'input à la mauvaise réponse, ("table_input_option_wrong_answer")
        • Si l'input n'a pas d'option mais devrait en avoir, ("table_input_option_missing")

 

Acc

Exemple de donnée d'une équipe pour un module (Module_Test)

{
  "uid": "7200188c-a8e6-4904-a92b-b8bbf64086f9-module_TEST",
  "simUid": "0a189c03-43db-4585-a1bd-171d2c6ec3ff",
  "gameUid": "acc1",
  "teamUid": "7200188c-a8e6-4904-a92b-b8bbf64086f9",
  "moduleUid": "module_TEST",
  "moduleTypesData": {
    "practice": {
      "seed": 2032993953,
      "pagesData": {
        "payroll_journal": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "7ca74915-56fe-4452-8290-141d6ed0ac0d"
                  ],
                  "rows": {
                    "7ca74915-56fe-4452-8290-141d6ed0ac0d": {
                      "inputs": {
                        "employee": {
                          "value": "employee_1"
                        },
                        "date": {
                          "value": "2020-07-02"
                        },
                        "amount_hours": {
                          "value": "38.00"
                        },
                        "hourly_rate": {
                          "value": "17.07"
                        },
                        "salaries": {
                          "value": "648.66"
                        },
                        "rrq_to_pay": {
                          "value": "38.27"
                        },
                        "rqap_to_pay": {
                          "value": "3.20"
                        },
                        "employment_insurance_to_pay": {
                          "value": "7.65"
                        },
                        "provincial_tax_to_pay": {
                          "value": "97.30"
                        },
                        "federal_tax_to_pay": {
                          "value": "97.30"
                        },
                        "salaries_to_pay": {
                          "value": "404.94"
                        },
                        "bill_id": {
                          "value": "1921"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "withdrawals_journal": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "453f40df-950e-4fe2-bcbf-618811cd7b7e",
                    "d8d50ce1-d048-48ba-ab06-994aa9561b11"
                  ],
                  "rows": {
                    "453f40df-950e-4fe2-bcbf-618811cd7b7e": {
                      "inputs": {
                        "date": {
                          "value": "2020-07-02"
                        },
                        "company_uid": {
                          "value": "employee_1"
                        },
                        "bill_id": {
                          "value": "1918"
                        },
                        "cashings": {
                          "value": "404.94"
                        },
                        "salaries_to_pay": {
                          "value": "404.94"
                        },
                        "report_to_account": {
                          "value": "1"
                        }
                      }
                    },
                    "d8d50ce1-d048-48ba-ab06-994aa9561b11": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-22"
                        },
                        "company_uid": {
                          "value": "motor_company"
                        },
                        "bill_id": {
                          "value": "1919"
                        },
                        "cashings": {
                          "value": "67596.84"
                        },
                        "purchases": {
                          "value": ""
                        },
                        "report_to_account": {
                          "value": "1"
                        },
                        "providers": {
                          "value": "67596.84"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "purchases_journal": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "4b8da7f3-8cf9-4de6-bda9-d62aef2ce493"
                  ],
                  "rows": {
                    "4b8da7f3-8cf9-4de6-bda9-d62aef2ce493": {
                      "inputs": {
                        "company_uid": {
                          "value": "motor_company"
                        },
                        "date": {
                          "value": "2020-08-21"
                        },
                        "bill_id": {
                          "value": "127"
                        },
                        "providers": {
                          "value": "67596.84"
                        },
                        "purchases": {
                          "value": "58792.64"
                        },
                        "tps_to_receive": {
                          "value": "2939.63"
                        },
                        "tvq_to_receive": {
                          "value": "5864.57"
                        },
                        "report_to_account": {
                          "value": "1"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "providers_subledger": {
          "tables": {
            "motor_company": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "5a8f6c19-81ff-4e95-9baa-0d1263519ed4",
                    "da745157-f975-4b8e-85fe-b9d79e6f7e38",
                    "3600b4df-9958-4f95-9c02-0eca0b790f85"
                  ],
                  "rows": {
                    "5a8f6c19-81ff-4e95-9baa-0d1263519ed4": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-21"
                        },
                        "reference": {
                          "value": "purchases_journal_short"
                        },
                        "bill_id": {
                          "value": "127"
                        },
                        "balance": {
                          "value": "67596.84"
                        },
                        "credit": {
                          "value": "67596.84"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "da745157-f975-4b8e-85fe-b9d79e6f7e38": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-22"
                        },
                        "other_bill_id": {
                          "value": "check-1919"
                        },
                        "reference": {
                          "value": "withdrawals_journal_short"
                        },
                        "debit": {
                          "value": "67596.84"
                        },
                        "balance": {
                          "value": ""
                        },
                        "debit_credit": {
                          "value": ""
                        }
                      }
                    },
                    "3600b4df-9958-4f95-9c02-0eca0b790f85": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-22"
                        },
                        "other_bill_id": {
                          "value": "check-1919"
                        },
                        "reference": {
                          "value": "withdrawals_journal_short"
                        },
                        "debit": {
                          "value": "67596.84"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "clients_subledger": {
          "tables": {
            "client_15": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "97792d10-a5ba-4018-baad-81526f2e9e54",
                    "b82f9546-587c-4eef-876c-d87e3eb96db1"
                  ],
                  "rows": {
                    "97792d10-a5ba-4018-baad-81526f2e9e54": {
                      "inputs": {
                        "date": {
                          "value": "2020-05-12"
                        },
                        "bill_id": {
                          "value": "1920"
                        },
                        "reference": {
                          "value": "sales_journal_short"
                        },
                        "debit": {
                          "value": "68847.91"
                        },
                        "balance": {
                          "value": "68847.91"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        }
                      }
                    },
                    "b82f9546-587c-4eef-876c-d87e3eb96db1": {
                      "inputs": {
                        "other_bill_id": {
                          "value": "check-1755"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "credit": {
                          "value": "68847.91"
                        },
                        "date": {
                          "value": "2020-06-11"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "sales_journal": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "72b6098f-49da-4fa1-a937-69b18aca2918"
                  ],
                  "rows": {
                    "72b6098f-49da-4fa1-a937-69b18aca2918": {
                      "inputs": {
                        "date": {
                          "value": "2020-05-12"
                        },
                        "company_uid": {
                          "value": "client_15"
                        },
                        "report_to_account": {
                          "value": "1"
                        },
                        "bill_id": {
                          "value": "1920"
                        },
                        "clients": {
                          "value": "68847.91"
                        },
                        "sales": {
                          "value": "59880.76"
                        },
                        "tps_to_pay": {
                          "value": "2994.04"
                        },
                        "tvq_to_pay": {
                          "value": "5973.11"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "cashings_journal": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "5da0cd48-15ef-4770-88b2-4b696ac93557",
                    "8a3d0e7c-80a6-45f5-8715-1e9fdefdd316"
                  ],
                  "rows": {
                    "5da0cd48-15ef-4770-88b2-4b696ac93557": {
                      "inputs": {
                        "report_to_account": {
                          "value": "1"
                        },
                        "date": {
                          "value": "2020-06-11"
                        },
                        "company_uid": {
                          "value": "client_15"
                        },
                        "bill_id": {
                          "value": "1755"
                        },
                        "cashings": {
                          "value": "68847.91"
                        },
                        "clients": {
                          "value": "68847.91"
                        }
                      }
                    },
                    "8a3d0e7c-80a6-45f5-8715-1e9fdefdd316": {
                      "inputs": {
                        "company_uid": {
                          "value": "our_retail_sales"
                        },
                        "date": {
                          "value": "2020-08-28"
                        },
                        "cashings": {
                          "value": "2701.52"
                        },
                        "sales": {
                          "value": "2349.66"
                        },
                        "tps_to_pay": {
                          "value": "117.48"
                        },
                        "tvq_to_pay": {
                          "value": "234.38"
                        },
                        "report_to_account": {
                          "value": "1"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "ledger": {
          "tables": {
            "clients": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "fa840a02-81b5-4881-8add-503c9f6258cf",
                    "0dac078b-6ecf-4a40-bade-a183f31800d4"
                  ],
                  "rows": {
                    "fa840a02-81b5-4881-8add-503c9f6258cf": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "sales_journal_short"
                        },
                        "debit": {
                          "value": "68847.91"
                        },
                        "balance": {
                          "value": "68847.91"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        }
                      }
                    },
                    "0dac078b-6ecf-4a40-bade-a183f31800d4": {
                      "inputs": {
                        "credit": {
                          "value": "68847.91"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "sales": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "5559f52d-4629-40e4-b51e-84556d81006f",
                    "0f417b99-9b01-454b-ac47-767d4adbb32c",
                    "6648f48e-aac6-454b-88d3-e9a868c0e783"
                  ],
                  "rows": {
                    "5559f52d-4629-40e4-b51e-84556d81006f": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "sales_journal_short"
                        },
                        "credit": {
                          "value": "59880.76"
                        },
                        "balance": {
                          "value": "59880.76"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "0f417b99-9b01-454b-ac47-767d4adbb32c": {
                      "inputs": {
                        "credit": {
                          "value": "2349.66"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "balance": {
                          "value": "62230.42"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "6648f48e-aac6-454b-88d3-e9a868c0e783": {
                      "inputs": {
                        "debit": {
                          "value": "62230.42"
                        },
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "tps_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "90b193c3-4de1-444d-8ea7-6275b5a0bae8",
                    "5d127cc7-3eb2-49a5-b1a7-9aaaa42e870f"
                  ],
                  "rows": {
                    "90b193c3-4de1-444d-8ea7-6275b5a0bae8": {
                      "inputs": {
                        "credit": {
                          "value": "2994.04"
                        },
                        "reference": {
                          "value": "sales_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "balance": {
                          "value": "2994.04"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "5d127cc7-3eb2-49a5-b1a7-9aaaa42e870f": {
                      "inputs": {
                        "credit": {
                          "value": "117.48"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "balance": {
                          "value": "3111.52"
                        }
                      }
                    }
                  }
                }
              }
            },
            "tvq_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "a419a7bd-dcfe-4164-b06c-81d03535feca",
                    "05529076-f6ab-4477-9a8d-9732689af6ac"
                  ],
                  "rows": {
                    "a419a7bd-dcfe-4164-b06c-81d03535feca": {
                      "inputs": {
                        "credit": {
                          "value": "5973.11"
                        },
                        "balance": {
                          "value": "5973.11"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "sales_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "05529076-f6ab-4477-9a8d-9732689af6ac": {
                      "inputs": {
                        "credit": {
                          "value": "234.38"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "balance": {
                          "value": "6207.49"
                        }
                      }
                    }
                  }
                }
              }
            },
            "salaries": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "605e8613-3ee9-4c17-85a7-8e4e65592eb6",
                    "27aa78fb-152b-450a-aa0b-308b907e778c"
                  ],
                  "rows": {
                    "605e8613-3ee9-4c17-85a7-8e4e65592eb6": {
                      "inputs": {
                        "debit": {
                          "value": "648.66"
                        },
                        "balance": {
                          "value": "648.66"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "27aa78fb-152b-450a-aa0b-308b907e778c": {
                      "inputs": {
                        "credit": {
                          "value": "648.66"
                        },
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "rrq_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "631e4938-0213-4699-88cd-efee2eab5c0e"
                  ],
                  "rows": {
                    "631e4938-0213-4699-88cd-efee2eab5c0e": {
                      "inputs": {
                        "credit": {
                          "value": "38.27"
                        },
                        "balance": {
                          "value": "38.27"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "rqap_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "014b8383-ec9f-40d5-a40f-37b09c9a130f"
                  ],
                  "rows": {
                    "014b8383-ec9f-40d5-a40f-37b09c9a130f": {
                      "inputs": {
                        "credit": {
                          "value": "3.20"
                        },
                        "balance": {
                          "value": "3.20"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "employment_insurance_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "e3141192-e259-4239-a8b3-94d0911a6f3f"
                  ],
                  "rows": {
                    "e3141192-e259-4239-a8b3-94d0911a6f3f": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "credit": {
                          "value": "7.65"
                        },
                        "balance": {
                          "value": "7.65"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    }
                  }
                }
              }
            },
            "provincial_tax_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "c2aaaf47-9d93-479c-8cdf-f05f9c017c7f"
                  ],
                  "rows": {
                    "c2aaaf47-9d93-479c-8cdf-f05f9c017c7f": {
                      "inputs": {
                        "debit_credit": 
                        },
                        "balance": {
                          "value": "97.30"
                        },
                        "credit": {
                          "value": "97.30"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "federal_tax_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "325166c7-167a-4538-94dd-82a30e1c8c6f"
                  ],
                  "rows": {
                    "325166c7-167a-4538-94dd-82a30e1c8c6f": {
                      "inputs": {
                        "balance": {
                          "value": "97.30"
                        },
                        "credit": {
                          "value": "97.30"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "salaries_to_pay": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "0d3ea85c-29f9-45d0-a9a3-e369e26fb59d",
                    "472d65a3-ea4d-4e7a-8682-9a4212b0c7b2"
                  ],
                  "rows": {
                    "0d3ea85c-29f9-45d0-a9a3-e369e26fb59d": {
                      "inputs": {
                        "credit": {
                          "value": "404.94"
                        },
                        "balance": {
                          "value": "404.94"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "payroll_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "472d65a3-ea4d-4e7a-8682-9a4212b0c7b2": {
                      "inputs": {
                        "debit": {
                          "value": "404.94"
                        },
                        "reference": {
                          "value": "withdrawals_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "cashings": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "a1090fff-c9b1-4ad4-af6c-53ed4635d08d",
                    "7595b2dc-3256-4c5c-a70c-d5ae9becf2d4"
                  ],
                  "rows": {
                    "a1090fff-c9b1-4ad4-af6c-53ed4635d08d": {
                      "inputs": {
                        "credit": {
                          "value": "68001.78"
                        },
                        "balance": {
                          "value": "68001.78"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "withdrawals_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "7595b2dc-3256-4c5c-a70c-d5ae9becf2d4": {
                      "inputs": {
                        "debit": {
                          "value": "71549.43"
                        },
                        "balance": {
                          "value": "3547.65"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        },
                        "reference": {
                          "value": "cashings_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "providers": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "403da98b-72ef-4b15-b0d3-62ecea118478",
                    "1dc24abc-f2e0-4e90-8fcd-a2ef721adceb"
                  ],
                  "rows": {
                    "403da98b-72ef-4b15-b0d3-62ecea118478": {
                      "inputs": {
                        "debit": {
                          "value": "67596.84"
                        },
                        "balance": {
                          "value": "67596.84"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        },
                        "reference": {
                          "value": "withdrawals_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "1dc24abc-f2e0-4e90-8fcd-a2ef721adceb": {
                      "inputs": {
                        "credit": {
                          "value": "67596.84"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "purchases_journal_short"
                        }
                      }
                    }
                  }
                }
              }
            },
            "purchases": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "4aafac5f-e169-4277-b4fd-536b2853a049",
                    "349a39b5-f175-4a83-aa0e-c7776699bbef"
                  ],
                  "rows": {
                    "4aafac5f-e169-4277-b4fd-536b2853a049": {
                      "inputs": {
                        "debit": {
                          "value": "58792.64"
                        },
                        "balance": {
                          "value": "58792.64"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        },
                        "reference": {
                          "value": "purchases_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    },
                    "349a39b5-f175-4a83-aa0e-c7776699bbef": {
                      "inputs": {
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "credit": {
                          "value": "58792.64"
                        }
                      }
                    }
                  }
                }
              }
            },
            "tps_to_receive": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "6c856c2a-52ed-425a-a00c-6b9200cf26a0"
                  ],
                  "rows": {
                    "6c856c2a-52ed-425a-a00c-6b9200cf26a0": {
                      "inputs": {
                        "debit": {
                          "value": "2939.63"
                        },
                        "reference": {
                          "value": "purchases_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "balance": {
                          "value": "2939.63"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        }
                      }
                    }
                  }
                }
              }
            },
            "tvq_to_receive": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "8e3f5666-6e28-4b52-944e-e77f9bd7b25d"
                  ],
                  "rows": {
                    "8e3f5666-6e28-4b52-944e-e77f9bd7b25d": {
                      "inputs": {
                        "debit": {
                          "value": "5864.57"
                        },
                        "balance": {
                          "value": "5864.57"
                        },
                        "debit_credit": {
                          "value": "debit_short"
                        },
                        "reference": {
                          "value": "purchases_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            },
            "summary_results": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "8ae25bde-0008-4500-bfc9-d86c0ed7cd83",
                    "07d0de0f-c060-4e7e-870a-398253f0dcf4",
                    "b28de293-5fed-44f3-b8b8-63ec1e3c3faa"
                  ],
                  "rows": {
                    "8ae25bde-0008-4500-bfc9-d86c0ed7cd83": {
                      "inputs": {
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "credit": {
                          "value": "62230.42"
                        },
                        "balance": {
                          "value": "62230.42"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "07d0de0f-c060-4e7e-870a-398253f0dcf4": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "debit": {
                          "value": "59441.30"
                        },
                        "balance": {
                          "value": "2789.12"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        }
                      }
                    },
                    "b28de293-5fed-44f3-b8b8-63ec1e3c3faa": {
                      "inputs": {
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "debit": {
                          "value": "2789.12"
                        }
                      }
                    }
                  }
                }
              }
            },
            "our_company_capital": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "3417681b-e40a-4a31-8da9-546666cab847"
                  ],
                  "rows": {
                    "3417681b-e40a-4a31-8da9-546666cab847": {
                      "inputs": {
                        "credit": {
                          "value": "2789.12"
                        },
                        "balance": {
                          "value": "2789.12"
                        },
                        "debit_credit": {
                          "value": "credit_short"
                        },
                        "reference": {
                          "value": "general_journal_short"
                        },
                        "date": {
                          "value": "2020-08-31"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "trial_balance": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "d7137ecd-59b3-4886-ada8-84c3cb87c165",
                    "282f36e3-8efb-42b9-aa99-04f8a276e04c",
                    "673b9089-69ae-471d-adf0-6135f221ef4f",
                    "03d70141-af72-4d8f-8bf6-3a6c3e6992f9",
                    "afef2bd4-ce4a-40f2-8639-58f55c34e049",
                    "0fd3733f-1b0d-4bde-9d01-ab0e75fbaed0",
                    "48c16621-000b-4e8e-b6b5-5a3a1027cb6b",
                    "902a1eea-186d-4a55-a880-01905a04834a",
                    "f4c5eaad-9f97-4ace-9172-18d71f1a51f4",
                    "65b100fc-6c9c-4384-b0b5-b8baafec345b",
                    "a060b654-77b4-4ce6-854a-29bfc49630ac",
                    "5933c3e2-7624-49c6-a04e-9bae879433df",
                    "7107e62a-3d97-46f1-8288-da51a1a620ac",
                    "9480fb3a-a2d8-494e-8335-e72f2d827667",
                    "a160ab94-8494-4063-ab71-f245603a6b7e",
                    "53140098-e7ba-4790-89a4-813ee3b93ace",
                    "e58c3d8d-924c-4500-93a4-b084c5a13be5",
                    "7761dcc1-9f17-481e-907a-949d2ef21786",
                    "e7cdf168-a199-44e3-887f-8f536a31fe12",
                    "9d3bdce8-eae7-4395-a7ad-79f2b20aa875",
                    "ebd2fdef-6ea2-42d1-80ba-3f750eb028a5",
                    "d3eb1e1a-77e6-449a-a5ad-3d20ccc8b35f",
                    "819eed8e-5c49-4975-b4d8-3cbcca01a5b6",
                    "4d886dec-6101-4e57-9f1c-5d6d1dadac57",
                    "afdffb3c-0dbe-4aa3-a8c8-5266c797a357"
                  ],
                  "rows": {
                    "d7137ecd-59b3-4886-ada8-84c3cb87c165": {
                      "inputs": {
                        "account_nbr": {
                          "value": "1010"
                        },
                        "account_name": {
                          "value": "cashings"
                        },
                        "debit": {
                          "value": "3547.65"
                        }
                      }
                    },
                    "282f36e3-8efb-42b9-aa99-04f8a276e04c": {
                      "inputs": {
                        "account_nbr": {
                          "value": "1100"
                        },
                        "account_name": {
                          "value": "clients"
                        }
                      }
                    },
                    "673b9089-69ae-471d-adf0-6135f221ef4f": {
                      "inputs": {
                        "account_nbr": {
                          "value": "1105"
                        },
                        "account_name": {
                          "value": "tps_to_receive"
                        },
                        "credit": {
                          "value": ""
                        },
                        "debit": {
                          "value": "2939.63"
                        }
                      }
                    },
                    "03d70141-af72-4d8f-8bf6-3a6c3e6992f9": {
                      "inputs": {
                        "account_name": {
                          "value": "tvq_to_receive"
                        },
                        "account_nbr": {
                          "value": "1110"
                        },
                        "credit": {
                          "value": ""
                        },
                        "debit": {
                          "value": "5864.57"
                        }
                      }
                    },
                    "afef2bd4-ce4a-40f2-8639-58f55c34e049": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2100"
                        },
                        "account_name": {
                          "value": "providers"
                        }
                      }
                    },
                    "0fd3733f-1b0d-4bde-9d01-ab0e75fbaed0": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2305"
                        },
                        "account_name": {
                          "value": "tps_to_pay"
                        },
                        "credit": {
                          "value": "3111.52"
                        }
                      }
                    },
                    "48c16621-000b-4e8e-b6b5-5a3a1027cb6b": {
                      "inputs": {
                        "account_name": {
                          "value": "tvq_to_pay"
                        },
                        "account_nbr": {
                          "value": "2310"
                        },
                        "credit": {
                          "value": "6207.49"
                        }
                      }
                    },
                    "902a1eea-186d-4a55-a880-01905a04834a": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2350"
                        },
                        "account_name": {
                          "value": "salaries_to_pay"
                        }
                      }
                    },
                    "f4c5eaad-9f97-4ace-9172-18d71f1a51f4": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2360"
                        },
                        "account_name": {
                          "value": "rrq_to_pay"
                        },
                        "credit": {
                          "value": "38.27"
                        }
                      }
                    },
                    "65b100fc-6c9c-4384-b0b5-b8baafec345b": {
                      "inputs": {
                        "account_name": {
                          "value": "rqap_to_pay"
                        },
                        "account_nbr": {
                          "value": "2365"
                        },
                        "credit": {
                          "value": "3.20"
                        }
                      }
                    },
                    "a060b654-77b4-4ce6-854a-29bfc49630ac": {
                      "inputs": {
                        "account_name": {
                          "value": "provincial_tax_to_pay"
                        },
                        "account_nbr": {
                          "value": "2375"
                        },
                        "credit": {
                          "value": "97.30"
                        }
                      }
                    },
                    "5933c3e2-7624-49c6-a04e-9bae879433df": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2390"
                        },
                        "account_name": {
                          "value": "employment_insurance_to_pay"
                        },
                        "credit": {
                          "value": "7.65"
                        }
                      }
                    },
                    "7107e62a-3d97-46f1-8288-da51a1a620ac": {
                      "inputs": {
                        "account_nbr": {
                          "value": "2395"
                        },
                        "account_name": {
                          "value": "federal_tax_to_pay"
                        },
                        "credit": {
                          "value": "97.30"
                        }
                      }
                    },
                    "9480fb3a-a2d8-494e-8335-e72f2d827667": {
                      "inputs": {
                        "account_nbr": {
                          "value": "3100"
                        },
                        "account_name": {
                          "value": "our_company_capital"
                        }
                      }
                    },
                    "a160ab94-8494-4063-ab71-f245603a6b7e": {
                      "inputs": {
                        "account_nbr": {
                          "value": "3200"
                        },
                        "account_name": {
                          "value": "our_company_deposit"
                        }
                      }
                    },
                    "53140098-e7ba-4790-89a4-813ee3b93ace": {
                      "inputs": {
                        "account_nbr": {
                          "value": "3300"
                        },
                        "account_name": {
                          "value": "our_company_withdrawals"
                        }
                      }
                    },
                    "e58c3d8d-924c-4500-93a4-b084c5a13be5": {
                      "inputs": {
                        "account_nbr": {
                          "value": "4120"
                        },
                        "account_name": {
                          "value": "services_given"
                        }
                      }
                    },
                    "7761dcc1-9f17-481e-907a-949d2ef21786": {
                      "inputs": {
                        "account_nbr": {
                          "value": "4500",
                        },
                        "account_name": {
                          "value": "sales"
                        },
                        "credit": {
                          "value": "62230.42"
                        }
                      }
                    },
                    "e7cdf168-a199-44e3-887f-8f536a31fe12": {
                      "inputs": {
                        "account_nbr": {
                          "value": "4510"
                        },
                        "account_name": {
                          "value": "sales_returns_and_discounts"
                        }
                      }
                    },
                    "9d3bdce8-eae7-4395-a7ad-79f2b20aa875": {
                      "inputs": {
                        "account_nbr": {
                          "value": "4520"
                        },
                        "account_name": {
                          "value": "sales_deductions"
                        }
                      }
                    },
                    "ebd2fdef-6ea2-42d1-80ba-3f750eb028a5": {
                      "inputs": {
                        "account_nbr": {
                          "value": "5100"
                        },
                        "account_name": {
                          "value": "purchases"
                        },
                        "debit": {
                          "value": "58792.64"
                        }
                      }
                    },
                    "d3eb1e1a-77e6-449a-a5ad-3d20ccc8b35f": {
                      "inputs": {
                        "account_nbr": {
                          "value": "5110"
                        },
                        "account_name": {
                          "value": "purchases_returns_and_discounts"
                        }
                      }
                    },
                    "819eed8e-5c49-4975-b4d8-3cbcca01a5b6": {
                      "inputs": {
                        "account_nbr": {
                          "value": "5120"
                        },
                        "account_name": {
                          "value": "purchases_deductions"
                        }
                      }
                    },
                    "4d886dec-6101-4e57-9f1c-5d6d1dadac57": {
                      "inputs": {
                        "account_nbr": {
                          "value": "5300"
                        },
                        "account_name": {
                          "value": "salaries"
                        },
                        "debit": {
                          "value": "648.66"
                        }
                      }
                    },
                    "afdffb3c-0dbe-4aa3-a8c8-5266c797a357": {
                      "inputs": {
                        "account_nbr": {
                          "value": "5999"
                        },
                        "account_name": {
                          "value": "summary_results"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "inputs": {
            "end_date": {
              "value": "2020-08-31"
            }
          }
        },
        "general_journal": {
          "tables": {
            "default": {
              "sectionsIndex": [
                "one",
                "two",
                "three"
              ],
              "sections": {
                "one": {
                  "rowsIndex": [
                    "53197625-1da8-48b0-9e2c-f30b28f25b83",
                    "c6272574-2b83-4ffa-9858-887c1f055964"
                  ],
                  "rows": {
                    "c6272574-2b83-4ffa-9858-887c1f055964": {
                      "inputs": {
                        "reference": {
                          "value": "summary_results",
                          "options": {
                            "indent": 1
                          }
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "credit": {
                          "value": "62230.42"
                        },
                        "account_nbr": {
                          "value": "5999"
                        },
                        "debit": {
                          "value": ""
                        }
                      }
                    },
                    "53197625-1da8-48b0-9e2c-f30b28f25b83": {
                      "inputs": {
                        "reference": {
                          "value": "sales"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "debit": {
                          "value": "62230.42"
                        },
                        "account_nbr": {
                          "value": "4500"
                        },
                        "credit": {
                          "value": ""
                        }
                      }
                    }
                  }
                },
                "two": {
                  "rowsIndex": [
                    "b00afda1-81f2-4ace-ad50-aec862b59f71",
                    "699ef4b8-84c0-42a0-a9c5-4938b1b2d7c0",
                    "4f850148-e023-429a-bcc8-0a661aaf54c1"
                  ],
                  "rows": {
                    "4f850148-e023-429a-bcc8-0a661aaf54c1": {
                      "inputs": {
                        "reference": {
                          "value": "salaries",
                          "options": {
                            "indent": 1
                          }
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "credit": {
                          "value": "648.66"
                        },
                        "account_nbr": {
                          "value": "5300"
                        },
                        "debit": {
                          "value": ""
                        }
                      }
                    },
                    "b00afda1-81f2-4ace-ad50-aec862b59f71": {
                      "inputs": {
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "summary_results"
                        },
                        "debit": {
                          "value": "59441.30"
                        },
                        "account_nbr": {
                          "value": "5999"
                        },
                        "credit": {
                          "value": ""
                        }
                      }
                    },
                    "699ef4b8-84c0-42a0-a9c5-4938b1b2d7c0": {
                      "inputs": {
                        "reference": {
                          "value": "purchases",
                          "options": {
                            "indent": 1
                          }
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "credit": {
                          "value": "58792.64"
                        },
                        "account_nbr": {
                          "value": "5100"
                        },
                        "debit": {
                          "value": ""
                        }
                      }
                    }
                  }
                },
                "three": {
                  "rowsIndex": [
                    "24aa16b0-b1c9-4153-985c-c0627c438075",
                    "c43b3409-9398-4fb1-a793-27d8117f6b9f"
                  ],
                  "rows": {
                    "24aa16b0-b1c9-4153-985c-c0627c438075": {
                      "inputs": {
                        "debit": {
                          "value": "2789.12"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "summary_results"
                        },
                        "account_nbr": {
                          "value": "5999"
                        },
                        "credit": {
                          "value": ""
                        }
                      }
                    },
                    "c43b3409-9398-4fb1-a793-27d8117f6b9f": {
                      "inputs": {
                        "credit": {
                          "value": "2789.12"
                        },
                        "date": {
                          "value": "2020-08-31"
                        },
                        "reference": {
                          "value": "our_company_capital",
                          "options": {
                            "indent": 1
                          }
                        },
                        "account_nbr": {
                          "value": "3100"
                        },
                        "debit": {
                          "value": ""
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "statement_income": {
          "tables": {
            "default": {
              "sections": {
                "operating_income": {
                  "rowsIndex": [
                    "35021938-f789-4741-8b57-69ce9587ef23"
                  ],
                  "rows": {
                    "35021938-f789-4741-8b57-69ce9587ef23": {
                      "inputs": {
                        "text": {
                          "value": "sales"
                        },
                        "money2": {
                          "value": "62230.42",
                          "options": {
                            "underline": 1
                          }
                        },
                        "money1": {
                          "value": "62230.42"
                        }
                      }
                    }
                  }
                },
                "cost_of_goods_sold": {
                  "rowsIndex": [
                    "f7b1ca4f-a67b-4aef-814f-b98d847d82d4"
                  ],
                  "rows": {
                    "f7b1ca4f-a67b-4aef-814f-b98d847d82d4": {
                      "inputs": {
                        "text": {
                          "value": "purchases"
                        },
                        "money2": {
                          "value": "58792.64",
                          "options": {
                            "underline": 1
                          }
                        },
                        "money1": {
                          "value": "58792.64",
                          "options": {
                            "underline": 1
                          }
                        }
                      }
                    }
                  }
                },
                "operating_expenses": {
                  "rowsIndex": [
                    "salaries"
                  ],
                  "rows": {
                    "salaries": {
                      "inputs": {
                        "money2": {
                          "value": "648.66",
                          "options": {
                            "underline": 1
                          }
                        },
                        "money1": {
                          "value": "648.66",
                          "options": {
                            "underline": 1
                          }
                        },
                        "text": {
                          "value": "salaries"
                        }
                      }
                    }
                  }
                }
              },
              "inputs": {
                "end_date": {
                  "value": "2020-08-31"
                },
                "profit_margin": {
                  "value": "3437.78"
                },
                "net_profit": {
                  "value": "2789.12",
                  "options": {
                    "underline": 2
                  }
                }
              }
            }
          }
        },
        "statement_equity": {
          "tables": {
            "default": {
              "sections": {
                "default": {
                  "rowsIndex": [
                    "f760cbb2-b2ea-4dba-a802-38ca28cd78f2"
                  ],
                  "rows": {
                    "f760cbb2-b2ea-4dba-a802-38ca28cd78f2": {
                      "inputs": {
                        "text": {
                          "value": "net_profit"
                        },
                        "money2": {
                          "value": "2789.12",
                          "options": {
                            "underline": 1
                          }
                        },
                        "money1": {
                          "value": "2789.12",
                          "options": {
                            "underline": 1
                          }
                        }
                      }
                    }
                  }
                }
              },
              "inputs": {
                "start_capital": {
                  "value": "152737.00"
                },
                "end_capital": {
                  "value": "155526.12",
                  "options": {
                    "underline": 2
                  }
                }
              }
            }
          }
        },
        "balance_sheet": {
          "tables": {
            "default": {
              "sections": {
                "fixed_assets": {
                  "rowsIndex": [],
                  "rows": {}
                },
                "active_short_term": {
                  "rowsIndex": [
                    "a55691ba-98bb-43f8-9d9e-a863e5c47752",
                    "228f9a4f-cfc9-47d6-a116-aea6e967d542",
                    "b2fe6bd8-684b-4568-adc0-a699dc6e00cb"
                  ],
                  "rows": {
                    "228f9a4f-cfc9-47d6-a116-aea6e967d542": {
                      "inputs": {
                        "text": {
                          "value": "tps_to_receive"
                        },
                        "money2": {
                          "value": "2939.63"
                        }
                      }
                    },
                    "a55691ba-98bb-43f8-9d9e-a863e5c47752": {
                      "inputs": {
                        "text": {
                          "value": "cashings"
                        },
                        "money2": {
                          "value": "3547.65"
                        }
                      }
                    },
                    "b2fe6bd8-684b-4568-adc0-a699dc6e00cb": {
                      "inputs": {
                        "text": {
                          "value": "tvq_to_receive"
                        },
                        "money2": {
                          "value": "5864.57",
                          "options": {
                            "underline": 1
                          }
                        }
                      }
                    }
                  }
                },
                "passive_short_term": {
                  "rowsIndex": [
                    "ac741f08-8a90-4237-aa67-128ddcdbb2d1",
                    "84e08352-3983-4cd7-8fe8-cb8c82995370",
                    "e5795cfd-fc65-4c4c-a5a6-761ee88dde56",
                    "5596bd17-f932-4cff-9e36-15285be9626a",
                    "b23347f0-c647-4370-b366-5e65cebf5fda",
                    "b8f14675-28a0-4fbd-81ee-497bfbd8ac65",
                    "f93070f9-8ee6-45a0-b544-b8363d112a73"
                  ],
                  "rows": {
                    "ac741f08-8a90-4237-aa67-128ddcdbb2d1": {
                      "inputs": {
                        "text": {
                          "value": "tps_to_pay"
                        },
                        "money2": {
                          "value": "3111.52"
                        }
                      }
                    },
                    "84e08352-3983-4cd7-8fe8-cb8c82995370": {
                      "inputs": {
                        "text": {
                          "value": "tvq_to_pay"
                        },
                        "money2": {
                          "value": "6207.49"
                        }
                      }
                    },
                    "b23347f0-c647-4370-b366-5e65cebf5fda": {
                      "inputs": {
                        "text": {
                          "value": "provincial_tax_to_pay"
                        },
                        "money2": {
                          "value": "97.30"
                        }
                      }
                    },
                    "e5795cfd-fc65-4c4c-a5a6-761ee88dde56": {
                      "inputs": {
                        "text": {
                          "value": "rrq_to_pay"
                        },
                        "money2": {
                          "value": "38.27"
                        }
                      }
                    },
                    "f93070f9-8ee6-45a0-b544-b8363d112a73": {
                      "inputs": {
                        "money2": {
                          "value": "97.30",
                          "options": {
                            "underline": 1
                          }
                        },
                        "text": {
                          "value": "federal_tax_to_pay"
                        }
                      }
                    },
                    "b8f14675-28a0-4fbd-81ee-497bfbd8ac65": {
                      "inputs": {
                        "text": {
                          "value": "employment_insurance_to_pay"
                        },
                        "money2": {
                          "value": "7.65"
                        }
                      }
                    },
                    "5596bd17-f932-4cff-9e36-15285be9626a": {
                      "inputs": {
                        "text": {
                          "value": "rqap_to_pay"
                        },
                        "money2": {
                          "value": "3.20"
                        }
                      }
                    }
                  }
                }
              },
              "inputs": {
                "fixed_assets_total": {
                  "value": "0.00",
                  "options": {
                    "underline": 1
                  }
                },
                "active_total": {
                  "value": "12351.85",
                  "options": {
                    "underline": 2
                  }
                },
                "passive_short_term_total": {
                  "value": "9562.73"
                },
                "passive_equity_total": {
                  "value": "165088.85",
                  "options": {
                    "underline": 2
                  }
                },
                "equity_unique_owner_total": {
                  "value": "155526.12",
                  "options": {
                    "underline": 1
                  }
                },
                "active_short_term_total": {
                  "value": "12351.85"
                }
              }
            }
          }
        }
      },
      "bills": {
        "billsData": {
          "motor_company-send-127": {
            "uid": "motor_company-send-127",
            "billType": "provider",
            "billData": {
              "date": 1597979621257,
              "paidDate": 1598140584033,
              "billEntries": [
                {
                  "seededProductUid": "p_chlore_machine",
                  "quantity": 29
                },
                {
                  "seededProductUid": "p_chlore",
                  "quantity": 112
                },
                {
                  "seededProductUid": "p_robot_cleaner",
                  "quantity": 8
                },
                {
                  "seededProductUid": "p_winter_canvas",
                  "quantity": 10
                },
                {
                  "seededProductUid": "p_inflatables",
                  "quantity": 5
                },
                {
                  "seededProductUid": "p_paper_ribbon",
                  "quantity": 192
                },
                {
                  "seededProductUid": "p_led",
                  "quantity": 42
                },
                {
                  "seededProductUid": "p_treated_wood",
                  "quantity": 5
                },
                {
                  "seededProductUid": "p_water_heater",
                  "quantity": 15
                },
                {
                  "seededProductUid": "p_ladder",
                  "quantity": 30
                }
              ]
            },
            "senderCompanyUid": "motor_company",
            "receiverCompanyUid": "our_company",
            "billNumber": 127
          },
          "client_15-receive-1920": {
            "uid": "client_15-receive-1920",
            "billType": "client",
            "billData": {
              "date": 1589267904270,
              "paidDate": 1591899124557,
              "billEntries": [
                {
                  "seededProductUid": "c_in_pool_21ft",
                  "quantity": 1
                },
                {
                  "seededProductUid": "c_in_pool_24ft",
                  "quantity": 1
                },
                {
                  "seededProductUid": "c_above_pool_24ft",
                  "quantity": 1
                },
                {
                  "seededProductUid": "c_above_pool_21ft",
                  "quantity": 1
                },
                {
                  "seededProductUid": "c_mid_pool_21ft",
                  "quantity": 1
                },
                {
                  "seededProductUid": "c_mid_pool_24ft",
                  "quantity": 1
                }
              ]
            },
            "senderCompanyUid": "our_company",
            "receiverCompanyUid": "client_15",
            "billNumber": 1920
          },
          "client_15-send-1755": {
            "uid": "client_15-send-1755",
            "billType": "client_check",
            "billData": {
              "billUid": "client_15-receive-1920"
            },
            "senderCompanyUid": "client_15",
            "receiverCompanyUid": "our_company",
            "billNumber": 1755
          },
          "motor_company-receive-1919": {
            "uid": "motor_company-receive-1919",
            "billType": "provider_check",
            "billData": {
              "billUid": "motor_company-send-127"
            },
            "senderCompanyUid": "our_company",
            "receiverCompanyUid": "motor_company",
            "billNumber": 1919
          },
          "employee_1-receive-1921": {
            "uid": "employee_1-receive-1921",
            "billType": "employee",
            "billData": {
              "date": 1593648000000,
              "paidDate": 1593648000000,
              "billEntries": [
                {
                  "seededProductUid": "e_salary_service",
                  "quantity": 38
                }
              ]
            },
            "senderCompanyUid": "our_company",
            "receiverCompanyUid": "employee_1",
            "billNumber": 1921
          },
          "employee_1-receive-1918": {
            "uid": "employee_1-receive-1918",
            "billType": "employee_check",
            "billData": {
              "billUid": "employee_1-receive-1921"
            },
            "senderCompanyUid": "our_company",
            "receiverCompanyUid": "employee_1",
            "billNumber": 1918
          },
          "our_retail_sales-send-2020-08-28": {
            "uid": "our_retail_sales-send-2020-08-28",
            "billType": "retail_sales",
            "billData": {
              "date": 1598572800000,
              "billEntries": [
                {
                  "productDataUid": "rs_outdoor_sofa",
                  "price": 2349.66
                }
              ]
            },
            "senderCompanyUid": "our_retail_sales",
            "receiverCompanyUid": "our_company",
            "billNumber": 13234
          }
        },
        "billsOrder": [
          "employee_1-receive-1921",
          "employee_1-receive-1918",
          "client_15-send-1755",
          "motor_company-send-127",
          "motor_company-receive-1919",
          "client_15-receive-1920",
          "our_retail_sales-send-2020-08-28"
        ],
        "products": {
          "p_chlore_machine": {
            "productDataUid": "p_chlore_machine",
            "price": 58.15
          },
          "p_chlore": {
            "productDataUid": "p_chlore",
            "price": 39.24
          },
          "p_robot_cleaner": {
            "productDataUid": "p_robot_cleaner",
            "price": 840.38
          },
          "p_winter_canvas": {
            "productDataUid": "p_winter_canvas",
            "price": 107.41
          },
          "p_inflatables": {
            "productDataUid": "p_inflatables",
            "price": 55.91
          },
          "p_paper_ribbon": {
            "productDataUid": "p_paper_ribbon",
            "price": 7.9
          },
          "p_led": {
            "productDataUid": "p_led",
            "price": 30.06
          },
          "p_treated_wood": {
            "productDataUid": "p_treated_wood",
            "price": 1811.31
          },
          "p_water_heater": {
            "productDataUid": "p_water_heater",
            "price": 1845.67
          },
          "p_ladder": {
            "productDataUid": "p_ladder",
            "price": 170.46
          },
          "c_in_pool_21ft": {
            "productDataUid": "c_in_pool_21ft",
            "price": 13310.04
          },
          "c_in_pool_24ft": {
            "productDataUid": "c_in_pool_24ft",
            "price": 14616.43
          },
          "c_above_pool_24ft": {
            "productDataUid": "c_above_pool_24ft",
            "price": 6061.06
          },
          "c_above_pool_21ft": {
            "productDataUid": "c_above_pool_21ft",
            "price": 5104.07
          },
          "c_mid_pool_21ft": {
            "productDataUid": "c_mid_pool_21ft",
            "price": 9050.26
          },
          "c_mid_pool_24ft": {
            "productDataUid": "c_mid_pool_24ft",
            "price": 11738.9
          },
          "e_salary_service": {
            "productDataUid": "e_salary_service",
            "price": 17.07
          }
        },
        "companies": {
          "motor_company": {
            "companyDataUid": "motor_company",
            "discount": 5
          },
          "our_company": {
            "companyDataUid": "our_company",
            "discount": 0
          },
          "client_15": {
            "companyDataUid": "client_15",
            "discount": 0
          },
          "employee_1": {
            "companyDataUid": "employee_1",
            "discount": 0
          },
          "our_retail_sales": {
            "companyDataUid": "our_retail_sales",
            "discount": 0
          }
        }
      },
      "dynamicDropdownsData": {
        "provider": {
          "motor_company": {
            "condition": "0_0_n_30"
          },
          "piscina_max": {
            "condition": "2_10_n_30"
          }
        },
        "client": {
          "client_15": {
            "condition": "0_0_n_30"
          }
        }
      }
    }
  }
}
Acc

Création du corrigé Acc1

Étape 1: Trier les factures selon leur type

Les factures triées seront stocker dans un dictionnaire

Étape 2: Remplir les journaux avec les factures

 
1. Journals des achats (facture de type: "provider")

  1. Pour chacune des facture de type "provider", ajouter une row.
    1. (2pts) Date ->Date écrite sur la facture
    2. (2pts) Client à créditer -> Nom du fournisseur
    3. (1pts) Report au compte -> si la row a été reporter au Grand Livre aux.
    4. (Identifiant de la row) Facture -> le numero de la facture
    5. (4pts) Fournisseurs (crédit) -> le "Total" de la facture
    6. (4pts) Achats (débit) -> le "Sous-total" de la facture
    7. (2pts) Rendus et ravais sur achats (crédit) -> le rabais de la facture
    8. (2pts) TPS à recevoir (débit) -> le "TPS (5%)" de la facture
    9. (2pts) TVQ à recevoir (débit) -> le "TVQ (9.975%)" de la facture
2. Journals des ventes (facture de type: "client")

  1. Pour chacune des facture de type "client", ajouter une row.
    1. (2pts) Date ->Date écrite sur la facture
    2. (2pts) Client à débiter-> Nom du client
    3. (1pts) Report au compte -> si la row a été reporter au Grand Livre aux.
    4. (Identifiant de la row) Facture -> le numero de la facture
    5. (4pts) Clients (débit) -> le "Total" de la facture
    6. (4pts) Ventes (crédit) -> le "Sous-total" de la facture
    7. (2pts) Rendus et rabais sur ventes -> le rabais de la facture 
    8. (2pts) TPS à payer (crédit) -> le "TPS (5%)" de la facture
    9. (2pts) TVQ à payer (crédit) -> le "TVQ (9.975%)" de la facture
3. Journals des encaissements (facture de type: "client_check" et "retail_sales")

  1. Pour chacune des facture de type "client_check", ajouter une row.
    1. (2pts) Date ->Date écrite sur la facture
    2. (2pts) Nom du client ou explications -> Nom du client inscrit dans la section "Description"
    3. (2pts) Numéro du chèque -> le numero de chèque inscrit dans la section "Description"
    4. (2pts) Report au compte -> si la row a été reporter au Grand Livre aux.
    5. (2pts) Encaisse (débit) -> le montant inscrit dans la section "Total"
    6. (2pts) Clients (crédit) -> le montant inscrit dans la section "Total"
  2. Pour chacune des facture de type "retail_sales", ajouter une row.
    1. Date ->Date écrite sur la facture
    2. Nom du client ou explications -> "Ventes au comptant"
    3. Report au compte -> si la row a été reporter au Grand Livre aux.
    4. Encaisse (débit) -> le montant inscrit dans la section "Total"
    5. Ventes (crédit) -> le montant doit être calculer en retirant les taxes du "Total" ("Total" / 1.14975)
    6. TPS à payer (crédit) -> le montant doit être calculer (montant de ventes * 0.05)
    7. TVQ à payer (crédit) -> le montant doit être calculer (montant de ventes * 0.09975)
4. Journals des Décaissements (facture de type: "provider_check" et "employee_check")

 

 

  1. Pour chacune des facture de type "provider_check", ajouter une row.
    1. Date ->Date écrite sur la facture
    2. Nom du fournisseur ou du bénéficiaire -> Nom du Fournisseurs inscrit après "Payer à l'ordre de"
    3. Numéro du chèque -> le numero de chèque
    4. Report au compte -> si la row a été reporter au Grand Livre aux.
    5. Encaisse (crédit) -> le montant inscrit dans l'encadré à droite
    6. Fournisseurs (débit) -> le montant inscrit dans l'encadré à droite
  2. Pour chacune des facture de type "employee_check", ajouter une row.
    1. Date ->Date écrite sur la facture
    2. Nom du fournisseur ou du bénéficiaire -> Nom du Fournisseurs inscrit après "Payer à l'ordre de"
    3. Numéro du chèque -> le numero de chèque
    4. Report au compte -> si la row a été reporter au Grand Livre aux.
    5. Encaisse (crédit) -> le montant inscrit dans l'encadré à droite
    6. Salaires à payer (débit) -> le montant inscrit dans l'encadré à droite
5. Journals des salaires(facture de type: "employee")

 

 

  1. Pour chacune des facture de type "employee", ajouter une row.
    1. Date -> Date écrite sur la facture
    2. Nom du salarié -> Nom de l'employée écrit sous "Émise à"
    3. Taux horaire -> montant dans la section "Taux horaire" de la facture
    4. Nombre d'heures -> montant dans la section "Nombre d'heures" de la facture
    5. Salaires (débit) -> "Salaire brut" de la facture
    6. RRQ à payer (crédit) -> "RRQ" dans la secton "Retenus" de la facture
    7. RQAP à payer (crédit) -> "RQAP" dans la secton "Retenus" de la facture
    8. Assurance-emploi à payer (crédit) -> "Assurance-emploi" dans la secton "Retenus" de la facture
    9. Impôt provincial à payer (crédit) -> "Impôt provincial" dans la secton "Retenus" de la facture
    10. Impôt fédéral à payer (crédit) -> "Impôt fédéral" dans la secton "Retenus" de la facture
    11. Salaires à payer (crédit) -> "Salaire net" de la facture
    12. Numéro du relevé de paie -> le numéro de relevé de paie écrit sur la facture en haut à droite

Étape 3: Remplir les grands livres auxiliaires

1. Grand livre auxiliaire des fournisseurs

 

  1. Pour chacune des rows qui affecte un fournisseur dans le journal des achats/décaissements, ajouter une row. (les rows doivent être trier par date)
    1. Date -> Date de la row de référence
    2. Facture -> Si la row de référence vient du Journal des achats, écrire le numéro de la facture
    3. Libellé -> Si la row de référence vient du Journals des décaissements, écrire si c'est un chèque ou une note de crédit, et écrire le numéro de la facture
    4. Référence -> D'où vient la row de référence
    5. Débit -> Si la colonne de fournisseur de la row de référence est du type "débit", écrire le même montant
    6. Crédit -> Si la colonne de fournisseur de la row de référence est du type "crédit", écrire le même montant
    7. Solde -> montant du "solde" de la row précédente +/- le montant de débit/crédit de la row actuel
    8. Dt / Ct -> si le montant du solde est en Débit ou en Crédit
      2. Grand livre auxiliaire des clients

       

      1. Pour chacune des rows qui affecte un fournisseur dans le journal des ventes/encaissements, ajouter une row. (les rows doivent être trier par date)
        1. Date -> Date de la row de référence
        2. Facture -> Si la row de référence vient du Journal des ventes, écrire le numéro de la facture
        3. Libellé -> Si la row de référence vient du Journals des encaissements, écrire si c'est un chèque ou une note de crédit, et écrire le numéro de la facture
        4. Référence -> D'où vient la row de référence
        5. Débit -> Si la colonne de fournisseur de la row de référence est du type "débit", écrire le même montant
        6. Crédit -> Si la colonne de fournisseur de la row de référence est du type "crédit", écrire le même montant
        7. Solde -> montant du "solde" de la row précédente +/- le montant de débit/crédit de la row actuel
        8. Dt / Ct -> si le montant du solde est en Débit ou en Crédit

Étape 3: Remplir le grand livre et le journal général

1. Grand livre

  1. Remplir chacun des comptes disponible à l'aide des montants total afficher dans l'avant dernière ligne des journals (Achats, Ventes, Encaissements, Décaissements, Salaires)
    1. Date -> Date de la fin de l'exercise financier
    2. Référence -> de quel Journal vient le montant
    3. Débit ou Crédit -> Selon le type de la colonne du journals en question, écrire le montant du total (Avant dernière ligne)
    4. Solde -> montant du "solde" de la row précédente +/- le montant de débit/crédit de la row actuel
    5. Dt / Ct -> si le montant du solde est en Débit ou en Crédit
      2. Journal général

       

       

      1. Remplir le journal général à l'aide du solde final des comptes dans le Grand libre.
      2. 3 Sections qui regroupe des compte differents devront être présent: Produits, Charges et Équité.
      3. L'ordre de la section de produits ou de charges n'a pas d'importance mais, la section d'équité doit être à la fin.
      4. Dans le cas de la section de produits, les comptes doivent être en premier dans la section sans indentation et le sommaire des résultats doit être à la fin avec un niveau d'indentation de 1 
      5.  Pour le cas de la section de charges, c'est l'inverse, le sommaire des résultats doit être en premier sans indentation tandis que les comptes doivent être à la fin avec un niveau d'indentation de 1 
      6.  Pour le cas de la section d'équité, le placement dans la section dépend de si les charges sont plus haute que les produits. Si les Produits sont plus grand, le sommaire des résultats est en premier sans indentation et le compte de capitaux est en deuxième avec un niveau d'indentation de 1. Si les Charges sont plus grande, la section des capitaux est en premier sans indentation et le sommaire des résultats est en deuxième avec un niveau d'indentation de 1
      7. La valeur à écrire dans la section équité est la valeur absolue des produits moins les charges.
      8. Dans chaque section, l'entrée sur le sommaire des résultats sert à balancer la somme du reste de la section dans type opposée.
      9. Remplir une row
        1. Date -> date de fin de l'exercise financier
        2. Nom de compte -> Voir les informations en haut
        3. Numéro de compte -> numéro associé au nom du compte
        4. Débit -> Si le compte est de produits ou voir les informations en haut 
        5. Crédit -> Si le compte est de charges ou voir les informations en haut
3. Grand livre (Suite)

  1. Pour chacune des lignes dans le journal général, ajouter une ligne dans le compte approprié du Grand livre
    1. Date -> Date de la fin de l'exercise financier
    2. Référence -> Journal général
    3. Débit ou Crédit -> Selon le type de la colonne du montant, écrire le montant.
    4. Solde -> montant du "solde" de la row précédente +/- le montant de débit/crédit de la row actuel
    5. Dt / Ct -> si le montant du solde est en Débit ou en

Étape 4: Remplir la balance de vérification

1. Balance de vérification

  1. Pour chaque compte du grand livre, ajouter une ligne pour le compte correspondant (Trier par numéro de compte)
    1. Numéro de compte -> Numéro du compte 
    2. Nom du compte -> Nom du compte 
    3. Débit/Crédit -> Écrire le solde final du compte (Sans compter les lignes dont la référence est le journal général) dans la colonne que Dt/Ct indique et si le compte à un solde ne rien écrire dans aucun des deux champs 

Étape 5: Remplir les états financiers

1. État des résultats

  1. Section Produits d'exploitation 
    1. Ajouter une ligne pour chaque compte de produits et la valeur du compte dans l'input de gauche
    2. La dernière ligne de la section doit avoir le montant total de la section dans l'input de droite et avoir l'input de gauche avec un underline.
  2. Section Coût des marchandises vendues
    1. Ajouter une ligne pour chaque compte de charges (avec sous type Coût des marchandises vendues) et la valeur du compte dans l'input de gauche
    2. La dernière ligne de la section doit avoir le montant total de la section dans l'input de droite et avoir l'input de gauche et de droite avec un underline.
  3. Input de Marge bénéficiaire brute 
    1. Le montant de l'input est calculé à l'aide du total de la section Produits d'exploitation moins le total de la section Coût des marchandises vendues
  4. Section Charges d'exploitation 
    1. Ajouter une ligne pour chaque compte de charges (avec sous type Charges d'exploitation) et la valeur du compte dans l'input de gauche
    2. La dernière ligne de la section doit avoir le montant total de la section dans l'input de droite et avoir l'input de gauche et de droite avec un underline.
  5. Input de Bénéfice net 
    1. Le montant de l'input est calculé à l'aide de l'input Marge bénéficiaire brute moins le total de la section Charges d'eploitation
    2. Avoir deux underline.
2. État des capitaux propres

  1. Input de capital au début de l'exercise financier
    1. Capitals au départ de l'états financiers
  2. Pour les lignes, ajouter une ligne par choses qui impact le capital finaux de l'entreprise.
    1. Écrire le montant de l'impact dans l'input de gauche 
    2. La dernière ligne de la section doit avoir le montant total de la section dans l'input de droite et avoir l'input de gauche et de droite avec un underline.
  3. Input du capital à la fin de l'exercise financier
    1. Le montant de l'input est calculé à l'aide de l'input capital au début de l'exercise financier plus le total de la section Charges d'eploitation
      3. Bilan

      1. Section d'Actif à court terme
        1. Ajouter une ligne pour chaque compte d'actif à court terme et la valeur du compte dans l'input de gauche
        2. La dernière ligne doit avoir un underline sur l'input de gauche
      2. Input de Total d'actif à court terme
        1. Le montant de l'input est calculé à l'aide du total de la Section d'actif à court terme
      3. Section d'Immobilisations
        1. Ajouter une ligne pour chaque compte d'Immobilisations et la valeur du compte dans l'input de gauche
        2. La dernière ligne doit avoir un underline sur l'input de gauche
      4. Input de Total d'immobilisations
        1. Le montant de l'input est calculé à l'aide du total de la Section d'immobilisations
        2. Doit avoir un underline
      5. Input de Total des actifs
        1. Le montant de l'input est calculé à l'aide du total de l'input de Total d'actif à court terme plus Input de Total d'immobilisations
        2. Doit avoir deux underline
      6. Section de passif à court terme
        1. Ajouter une ligne pour chaque compte de passif à court terme et la valeur du compte dans l'input de gauche
        2. La dernière ligne doit avoir un underline sur l'input de gauche
      7. Input de Total de passif à court terme
        1. Le montant de l'input est calculé à l'aide du total de la Section de passif à court terme
      8. Section Capitaux propres
        1. Avoir une ligne pour le et écrire le capitals final de l'entreprise dans l'input de droite et avoir un underline
      9. Input de Total des actifs
        1. Le montant de l'input est calculé à l'aide du total de l'input de Total de passif à court terme plus le total de la section Capitaux propres
        2. Doit avoir deux underline.
Acc

Pointage des differents champs

  1. (2pts) Date
  2. (Identifiant de la ligne) Fournisseur à créditer
  3. (1pts) Report au compte
  4. (Identifiant de la ligne) Facture
  5. (4pts) Fournisseurs (crédit)
  6. (4pts) Achats (débit)
  7. (2pts) Rendus et ravais sur achats (crédit)
  8. (2pts) TPS à recevoir (débit)
  9. (2pts) TVQ à recevoir (débit)

  1. (2pts) Date
  2. (Identifiant de la ligne) Client à débiter
  3. (1pts) Report au compte
  4. (Identifiant de la ligne) Facture
  5. (4pts) Clients (débit)
  6. (4pts) Ventes (crédit)
  7. (2pts) Rendus et rabais sur ventes
  8. (2pts) TPS à payer (crédit)
  9. (2pts) TVQ à payer (crédit)

 

  1. (2pts) Date ->Date écrite sur la facture
  2. (identifiant de la ligne) Nom du client ou explications
  3. (identifiant de la ligne) Numéro du chèque
  4. (1pts) Report au compte
  5. (4pts) Encaisse (débit)
  6. (4pts) Clients (crédit)
  7. (4pts) Ventes (crédit)
  8. (2pts) TPS à payer (crédit)
  9. (2pts) TVQ à payer (crédit)

  1. (2pts) Date
  2. (identifiant de la ligne) Nom du fournisseur ou du bénéficiaire
  3. (identifiant de la ligne) Numéro du chèque
  4. (1pts) Report au compte
  5. (4pts) Encaisse (crédit)
  6. (4pts) Fournisseurs (débit)
  7. (4pts) Salaires à payer (débit)

  1. (2pts) Date
  2. (2pts) Nom du salarié
  3. (2pts) Taux horaire
  4. (2pts) Nombre d'heures
  5. (2pts) Salaires (débit)
  6. (2pts) RRQ à payer (crédit)
  7. (2pts) RQAP à payer (crédit)
  8. (2pts) Assurance-emploi à payer (crédit)
  9. (2pts) Impôt provincial à payer (crédit)
  10. (2pts) Impôt fédéral à payer (crédit)
  11. (2pts) Salaires à payer (crédit)
  12. (identifiant de la ligne) Numéro du relevé de paie

  1. (2pts) Date
  2. (1pts) Numéro de compte
  3. (2pts) Nom de compte
  4. (2pts) Débit
  5. (2pts) Crédit

  1. (2pts) Date
  2. (2pts) Référence
  3. (2pts) Débit
  4. (2pts) Crédit
  5. (2pts) Solde
  6. (2pts) Dt / Ct

  1. (2pts) Date
  2. (identifiant de la ligne) Numéro de facture
  3. (identifiant de la ligne) Libellé
  4. (2pts) Référence
  5. (2pts) Débit
  6. (2pts) Crédit
  7. (2pts) Solde
  8. (2pts) Dt / Ct

  1. (identifiant de la ligne) Numéro de compte
  2. (identifiant de la ligne) nom de compte
  3. (2pts) Débit
  4. (2pts) Crédit

Inputs dans les sections avec des tabulations : 1pts chaque pour un total de 45% du modulePage

Inputs à droite des textes en gras : 1pts chaque pour un total de 25% du modulePage

10% du modulePage pour que les comptes soit dans les bonnes sections

20% du modulePage pour que les options des inputs soit bonnes ($, underline, signe négatif)

Inputs dans les sections avec des tabulations : 1pts chaque pour un total de 50% du modulePage

Inputs à droite des textes en gras : 1pts chaque pour un total de 30% du modulePage

20% du modulePage pour que les options des inputs soit bonnes ($, underline, signe négatif)

Inputs dans les sections avec des tabulations : 1pts chaque pour un total de 45% du modulePage

Inputs à droite des textes en gras : 1pts chaque pour un total de 25% du modulePage

10% du modulePage pour que les comptes soit dans les bonnes sections

20% du modulePage pour que les options des inputs soit bonnes ($, underline, signe négatif)

 

 

 

 

 

 

 

 

 

Acc

Préférences

Les dépendances sont présentés sous forme d'une condition.

Pour les préférences de type string, c'est l'une des valeurs possibles qui sera le uid inscrit dans la condition. (e.g. La condition products_company provient de la préférence our_company_type)

Pour les préférences de type int, la valeur attendue est inscrite sous forme de condition. (e.g. num_columns == 3)

Présentation des préférences

Préférences des modules

Uid

Wizard

Type

Valeur par défaut (constants)

+ Valeurs possibles

Description

+ Dépendances

our_company_type

string

products_company
Valeurs possibles
- products_company
- services_company
- products_and
   _services_company

Choix du type de companie

stock_type
string
permanent_stock
Valeurs possibles
- permanent_stock
- periodic_stock
Choix du type de stock

 

Dépendances

products_company ||

products_and_services_company
has_taxes
bool
true
Contient des taxes à la consommation
has_decimals
bool
true

Contient des valeurs décimales (s'il y a lieu, 2 décimales par défaut)

 

Dépendances

has_taxes

has_deductions
bool
true
Contient des escomptes sur ventes et achats (avec les conditions de paiement e.g. 2/10 n/30)
uses_auxiliary_journals
bool
true
Utiliser les journaux auxiliaires (ou le journal général) 
has_employees
bool
true
La compagnie possède des employées et traite les paies
has_credit_notes
bool
true
Contient des rendus et rabais sur ventes et achats (notes de crédit)
ignored_accounts
  array [ ] Ignore les comptes du grand livre contenus dans la liste
hidden_accounts
  array [ ] Cache les comptes du grand livre contenus dans la liste pour les étudiants. Les comptes sont utilisés dans la création du ou des contextes d'un module. Cette préférence est utile pour cacher des comptes qui ne sont vraiment pas utiles dans le contexte du module
accounts_uses_last_financial_statement
  bool false Crée un contexte pour initialiser des données comme des valeurs
uses_accounting_closing
bool
true
Procède à la clôture (Fermeture des comptes débiteurs/cérditeurs, etc.)
unique_{client or provider}_preference
  bool false Utilisation de client/fournisseur unique lors de la création des factures
last_year_partners_with_empty_balance
  bool
true
??? (Pas utilisé?)
uses_bill_id_in_general_journal
  bool false Détermine si le journal général utilise la vielle correction (valeur : true)
uses_new_regularizations
  bool false Utilisation de la nouvelle gestion des régularisations. La vielle version était utilisée pour l'ancien système des amortissements.

 

Dépendances

uses_regularizations

has_new_immobilizations
  bool
true
Détermine s'il y a une création de nouvelles immobilisations

 

Dépendances

has_immobilizations

has_new_contracts
  bool
true
Détermine s'il y a une création de nouveaux contrats

 

Dépendances

uses_regularizations

uses_regularizations
bool
true

Procède aux écritures de clôture dans le journal général.

(Amortissements, Charges payées d'avance, Produits perçus d'avance, Charges à payer et Produits à recevoir)

**Exclut la régularisation des stocks

pages
object { } Contient tous les settings de pages à écraser des originaux se trouvant dans pages_settings.json. La plupart du temps, ce sont les préférences de pages qui sont écrasées dans cet objet.
affected_regularizations_reports
  array? null ???
has_immobilizations
bool
true

Contient des immobilisations

(i.e. Équipement de bureau, Matériel roulant, Ameublement)

practice_num_seeds
int 0
Valeurs possibles
- 0 (infini)
- 1 à 10
Détermine le nombre de versions de modules. Avec une valeur de 0, chaque étudiant aura une version différente.
summative_num_seeds
int 0
Valeurs possibles
- 0 (infini)
- 1 à 10
Détermine le nombre de versions de modules. Avec une valeur de 0, chaque étudiant aura une version différente.
has_helper_in_summative
bool
true
Détermine si le mode sommatif du module contient des modèles et/ou aides-mémoires. (i.e. modèle des états financiers de l'an passé) Le mode formatif contient toujours les modèles et/ou aides-mémoires.
scenario_accounts_view_type
string

trial_balance

Valeurs possibles
- trial_balance
- accounts_list
Détermine si les comptes initiaux sont affichés dans la fenêtre du scénario à l'aide d'une balance de vérification ou d'une liste alphabétique de comptes
uses_taxes_payment_form
  bool
true

Inclut le rapport et la remise de taxe(s)

 

Dépendances

has_taxes

uses_stock_regularizations
  bool
true

Procède à la régularisation de stock

 

Dépendances

products_company || products_and_services_company

has_immobilizations_taxes_report
  bool
true

Procède à la création des pj et de l'écriture avec les taxes municipales et scolaires

 

Dépendances

has_immobilizations && has_land_immobilizations &&

uses_regularizations
has_banking_transactions
  bool
true
Contient des transactions bancaires
has_land_immobilizations
  bool
true

Contient un ou des terrains (+ taxes municipales et scolaires)

 

Dépendances

has_immobilizations

 

Préférences des pages

Page Uid Uid

Wizard

Type

Valeur par défaut (constants)

+ Valeurs possibles

Description

+ Dépendances

all
ignored_options
  array [ ]
(constants)
Les options d'inputs qui sont ignorées lors de la correction du module page (e.g. minus, indent, underline, etc.)
all
ignored_grading_column_uids

 

array

[ ]
(constants)

Les colonnes du tableau qui sont ignorées lors de la correction du module page (e.g. Les colonnes des noms de comptes prédeterminés dans le chiffrier)

all
ignored_grading_relation_uids

 

array

[ ]
(constants)

Les uids relationnels qui sont ignorées lors de la correction du module page (e.g. start_stock_of_goods)

** Seulement utilisé dans le journal général et le grand livre

all
money_tolerance_range

 

int

1
(sim_settings)

Tolérance négative/positive de valeur inscrite par l'étudiant dans un champs de nombre entier d'argent

balance_sheet
num_columns

int

2
(pages_settings)
Valeurs possibles
- 2 ou 3

Nombre de colonnes pour les calculs des valeurs des comptes (money column inputs)

 


Dépendances

 

Comptes du grand livre

Se retrouvent dans accounts.json

Uid

Dépendances

cashings
temporary_investments
has_banking_transactions
clients
gst_ca_qc_to_receive
has_taxes
qst_ca_qc_to_receive
has_taxes
hst_ca_on_to_receive
has_taxes
hst_ca_nb_to_receive
has_taxes
hst_ca_pe_to_receive
has_taxes
interest_to_receive
has_banking_transactions && uses_regularizations
taxes_to_receive
has_taxes
stock_of_goods
products_company || products_and_services_company
office_supplies
insurance_paid_in_advance
uses_regularizations
municipal_taxes_paid_in_advance
has_immobilizations && has_land_immobilizations && uses_regularizations
school_taxes_paid_in_advance
has_immobilizations && has_land_immobilizations && uses_regularizations
publicity_paid_in_advance
uses_regularizations
rolling_stock
has_immobilizations
rolling_stock_cumulative_depreciation
has_immobilizations && uses_regularizations
equipment
has_immobilizations
equipment_cumulative_depreciation
has_immobilizations && uses_regularizations
furnishings
has_immobilizations
furnishings_cumulative_depreciation
has_immobilizations && uses_regularizations
land
has_immobilizations && has_land_immobilizations
bank_loan
has_banking_transactions
providers
hst_ca_on_to_pay
has_taxes
hst_ca_nb_to_pay
has_taxes
hst_ca_pe_to_pay
has_taxes
gst_ca_qc_to_pay
has_taxes
qst_ca_qc_to_pay
has_taxes
taxes_to_pay
has_taxes
salaries_to_pay
has_employees
rrq_ca_qc_to_pay
has_employees
cpp_ca_qc_to_pay
has_employees
rqap_ca_qc_to_pay
has_employees
income_tax_provincial_ca_qc_to_pay
has_employees
employment_insurance_ca_qc_to_pay
has_employees
income_tax_federal_ca_qc_to_pay
has_employees
income_tax_provincial_ca_on_to_pay
has_employees
income_tax_provincial_ca_nb_to_pay
has_employees
income_tax_provincial_ca_pe_to_pay
has_employees
employment_insurance_ca_to_pay
has_employees
income_tax_federal_ca_nb_to_pay
has_employees
income_tax_federal_ca_to_pay
has_employees
interest_to_pay
has_banking_transactions && uses_regularizations
sales_received_in_advance
uses_regularizations
services_given_received_in_advance
uses_regularizations
our_company_capital
our_company_deposit
our_company_withdrawals
services_given
services_company || products_and_services_company
interest_income
uses_regularizations
sales
products_company || products_and_services_company
sales_returns_and_discounts
has_credit_notes && (products_company || products_and_services_company)
sales_deductions
has_deductions && (products_company || products_and_services_company)
start_stock_of_goods
products_company || products_and_services_company
purchases
products_company || products_and_services_company
purchases_returns_and_discounts
has_credit_notes && (products_company || products_and_services_company)
purchases_deductions
has_deductions && (products_company || products_and_services_company)
end_stock_of_goods
products_company || products_and_services_company
salaries
has_employees
rent
publicity
office_charges
maintenance_supplies_charges
services_company
municipal_taxes
has_immobilizations && has_land_immobilizations && uses_regularizations
school_taxes
has_immobilizations && has_land_immobilizations && uses_regularizations
insurance
interests_charges
has_banking_transactions
bank_charges
has_banking_transactions
rolling_stock_depreciation
has_immobilizations && uses_regularizations
equipment_depreciation
has_immobilizations && uses_regularizations
furnishings_depreciation
has_immobilizations && uses_regularizations
summary_results

 

Pièces justificatives

Se retrouvent dans bills_settings_definition.json et dans la fonction acc1_utils_create_bills.createBillsByType

Uid

Dépendances

provider_upfront_payment
 ✖
provider
 ✖
provider_credit_note
has_credit_notes
provider_check
 ✖
client_upfront_payment
 ✖
client
 ✖
client_credit_note
has_credit_notes
client_check
 ✖
employee
has_employees
employee_check
has_employees
retail_sales
products_company || products_and_services_company
building_owner_misc_check
 ✖
insurance_provider_taxless_misc_check
 ✖
bank_charges_report
has_banking_transactions
bank_loan_report
has_banking_transactions && !uses_auxiliary_journals
deposit_check
withdrawals_check
end_stock_of_goods_report
(products_company || products_and_services_company) && periodic_stock
rolling_stock_report
has_immobilizations && uses_regularizations
equipment_report
has_immobilizations && uses_regularizations
furnishings_report
has_immobilizations && uses_regularizations
long_term_services_client_contracts_report
uses_regularizations
&& (services_company || products_and_services_company)
long_term_publicity_provider_contracts_report
uses_regularizations
long_term_insurance_provider_contracts_report
uses_regularizations
used_office_supplies_report
uses_regularizations
municipal_immobilizations_taxes_report
has_immobilizations && has_land_immobilizations && uses_regularizations
school_immobilizations_taxes_report
has_immobilizations && has_land_immobilizations && uses_regularizations
short_term_investment_contracts_report
has_banking_transactions && uses_regularizations
short_term_loan_contracts_report
has_banking_transactions && uses_regularizations
employee_partial_report
has_employees && uses_regularizations

 

Pages

Se retrouvent dans pages_settings_definition.json

Uid

Dépendances

purchases_journal
uses_auxiliary_journals
sales_journal
uses_auxiliary_journals
withdrawals_journal
uses_auxiliary_journals
cashings_journal
uses_auxiliary_journals
payroll_journal
uses_auxiliary_journals && has_employees
providers_subledger
clients_subledger
stocks_subledger
(products_company || products_and_services_company) && permanent_stock
general_journal
ledger
trial_balance_regularized_after_closure
trial_balance_before_regularizations_and_closure
trial_balance_regularized
trial_balance_after_closure
statement_income
statement_equity
balance_sheet
accounting_journal
taxes_payment_form
has_taxes && uses_taxes_payment_form
employee_income_taxes_form
has_employees && manual_income_taxes
employer_income_taxes_form
has_employees && manual_income_taxes

 

Scenario Pages

Les dépendances se retrouvent dans modules.json

Seulement les scenario pages avec des conditions sont listées

Uid

Dépendances

context_with_helper has_helper_in_summative
context_without_helper !has_helper_in_summative
income_taxes has_employees
trial_balance trial_balance
accounts_list accounts_list
statement_income has_helper_in_summative
statement_equity has_helper_in_summative
balance_sheet has_helper_in_summative

 

Élément de pages

Se retrouvent dans module_pages.json

Seulement les éléments avec des conditions sont listées

Page Uid Type Uid

Dépendances

purchases_journal column_input
purchases
products_company || products_and_services_company
purchases_returns_and_discounts

products_company || products_and_services_company

maintenance_supplies_charges
services_company
sales_journal column_input
sales
products_company || products_and_services_company
sales_returns_and_discounts
products_company || products_and_services_company
services_given
services_company || products_and_services_company
withdrawals_journal
column_input
purchases_deductions
products_company || products_and_services_company
purchases
products_company || products_and_services_company
maintenance_supplies_charges
services_company
cashings_journal
column_input
sales_deductions
products_company || products_and_services_company
sales
products_company || products_and_services_company
services_given
services_company || products_and_services_company
general_journal
column_input
bill_id
uses_bill_id_in_general_journal
reference
uses_bill_id_in_general_journal
account_uid
!uses_bill_id_in_general_journal
account_number
!uses_bill_id_in_general_journal
section_structure
  !uses_bill_id_in_general_journal
ledger
column_input
wording
uses_auxiliary_journals
bill_id
!uses_auxiliary_journals
statement_income
table_structure.
structure_items
gross_sales
products_company || products_and_services_company
operating_income
products_company || products_and_services_company
operating_income_service
services_company
operating_income_service_total
services_company
cost_of_goods_sold
products_company || products_and_services_company
profit_margin
products_company || products_and_services_company
other_operating_income
products_and_services_company
operating_expenses
products_company || products_and_services_company
operating_expenses_service
services_company
operating_expenses_service_total
services_company
column_inputs
money4
products_company || products_and_services_company
money3
products_company || products_and_services_company
balance_sheet
table_structure.
structure_items
immobilization
has_immobilizations
immobilization_total
has_immobilizations
column_inputs
money3
num_columns == 3

 

 

 

 

Acc

StaticData

Uid

Google Sheet

Description

scenario

Contient tous les scénarios spécifiques à chaque module. Les uids des textes sont composés du préfixe suivant : scenario_{nom du module}_

Pour savoir si certaines pages du scénario sont inclues ou pas, il faut se référer au visibility conditions des pages du scénario dans modules.json

products

Contient tous les produits achetés ou vendus par la compagnie. On y décrit le type de produits ainsi que l'éventail des prix d'achat ou de vente, des quantité lors de l'achat ou la vente, des quantités en stock, etc.

Les salaires des employés sont présents dans ce document.

services

Contient tous les services offerts par la compagnie. On y décrit le type de produits ainsi que l'éventail des prix d'achat ou de vente, des quantité lors de l'achat ou la vente, etc.

partners

Contient tous les partenaires d'affaires de la companie avec leur type, soit les employees.json et les companies.json

employees

Contient tous les employés que la compagnie peut engager et utiliser dans les paies.

companies

Contient toutes les compangies, bénéficiaires ou entités avec lesquels la compagnie fait affaire. Ça inclut les fournisseurs, les clients, la compangnie de l'étudiant et son propriétaire, etc. On y décrit entre autres, leur type de pj ou encore les produits et/ou services qu'ils achètent ou vendent.

taxes

Contient toutes les taxes à la consommation. On y décrit comment les calculer d'année en année. 

Pour savoir à quelles régions appartiennent une taxe, il faut se référer à regions_settings.json

income_taxes

Contient toutes les retenues salariales pour l'employée. On y décrit comment les calculer d'année en année.

Pour savoir à quelles régions appartiennent une taxe, il faut se référer à regions_settings.json

income_taxes_codes

Contient toutes les codes possibles pour les retenues salariales calculer à partir de code.

interests

Contient tous les intérêts pour des emprunts ou des placements. On y décrit comment les calculer d'année en année.

regions

Contient toutes les régions qu'un professeur peut choisir pour contextualiser sa simulation.

conditions

Contient toutes les conditions de paiement qu'un client ou un fournisseur peut avoir avec la compagnie. Certaines conditions offrent des escomptes lorsque la facture est payée à court terme.

dynamic_dropdown_data_structure

Contient tous les identifiants de data pour dropdown avec du contenu dynamique créé par l'étudiant (e.g. client, provider)

dropdown_data

Contient tout le data pour dropdown avec contenu statique. (e.g. types de journaux, types de régularisation, etc.)

Pour le contenu statique selon le contexte du module, il faut se référer à la méthode UtilsAcc1.GetDropdownDataFromString

immobilizations
Contient toutes les immobilisations (matériel roulant, ameublement, équipement de bureau et terrain). On y décrit leur prix d'achat et de revente ainsi que le calcul pour leur amortissement s'il y a lieu.

Provient de immobilizations_v2 sur GoogleSheet

contract_regularizations

Contient tous les contrats pour les régularisations de Charges payées d'avance et de Produits perçus d'avance. On y décrit quel type de produits ou services qu'ils contiennent ainsi que leur durée (un an en général).

account_types

Contient les grands types de comptes (Actif, Passif, Capitaux propres, Charges et Produits) et leur type de balance (débit ou crédit)

accounts

 

Contient tous les comptes du grand livre avec lesquels l'étudiant va intéragir. On y décrit leur numéro, catégorie et sous-catégorie et leur type de balance (début ou crédit)

constants

 

Contient toutes les constances générales (e.g. annual_num_payslips) et spécifiques aux modules (e.g. our_company_type) ou aux pages (e.g. ignored_options).

modules

 

Contient tous les modules certaines informations de base qui ne sont assurément pas modifiable par un professeur. Les visibility_conditions des scenario_pages y sont aussi définies.

module_pages

 

Contient toutes les pages (ou parties) que peuvent composées les modules. On y liste leur type et le data pour les générer et les corriger (comme column_inputs, table_structure, section_structure, inputs, etc.)

Pour comprendre plus facilement le data, il est préférable de consulter les classes C# qui les désérialisent sur le client, enm commencant par ModulePageBase.

regions_settings

 

Contient toutes les informations spécifiques aux régions. Elles peuvent globales ou spécifiques aux pages.

  • Les informations globales sont composées des taxes (à la consommation), income_taxes (retenues salariales), interests (intérêts pour emprunts ou placements) et les accounts (comptes du grand livre).
  • Les informations spécifiques aux pages sont composées de column_inputs_order (pages de type table ou autres) ou prefab_reference (interfaces customs)
sim_settings

 

Contient toutes les informations globales potentiellement modifiables par un professeur, comme la region, l'année contextuelle de la simulation, la tolérance de champs de nombre et l'ordre par défaut des modules.

L'année est enregistrée automatiquement lors de la création d'une simulation afin qu'elle ne change pas si la valeur dans sim_settings est incrémentée.

modules_settings

 

Contient toutes les informations spécifiques aux modules potentiellement modifiables par un professeur. Les éléments principalement modifiables sont les preferences, les nombre des pj présentes dans le bills_type_data, le pages_order et les pages_ponderation. D'autres objets y sont aussi présents, comme les initial_accounts, la context_list et le current_module.

Pour connaître les préférences et les pj modifiables, il faut se référer aux modules_settings_definitions.

Pour connaître les pages présentes selon les préférences choisies, il faut se référer aux pages_settings_definitions.

pages_settings

 

Contient toutes les informations spécifiques aux pages (ou parties) d'un module potentiellement modifiables par un professeur. Les éléments principalement modifiables sont les preferences qui sont aussi modifiables dans les modules_settings. D'autres objets y sont aussi présents, soit les scores_ponderation, la scores_details et les inputs_ponderation.

modules_contexts

 

Contient toutes les informations spécifiques aux contextes des modules. Les informations présentées sont semblables à celles dans les modules_settings, plus précisément le bills_type_data et le pages_order.

bills_settings_definitions

 

Contient toutes les informations modifiables pour les pj. Pour l'instant, seulement le nombre de pj est modifiable. Par contre, des visibility_conditions et/ou des dépendances peuvent changer automatique le nombre de pj. (e.g. Si, selon les préférences choisies, un type de pj n'est pas présente dans le module (visibility_conditions ➡ false), le nombre de pj pour ce type sera de 0)

Pour consulter les bills_settings_definitions des modules, il faut se référer aux modules_settings_definitions.

preferences_settings_definitions

 

Contient toutes les préférences modifiables des modules ou des pages d'un module. On y décrit leur type de champs avec le data associé et les visibility_conditions. Si les visibility_conditions retourne false, la valeur par défaut est forcée.

Pour consulter les preferences_settings_definitions des modules, il faut se référer aux modules_settings_definitions.

modules_settings_definitions

 

Contient toutes les preferences_settings_definitions et les bills_settings_definitions des modules.

pages_settings_definitions

 

Contient toutes les pages ayant des visibility_conditions. On l'utilise lorsque l'on crée un module et que l'on choisie la pondération des pages du module.

 

 

 

 

Acc

Ajouter une nouvelle page

  1. Ajouter la nouvelle page dans module_pages.json (S'inspirer des pages existantes pour formuler la nouvelle)
  2. Ajouter les settings de la nouvelle page dans les pages_settings
  3. Si c'est nécessaire, comme dans le cas d'une table (column_inputs_order) ou d'un custom prefab (prefab_reference), ajouter les settings de la nouvelle page dans les regions_settings
  4. Si c'est nécessaire, comme dans le cas d'une table ou d'un custom prefab, ajouter les settings de la nouvelle page dans les regions_settings
  5. Ajouter la page dans la liste de pages dans modules_settings et modules_contexts concernés
  6. S'il y a des conditions pour inclure ou pas la page, ajouter les conditions dans pages_settings_definitions
  7. Si la nouvelle page contient un dropdown, ajouter le data dans dynamic_dropdown_data_structure (dynamic), dropdown_data (static) ou UtilsAcc1.GetDropdownDataFromString (static, mais spécifique au contexte du module)
  8. Si la nouvelle page est un custom prefab, créer le prefab (variant si un prefab parent est disponible e.g. SubModulePageInputsControlBase)
  9. Ajouter le corrigé (answerkey) afin que les contextes fonctionnent
  10. Ajouter la correction (grading)
  11. S'assurer que tous les nouveaux textes ont été ajoutés
  12. Tester tous les modules qui possèdent la nouvelle page avec les différentes préférences et pj modifiables
Acc

Ajouter un nouveau module

  1. Ajouter le nouveau module dans modules.json (S'inspirer des modules existants pour formuler le nouveau)
  2. Ajouter les settings du nouveau module dans les modules_settings
  3. Ajouter les préférences et pj modifiables du nouveau module dans modules_settings_definitions
  4. Ajouter le nouveau module dans liste pour l'ordre par défaut des modules dans sim_settings
  5. Ajouter les textes du scénario du module dans l'onglet Scénario dans le document Google Sheet
  6. S'assurer que tous les autres nouveaux textes ont été ajoutés
  7. Tester le module avec les différentes préférences et pj modifiables
Acc

Arborescence des controls pour les modules

Modules

Pages

SubModulePageInputsControls

Tables

Sections

Rows

Input Cells

Acc

Procédure annuel pour updater les taxes (Deprecated)

Deprecated: Veuillez regarder la nouvelle marche à suivre dans la page "Procédure annuel pour updater les taxes (updated version 2026)"

https://docs.google.com/spreadsheets/d/1PMzc2vGeanmDXVKw8s8-hKepxstYUCIR_W1q4XSa5lE/edit#gid=0

 

Onglets

Conflit avec la Macro

          • Si la macro n'est pas disponible dans le menu, pour cela il faut:
            • Dans le menu Extensions>Macos
            • Faire un "Record macro" puis arrêter immédiatement la macro, afin de créer une macro rapidement
            • Faire un "Manage macros" dans une année précédente (possèdent la macro "Replace "num1 - num2" with "num1" in colA")
            • Cliquer sur les , puis "Edit Script"
            • Copier le code de macros.gs
            • Faire un "Manage macros" dans le sheet en vigeur
            • Cliquer sur les , puis "Edit Script"
            • Coller le script copié précédamment
            • Renommer votre macro avec les mêmes valeurs que celui copié
          • S'il y a un problème de "Authorization required" ou autre durant l'exécution de la macro, voici la version manuel:

              • Faites un clique droite sur la colonne A, puis ajouter une nouvelle colonne à gauche

              • Copié le code ci-dessous
                • =ArrayFormula(IF(REGEXMATCH(TO_TEXT(B2:B), "[–|-]"), TO_PURE_NUMBER(REGEXREPLACE(B2:B, "(\D+\.*\D+.*)", "")), 0))
              • Coller le code sur la case A2 ou avant les rangées à modifier (sur la colonne A)
              • À ce point normalement, les cases de la colonne A devrait-être à jour
              • Copié la colonne A à B
                • ATTENTION, il se peut que certaines valeurs ne sont pas bien modifiées. Prenez seulement les valeurs adéquates
              • Supprimé la colonne A

        • Remplacer toutes les instances de "," (virgule) par "." (point) 

          • À l'aide de (Ctrl + H)
      • Il faudra alors updater {AllSimsRepository}/node.js/exports/exportAllData.js afin de pouvoir exporter les nouveaux document créer avec la structure suivante:

        • Dans la zone de "games.income_taxes_X.sheet" : Mettre la première partie de l'url (après "d/") du document "income_taxes_X"
        • Dans les autres plus specifiques ("games.income_taxes_X.tabs"): Mettre le "gid" de l'url
  • employer_income_taxes

    https://docs.google.com/spreadsheets/d/1PMzc2vGeanmDXVKw8s8-hKepxstYUCIR_W1q4XSa5lE/edit#gid=754552986

    • duplicté une colonne d'une année précédente et l'intituler : $"{année}(str)"
    • Modifier les valeurs associés aux Uids
      • Certains identifiants ont des sources associés afin facilité la recherche d'information
  • interests

    https://docs.google.com/spreadsheets/d/1PMzc2vGeanmDXVKw8s8-hKepxstYUCIR_W1q4XSa5lE/edit#gid=1745231992

    • duplicté une colonne d'une année précédente et l'intituler : $"{année}(str)"
    • Modifier les valeurs associés aux Uids
      • Certains identifiants ont des sources associés afin facilité la recherche d'information
Modifications liés à l'année par défaut
  • Modifier le champs year pour l'année par défaut voulu

    {AllSimsRepository}\game\Assets\GameSpecific\acc1\Resources\data_acc1\act_settings.json

    • duplicté une colonne d'une année précédente et l'intituler : $"{année}(str)"
    • Modifier les valeurs associés aux Uids
      • Certains identifiants ont des sources associés afin facilité la recherche d'information
  • Modifier l'année par défaut pour la création des sims démo

    {uniksimweb}\uniksim-back-end\src\node.js\server\backend_braincloud.js

Document PDF accessible en jeu
  • Ajouter un document liés à l'année dans ce dossier

    https://cloud.digitalocean.com/spaces/uniksim-data?path=acc1/

  • Il faudra alors un document PDF intitulé "{thème}_{langue}" pour chacun des thèmes et langue suivantes, le tout dans le format "26 périodes de paie par année" (en public). N'oubliez pas de retirer l'extension .pdf
    • Thème
      • cpp_ca
      • employment_insurance_ca
      • employment_insurance_ca_qc
      • income_tax_federal_ca
      • income_tax_federal_ca_nb
      • income_tax_federal_ca_qc
      • income_tax_provincial_ca_nb
      • income_tax_provincial_ca_on
      • income_tax_provincial_ca_pe
      • income_tax_provincial_ca_qc
      • rqap_ca_qc
      • rrq_ca_qc
    • Langue
      • fr
      • en
Finitions
  • Executer la commande suivante sur node.js:

    • Une fois avec les paramêtres suivants

    • et une autre avec ceux-ci (remplacer par la bonne année)

  • Une fois terminé les files suivants devrait avoir des modifications
    • pour "AllSimsRepository"

    • pour "UniksimWebRepository"

  • Il nous reste qu'à exporter la data à la destination voulu (toujours sur node.js).

     

    • Utiliser cette export pour le StaticData

    • Utiliser cette export pour le StaticDataChunk

        (Modifier le "args" de la requête pour chacun des requêtes)

 

 

Acc

Création d'une simulation (acc1)

Étape préliminaire pour la création de la simulation

Mettre à jour les taxes

Rendre la simulation général

      • Si nécessaire, rendre la simulation original (copié) plus général afin de simplifier la nouvelle simulation.
        • Si c'est le cas, le dossier {allsims}/UI/SimByModule est créé pour la base de acc1

        • Pour se faire, les fichiers modifiés doit avoir un namespace namespace UnikSim.SimByModule au lieu de namespace UnikSim.SimByModule.acc1
          • Si le fichier n'est pas dans gameSpecific, il n'est nécessaire le déplacer 
        • Le nom du fichier doit aussi faire référence à "ByModule" (Ex: StaticDataAcc1 => StaticDataByModule) puisqu'il sera généralisé
          • Si le fichier n'a pas de acc1 dans son nom, il n'est pas nécessaire de le rename
        • Les fichiers doivent aussi se faire déplacer/transfer à SimByModule dans le dossier correspondent
      • Dupliquer une simulation intérieure

    • Avant de commencer, créer une branche au nom de la nouvelle simulation sur Git Extensions
    • N'oublie pas de voir les informations supplémentaires à la fin de ce document pour certaines précisions

  • Sur unity:
    1. Faire une copie de GameSpecific/acc1 (Ex: acc2)

    2. Renommer toutes les instances de code lié à l'ancienne simulation (Incluant les noms de fichiers et les codes).
      • ATTENTION: Vérifier si les changement n'affecteront pas l'original, avant et après modifications

        Un script nommé "renameFiles" est disponible pour renommer les noms de fichiers. {allsims}/node.js/utils/renameFiles.js

      • Pour utiliser renameFiles, il faudra créer une copie temporaire dans le nouveau dossier
      • Ajouter un launch.js temporaire avec les mêmes paramètres

      • Puis modifier les paramètres suivant:

        • Note 1: Le renameFiles est case sensitive pour find et replace, il se pourrait qu'il faudrait le faire plus d'une fois
        • Note 2: Une fois les refactor des noms faits, il se peut que Unity ne pourra pas compiler. (Certains fichiers possèdent les mêmes noms)

      • Pour régler ce problème, il faudra refactor avec Visual Studio chacun de ces fichiers ou refaire l'étape Rendre la simulation général.
        • ATTENTION: Si vous voulez le faire manuellement, assurer vous de ne pas impacter le code originel (copié)
  • Sur node.js:
    1. Faire une copie de {allsims}/node.js/backend/braincloud/server_scripts/acc1 (Ex: acc2)

    2. Comme à l'étape précédente, renommer toutes les instances de code lié à l'ancien script (Incluant les noms de fichiers et les codes).
      • ATTENTION: Vérifier si les changement n'affecteront pas l'original, avant et après modifications

        Un script nommé "renameFiles" est disponible pour renommer les noms de fichiers. {allsims}/node.js/utils/renameFiles.js

      • Pour utiliser renameFiles, il faudra modifier les paramètres suivant:

        • Note 1: Le renameFiles est case sensitive pour find et replace, il se pourrait qu'il faudrait le faire plus d'une fois
Modification et ajout pour la nouvelle simulation
  • Ajouter tous les switch case:
    • Faites un Ctrl + Shift + F ensuite "acc1" pour trouver toutes les instances de acc1
    • Faites une copie de chaque case avec l'accronyme de votre nouvelle simulation.
      • Par exemple :

    • Note : Il ne sera pas nécessaire de faire de nouvelle fichier de traduction. En acc_X, le même fichier sera utilisé
  • Modifier la class static pour StaticDataByModule:
    • Le fichier "StaticDataAccX" (Renommer par l'étape précédent), devra être modifier afin d'identifier le fichier

    • Ajouter la class static à CreateStaticData dans Factory

  • Ajouter une nouvelle variante de MainControlStudentByModule et MainControlTeacherByModule:
    • Si la copie de votre simulation ne contient pas de MainControlStudentAccX ou MainControlTeacherAccX, veuillez suivre les étapes suivantes, sinon passez cette étape
      • Méthode 1: Faire une copie de MainControlStudentAcc1 et MainControlTeacherAcc1 dans la nouvelle simulation et le renommer en conséquent

Situé à {allsims}/GameSpecific/acc1/Resources/Prefabs/UI

      • Méthode 2: Créer une variante avec MainControlStudentByModule et MainControlTeacherByModule

Situé à {allsims}/UI/SimByModule/acc1/Resources/Prefabs/UI

        • Clique droite, puis Create>Prefab Variant
        • Déplacer le fichier au bons endroit et le renommer en conséquent
  • Partie Doozy:

Situé à Resources>MainGraph

    • Ajouter un nouveau output sur Login avec le nom approprié (Ex: acc2)

    • Ajouter un nouveau node (clique droite) avec un nom approprié

      • Dans ce node, ajoutez le AccXSubGraph

    • Connecter le output avec le nouveau node
    • Si la duplication c'est bien terminé, il ne sera pas nécessaire de modifier AccXSubGraph
  • Modifier les scènes accXTeacher et accXStudent :

Situé à GameSpecific/accX/Resources/Scenes

    • Dans la section DecisionsPanel (Hierarchy), modifier le "Decisions Controls" pour votre simulation

Modification des thèmes de la simulation
  • Remplacer les images de la nouvelle simulation avec le thème choisi :
    • Écran titre : accX
    • Écran de jeu : bg
    • Note : Il serait peut-être intéressant de demander les images à l'équipe pour éviter des problèmes de choix esthétiques ou de design

Situé à GameSpecific/accX/Resources/images

    • Pour modifier bg, il faudra allé sur la scène de la nouvelle simulation (accXTeacher et accXStudent, vous devriez le faire sur les deux scènes)

Situé à GameSpecific/accX/Resources/Scenes

      • Dans MainView, modifier "Source Image"

  • Ajouter le titre dans LoginControl:
    • Faire une copie de la simulation originel (copié) et le renommer

    • Modifier le script LoginTitle dans le menu de l'inspecteur

    • Ajouter dans le google sheet shared_text
      • accX_theme_label (la couleur)
      • accX_login_title (le titre principal, dans ce cas "Comptabilité X")
      • accX_login_subtitle (le nom de la nouvelle simulation)

    • Dans AccXTitle>Title2
      • Modifier le Text Uid pour accX_login_title
    • Dans AccXTitle>Title3
      • Modifier le Text Uid pour accX_login_subtitle
    • Faire un importTextShared pour voir les changements

Situé à {allsims}/node.js/exports/importTextShared.bat

  • Modifier le thème de couleur de la simulation :
    • Sur la scène de game, dans LoginBackgroundControl, ajouter le "Login Title" dans "Login Titles"

Le login title à ajouter devrait se trouver à GameSpecific/accX/Resources/AccXSkin

    • Dans AccXSkin :
      • Modifier le gameUid
      • Modifier le thème de couleur
Google Sheet et StaticData
  • Faire une copie du googleSheet sim_accounting_1 :

Situé à "Shared With Me/Dev/Games/acc1 - compta_cegep/sim_accounting_1"

    • Faire une copie du fichier

    • Renommer le fichier (modifier le numéro)
    • Modifier le fichier si nécessaire
      • Note : Un fichier de base existe pour tous les simulations accounting

sim_byModule

  • Modifier les imports de fichiers :
    • Il faudra alors updater {AllSimsRepository}/node.js/exports/exportAllData.js afin de pouvoir exporter les nouveaux document créer avec la structure suivante:

      • Si nécessaire, modifier importAllDataGoogleSheet avec "withBaseV = true" pour import aussi la base (sim_byModule).

    • Mettre la première partie de l'url (après "d/") du document sim_accounting_X
    • Dans les autres plus specifiques (Ex : partners): Mettre le "gid" de l'url
      • games.accX.tabs = obtenir les valeurs sur googleSheet
      • games.accX.additionalData = les valeurs sont à l'extérieurs du googleSheet (se trouve directement sur Unity)
  • Importer les fichiers sim_accounting_X pour la nouvelle simulation :
    • À l'aide de la commande "Google Sheet - Import All" de node.js avec les valeurs appropriés
  • Exporter les fichiers sur Braincloud :
    • À l'aide de la commande "Google Sheet - Export All Data" de node.js avec les valeurs appropriés (StaticData)
    • À l'aide de la commande "Google Sheet - Export All Data" de node.js avec les valeurs appropriés (StaticDataChunk)
Information supplémentaire
  • Note 1 : Les simulations en "accounting" ou "accX" sont tous mis dans une base nommé byModule (ex: braincloud>staticData, node.js>...>byModule_utils, UI>SimByModule, etc.)
  • Note 2 : Certains/Plusieurs changements risquent de briser Unity. Il faudra alors faire un "Reimport All"

Acc

Modification de la valeur des stocks, PEPS

  1. Il y avait un problème dans la génération de différents prix pour les stocks. Ce problème se trouvait dans le acc1_utils_answer_key_module et le acc1_utils_create_bills, puisque le prix statique était utilisé et non le prix généré:

     

    (acc1_utils_answer_key_module.js)

    (acc1_utils_create_bills)
Acc

Bénéfices et pertes

  1. Le système de bénéfices et pertes dans les modules qui utilise l'état des résultats est basé sur un multiplicateur de prix comme qui suit:

    (dans acc1_utils_create_module_type_data.js)

    Originalement, ce multiplicateur était basé sur une valeur de 0.6 en cas de perte, ce qui causait des problèmes. Il a été changé pour une valeur de 0.1 pour régler le problème:

Acc

Remise et remboursement de taxes

  1. La fonctionnalité de remise et de remboursement de taxes n'était pas fonctionnel. Pour l'implémenter on a commencé par modifier le dropdown existant (qui était basé sur pertes ou bénifices):

    (le google sheet)

    (les pages qui ont été modifié pour afficher le bon texte)

  2. Par la suite, nous sommes allé cherché du côté serveur l'option sélectionné dans le dropdown (comme pour bénéfices et pertes):

    (acc1_utils.js)

    (acc1_utils_create_module_type_data)

Acc

Procédure annuel pour updater les taxes (updated version 2026)

Note: La procédure assume que les liens utilisés resteront les mêmes et que la structure des fichiers PDF ne changera pas. Si les liens sont modifiés ou si la structure des PDF change, le script devra être ajusté en conséquence.

S.V.P Veuillez tout lire avant de faire la procédure

La mise à jour annuelle est maintenant automatisée avec le script :

node.js/exports/updateAnnualTaxData.js

Le script utilise les sources suivantes :
  • CRA / ARC T4032 pour les tables fédérales et provinciales ON, NB, PE, QC
  • Revenu Québec pour les tables provinciales QC, RRQ, RQAP
  • CRA / Revenu Québec pour les taux CPP, EI, GST/HST, QST
Les sources et valeurs configurées sont dans :

node.js/exports/annualTaxSources.json

Comment ça fonctionne:
  1. Copier manuellement le Google Sheet income_taxes_<année précédente>.
  2. Renommer la copie en changeant l'année précédente par l'année en cours
  3. Copier l’ID du nouveau Google Sheet. ( L’ID est la partie dans l’URL entre /d/ et /edit.)
    Exemple: https://docs.google.com/spreadsheets/d/190fSZq-r3K65Fb_g1D0oTQQZv5ijtIMjXvthD8MlhwM/edit
  4. Lancer le self-test :

    node exports/updateAnnualTaxData.js --year 2026 --templateYear 2025 --mode full --selfTest

    Ce test vérifie :

    • que les PDFs officiels sont accessibles
    • que les tables sont parsées correctement
    • que chaque table commence avec la ligne min_salary = 0
    • que les salaires minimums sont en ordre croissant
    • que les tables Québec sont mappées correctement (cas spécial)
    • que les zéros sont exportés au bon format pour Google Sheets
  5. Lancer un dry run :

    node exports/updateAnnualTaxData.js --year 2026 --templateYear 2025 --mode full --dryRun --incomeTaxesSpreadsheetId <SPREADSHEET_ID>

    Le dry run ne modifie rien. Il affiche :

    • les sources utilisées
    • les fichiers qui seraient changés
    • les onglets Google Sheets qui seraient modifiés
    • les PDFs qui seraient uploadés
    • les changements de taux entre l’année précédente et la nouvelle année
  6. Lancer l’export réel : 

    node exports/updateAnnualTaxData.js --year 2026 --templateYear 2025 --mode full --apply --incomeTaxesSpreadsheetId <SPREADSHEET_ID>

Utilisation Dans VS Code

Les configurations mentionnées ci-dessus existent dans .vscode/launch.json :

Annual Tax Export - Self Test
Annual Tax Export - Dry Run
Annual Tax Export - Run

Lors du lancement, VS Code demande :
  • taxYear : l’année à générer, ex. 2026
  • templateTaxYear : l’année précédente à utiliser comme modèle, ex. 2025
  • incomeTaxesSpreadsheetId : l’ID du Google Sheet copié manuellement
  • annualTaxTargets : les destinations à mettre à jour
  • setDefaultYear: si on veut changer l'année en cours ou non
Choix Des Destinations

Le script permet de relancer seulement une partie du processus avec --targets.

Options disponibles :

all
incomeTaxes
byModule
do
incomeTaxes,byModule
incomeTaxes,do
byModule,do

Signification :
incomeTaxes

Met à jour le Google Sheet copié income_taxes_<année> :

  • écrit les onglets de tables d’impôt
  • renomme les tabs de l’année précédente vers la nouvelle année
  • met à jour exports/exportAllData.js avec le nouvel ID de sheet et les gids des tabs
byModule

Met à jour les colonnes de la nouvelle année dans le Google Sheet principal :

  • taxes
  • income_taxes
  • employer_income_taxes
  • interests
do

Upload les PDFs officiels dans DigitalOcean Spaces :

acc1/<année>/<theme>_<lang>

 

Fichiers Modifiés Par Le Script

Selon les targets choisis, le script peut modifier :

game/Assets/GameSpecific/byModule/Resources/data_byModule/income_tax_*_<année>.json
game/Assets/GameSpecific/byModule/Resources/data_byModule/taxes.json
game/Assets/GameSpecific/byModule/Resources/data_byModule/income_taxes.json
game/Assets/GameSpecific/byModule/Resources/data_byModule/employer_income_taxes.json
game/Assets/GameSpecific/byModule/Resources/data_byModule/interests.json
node.js/exports/exportAllData.js

Si --setDefaultYear est utilisé, il modifie aussi :

game/Assets/GameSpecific/byModule/Resources/data_byModule/act_settings.json
uniksimweb/uniksim-back-end/src/node.js/server/backend_braincloud.js

--setDefaultYear change l'année en cours utilisé dans la simulation.

Veuillez vous référer aux étapes ci-dessous si vous décider de ne pas changer l'année tout de suite.

  • Modifier le champs year pour l'année par défaut voulu (act_settings.json)

  • Modifier l'année par défaut pour la création de sims démo (backend_braincloud.js)

  • Exporter les scripts acc1/acc2 et income_taxes_*


Finalement, il faut incrémenter la version dans version.txt et build pour que la nouvelle année en cours prenne effet.

Assets\Resources\data\version.txt


Diagramme qui montre comment le script fonctionne:

mermaid-diagram-2026-06-12-101748.png

 

Bugfix Guide

Bugfix Guide

Xavier courtemanche - bug de currection

Journal Général

Description du problème: les identifiants des factures sont données en odres d'apparitions des écritures dans le J.G. Le système detecte que la "bonne" écriture est la facture n. 188 puisque les comptes sont un match parfait avec ce que l'étudiant à écrit. Ce problème origine de l'erreur de l'étudiant (n'a pas écris le bon compte pour une écriture) et du fait que nous ne faisont pas multiples tentatives de trouvé la bonne facture associé à l'écriture.

Solution: Faire multiple tentatives d'associations. 

Les montants ne sont pas bon aussi, ce qui peut être une autre cause du problème.

Description detaillé de la solution proposé

L'algo actuel se fait en une seul passe pour l'association des écritures avec factures (si la facture ne match pas parfaitement la facture indiqué par l'étudiant, prend la prochaine meilleur qui à un taux de match supérieur à 65%). Ce qui peut causé une double erreur puisqu'une écriture peut "voler" une bonne facture à une autre écriture

La solution que je propose afin de résoudre ce problème va comme suit (en pseudo code):

currentThreshold = 1
nextThreshold = 0
wantedExplanationBySectionUids = {}
listOfSectionUids = copyOf(tableData.sectionsIndex)
billUidRemainings = copyOf(billUids)

tant que listOfSectionUids est pas vide
	for sectionUid of listOfSectionUids
    	for billUid of billUidRemainings (ce ne sera pas exactement représenté comme cela dans le code)
			threshold = getMatchRate(sectionUid, billUid)
            if (threshold == currentThreshold)
            	wantedExplanationBySectionUids[sectionUid] = billUid
                listOfSectionUids.remove(sectionUids)
                billUidRemainings.remove(billUid)
                break billUidRemaining loop
                
            nextThreshold = max(threshold, nextThreshold)
            
	currentThreshold = nextThreshold

Ce pseudo-algorithme devrait réduire les cas d'erreurs.

 

Afin d'implémenté ce pseudo code une bonne partie du code restera parreil.

 

Outils pour programmeur

Dans le Google Drive, dans le folder Dev/Tools, il y a un liste d'outils qui peuvent être utile pour le programmeurs, en voici la liste:

  • JSON_Toolkit, un petit programme qui permet de convertir du data de Javascript en JSON standard, faire des manipulations de base dans des fichiers JSON, sauvegarder des JSON et un diff tool avec plus de fonctions que ce qu'on peut normalement trouver en ligne.

Structure Serveur Acc1

Structure Serveur Acc1

Structure des Bills

Le système de Bills du serveur pour Acc1 a été refactor. Voici donc une page pour comprendre le nouveau système.

  • L'ensemble du système de facturation repose désormais sur une architecture orientée pseudo-classes. On y retrouve plusieurs objets de type Bill, chacun héritant de différentes sous-classes spécifiques.
    Chaque Bill contient un objet BillData, lui aussi décliné en plusieurs types selon le contexte.
    Enfin, chaque BillData contient une liste de billEntries, qui sont de simples objets sans classe propre.
    Des diagrammes ci-dessous illustrent la structure détaillée de ces classes et leurs relations.

    1. Diagramme de classes des BillData:

    2. Diagramme de classes des Bills (Image trop grosse, aller sur lien et ensuite faire Ouvrir l'image dans un nouvel onglet): https://imgur.com/a/pvlDg3G
    3.  Diagramme de séquence pour montrer la nouvelle logique de création des Bills (comme en haut aller sur le lien) : https://imgur.com/a/GRRVCdU

       

 

 

 

 

 

 

 

 

 

 

 

 

 

Site Uniksim

Site Uniksim

Note uniksimWeb

Les versions utilisées sur le site :
  • Node.js v.22.5.1
  • Angular v.18.2.11 (FrontEnd)
  • NestJs v.11.0.11 (BackEnd)

Angular / NodeJs compatibilité : Lien

Changer de version avec nvm (Node Version Manager) : nvm use *version

Voir la liste sur nvm (Node Version Manager) : nvm list

Voir les packages outdated : npm outdated

Mettre à jour les packages (classique) : npm update *cela update redis!

Mettre à jour les packages (avec npm-check-updates) : npx npm-check-updates -u *cela update redis!

Node version : node -v

Angular version : ng version

NestJs version : nest --version

*npm-check-updates (backendEnd) : npx npm-check-updates

 

Note : Le fichier package.json possède toutes les versions

Note : Ne pas oublier de faire un npm install dans backendEnd et frontEnd

Les imports importants NestJs :
  • TypeOrmModule : Communication et conversion des données avec la mySql (Query)
  • DatabaseProviders : Connection avec mySql
  • Guard : Authentification et accès
  • MailGun : Système de messagerie
  • Generate Password TS : Système de génération de mot de passe (mot de passe oublié)

Pour plus de détails voir : app.module.ts ou package.json

Les roles :
  • user:
    • Permission de jouer (Games uniquement)
  • user_uniksim:
    • Permission d'accès au site
    • Permission de jouer
  • admin_user:
    • Permission d'accès au site
    • Permission de jouer
    • Permission avec accès limité à la page admin
  • admin:
    • Toute permission

*note: Il existe un role superAdmin, mais cela n'est pas vraiment utilisé...

DigitalOcean (Update branch) :

Si vous avez accès à DigitalOcean, vous pouvez faire des changements sur le site en version live* (Principalement pour des updates en Git)

*Ici "live" peut-être un site de développement avec un domain, pas forcément le vrai site

**n'oublie pas de builder vos channgements avant d'update! (frontend surtout)

  1. Dans la section, Droplets, puis le dossier du site en question

  2. Ensuite dans Console

    • Vous devriez voir une console en linux pour faire les modifications
  3. Naviguer à travers les fichiers pour trouver le dossier recherché

    • Note 1: Les commandes git se font généralement sur le fichier source (Dans ce cas sim.uniksim.com)
    • Note 2: Durant un npm install sur la console de Droplet, il faudrait ajouter --legacy-peer-deps à la fin. (la version de Droplet est plus récente)
      • Note 2.1: Un npm audit fix pourrait être intéressant pour fix les soucis de package conflict. [Autre Solution Non recommandé] Pour être aussi npm audit fix --force, cependant ceci risque de brisser des packages.
    • Note 3: Il se peut que le dossier source root n'est pas le dossier recherché, puisque votre username de base de donnée (database) n'est pas le même.

      • Faire la commande suivante si c'est le cas (forge fait référence au username, changer selon le cas)
        • su - forge

  4. Utiliser les commandes nécessaire à vos changements
    • Remettre à l'état d'origine le dossier
      • git reset .

      • git reset --hard

        • git reset --hard risque de nécessiter origin/master comme paramètre
    • Récupérer la branch commit
      • git pull

    • Aller vers la branche
      • git checkout

    • Voir l'état de la branche actuel
      • git status

    • Similaire à reset, elle permet de retirer les dossiers non nécessaires
      • git clean -fd

  5. Faire cd uniksim-back-end, puis faire npm run build pour appliquer les changements
  6. (optionnel) Faire npm run start pour lancer le site. *n'oublie de faire de même pour admin_server si nécessaire
Cookieyes :

Url : https://app.cookieyes.com/

Script url : https://cdn-cookieyes.com/client_data/b08568c123e8efb0b38c9ce6/script.js

Build :
  • Pour les build, utiliser la commande Build Frontend project

    • Si cela n'est pas possible, utiliser la commande ci-dessous dans un terminal (dans le dossier uniksimFrontEnd)

ng build

  • Vous devriez avoir créer un build nommer Front dans le dossier uniksim-back-end

  • Par la suite ServeStaticModule (Permet de rendre le build static et disponible pour le serveur) va pourvoir recréer ce dossier à l'intérieur de dist, lorsque le serveur sera en marche.
  • Note: le fichier nest-cli.json est important pour importer tous les fichiers du dossier front généré. Spécifiquement la ligne : { "include": "front/**/*"}

  • Note: si vous changez unity build (ex: Build.data.unityweb), s'assurer de mettre la même version dans constantsVariable

Notes :
  • Dans database.providers.ts, "synchronize" permet de faire en sorte que les entitées de node.js (typeOrm) sont créer ou modifier sur Sql. Il est donc préférable de le laisser false
  • Si vous voulez augmenter la taille maximum pour le phpmyadmin suivre ce post:

    https://stackoverflow.com/questions/3958615/import-file-size-limit-in-phpmyadmin

  • La commande pour envoyer le serveur backend en local (il faut bien sûr "cd" dans le bon dossier) :

    npm run start

    • Version en live/demo :

      npm run start:live

      • Cette commande nécessite le build npm run build
    • Celui du frontend est :

      ng serve

Problèmes :
  • Si les modifications appliqués sur le dossier server ne sont pas appliqués, vous avez probablement compilé le script sur "dist/../"
  • Si vous avez un problème de ENOENT: no such file or directory, scandir sur le serveur dev (sim.dev.uniksim), il y a probablement un problème de version dans les packages. Une solution serait de refaire les fichiers non tracés par git (supprimer et installer)
  • Si vous avez cette erreur sur la console DigitalOcean

    • Faite sudo lsof -i :3000 pour trouver le node en cours
    • ~hFHs>!SLx3)d4Yc_HbQ si nécessaire
    • Puis kill -9 <PID> pour le terminer
    • Refaire votre commande
Les références de création :
Site Uniksim

Update/Deploy dans Angular (old)

Faire un déployement sur Angular pour Admin (old)

Tous les étapes se font sur Visual Studio Code

1) Se déplacer au bon dossier :

    • Avec la command suivante

cd {uniksim}/frontend/angular

2) Build Angular :

    • Avec la command suivante

ng build

3) Modifier le angular.blade.php :

Situé à {uniksim}/resources/views/angular.blade.php

    • Remplacer les balises html, head et base

@extends('layouts.app')

@section('title')
{{ trans('uniksim.title_main') }}
@stop

@section('applink')

@stop

@section('content')

    • Remplacer les balises body et html

@endsection

    • Retirer la balise ouvrante body et la balise fermante head
Site Uniksim

Debug en Web frontEnd

Avant de commencer assurer vous d'être en localhost:4200 (à moins qu'il a était changé), car :

  • localhost:4200 utilise le dossier frontEnd et backEnd (source)
  • localhost:3000 utilise uniquement le backEnd (source) et la version build du frontEnd

De plus, ce tutoriel va modifier la connexion à titre d'exemple

  1. Activer le site sous Launch Frontend and Backend (dev)

  2. Vérifier que tout soit en marche :
    1. Sur le frontEnd vous devriez avoir

    2. Sur le backend vous devriez avoir (les messages peuvent varier d'ordre)

  3.  

    Ouvrir une session localhost:4200 web

  4. Sous Sources­­>Page>webpack://>login>login.component.ts

  5. Mettre des points d'arrêts sur la requête attendu

  6. Envoyer la requête, vous devriez commencé à débugger

Note: Tous les changements sont sauvegarder automatiquement sur le site local. Si vous avez un doute, faite un changement et sauvegarder. La page devrait se rafraîchir tout seul (s'il n'est pas en debuggeur actuellement). Cependant, le backend est indépendant du frontEnd, donc il faudrait attendre quelque seconde avant d'envoyer la requête (regarder la console pour voir l'état)

 

Site Uniksim

Test de fonctionnalité complète

*note: Les tests ci-dessous sont déjà dans un ordre pour simplifier les tests. Cependant, beaucoup de déconnexions seront requises

Fonctionnalité - Cas d'utilisateur normal

Register :

Vérifier que le bouton Créer un compte enseignant fonctionne, suite aux étapes de création

 

Vérifier aussi les cas d'échecs

  • Mauvaises informations
  • Cases vides
  • Mot de passe ou courriel différente
  • Décocher l'accord
  • Retirer le nom précédamment entré
  • Créer un compte existant

Ceci devrait créer un token (dans LocalStorage)

 

*note: Si ceci est fait sur le site Live ou Dev, veuillez l'ajouter sur Compte test - Création de compte (Se trouvant sur le Wiki) et les supprimer par la suite serait pertinent

 

L'ajout de produit :

Vérifier que l'ajout de code d'activation fonctionne bien. Ceci devrait ajouter un ou des produits sur la liste en conséquence

 

Vérifier aussi les cas d'échecs

  • Mauvais code
  • Code existant

 

*note: Un test de ressources et de simulation démo seront vu ci-dessous. Ajouter un produit enseignant à cet étape serait pratique pour vous

Jouer à la simulation :

Vérifier que les produits fonctionnent bien en cliquant dessus. Ceci inclus:

  • Professeur
  • Étudiant - En Démo
  • Professeur - En Démo
  • Étudiant

Ceci devrait Créer un token (dans Cookies) lors de l'ouverture, puis il devrait supprimer le token (dans Cookies) lorsqu'il appuie sur Sauvegarder et quitter

 

*note: Le bouton Sauvegarder et quitter ferme votre connexion

 

**note: Il n'est pas nécessaire d'approfondir l'utilisation de la simulation. Juste pouvoir l'ouvrir est suffisant. Quelques fonctionnalités seront testées avec le rôle en True Admin plus bas

 

La liste des produits :

Vérifier que tous les produits sont bien présents. Faites particulièrement attention à l'ajout de Démo

 

L'affichage des ressources :

Vérifier que le bouton Ressources fonctionne et que ses liens fonctionnent aussi

 

Vérifier également les options offertes :

  • Copier/Coller
  • Les documents téléchargeables
  • Les changements des icônes dépendant des cas

 

Les liens externes :

Vérifier que tous les liens en bas de page se dirigent bien sur les informations pertinentes

 

Bouton d'accueil :

Vérifier que le bouton Uniksim essaie, joue, apprends se dirige vers l'accueil des produits

 

Vérifier que tous les options sont présents :

Vérifier que les options sont actives pour un utilisateur régulier: Mes Simulations et Se déconnecter

 

Changement de language :

Vérifier que l'option de changement de langue fonctionne bien

 

Ceci devrait aussi garder la même langue après une déconnexion et un reconnexion

 

SignOff :

Vérifier que le bouton Se déconnecter se dirige bien vers la page d'accueil

 

Ceci devrait supprimer le token (dans LocalStorage)

 

Page Mot de passe oublié :

Vérifier que le changement de mot de passe fonctionne bien

 

*note: Un email valide sera requis

 

 

SignIn :

Vérifier que le bouton pour Se connecter à l'accueil du site se dirige bien à la page produit (Require: Courriel et Mot de pass)

 

Vérifier aussi les cas d'échecs

  • Mauvaises informations

Ceci devrait créer un token (dans LocalStorage)

 

SignIn (chenLogin) :

Vérifier que l'ajout du lien chenLogin va directement dans une simulation

 

ceci requiert un compte i+ et de pouvoir avoir un moyen de copier le lien (Cependant si vous êtes assez rapide, vous pouvez récupérer le lien directement en copiant/collant le lien 🐻)

 

*uniquement la partie du code d'activation est intéressante

 

exemple de code d'activation:

chenlogin?expiration=1749565644&isbn=N782765065364&userEmail=uniksim@gmail.com&userFirstName=Nicolas&userLastName=Babin&expirationLicence=2043-08-31&token=d29ca9f591d017fe4e9eba7c3de9318430603d7bee7e78022e1f0a77c1404a7f

 

Les boutons de retour :

Vérifier que tous les boutons de retour de la page d'accueil fonctionnent bel et bien

 

Les cookies :

Vérifier que les cookies (provenant de cookieYes) fonctionnent bel et bien

 

 

Fonctionnalité - Cas d'utilisateur admin

Compte déjà existant

Courriel: comptetestadmin01@gmail.com
Mot de passe: E4Vx<52

Autre
Web (admin_user) | user : 31957

*note: Ce compte test uniquement le cas de Uqam

Le rôle de l'utilisateur :

Vérifier que le rôle est affiché en bleu sur le nom de l'utilisateur

 

Vérifier que tous les options sont présents :

Vérifier que les options sont actives pour un utilisateur admin: Mes Simulations, Admin et Se déconnecter

 

 

La page admin :

Vérifier que seulement une partie de la page admin est affichée. Ceci inclus:

 

  • Le bouton de Se connecter
  • Pouvoir voir uniquement les enseignants et les étudiants de l'école respective
  • Pouvoir jouer en tant que la personne

 

 

La page admin (filtre) :

Vérifier que tous les filtres fonctionnes

 

Changement de language :

Vérifier que l'option de changement de langue fonctionne bien

 

Ceci devrait aussi garder la même langue après une déconnexion et un reconnexion

 

 

Fonctionnalité - Cas d'utilisateur true admin

Le rôle de l'utilisateur :

Vérifier que le rôle est affiché en orange sur le nom de l'utilisateur

 

La désactivation de produit :

Vérifier que la suppression de produit sous et Désactivé se fait bien

 

Ceci devrait uniquement rendre le produit non actif

 

La page admin :

Vérifier que tous les options sont disponible. Cela inlus :

 

  • Le bouton de Se connecter (Game, Alpha et Demo)
  • Prendre le courriel de jeu de la personne
  • Pouvoir Renouveler son GameOid
  • Pouvoir voir tous les utilisateurs
  • Pouvoir jouer en tant que la personne

 

La page user :

Vérifier que tous les informations sont présentés. Cela peut inclure :

 

  • À Propos (Toujours)
  • Tous les Simulations
  • Tous les Teams étudiants
  • Options

Vérifier aussi les cas d'échecs (si possible)

  • Server down
  • Pas d'information

 

*note: Il est nécessaire de tester ce cas sur plusieurs utilisateurs différents, car ils ont chacun des cas distincts

 

Requis: Brainlcloud

 

La page user (Tous les teams étudiants) :

Vérifier que l'élément est bien chargé après un clic

 

Vérifier aussi les cas d'échecs (si possible)

  • Server down

Requis: Brainlcloud

 

La page user (Options) :

Vérifier que le copySim fonctionne bien sur différents cas

  • Étudiant =­> Live à Dev
  • Prof => Live à Dev
  • Prof => Dev à Dev2
  • Un utilisateur qui n'a pas de simulation copiée
  • etc.

Vérifier aussi les cas d'échecs (si possible)

  • Server down

Requis: Brainlcloud

 

Jouer à la simulation :

Vérifier que les simulations sont disponibles pour être lancées sur différentes Braincloud. Ceci inclus :

  • Live
  • Alpha
  • Demo

*note: Il n'est pas nécessaire d'approfondir l'utilisation du jeu. Juste pouvoir l'ouvrir est suffisant.

 

La page commentaire :

Vérifier que le filtre et les informations sont disponibles

 

Vérifier aussi les cas d'échecs (si possible)

  • Server down

Requis: Brainlcloud

 

La page actives :

Vérifier que le filtre et les informations sont disponibles

 

Vérifier aussi les cas d'échecs (si possible)

  • Server down

Requis: Brainlcloud

 

La page paramètre :

Vérifier l'ajout d'un nouveau code produit. (Préférablement un code professeur)

 

*Cela inclut l'activation du produit

 

*note: Chaque ajout de code de produit se fait immédiatement créer sur le SQL. Veuillez créer des codes avec modération pour ne pas surcharger le SQL de code produit.

 

 

Options de changement de serveur :

Vérifier que le changement de serveur Braincloud se fait bien. Pour cela, il sera nécessaire de refaire toutes les étapes qui requièrent Brainlcloud

 

Ceci devrait créer un currentBraincloud (dans LocalStorage)

 

*note: Certaines données ne pourront pas être disponibles, puisque l'affichage de la liste est selon la base de données de Live

 

 

Fonctionnalité - Cas d'utilisateur true admin (Unity)

Il faudra se connecter en tant qu'un utilisateur Alpha

Téléchargement Excel :

Vérifier que le téléchargement d'Excel fonctionne bien

 

*note: Les données peuvent ne pas s'afficher directement. Activer les modifications

 

Classement détaillé :

Vérifier que l'onglet Classement détaillé fonctionne bien sur toutes les sélections

 

*note: Il serait nécessaire de vérifier sur plusieurs simulations si certaines données ne sont pas disponibles

 

Téléchargement PDF :

Vérifier que le téléchargement de PDF fonctionne bien

 

*note: Il serait recommandé de vérifier sur plusieurs pièces justificatives

 

Site Uniksim

Compte test - Création de compte

Liste de tous les comptes créé pour tester la création de compte

Email
Password
test1234@gmail.com `J8,1r6f5z`\
test123@gmail.com  
test546.uniksim@gmail.com 9*H0wi}N5Mh9
test123456@gmail.com 9*H0wi}N5Mh9
test12345@test.com  
ll.uniksim.test987@gmail.com 8q7Z34sw3[]j
test555@test.com @d*44V$"u:94
fahira8491@2insp.com vm9fuZvk5GML9aH3bbmT
UrsusTempMailToTest123456@account.xn--yaho-sqa.com  @testpasword
Site Uniksim

Local database (PHPMyAdmin) - Conflict

Local database (PHPMyAdmin) - Conflict
Site Uniksim

Build Unity en local

Note:

Avant de commencer, vérifiez que votre Unity est bien mis en place (aucun crash, aucune erreur, stable, etc.) puisque le Build prend du temps (en moyenne 5-7 minutes, dépendamment de l'ordinateur).

Ignorer cette étape si votre ordinateur fait partie des top 1 pour build 🚀

Unity:
  1. Avec les touches CTRL + SHIFT + B, vous devez avoir les paramètres suivants sur Unity

  2. Regarder la version de votre Unity dans le fichier version.txt (situé à "Assets/Ressources/data/version.txt").

  3. Changer la version du build dans la version locale du backend en web (Dans le fichier constantsVariable.js).

    • Changer : LOCAL_WEBGL_VERSION: {votre version}
  4. Changer la version du build dans la version locale du database (Situé dans constants)

  5. Une fois le build de Unity terminé, mettre les fichiers du build dans le frontend (Dans le dossier uniksimFrontEnd\src\assets\unity\Build)

    • Il est important que les fichiers soit les mêmes (Type et nom)
    • Il est aussi possible de modifier les fichiers du backend directement dans front, mais il n'est pas recommandé de le faire sachant qu'un build du frontend écrasera le build et que les versions seront erronées.

  6. Faire un build du frontend

  7. Tester 🥳
Erreurs courantes:
  • Si vous avez :

    • Une des versions de votre build (en backend ou en database) ne correspond pas. Veuillez revoir les étapes 3 et 4.

Diagrammes

Diagrammes

Sommation Excel

Structure d'un input avec le nouveau système de formule.


Flow de l'ajout d'une formule pour un input ciblé

 

Diagrammes

AI Chatbot

Flow d'envoie d'un message au chatbotmermaid-diagram-1779475039796.png

Flow d'ingestion de la documentation pdf
mermaid-diagram-1779475236745.png

Diagrammes

Messagerie et Tickets

Structure du nouveau système de messagerie et tickets
mermaid-diagram-1779983447699.png
Flow d'un utilisateur qui a besoin d'aide et qui contacte le support
mermaid-diagram-1779983529313.png