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:
gsinghpal
2026-06-05 00:16:19 -04:00
parent c9eb61ee0c
commit 8c76a16366
789 changed files with 4692 additions and 4692 deletions

View File

@@ -4,14 +4,14 @@
# Part of the Fusion Plating product family.
{
'name': 'Fusion Plating Nuclear (CSA N299, NQA-1)',
'name': 'Fusion Plating - Nuclear (CSA N299, NQA-1)',
'version': '19.0.1.2.2',
'category': 'Manufacturing/Plating',
'summary': 'Nuclear industry pack: CSA N299 Levels 1-4, NQA-1 awareness, '
'CNSC licence tracking, 10 CFR Part 21 reporting, ITPs, '
'nuclear pedigree traceability, extended retention.',
'description': """
Fusion Plating Nuclear (CSA N299, NQA-1)
Fusion Plating - Nuclear (CSA N299, NQA-1)
===========================================
Part of the Fusion Plating product family by Nexa Systems Inc.
@@ -23,25 +23,25 @@ finishing supplier needs on top of the generic QMS.
Records added
-------------
* CSA N299 Level catalog Levels 1 through 4 with safety classification
* CSA N299 Level catalog - Levels 1 through 4 with safety classification
and default records-retention periods (40 / 25 / 15 / 7 years).
* Nuclear Quality Program per facility tracks N299 level, NQA-1
* Nuclear Quality Program per facility - tracks N299 level, NQA-1
applicability, CNSC supplier status, last/next audit dates.
* Inspection and Test Plans (ITP) hold points, witness points, test
* Inspection and Test Plans (ITP) - hold points, witness points, test
methods, acceptance criteria, customer review and approval workflow.
* 10 CFR Part 21 defect evaluation and reporting 60-day evaluation
* 10 CFR Part 21 defect evaluation and reporting - 60-day evaluation
clock, reportability determination, customer notification.
* Nuclear Pedigree Records full traceability from raw material heat
* Nuclear Pedigree Records - full traceability from raw material heat
number through chemistry cert, process trail, test results, ship
date, and retention-until date (driven by N299 level).
* CNSC Licence tracking Class II nuclear facility, transport, export
* CNSC Licence tracking - Class II nuclear facility, transport, export
licences with expiry monitoring.
* Customer Specification extension nuclear flag, N299 level, NQA-1
* Customer Specification extension - nuclear flag, N299 level, NQA-1
flag, nuclear customer type (OPG, Bruce Power, AECL, CNL, Candu
Energy, US utility).
* NCR extension nuclear job flag and 10 CFR Part 21 evaluation link
* NCR extension - nuclear job flag and 10 CFR Part 21 evaluation link
so any non-conformance on a nuclear job is captured for reportability.
* res.company extension default nuclear records retention (40 years
* res.company extension - default nuclear records retention (40 years
out of the box, configurable per company).
Seed data

View File

@@ -1,22 +1,22 @@
<?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">
<!-- ========== NUCLEAR QUALITY PROGRAM ========== -->
<record id="demo_nuclear_program" model="fusion.plating.nuclear.program">
<field name="name">Fusion Plating Main CSA N299 Level 1 Program</field>
<field name="name">Fusion Plating Main - CSA N299 Level 1 Program</field>
<field name="facility_id" ref="fusion_plating.demo_facility_main"/>
<field name="n299_level_id" ref="fusion_plating_nuclear.n299_l1"/>
<field name="nqa1_applicable" eval="True"/>
<field name="cnsc_licensed_supplier" eval="True"/>
<field name="program_manual_rev">Rev D 2025-09-15</field>
<field name="program_manual_rev">Rev D - 2025-09-15</field>
<field name="last_audit_date" eval="(DateTime.today() - timedelta(days=120)).strftime('%Y-%m-%d')"/>
<field name="next_audit_date" eval="(DateTime.today() + timedelta(days=245)).strftime('%Y-%m-%d')"/>
<field name="state">active</field>
<field name="notes" type="html"><p>Primary nuclear quality program covering OPG and Bruce Power plating work. NQA-1 awareness maintained for potential US utility contracts. Last customer audit by OPG zero findings.</p></field>
<field name="notes" type="html"><p>Primary nuclear quality program covering OPG and Bruce Power plating work. NQA-1 awareness maintained for potential US utility contracts. Last customer audit by OPG - zero findings.</p></field>
</record>
<!-- ========== NUCLEAR ITPs ========== -->
@@ -28,7 +28,7 @@
<field name="n299_level_id" ref="fusion_plating_nuclear.n299_l1"/>
<field name="state">approved</field>
<field name="customer_approval_date" eval="(DateTime.today() - timedelta(days=45)).strftime('%Y-%m-%d')"/>
<field name="hold_points" type="html"><p><strong>HP-1:</strong> Pre-plate dimensional verification customer witness required.<br/><strong>HP-2:</strong> Post-plate thickness measurement customer hold point, work stops until released.<br/><strong>WP-1:</strong> Bath chemistry verification customer may witness.</p></field>
<field name="hold_points" type="html"><p><strong>HP-1:</strong> Pre-plate dimensional verification - customer witness required.<br/><strong>HP-2:</strong> Post-plate thickness measurement - customer hold point, work stops until released.<br/><strong>WP-1:</strong> Bath chemistry verification - customer may witness.</p></field>
<field name="test_methods" type="html"><p>Thickness: XRF per ASTM B568. Adhesion: bend test per ASTM B571. Porosity: ferroxyl test per ASTM B733. Hardness: microhardness per ASTM E384.</p></field>
<field name="acceptance_criteria" type="html"><p>EN deposit 0.0010" +/- 0.0002". Hardness 48-52 HRC after heat treat. Zero porosity on ferroxyl. 100% adhesion on bend test.</p></field>
</record>
@@ -56,7 +56,7 @@
<field name="chemistry_cert_refs">CHEM-2026-0091, CHEM-2026-0092</field>
<field name="ship_date" eval="(DateTime.today() - timedelta(days=10)).strftime('%Y-%m-%d')"/>
<field name="locked" eval="True"/>
<field name="test_results" type="html"><p>Thickness: 0.0011" (spec 0.0010" +/- 0.0002") PASS.<br/>Hardness: 50 HRC (spec 48-52 HRC) PASS.<br/>Adhesion: No separation on bend test PASS.<br/>Porosity: No indication on ferroxyl PASS.</p></field>
<field name="test_results" type="html"><p>Thickness: 0.0011" (spec 0.0010" +/- 0.0002") - PASS.<br/>Hardness: 50 HRC (spec 48-52 HRC) - PASS.<br/>Adhesion: No separation on bend test - PASS.<br/>Porosity: No indication on ferroxyl - PASS.</p></field>
</record>
</odoo>

View File

@@ -7,15 +7,15 @@
Seed data for the four CSA N299 quality levels. Retention values
reflect typical Canadian nuclear practice:
Level 1 40 years (safety-critical, often life-of-plant)
Level 2 25 years (safety-related)
Level 3 15 years (important to safety)
Level 4 7 years (commercial grade)
Level 1 - 40 years (safety-critical, often life-of-plant)
Level 2 - 25 years (safety-related)
Level 3 - 15 years (important to safety)
Level 4 - 7 years (commercial grade)
-->
<odoo noupdate="1">
<record id="n299_l1" model="fusion.plating.n299.level">
<field name="name">CSA N299 Level 1 Safety-critical</field>
<field name="name">CSA N299 Level 1 - Safety-critical</field>
<field name="code">N299_L1</field>
<field name="level_number">1</field>
<field name="retention_years">40</field>
@@ -24,7 +24,7 @@
</record>
<record id="n299_l2" model="fusion.plating.n299.level">
<field name="name">CSA N299 Level 2 Safety-related</field>
<field name="name">CSA N299 Level 2 - Safety-related</field>
<field name="code">N299_L2</field>
<field name="level_number">2</field>
<field name="retention_years">25</field>
@@ -33,7 +33,7 @@
</record>
<record id="n299_l3" model="fusion.plating.n299.level">
<field name="name">CSA N299 Level 3 Important to safety</field>
<field name="name">CSA N299 Level 3 - Important to safety</field>
<field name="code">N299_L3</field>
<field name="level_number">3</field>
<field name="retention_years">15</field>
@@ -42,7 +42,7 @@
</record>
<record id="n299_l4" model="fusion.plating.n299.level">
<field name="name">CSA N299 Level 4 Commercial grade</field>
<field name="name">CSA N299 Level 4 - Commercial grade</field>
<field name="code">N299_L4</field>
<field name="level_number">4</field>
<field name="retention_years">7</field>

View File

@@ -7,7 +7,7 @@ from odoo import api, fields, models
class Fp10CFR21Report(models.Model):
"""10 CFR Part 21 Reporting of Defects and Noncompliance.
"""10 CFR Part 21 - Reporting of Defects and Noncompliance.
10 CFR Part 21 is the US Nuclear Regulatory Commission regulation
that requires suppliers of basic components to nuclear facilities
@@ -16,20 +16,20 @@ class Fp10CFR21Report(models.Model):
The typical workflow is:
1. discovery something is observed that might be a defect
2. evaluation determine whether it rises to the level of a
1. discovery - something is observed that might be a defect
2. evaluation - determine whether it rises to the level of a
"substantial safety hazard" (reportable)
3. reportable yes, it's reportable → file with NRC
3. reportable - yes, it's reportable → file with NRC
or
not_reportable evaluation closes with a documented basis
4. reported notice filed with NRC and affected customers
5. closed corrective action verified, record sealed
not_reportable - evaluation closes with a documented basis
4. reported - notice filed with NRC and affected customers
5. closed - corrective action verified, record sealed
The record has a due date that is 60 days after discovery, driven by
the `days_since_discovery` computed field.
"""
_name = 'fusion.plating.10cfr21.report'
_description = 'Fusion Plating 10 CFR Part 21 Defect Report'
_description = 'Fusion Plating - 10 CFR Part 21 Defect Report'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'discovery_date desc, id desc'

View File

@@ -11,7 +11,7 @@ class FpCnscLicence(models.Model):
The Canadian Nuclear Safety Commission (CNSC) regulates all nuclear
activities in Canada. A plating / finishing supplier that works on
nuclear items may hold or be listed under one or more CNSC
nuclear items may hold - or be listed under - one or more CNSC
licences:
* Class II nuclear facility licence (on-site sources,
@@ -24,7 +24,7 @@ class FpCnscLicence(models.Model):
compliance awareness.
"""
_name = 'fusion.plating.cnsc.licence'
_description = 'Fusion Plating CNSC Licence'
_description = 'Fusion Plating - CNSC Licence'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'expiry_date, name'

View File

@@ -39,7 +39,7 @@ class FpCustomerSpec(models.Model):
)
x_fc_nuclear_customer_type = fields.Selection(
[
('opg', 'OPG Ontario Power Generation'),
('opg', 'OPG - Ontario Power Generation'),
('bruce_power', 'Bruce Power'),
('aecl', 'AECL / CNL'),
('cameco', 'Cameco'),

View File

@@ -14,17 +14,17 @@ class FpN299Level(models.Model):
supplied to nuclear power plants. It defines four levels of quality
programs keyed to the safety classification of the supplied item:
Level 1 Safety-critical items (highest)
Level 2 Safety-related items
Level 3 Items important to safety
Level 4 Commercial grade (lowest)
Level 1 - Safety-critical items (highest)
Level 2 - Safety-related items
Level 3 - Items important to safety
Level 4 - Commercial grade (lowest)
The level drives how long nuclear quality records must be retained
(life-of-plant on the highest levels, commercial norms on the lowest)
and how rigorous the supplier's quality program must be.
"""
_name = 'fusion.plating.n299.level'
_description = 'Fusion Plating CSA N299 Quality Level'
_description = 'Fusion Plating - CSA N299 Quality Level'
_order = 'level_number, code'
name = fields.Char(
@@ -52,7 +52,7 @@ class FpN299Level(models.Model):
default=40,
help='Default records-retention period for this level. Canadian nuclear '
'quality records are typically retained for 40 years or longer at '
'the highest levels often "life of plant".',
'the highest levels - often "life of plant".',
)
safety_classification = fields.Selection(
[

View File

@@ -22,7 +22,7 @@ class FpNuclearItp(models.Model):
approved, any deviation needs a change record.
"""
_name = 'fusion.plating.nuclear.itp'
_description = 'Fusion Plating Nuclear Inspection and Test Plan'
_description = 'Fusion Plating - Nuclear Inspection and Test Plan'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'name desc'

View File

@@ -14,8 +14,8 @@ class FpNuclearPedigree(models.Model):
Nuclear pedigree is the unbroken chain of traceability from the raw
material a plated part was made from, through every processing
step, to the finished and shipped component. Nuclear operators use
pedigree records decades after shipment long after the original
work order has aged out of normal systems which is why the
pedigree records decades after shipment - long after the original
work order has aged out of normal systems - which is why the
retention clock is driven by the N299 level rather than a generic
document-retention rule.
@@ -24,7 +24,7 @@ class FpNuclearPedigree(models.Model):
the normal change-control process.
"""
_name = 'fusion.plating.nuclear.pedigree'
_description = 'Fusion Plating Nuclear Pedigree Record'
_description = 'Fusion Plating - Nuclear Pedigree Record'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'ship_date desc, id desc'

View File

@@ -16,11 +16,11 @@ class FpNuclearProgram(models.Model):
revision, the target N299 level, supplier certification status, and
the audit cadence (internal, customer, CNSC awareness).
A facility can have more than one nuclear program e.g. a Level 3
A facility can have more than one nuclear program - e.g. a Level 3
program for OPG work and a separate NQA-1 program for a US utility.
"""
_name = 'fusion.plating.nuclear.program'
_description = 'Fusion Plating Nuclear Quality Program'
_description = 'Fusion Plating - Nuclear Quality Program'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'facility_id, name'

View File

@@ -10,7 +10,7 @@ class ResCompany(models.Model):
"""Extend company with a default nuclear records retention policy.
Nuclear quality records typically have to be retained for 40 years
or longer far beyond the standard document-retention rule of a
or longer - far beyond the standard document-retention rule of a
commercial shop. This field sets the company-wide default used
when a pedigree record has no N299 level linked or when a higher
authority needs to be applied.

View File

@@ -1,5 +1,5 @@
// =============================================================================
// Fusion Plating Nuclear (CSA N299, NQA-1) backend styles
// Fusion Plating - Nuclear (CSA N299, NQA-1) backend styles
// Copyright 2026 Nexa Systems Inc.
// License OPL-1 (Odoo Proprietary License v1.0)
//
@@ -23,14 +23,14 @@
//
// Semantic status tints use `color-mix()` against the Bootstrap theme tokens
// so a danger badge is darker on light mode and brighter on dark mode
// automatically one rule, two looks.
// automatically - one rule, two looks.
//
// We never target `.o_dark`, `html.dark`, or `@media (prefers-color-scheme)`.
// =============================================================================
// -----------------------------------------------------------------------------
// Local helper semantic tint mixin
// Local helper - semantic tint mixin
// -----------------------------------------------------------------------------
@mixin fp-nuclear-tint($color-var, $amount: 12%) {
background-color: color-mix(in srgb, var(#{$color-var}) #{$amount}, transparent);
@@ -40,7 +40,7 @@
// -----------------------------------------------------------------------------
// N299 level pill used anywhere a level is displayed inline
// N299 level pill - used anywhere a level is displayed inline
// -----------------------------------------------------------------------------
.o_fp_nuclear_level {
display: inline-block;
@@ -60,7 +60,7 @@
// -----------------------------------------------------------------------------
// Locked pedigree visual cue that the record is frozen
// Locked pedigree - visual cue that the record is frozen
// -----------------------------------------------------------------------------
.o_fp_nuclear_locked {
// When a pedigree is locked the title picks up a subtle danger tint so

View File

@@ -6,8 +6,8 @@
-->
<odoo>
<!-- Phase 1 re-parented under Plating → Compliance hub. -->
<!-- Phase D (perms v2) QM-only under compliance hub. -->
<!-- Phase 1 - re-parented under Plating → Compliance hub. -->
<!-- Phase D (perms v2) - QM-only under compliance hub. -->
<menuitem id="menu_fp_nuclear"
name="Nuclear (CSA N299 / CNSC)"
parent="fusion_plating.menu_fp_compliance_hub"