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>
82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
from odoo import fields, models
|
|
|
|
|
|
class FpN299Level(models.Model):
|
|
"""CSA N299 Quality Assurance Level.
|
|
|
|
CSA N299 is the Canadian Standards Association standard covering
|
|
quality assurance program requirements for items and services
|
|
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)
|
|
|
|
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'
|
|
_order = 'level_number, code'
|
|
|
|
name = fields.Char(
|
|
string='Level',
|
|
required=True,
|
|
translate=True,
|
|
)
|
|
code = fields.Char(
|
|
string='Code',
|
|
required=True,
|
|
help='Short identifier, e.g. N299_L1.',
|
|
)
|
|
level_number = fields.Integer(
|
|
string='Level Number',
|
|
required=True,
|
|
help='1 (highest, safety-critical) to 4 (commercial grade).',
|
|
)
|
|
description = fields.Text(
|
|
string='Description',
|
|
translate=True,
|
|
)
|
|
retention_years = fields.Integer(
|
|
string='Retention (Years)',
|
|
required=True,
|
|
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".',
|
|
)
|
|
safety_classification = fields.Selection(
|
|
[
|
|
('safety_critical', 'Safety-critical'),
|
|
('safety_related', 'Safety-related'),
|
|
('important_to_safety', 'Important to safety'),
|
|
('commercial_grade', 'Commercial grade'),
|
|
],
|
|
string='Safety Classification',
|
|
required=True,
|
|
default='safety_critical',
|
|
)
|
|
active = fields.Boolean(default=True)
|
|
|
|
_sql_constraints = [
|
|
(
|
|
'fp_n299_level_code_uniq',
|
|
'unique(code)',
|
|
'N299 level code must be unique.',
|
|
),
|
|
(
|
|
'fp_n299_level_number_uniq',
|
|
'unique(level_number)',
|
|
'N299 level number must be unique.',
|
|
),
|
|
]
|