Phase 1 — Backend QC gate (bridge_mrp)
* fp.qc.checklist.template / .line — per-customer checklist definitions
* fusion.plating.quality.check / .line — per-MO instances walked by inspectors
* res.partner.x_fc_requires_qc + x_fc_qc_template_id toggles policy per customer
* mrp.production.button_mark_done blocks close until QC passes (plus optional
thickness-readings + thickness-PDF gates on aerospace templates)
* Auto-spawns the QC on MO confirm from the customer's resolved template
* Fischerscope XDAL 600 PDF parser auto-extracts NiP / Ni% / P% readings on upload
* fp.thickness.reading gains quality_check_id + auto_extracted
Phase 2 — Mobile QC checklist (OWL client action)
* fp_qc_checklist registered under registry.category("actions")
* Reuses shopfloor design tokens (_fp_shopfloor_tokens.scss) — 48 px touch
targets, shadow-based elevation, three-tier contrast, light + dark bundles
* Per-line pass/fail/N/A with numeric value range, mandatory photo, notes
* Fischerscope PDF drop-zone → server-side pdftotext parse
* Sign-off bar with pass / fail / rework actions
Phase 3 — Admin config
* Starter global default + aerospace/Nadcap templates seeded
* Plating → Configuration → QC Checklist Templates (manager-only)
* Plating → Quality → Quality Checks menu
* "Plating Documents" tab on res.partner gains the QC toggle + template picker
* MO form smart button opens the active QC in the mobile checklist
Gap fixes
* Scanner handles FP-QC:<ref> and FP-MO:<name> — launches the checklist
directly on the tablet
* action_spawn_retry clones a fresh QC from a failed one so rework doesn't
need a new MO
All 12 models / routes / gates smoke + E2E tested: 24 assertions pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.1 KiB
5.1 KiB
| 1 | id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
|---|---|---|---|---|---|---|---|---|
| 2 | access_fp_bridge_mrp_workcenter_manager | fp.bridge.mrp.workcenter.manager | mrp.model_mrp_workcenter | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 0 |
| 3 | access_fp_bridge_mrp_workcenter_supervisor | fp.bridge.mrp.workcenter.supervisor | mrp.model_mrp_workcenter | fusion_plating.group_fusion_plating_supervisor | 1 | 0 | 0 | 0 |
| 4 | access_fp_bridge_mrp_workorder_manager | fp.bridge.mrp.workorder.manager | mrp_workorder.model_mrp_workorder | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 0 |
| 5 | access_fp_bridge_mrp_workorder_supervisor | fp.bridge.mrp.workorder.supervisor | mrp_workorder.model_mrp_workorder | fusion_plating.group_fusion_plating_supervisor | 1 | 0 | 0 | 0 |
| 6 | access_fp_bridge_mrp_production_manager | fp.bridge.mrp.production.manager | mrp.model_mrp_production | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 0 |
| 7 | access_fp_bridge_mrp_production_supervisor | fp.bridge.mrp.production.supervisor | mrp.model_mrp_production | fusion_plating.group_fusion_plating_supervisor | 1 | 0 | 0 | 0 |
| 8 | access_fp_job_node_override_operator | fp.job.node.override.operator | model_fusion_plating_job_node_override | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 9 | access_fp_job_node_override_supervisor | fp.job.node.override.supervisor | model_fusion_plating_job_node_override | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 10 | access_fp_job_node_override_manager | fp.job.node.override.manager | model_fusion_plating_job_node_override | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 11 | access_fp_recipe_config_wizard_supervisor | fp.recipe.config.wizard.supervisor | model_fp_recipe_config_wizard | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 12 | access_fp_recipe_config_wizard_manager | fp.recipe.config.wizard.manager | model_fp_recipe_config_wizard | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 13 | access_fp_recipe_config_wizard_line_supervisor | fp.recipe.config.wizard.line.supervisor | model_fp_recipe_config_wizard_line | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 14 | access_fp_recipe_config_wizard_line_manager | fp.recipe.config.wizard.line.manager | model_fp_recipe_config_wizard_line | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 15 | access_fp_job_consumption_operator | fp.job.consumption.operator | model_fp_job_consumption | fusion_plating.group_fusion_plating_operator | 1 | 1 | 1 | 0 |
| 16 | access_fp_job_consumption_supervisor | fp.job.consumption.supervisor | model_fp_job_consumption | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 17 | access_fp_job_consumption_manager | fp.job.consumption.manager | model_fp_job_consumption | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 18 | access_fp_work_role_operator | fp.work.role.operator | model_fp_work_role | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 19 | access_fp_work_role_manager | fp.work.role.manager | model_fp_work_role | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 20 | access_fp_proficiency_operator | fp.operator.proficiency.operator | model_fp_operator_proficiency | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 21 | access_fp_proficiency_supervisor | fp.operator.proficiency.supervisor | model_fp_operator_proficiency | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 22 | access_fp_proficiency_manager | fp.operator.proficiency.manager | model_fp_operator_proficiency | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 23 | access_fp_qc_template_operator | fp.qc.checklist.template.operator | model_fp_qc_checklist_template | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 24 | access_fp_qc_template_supervisor | fp.qc.checklist.template.supervisor | model_fp_qc_checklist_template | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 25 | access_fp_qc_template_manager | fp.qc.checklist.template.manager | model_fp_qc_checklist_template | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 26 | access_fp_qc_template_line_operator | fp.qc.checklist.template.line.operator | model_fp_qc_checklist_template_line | fusion_plating.group_fusion_plating_operator | 1 | 0 | 0 | 0 |
| 27 | access_fp_qc_template_line_supervisor | fp.qc.checklist.template.line.supervisor | model_fp_qc_checklist_template_line | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 28 | access_fp_qc_template_line_manager | fp.qc.checklist.template.line.manager | model_fp_qc_checklist_template_line | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 29 | access_fp_qc_check_operator | fusion.plating.quality.check.operator | model_fusion_plating_quality_check | fusion_plating.group_fusion_plating_operator | 1 | 1 | 1 | 0 |
| 30 | access_fp_qc_check_supervisor | fusion.plating.quality.check.supervisor | model_fusion_plating_quality_check | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 31 | access_fp_qc_check_manager | fusion.plating.quality.check.manager | model_fusion_plating_quality_check | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |
| 32 | access_fp_qc_check_line_operator | fusion.plating.quality.check.line.operator | model_fusion_plating_quality_check_line | fusion_plating.group_fusion_plating_operator | 1 | 1 | 1 | 0 |
| 33 | access_fp_qc_check_line_supervisor | fusion.plating.quality.check.line.supervisor | model_fusion_plating_quality_check_line | fusion_plating.group_fusion_plating_supervisor | 1 | 1 | 1 | 0 |
| 34 | access_fp_qc_check_line_manager | fusion.plating.quality.check.line.manager | model_fusion_plating_quality_check_line | fusion_plating.group_fusion_plating_manager | 1 | 1 | 1 | 1 |