From 6305faccb74d2992b9f9d141dea18297154d3434 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Sun, 12 Apr 2026 15:13:08 -0400 Subject: [PATCH] add CLAUDE.md for fusion-plating module context Comprehensive instructions for future sessions: module structure, critical Odoo 19 rules, recipe system architecture, deployment commands for both servers, Steelhead feature status, and naming conventions. Co-Authored-By: Claude Opus 4.6 (1M context) --- fusion-plating/CLAUDE.md | 157 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 fusion-plating/CLAUDE.md diff --git a/fusion-plating/CLAUDE.md b/fusion-plating/CLAUDE.md new file mode 100644 index 00000000..d6cbfb30 --- /dev/null +++ b/fusion-plating/CLAUDE.md @@ -0,0 +1,157 @@ +# Fusion Plating — Claude Code Instructions + +## Project +Fusion Plating is a multi-module Odoo 19 ERP for electroless nickel plating and metal finishing shops. Built by Nexa Systems for EN Technologies (the client). Replaces Steelhead Software. + +## Module Structure +``` +fusion_plating/ — Core: facilities, process types, tanks, baths, chemistry, recipes +fusion_plating_shopfloor/ — Tablet UI, plant overview kanban, process tree visualization +fusion_plating_portal/ — Customer portal +fusion_plating_reports/ — PDF reports (WO margin, discharge sample, etc.) +fusion_plating_compliance/ — Compliance framework, jurisdictions +fusion_plating_aerospace/ — AS9100 / Nadcap +fusion_plating_nuclear/ — CSA N299 / CNSC +fusion_plating_cgp/ — Controlled Goods Program +fusion_plating_safety/ — SDS, WHMIS, JHSC +fusion_plating_quality/ — QMS (NCR, CAPA, calibration) +fusion_plating_logistics/ — Pickup & delivery +fusion_plating_culture/ — Values / fundamentals +fusion_plating_bridge_mrp/ — MRP integration (extends mrp.workorder) +fusion_plating_bridge_sign/ — Digital signatures +fusion_plating_bridge_quality/ — Quality bridge +fusion_plating_process_en/ — Electroless nickel process pack +fusion_plating_process_chrome/ — Chrome process pack +fusion_plating_process_anodize/ — Anodizing process pack +fusion_plating_process_black_oxide/ — Black oxide process pack +``` + +## Critical Rules — Odoo 19 +1. **NEVER code from memory** — Read reference files from the server first. +2. **Backend OWL**: `static template`, `static props = ["*"]`, standalone `rpc()` from `@web/core/network/rpc`. NOT `useService("rpc")`. +3. **HTTP routes**: `type="jsonrpc"` — NOT `type="json"` (deprecated in Odoo 19). +4. **Search views**: NO `group expand="0"`, NO `string` attribute on ``, NO `` wrapper for group-by filters. +5. **res.config.settings**: Only boolean/integer/float/char/selection/many2one/datetime. NO Date fields. +6. **Field params**: `parent_path` does NOT accept `unaccent` parameter in Odoo 19. +7. **SCSS borders**: Use `$border-color` (SCSS variable) for card borders, NOT `color-mix()` in border shorthand — the SCSS compiler drops it. `color-mix()` works fine in `background-color`, `box-shadow`, etc. +8. **Theme awareness**: All colours must use CSS custom properties (`var(--bs-body-bg)`, `var(--bs-body-color)`, `var(--bs-border-color)`, `var(--bs-secondary-color)`, `var(--o-action)`). NO hardcoded hex. See `fusion_plating_shopfloor.scss` as the gold standard. + +## Naming +- New fields on **custom models**: standard names (no prefix needed) +- New fields on **standard Odoo models**: `x_fc_*` prefix +- Legacy fields: `x_studio_*` +- Canadian English for all user-facing text +- SCSS class prefix: `o_fp_*` (shopfloor: `o_fp_po_*`, `o_fp_pt_*`; recipes: `o_fp_recipe_*`) + +## Process Recipe System (NEW — v19.0.2.x) +**Model**: `fusion.plating.process.node` (in `fusion_plating` core) +- Hierarchical tree with `_parent_store = True` +- Node types: `recipe`, `sub_process`, `operation`, `step` +- Companion model: `fusion.plating.process.node.input` (operator inputs) +- `icon` is a Selection field (24 curated plating icons), NOT a Char +- Auto-icon: JS `guessIcon(name)` maps keywords → icons when adding nodes +- OWL tree editor: registered as `fp_recipe_tree_editor` client action +- Controller: `fusion_plating/controllers/recipe_controller.py` (7 endpoints) +- SCSS: `fusion_plating/static/src/scss/recipe_tree_editor.scss` + +### Recipe Endpoints +``` +POST /fp/recipe/tree — full nested tree for OWL editor +POST /fp/recipe/node/create — add child node +POST /fp/recipe/node/write — update fields +POST /fp/recipe/node/unlink — delete + cascade +POST /fp/recipe/node/reorder — bulk sequence update +POST /fp/recipe/node/move — change parent_id +POST /fp/recipe/duplicate — deep-copy recipe +``` + +### Steelhead Features Status +| Feature | Status | +|---------|--------| +| Hierarchical process tree | Done | +| Node types (recipe/sub/op/step) | Done | +| Auto-complete flag | Done | +| Customer visible flag | Done | +| Manual/automated flag | Done | +| Requires sign-off | Done | +| Opt In/Out (disabled/opt-in/opt-out) | Done | +| Icon picker | Done | +| Time tracking (created/updated with seconds) | Done | +| Operator inputs | Done | +| Description (rich text) | Done | +| File attachments (via mail.thread) | Done | +| OWL tree editor with drag-drop | Done | +| Tags | Not yet | +| Dashboard Transitions | Not yet | +| Treatment Groups / Choices | Not yet | +| Go To Node Options | Not yet | +| Spec Fields | Not yet | + +### Client Recipes Created +- `ENP-ALUM-BASIC` — Electroless Nickel Plating Aluminium Basic (9 operations, 15 steps). Data file: `fusion_plating/data/fp_recipe_enp_alum_basic.xml` + +## Plant Overview Dashboard +- OWL client action: `fp_plant_overview` in `fusion_plating_shopfloor` +- Kanban columns = work centres, cards = active `mrp.workorder` records +- Drag & drop between columns (writes `workcenter_id` on the work order) +- Endpoint: `POST /fp/shopfloor/plant_overview` +- Move endpoint: `POST /fp/shopfloor/plant_overview/move_card` +- Auto-refreshes every 30s + +## Deployment + +### odoo-entech (LXC 111 on pve-worker5) +- **Type**: Native Odoo (apt package, NOT Docker) +- **IP**: 10.200.1.26 +- **DB**: `admin` (PostgreSQL local, user `odoo`) +- **Config**: `/etc/odoo/odoo.conf` +- **Addons**: `/mnt/extra-addons/custom/` (fusion_plating modules live here) +- **Service**: `systemctl {start|stop|restart} odoo` +- **Update command**: + ```bash + ssh pve-worker5 "pct exec 111 -- bash -c 'systemctl stop odoo && su - odoo -s /bin/bash -c \"/usr/bin/odoo -c /etc/odoo/odoo.conf -d admin -u MODULE_NAME --stop-after-init\" && systemctl start odoo'" + ``` +- **Copy files**: `cat LOCAL_FILE | ssh pve-worker5 "pct exec 111 -- bash -c 'cat > /mnt/extra-addons/custom/REMOTE_PATH'"` +- **IMPORTANT**: Must pass `-c /etc/odoo/odoo.conf` or Odoo won't find the repackaged enterprise addons + +### odoo-trial (VM 316 on pve-worker1) +- **Type**: Docker (container `odoo-trial-app`, db `odoo-trial-db`) +- **DB**: `trial` (user `odoo`) +- **Host addons path**: `/opt/odoo/custom-addons/` → mounts as `/mnt/extra-addons/` in Docker +- **Docker network**: `odoo_odoo-network` +- **Copy files** (base64 pipe through qm guest exec): + ```bash + B64=$(base64 -w0 "LOCAL_FILE") + ssh pve-worker1 "qm guest exec 316 -- bash -c 'echo $B64 | base64 -d > /opt/odoo/custom-addons/REMOTE_PATH'" + ``` +- **Clear asset cache** (required after SCSS/JS changes): + ```bash + ssh pve-worker1 "qm guest exec 316 -- bash -c \"docker exec odoo-trial-db psql -U odoo -d trial -c \\\"DELETE FROM ir_attachment WHERE url LIKE '%/web/assets/%';\\\"\"" + ``` +- **Update command**: + ```bash + ssh pve-worker1 "qm guest exec 316 -- bash -c 'docker stop odoo-trial-app && docker run --rm --network odoo_odoo-network -v odoo_odoo-data:/var/lib/odoo -v /opt/odoo/custom-addons:/mnt/extra-addons -v /opt/odoo/enterprise-addons:/mnt/enterprise-addons -v /opt/odoo/odoo.conf:/etc/odoo/odoo.conf odoo:19 odoo -d trial -u MODULE_NAME --stop-after-init && docker start odoo-trial-app'" + ``` + +### Git Push +```bash +cd K:/Github/Odoo-Modules/fusion-plating && git push origin main +``` +Pushes to both GitHub and Gitea (nexasystems.ca) via multiple remotes. + +## Supabase Knowledge Base +Project: `nexasystems` (id: `ikvdlqkbqsitabxidvnq`) +- `fusionapps.decisions` — past architecture decisions +- `fusionapps.issues` — known issues and fixes +- `fusionapps.code_snippets` — reference code +- `fusionapps.quick_commands` — deployment and admin commands +- `fusionapps.vm_registry` — VM inventory +- `fusionapps.proxmox_nodes` — cluster node specs + +## Repackaged Enterprise Modules +See `K:\Github\RePackaged-Odoo\CLAUDE.md` for full details. Key points: +- Odoo 19 enterprise modules repackaged for community edition +- All OEEL-1 licenses changed to LGPL-3 +- Phone-home/telemetry gutted +- `web_enterprise` and `mail_enterprise` are installed on odoo-entech +- Addons path includes: `_dependencies`, `accounting`, `inventory_manufacturing`, `hr`, `sales`, `ai`, `fusion_backend`, `custom`, `website`