diff --git a/05_activity_log/2026-08-12.md b/05_activity_log/2026-08-12.md new file mode 100644 index 0000000..868f924 --- /dev/null +++ b/05_activity_log/2026-08-12.md @@ -0,0 +1,21 @@ +# Activity Log · 2026-08-12 · Claude Code DTP Worker + +## Session `20260812_040034` — CLEANUP #5 · suppression d'un orphelin `out_fresh/` (doublon d'artefacts commité par accident, échappe à TOUS les gates) + +**État au démarrage.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (baseline verte). `regression_run.json totals` = **629 ran · 612 passés · 17 skippés · 0 échec** (PASS). Séquence moteur V18 toujours **intégralement bloquée** en gouvernance (directive `:90-91` « NE PAS coder avant l'audit » · D-06 approbation audit = gate d'entrée · #6) → **aucun code moteur légitime**. Dernier commit `031b5e7` = PNG `DASHBOARD_LUXURY_MODELE_REFERENCE` ajouté par Michel (référence design, hors production repo). + +**Chasse au défaut d'abord (2 axes) → 1 candidat écarté comme NON-DÉFAUT (refus de fabriquer · #6).** Explore very-thorough sur les modules produit hors `audit_4big`/`regression`/`publiciste` (déjà balayés). Le seul candidat remonté « confirmé » — `faisabilite/generator/genlib/model.py:104` `is_filled()` exigeant `"{{" in text and "}}" in text` pour classer un placeholder — a été **réfuté au byte-level** : le renderer (`renderer.py:23-42`) n'émet **jamais** que des placeholders `{{...}}` **complets** (deux accolades), `brief_incomplete.json` n'utilise **aucune** accolade pour marquer l'absence (il utilise `_PLACEHOLDER_ABSENT` : « tbd »/« todo »/… + champs omis), et **aucune** occurrence mono-accolade n'existe dans tout le module. Exiger les deux accolades est donc le choix **conservateur correct** (flaguer un `}}` isolé dans de la prose réelle serait un faux positif). L'Explore s'était sur-engagé sur un cas théorique inatteignable → **non touché** (`verify-non-defects`). + +**Vrai locus trouvé = un ORPHELIN ACCUMULÉ (violation #5 « JAMAIS accumuler doublons »), pas un bug.** `05_deliverables_mvp/frontend/portails/out_fresh/` (2 fichiers : `workspace.json` + `MANIFEST.json`) est : +- **Tracké** (`git ls-files` le confirme) — mais commité **une seule fois**, dans la session auto `f954cc1` du **2026-08-02** (scratch-dir de comparaison « fresh rebuild » commité par accident). +- **Byte-identique** à `out/` (diff `json.tool` = IDENTICAL content). +- **Produit par rien** : le générateur `workspaces_gen.py` écrit **uniquement** dans `out/` (`_DEFAULT_OUT = os.path.join(_HERE, "out")` · `-o` défaut `./out`) — jamais `out_fresh`. +- **Référencé nulle part** : `git grep out_fresh` sur tout l'arbre tracké (hors le dossier lui-même) = **ZÉRO** (ni code, ni doc, ni CI, ni `.gitignore`, ni test). + +**Pourquoi c'est un vrai défaut et pas un artefact by-design (preuve qu'il échappe à tout gate).** `check_artifacts.sh` découvre les cibles par `find -type d -name out` — un match **exact** sur `out`, donc `out_fresh` **n'entre dans aucun gate de reproductibilité**. C'est précisément pourquoi il a survécu au balayage `reverse-bijection-artifact-sweep` (qui ne vise que les répertoires `out/`). Conséquence : c'est une **bombe à retardement de staleness** — rien ne le régénère, donc dès que la source du générateur bouge, `out/` se met à jour tandis que `out_fresh/` **diverge silencieusement** en une copie **stale, non-possédée et trompeuse** (« laquelle fait autorité ? »). Dead weight ungated. C'est l'unique scratch-dir du genre dans tout le repo (`find` pour `out_new`/`out_old`/`out_tmp`/`out_bak`/`out_fresh` → seul `out_fresh` existe · occurrence isolée). + +**Fix = suppression (`git rm -r out_fresh/`).** Sûr (réversible via l'historique git), et **je ne l'ai pas créé** (règle « avant de supprimer, regarde la cible » : contenu byte-identique à la copie autoritaire, aucun consommateur). La copie autoritaire `out/` est **intacte et se régénère BYTE-IDENTIQUE** (rebuild `-o /tmp` vs `out/` = identique, vérifié après suppression). + +**Pourquoi pas un nouveau gate (#5).** Occurrence **isolée** (origine unique `f954cc1`, un seul module). Ajouter un gate « aucun répertoire `out_*` non-`out` » serait de la sur-ingénierie pour un événement-zéro. La discipline existante (générateur écrit dans `out/` · `.gitignore` documente que `out/` est commité) est le contrat ; l'orphelin était une déviation ponctuelle, corrigée à la source. + +**Vérif.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé — rien ne dépendait de `out_fresh/`). **0 code moteur V18** (bloqué #6), **0 module de production touché** (seul un doublon orphelin supprimé · char-class `model.py` laissée intacte car non-défaut), **0 artefact autoritaire modifié**, **0 gate ajouté** (#5), **0 commande VPS** (#8), **0 API externe**. Fichiers : `- 05_deliverables_mvp/frontend/portails/out_fresh/{workspace,MANIFEST}.json` (supprimés) + ce journal. diff --git a/05_deliverables_mvp/frontend/portails/out_fresh/MANIFEST.json b/05_deliverables_mvp/frontend/portails/out_fresh/MANIFEST.json deleted file mode 100644 index 2c57f46..0000000 --- a/05_deliverables_mvp/frontend/portails/out_fresh/MANIFEST.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "generated_from": "rbac_50_roles.json (permissions_cibles + portail par rôle)", - "spec_version": "1.0.0", - "source_version": "1.0.0", - "roadmap_ref": "04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md · Sprint 4 l.49 « Frontend Console : 5 portails (Ventes/Construction/Achat/Compta/Direction) »", - "counts": { - "workspaces": 5, - "roles_couverts": 44, - "liens_total": 53, - "raccourcis_total": 20 - }, - "brand": { - "note": "Tokens de marque luxury dark+doré (CLAUDE.md #4). Appliqués par la couche thème desk (Website Theme / CSS custom) déposée par l'agent Frontend sur le VPS — HORS de ce worker (#8). Repris ici pour le hand-off, jamais fabriqués.", - "fond": { - "valeur": "#0a0a12", - "source": "CLAUDE.md #4" - }, - "accent": { - "valeur": "#f0b429", - "source": "CLAUDE.md #4" - }, - "polices": [ - { - "valeur": "Fraunces", - "source": "CLAUDE.md #4" - }, - { - "valeur": "Cormorant Garamond", - "source": "CLAUDE.md #4" - } - ] - }, - "module_note": "Workspace.module laisse a None (a_confirmer) : l'agent ERPNext Backend le fixe au module de l'app OTO a l'import (#8). Le worker ne fabrique pas de nom d'app.", - "doctypes_custom_a_creer": [ - "CONFOTUR Application", - "Faisabilité", - "Publiciste Log" - ], - "workspaces": [ - { - "portail": "ventes", - "workspace": "OTO Ventes", - "nb_cartes": 4, - "nb_raccourcis": 4, - "nb_liens": 11, - "nb_roles": 12, - "doctypes_custom": [ - "CONFOTUR Application", - "Publiciste Log" - ] - }, - { - "portail": "construction", - "workspace": "OTO Construction", - "nb_cartes": 4, - "nb_raccourcis": 4, - "nb_liens": 9, - "nb_roles": 10, - "doctypes_custom": [ - "Faisabilité" - ] - }, - { - "portail": "achat", - "workspace": "OTO Achat", - "nb_cartes": 3, - "nb_raccourcis": 4, - "nb_liens": 8, - "nb_roles": 5, - "doctypes_custom": [] - }, - { - "portail": "compta", - "workspace": "OTO Compta", - "nb_cartes": 4, - "nb_raccourcis": 4, - "nb_liens": 11, - "nb_roles": 8, - "doctypes_custom": [] - }, - { - "portail": "direction", - "workspace": "OTO Direction", - "nb_cartes": 4, - "nb_raccourcis": 4, - "nb_liens": 14, - "nb_roles": 9, - "doctypes_custom": [ - "CONFOTUR Application", - "Faisabilité" - ] - } - ] -} diff --git a/05_deliverables_mvp/frontend/portails/out_fresh/workspace.json b/05_deliverables_mvp/frontend/portails/out_fresh/workspace.json deleted file mode 100644 index cd41045..0000000 --- a/05_deliverables_mvp/frontend/portails/out_fresh/workspace.json +++ /dev/null @@ -1,1450 +0,0 @@ -[ - { - "doctype": "Workspace", - "name": "OTO Ventes", - "title": "OTO Ventes", - "label": "OTO Ventes", - "public": 1, - "is_hidden": 0, - "module": null, - "icon": "sell", - "indicator_color": "Yellow", - "sequence_id": 1.0, - "parent_page": "", - "for_user": "", - "content": "[{\"data\":{\"col\":12,\"text\":\"OTO Ventes\"},\"id\":\"hdr_ventes\",\"type\":\"header\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Lead\"},\"id\":\"sc_ventes_Lead\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Opportunity\"},\"id\":\"sc_ventes_Opportunity\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Quotation\"},\"id\":\"sc_ventes_Quotation\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Sales Order\"},\"id\":\"sc_ventes_Sales Order\",\"type\":\"shortcut\"},{\"data\":{\"card_name\":\"Pipeline commercial\",\"col\":4},\"id\":\"card_ventes_Pipeline commercial\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Clients & encaissements\",\"col\":4},\"id\":\"card_ventes_Clients & encaissements\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Apres-vente & conformite\",\"col\":4},\"id\":\"card_ventes_Apres-vente & conformite\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Marketing & web\",\"col\":4},\"id\":\"card_ventes_Marketing & web\",\"type\":\"card\"}]", - "shortcuts": [ - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Lead", - "label": "Lead", - "color": "Yellow", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Opportunity", - "label": "Opportunity", - "color": "Yellow", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Quotation", - "label": "Quotation", - "color": "Yellow", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Sales Order", - "label": "Sales Order", - "color": "Yellow", - "doc_view": "List" - } - ], - "links": [ - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Pipeline commercial", - "link_count": 4, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Lead", - "link_type": "DocType", - "link_to": "Lead", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Opportunity", - "link_type": "DocType", - "link_to": "Opportunity", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Quotation", - "link_type": "DocType", - "link_to": "Quotation", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Sales Order", - "link_type": "DocType", - "link_to": "Sales Order", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Clients & encaissements", - "link_count": 3, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Customer", - "link_type": "DocType", - "link_to": "Customer", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Sales Invoice", - "link_type": "DocType", - "link_to": "Sales Invoice", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Payment Entry", - "link_type": "DocType", - "link_to": "Payment Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Apres-vente & conformite", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Issue", - "link_type": "DocType", - "link_to": "Issue", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "CONFOTUR Application", - "link_type": "DocType", - "link_to": "CONFOTUR Application", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Marketing & web", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Publiciste Log", - "link_type": "DocType", - "link_to": "Publiciste Log", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Web Page", - "link_type": "DocType", - "link_to": "Web Page", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - } - ], - "roles": [ - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Marketing Directeur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Marketing Publiciste" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Marketing SEO" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Marketing Social" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Après-Vente" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes CONFOTUR" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Chef Équipe" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Conseiller" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Contrats" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Courtier Externe" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Directeur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Ventes Réservations" - } - ] - }, - { - "doctype": "Workspace", - "name": "OTO Construction", - "title": "OTO Construction", - "label": "OTO Construction", - "public": 1, - "is_hidden": 0, - "module": null, - "icon": "project", - "indicator_color": "Orange", - "sequence_id": 2.0, - "parent_page": "", - "for_user": "", - "content": "[{\"data\":{\"col\":12,\"text\":\"OTO Construction\"},\"id\":\"hdr_construction\",\"type\":\"header\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Project\"},\"id\":\"sc_construction_Project\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Task\"},\"id\":\"sc_construction_Task\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Faisabilité\"},\"id\":\"sc_construction_Faisabilité\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Quality Inspection\"},\"id\":\"sc_construction_Quality Inspection\",\"type\":\"shortcut\"},{\"data\":{\"card_name\":\"Chantier & projet\",\"col\":4},\"id\":\"card_construction_Chantier & projet\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Faisabilite & plans\",\"col\":4},\"id\":\"card_construction_Faisabilite & plans\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Approvisionnement chantier\",\"col\":4},\"id\":\"card_construction_Approvisionnement chantier\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Qualite\",\"col\":4},\"id\":\"card_construction_Qualite\",\"type\":\"card\"}]", - "shortcuts": [ - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Project", - "label": "Project", - "color": "Orange", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Task", - "label": "Task", - "color": "Orange", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Faisabilité", - "label": "Faisabilité", - "color": "Orange", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Quality Inspection", - "label": "Quality Inspection", - "color": "Orange", - "doc_view": "List" - } - ], - "links": [ - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Chantier & projet", - "link_count": 3, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Project", - "link_type": "DocType", - "link_to": "Project", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Task", - "link_type": "DocType", - "link_to": "Task", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Timesheet", - "link_type": "DocType", - "link_to": "Timesheet", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Faisabilite & plans", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Faisabilité", - "link_type": "DocType", - "link_to": "Faisabilité", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "File", - "link_type": "DocType", - "link_to": "File", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Approvisionnement chantier", - "link_count": 3, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Material Request", - "link_type": "DocType", - "link_to": "Material Request", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Order", - "link_type": "DocType", - "link_to": "Purchase Order", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Item", - "link_type": "DocType", - "link_to": "Item", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Qualite", - "link_count": 1, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Quality Inspection", - "link_type": "DocType", - "link_to": "Quality Inspection", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - } - ], - "roles": [ - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction Architecte" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction BIM" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction Chef Projet" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction Directeur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction Ingénieur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction QAQC" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Construction Sous-traitants" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Faisabilité IFC Speckle" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Faisabilité Rendu 3D" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Faisabilité Économiste" - } - ] - }, - { - "doctype": "Workspace", - "name": "OTO Achat", - "title": "OTO Achat", - "label": "OTO Achat", - "public": 1, - "is_hidden": 0, - "module": null, - "icon": "buying", - "indicator_color": "Cyan", - "sequence_id": 3.0, - "parent_page": "", - "for_user": "", - "content": "[{\"data\":{\"col\":12,\"text\":\"OTO Achat\"},\"id\":\"hdr_achat\",\"type\":\"header\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Material Request\"},\"id\":\"sc_achat_Material Request\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Request for Quotation\"},\"id\":\"sc_achat_Request for Quotation\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Purchase Order\"},\"id\":\"sc_achat_Purchase Order\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Supplier\"},\"id\":\"sc_achat_Supplier\",\"type\":\"shortcut\"},{\"data\":{\"card_name\":\"Cycle achat\",\"col\":4},\"id\":\"card_achat_Cycle achat\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Fournisseurs\",\"col\":4},\"id\":\"card_achat_Fournisseurs\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Stock & articles\",\"col\":4},\"id\":\"card_achat_Stock & articles\",\"type\":\"card\"}]", - "shortcuts": [ - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Material Request", - "label": "Material Request", - "color": "Cyan", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Request for Quotation", - "label": "Request for Quotation", - "color": "Cyan", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Purchase Order", - "label": "Purchase Order", - "color": "Cyan", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Supplier", - "label": "Supplier", - "color": "Cyan", - "doc_view": "List" - } - ], - "links": [ - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Cycle achat", - "link_count": 4, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Material Request", - "link_type": "DocType", - "link_to": "Material Request", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Request for Quotation", - "link_type": "DocType", - "link_to": "Request for Quotation", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Order", - "link_type": "DocType", - "link_to": "Purchase Order", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Receipt", - "link_type": "DocType", - "link_to": "Purchase Receipt", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Fournisseurs", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Supplier", - "link_type": "DocType", - "link_to": "Supplier", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Contact", - "link_type": "DocType", - "link_to": "Contact", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Stock & articles", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Item", - "link_type": "DocType", - "link_to": "Item", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Stock Entry", - "link_type": "DocType", - "link_to": "Stock Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - } - ], - "roles": [ - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Achat Acheteur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Achat Directeur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Achat Fournisseurs" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Achat Magasinier" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Achat Réception" - } - ] - }, - { - "doctype": "Workspace", - "name": "OTO Compta", - "title": "OTO Compta", - "label": "OTO Compta", - "public": 1, - "is_hidden": 0, - "module": null, - "icon": "accounting", - "indicator_color": "Green", - "sequence_id": 4.0, - "parent_page": "", - "for_user": "", - "content": "[{\"data\":{\"col\":12,\"text\":\"OTO Compta\"},\"id\":\"hdr_compta\",\"type\":\"header\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Journal Entry\"},\"id\":\"sc_compta_Journal Entry\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Payment Entry\"},\"id\":\"sc_compta_Payment Entry\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Sales Invoice\"},\"id\":\"sc_compta_Sales Invoice\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Purchase Invoice\"},\"id\":\"sc_compta_Purchase Invoice\",\"type\":\"shortcut\"},{\"data\":{\"card_name\":\"Grand livre\",\"col\":4},\"id\":\"card_compta_Grand livre\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Clients & fournisseurs\",\"col\":4},\"id\":\"card_compta_Clients & fournisseurs\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Tresorerie & budget\",\"col\":4},\"id\":\"card_compta_Tresorerie & budget\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Paie\",\"col\":4},\"id\":\"card_compta_Paie\",\"type\":\"card\"}]", - "shortcuts": [ - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Journal Entry", - "label": "Journal Entry", - "color": "Green", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Payment Entry", - "label": "Payment Entry", - "color": "Green", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Sales Invoice", - "label": "Sales Invoice", - "color": "Green", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Purchase Invoice", - "label": "Purchase Invoice", - "color": "Green", - "doc_view": "List" - } - ], - "links": [ - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Grand livre", - "link_count": 4, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Account", - "link_type": "DocType", - "link_to": "Account", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "GL Entry", - "link_type": "DocType", - "link_to": "GL Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Journal Entry", - "link_type": "DocType", - "link_to": "Journal Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Cost Center", - "link_type": "DocType", - "link_to": "Cost Center", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Clients & fournisseurs", - "link_count": 3, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Sales Invoice", - "link_type": "DocType", - "link_to": "Sales Invoice", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Invoice", - "link_type": "DocType", - "link_to": "Purchase Invoice", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Payment Entry", - "link_type": "DocType", - "link_to": "Payment Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Tresorerie & budget", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Bank Transaction", - "link_type": "DocType", - "link_to": "Bank Transaction", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Budget", - "link_type": "DocType", - "link_to": "Budget", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Paie", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Employee", - "link_type": "DocType", - "link_to": "Employee", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Salary Slip", - "link_type": "DocType", - "link_to": "Salary Slip", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - } - ], - "roles": [ - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Audit UAF" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Clients AR" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Contrôle Gestion" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Fiscaliste eCF" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Fournisseurs AP" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Général" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Paie" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Compta Trésorier" - } - ] - }, - { - "doctype": "Workspace", - "name": "OTO Direction", - "title": "OTO Direction", - "label": "OTO Direction", - "public": 1, - "is_hidden": 0, - "module": null, - "icon": "organization", - "indicator_color": "Purple", - "sequence_id": 5.0, - "parent_page": "", - "for_user": "", - "content": "[{\"data\":{\"col\":12,\"text\":\"OTO Direction\"},\"id\":\"hdr_direction\",\"type\":\"header\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Faisabilité\"},\"id\":\"sc_direction_Faisabilité\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Sales Order\"},\"id\":\"sc_direction_Sales Order\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Journal Entry\"},\"id\":\"sc_direction_Journal Entry\",\"type\":\"shortcut\"},{\"data\":{\"col\":3,\"shortcut_name\":\"Project\"},\"id\":\"sc_direction_Project\",\"type\":\"shortcut\"},{\"data\":{\"card_name\":\"Commercial (vue direction)\",\"col\":4},\"id\":\"card_direction_Commercial (vue direction)\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Operations & projets\",\"col\":4},\"id\":\"card_direction_Operations & projets\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Finance (vue direction)\",\"col\":4},\"id\":\"card_direction_Finance (vue direction)\",\"type\":\"card\"},{\"data\":{\"card_name\":\"Legal & conformite\",\"col\":4},\"id\":\"card_direction_Legal & conformite\",\"type\":\"card\"}]", - "shortcuts": [ - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Faisabilité", - "label": "Faisabilité", - "color": "Purple", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Sales Order", - "label": "Sales Order", - "color": "Purple", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Journal Entry", - "label": "Journal Entry", - "color": "Purple", - "doc_view": "List" - }, - { - "doctype": "Workspace Shortcut", - "parentfield": "shortcuts", - "parenttype": "Workspace", - "type": "DocType", - "link_to": "Project", - "label": "Project", - "color": "Purple", - "doc_view": "List" - } - ], - "links": [ - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Commercial (vue direction)", - "link_count": 5, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Lead", - "link_type": "DocType", - "link_to": "Lead", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Opportunity", - "link_type": "DocType", - "link_to": "Opportunity", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Quotation", - "link_type": "DocType", - "link_to": "Quotation", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Sales Order", - "link_type": "DocType", - "link_to": "Sales Order", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Sales Invoice", - "link_type": "DocType", - "link_to": "Sales Invoice", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Operations & projets", - "link_count": 3, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Project", - "link_type": "DocType", - "link_to": "Project", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Task", - "link_type": "DocType", - "link_to": "Task", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Faisabilité", - "link_type": "DocType", - "link_to": "Faisabilité", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Finance (vue direction)", - "link_count": 4, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Journal Entry", - "link_type": "DocType", - "link_to": "Journal Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Payment Entry", - "link_type": "DocType", - "link_to": "Payment Entry", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Invoice", - "link_type": "DocType", - "link_to": "Purchase Invoice", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Purchase Order", - "link_type": "DocType", - "link_to": "Purchase Order", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Card Break", - "label": "Legal & conformite", - "link_count": 2, - "onboard": 0, - "hidden": 0 - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "Contract", - "link_type": "DocType", - "link_to": "Contract", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - }, - { - "doctype": "Workspace Link", - "parentfield": "links", - "parenttype": "Workspace", - "type": "Link", - "label": "CONFOTUR Application", - "link_type": "DocType", - "link_to": "CONFOTUR Application", - "onboard": 0, - "hidden": 0, - "is_query_report": 0, - "dependencies": "" - } - ], - "roles": [ - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Conseil Administration" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Direction Commerciale" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Direction Financière" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Direction Générale" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Direction Opérations" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Direction Président" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Faisabilité Analyste" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Legal Directeur" - }, - { - "doctype": "Has Role", - "parentfield": "roles", - "parenttype": "Workspace", - "role": "OTO Legal ONAPI" - } - ] - } -]