chore(plating): de-dash shipped code + intake-neutral customer emails
Replace em-dashes and en-dashes with hyphens across 789 shipped source files (py/xml/js/scss) so the delivered module reads as human-written; em-dashes had become a recognizable AI-generated tell. Internal .md dev notes are excluded. The WO-sticker mojibake strippers keep their dash search targets (now written — / –). No logic changes: comments and display strings only; validated with py_compile + lxml parse. Rewrite the 7 customer notification emails to be intake-neutral (ship-in / drop-off / pickup) and repair-aware, and fix the Shipped email documents line (packing slip vs bill of lading; certificate only when issued). Subjects use a hyphen separator. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2026 Nexa Systems Inc. — DEMO DATA (temporary)
|
||||
Copyright 2026 Nexa Systems Inc. - DEMO DATA (temporary)
|
||||
Remove this file and its manifest entry before production release.
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
@@ -13,7 +13,7 @@
|
||||
<field name="state">containment</field>
|
||||
<field name="source">inspection</field>
|
||||
<field name="severity">high</field>
|
||||
<field name="part_ref">P/N 4422-B — Hydraulic Cylinder Rod</field>
|
||||
<field name="part_ref">P/N 4422-B - Hydraulic Cylinder Rod</field>
|
||||
<field name="reported_date" eval="(DateTime.today() - timedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="description" type="html"><p>EN deposit thickness below spec on OD of part. Spec calls for 0.0005" ± 0.0001", measured 0.0003" average across 4 readings. Bath temperature was at low end of range (185°F vs 188°F target). Possible root cause: heater element degradation.</p></field>
|
||||
<field name="quantity_affected">12</field>
|
||||
@@ -26,7 +26,7 @@
|
||||
<field name="state">open</field>
|
||||
<field name="source">customer</field>
|
||||
<field name="severity">critical</field>
|
||||
<field name="part_ref">P/N 7810-A — Landing Gear Pin</field>
|
||||
<field name="part_ref">P/N 7810-A - Landing Gear Pin</field>
|
||||
<field name="reported_date" eval="(DateTime.today() - timedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="description" type="html"><p>Customer reported micro-cracking on hard chrome deposit. Parts returned for investigation. Lot of 6 pins from WO-2026-0412. Immediate containment: quarantine remaining stock from same bath run.</p></field>
|
||||
<field name="quantity_affected">6</field>
|
||||
@@ -38,12 +38,12 @@
|
||||
<field name="state">closed</field>
|
||||
<field name="source">shop_floor</field>
|
||||
<field name="severity">low</field>
|
||||
<field name="part_ref">P/N 1133-C — Bracket Assembly</field>
|
||||
<field name="part_ref">P/N 1133-C - Bracket Assembly</field>
|
||||
<field name="reported_date" eval="(DateTime.today() - timedelta(days=30)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="closed_date" eval="(DateTime.today() - timedelta(days=20)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="description" type="html"><p>Minor cosmetic discolouration on black oxide finish. Traced to elevated bath temperature (147°C vs 141°C target). Thermostat recalibrated. Parts accepted by customer with concession.</p></field>
|
||||
<field name="root_cause" type="html"><p>Thermostat drift on BOX-01 tank heater. Last calibration was 14 months ago (overdue).</p></field>
|
||||
<field name="containment" type="html"><p>Segregated affected lot. Verified all parts visually. 4 of 20 showed discolouration — reworked.</p></field>
|
||||
<field name="containment" type="html"><p>Segregated affected lot. Verified all parts visually. 4 of 20 showed discolouration - reworked.</p></field>
|
||||
<field name="disposition">rework</field>
|
||||
<field name="quantity_affected">20</field>
|
||||
</record>
|
||||
@@ -57,7 +57,7 @@
|
||||
<field name="state">implementation</field>
|
||||
<field name="due_date" eval="(DateTime.today() + timedelta(days=15)).strftime('%Y-%m-%d')"/>
|
||||
<field name="description" type="html"><p>Corrective action for NCR-2026-003: black oxide thermostat drift causing out-of-spec bath temperature.</p></field>
|
||||
<field name="root_cause_analysis" type="html"><p>Root cause: calibration interval for tank heater thermostats was set to 18 months. Industry best practice for hot-process tanks is 6–12 months. Maintenance PM schedule did not flag the overdue calibration.</p></field>
|
||||
<field name="root_cause_analysis" type="html"><p>Root cause: calibration interval for tank heater thermostats was set to 18 months. Industry best practice for hot-process tanks is 6-12 months. Maintenance PM schedule did not flag the overdue calibration.</p></field>
|
||||
<field name="action_plan" type="html"><p>1. Reduce calibration interval for all hot-process thermostats to 6 months.<br/>2. Add calibration due-date alerts to the maintenance dashboard.<br/>3. Retrain maintenance team on calibration SOP revision.<br/>4. Verify all other hot-process tank thermostats within 30 days.</p></field>
|
||||
</record>
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
<!-- ========== CALIBRATION EQUIPMENT ========== -->
|
||||
<record id="demo_cal_thickness" model="fusion.plating.calibration.equipment">
|
||||
<field name="name">XRF Thickness Gauge — Fischer XDL-B</field>
|
||||
<field name="name">XRF Thickness Gauge - Fischer XDL-B</field>
|
||||
<field name="code">CAL-XRF-01</field>
|
||||
<field name="facility_id" ref="fusion_plating.demo_facility_main"/>
|
||||
<field name="equipment_type">xrf</field>
|
||||
@@ -83,7 +83,7 @@
|
||||
</record>
|
||||
|
||||
<record id="demo_cal_ph" model="fusion.plating.calibration.equipment">
|
||||
<field name="name">pH Meter — Hanna HI-2020</field>
|
||||
<field name="name">pH Meter - Hanna HI-2020</field>
|
||||
<field name="code">CAL-PH-01</field>
|
||||
<field name="facility_id" ref="fusion_plating.demo_facility_main"/>
|
||||
<field name="equipment_type">ph_meter</field>
|
||||
@@ -94,7 +94,7 @@
|
||||
</record>
|
||||
|
||||
<record id="demo_cal_temp" model="fusion.plating.calibration.equipment">
|
||||
<field name="name">Thermocouple Probe — Fluke 52 II</field>
|
||||
<field name="name">Thermocouple Probe - Fluke 52 II</field>
|
||||
<field name="code">CAL-TC-01</field>
|
||||
<field name="facility_id" ref="fusion_plating.demo_facility_main"/>
|
||||
<field name="equipment_type">thermocouple</field>
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
<!-- ========== DOC CONTROL ========== -->
|
||||
<record id="demo_doc_sop_en" model="fusion.plating.doc.control">
|
||||
<field name="name">SOP-EN-001 — Electroless Nickel Plating Procedure</field>
|
||||
<field name="name">SOP-EN-001 - Electroless Nickel Plating Procedure</field>
|
||||
<field name="doc_type">procedure</field>
|
||||
<field name="revision">Rev C</field>
|
||||
<field name="state">effective</field>
|
||||
@@ -115,7 +115,7 @@
|
||||
</record>
|
||||
|
||||
<record id="demo_doc_sop_cr" model="fusion.plating.doc.control">
|
||||
<field name="name">SOP-CR-001 — Hard Chrome Plating Procedure</field>
|
||||
<field name="name">SOP-CR-001 - Hard Chrome Plating Procedure</field>
|
||||
<field name="doc_type">procedure</field>
|
||||
<field name="revision">Rev B</field>
|
||||
<field name="state">effective</field>
|
||||
@@ -124,7 +124,7 @@
|
||||
</record>
|
||||
|
||||
<record id="demo_doc_qm" model="fusion.plating.doc.control">
|
||||
<field name="name">QM-001 — Quality Manual</field>
|
||||
<field name="name">QM-001 - Quality Manual</field>
|
||||
<field name="doc_type">manual</field>
|
||||
<field name="revision">Rev 5</field>
|
||||
<field name="state">effective</field>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- ===== Default checklist template (global — partner_id blank) =====
|
||||
<!-- ===== Default checklist template (global - partner_id blank) =====
|
||||
sequence=5 so it wins over any other global template when
|
||||
resolve_for_partner falls back from a missing per-customer match. -->
|
||||
<record id="qc_template_default" model="fp.qc.checklist.template">
|
||||
@@ -34,7 +34,7 @@
|
||||
<record id="qc_tpl_line_visual" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">10</field>
|
||||
<field name="name">Visual — no pits, burns, or bare spots</field>
|
||||
<field name="name">Visual - no pits, burns, or bare spots</field>
|
||||
<field name="description">Examine the entire plated surface under shop lighting. Look for pits, burns, dewetting, bare spots, or rough texture. Reject if any defect is visible to the naked eye.</field>
|
||||
<field name="check_type">visual</field>
|
||||
<field name="required">True</field>
|
||||
@@ -43,7 +43,7 @@
|
||||
<record id="qc_tpl_line_colour" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">Colour — uniform finish across part</field>
|
||||
<field name="name">Colour - uniform finish across part</field>
|
||||
<field name="description">Finish should be uniform with no streaking, blotching, or dull-vs-bright zones. Compare against the customer colour sample if one is on file.</field>
|
||||
<field name="check_type">visual</field>
|
||||
<field name="required">True</field>
|
||||
@@ -52,7 +52,7 @@
|
||||
<record id="qc_tpl_line_adhesion" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Adhesion — tape test pass</field>
|
||||
<field name="name">Adhesion - tape test pass</field>
|
||||
<field name="description">Apply tape to an inconspicuous area, press firmly for 3 seconds, pull at 90°. No flaking permitted.</field>
|
||||
<field name="check_type">adhesion</field>
|
||||
<field name="required">True</field>
|
||||
@@ -61,7 +61,7 @@
|
||||
<record id="qc_tpl_line_masking" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Masking — no plating in masked zones</field>
|
||||
<field name="name">Masking - no plating in masked zones</field>
|
||||
<field name="description">Areas that were masked per customer print must be free of plating deposit. Light staining acceptable; build-up is not.</field>
|
||||
<field name="check_type">visual</field>
|
||||
<field name="required">True</field>
|
||||
@@ -70,7 +70,7 @@
|
||||
<record id="qc_tpl_line_quantity" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">50</field>
|
||||
<field name="name">Quantity — matches WO count</field>
|
||||
<field name="name">Quantity - matches WO count</field>
|
||||
<field name="description">Count the parts. Must equal the WO quantity minus any documented rework/scrap.</field>
|
||||
<field name="check_type">functional</field>
|
||||
<field name="required">True</field>
|
||||
@@ -79,13 +79,13 @@
|
||||
<record id="qc_tpl_line_packaging" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_default"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Packaging — parts protected for shipping</field>
|
||||
<field name="name">Packaging - parts protected for shipping</field>
|
||||
<field name="description">Parts individually bagged / padded, no direct metal-on-metal contact that could scratch the finish in transit.</field>
|
||||
<field name="check_type">visual</field>
|
||||
<field name="required">False</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== Aerospace checklist (stricter — used as a starter for
|
||||
<!-- ===== Aerospace checklist (stricter - used as a starter for
|
||||
Nadcap customers; admin copies and reassigns to partner) ===== -->
|
||||
<record id="qc_template_aerospace" model="fp.qc.checklist.template">
|
||||
<field name="name">Aerospace / Nadcap QC</field>
|
||||
@@ -99,7 +99,7 @@
|
||||
<record id="qc_tpl_aero_visual" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">10</field>
|
||||
<field name="name">Visual — 10× loupe, no discontinuities</field>
|
||||
<field name="name">Visual - 10× loupe, no discontinuities</field>
|
||||
<field name="description">Inspect under 10× magnification. Reject any pit, crack, inclusion, or discontinuity visible at that power.</field>
|
||||
<field name="check_type">visual</field>
|
||||
<field name="required">True</field>
|
||||
@@ -109,7 +109,7 @@
|
||||
<record id="qc_tpl_aero_thickness_1" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">Thickness — Fischerscope reading #1</field>
|
||||
<field name="name">Thickness - Fischerscope reading #1</field>
|
||||
<field name="description">Fischerscope XDAL 600 XRF measurement at primary inspection point. Value must fall inside the customer spec range. Record the NiP mils reading.</field>
|
||||
<field name="check_type">thickness</field>
|
||||
<field name="required">True</field>
|
||||
@@ -120,8 +120,8 @@
|
||||
<record id="qc_tpl_aero_thickness_2" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Thickness — Fischerscope reading #2</field>
|
||||
<field name="description">Second XRF point — per customer print's secondary inspection location.</field>
|
||||
<field name="name">Thickness - Fischerscope reading #2</field>
|
||||
<field name="description">Second XRF point - per customer print's secondary inspection location.</field>
|
||||
<field name="check_type">thickness</field>
|
||||
<field name="required">True</field>
|
||||
<field name="requires_value">True</field>
|
||||
@@ -131,8 +131,8 @@
|
||||
<record id="qc_tpl_aero_thickness_3" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Thickness — Fischerscope reading #3</field>
|
||||
<field name="description">Third XRF point — per customer print's tertiary inspection location.</field>
|
||||
<field name="name">Thickness - Fischerscope reading #3</field>
|
||||
<field name="description">Third XRF point - per customer print's tertiary inspection location.</field>
|
||||
<field name="check_type">thickness</field>
|
||||
<field name="required">True</field>
|
||||
<field name="requires_value">True</field>
|
||||
@@ -142,7 +142,7 @@
|
||||
<record id="qc_tpl_aero_adhesion" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">50</field>
|
||||
<field name="name">Adhesion — ASTM B571 tape test</field>
|
||||
<field name="name">Adhesion - ASTM B571 tape test</field>
|
||||
<field name="description">Apply ASTM B571 tape to freshly-scribed area, remove at 90° per standard. No flaking of plating permitted.</field>
|
||||
<field name="check_type">adhesion</field>
|
||||
<field name="required">True</field>
|
||||
@@ -151,7 +151,7 @@
|
||||
<record id="qc_tpl_aero_dimensional" model="fp.qc.checklist.template.line">
|
||||
<field name="template_id" ref="qc_template_aerospace"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Dimensional — critical feature verification</field>
|
||||
<field name="name">Dimensional - critical feature verification</field>
|
||||
<field name="description">Caliper / mic any feature marked critical on the customer print. Confirm plating did not push dimensions out of tolerance.</field>
|
||||
<field name="check_type">dimensional</field>
|
||||
<field name="required">True</field>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
License OPL-1 (Odoo Proprietary License v1.0)
|
||||
Part of the Fusion Plating product family.
|
||||
|
||||
Sub 12 Phase B — seed data for the kanban stage namespace + a small
|
||||
Sub 12 Phase B - seed data for the kanban stage namespace + a small
|
||||
starter set of tags, reasons, and one default quality team. All are
|
||||
`noupdate=1` so a customer's edits survive module upgrades.
|
||||
-->
|
||||
|
||||
Reference in New Issue
Block a user