NDT Method Selection (manufacturing-quality/ndt/ndt-method-selection)
Use when the task is choosing a non-destructive testing method for an aerospace part: defect class (surface, near-surface, internal) and material class (ferromagnetic, non-ferromagnetic, non-conductive) drive the applicable method set, and sensitivity ranks the pick.
Domain quick reference
- Methods: RT radiography, UT ultrasonic, ET eddy current, PT liquid penetrant, MT magnetic particle.
- Defect classes: surface, near-surface, internal.
- Material classes: ferromagnetic, non-ferromagnetic, non-conductive.
- Decision table (module-level DECISION_TABLE): internal maps to RT, UT; near-surface maps to ET, UT; surface maps to MT, PT on ferromagnetic, ET, PT on non-ferromagnetic, PT on non-conductive.
- Physical constraints: eddy current needs a conductive material, magnetic particle needs a ferromagnetic material, liquid penetrant needs a non-porous surface and works on all three material classes.
- Sensitivity rank (5 highest): UT 5, RT 4, ET 4, MT 3, PT 3.
- Cost rank (1 cheapest, reporting only): RT 4, UT 3, ET 2, MT 2, PT 1. Cost never overrides sensitivity.
- Tie-break: equal sensitivity prefers the later method in the fixed order RT < UT < ET < MT < PT; the only reachable tie is MT vs PT, which picks PT (also the alphabetically-later method).
- AS9100 frames NDT as a special process; NDT personnel follow common aerospace practice (level certification, written procedures, records) without reproducing clause text here.
Workflow
- Classify the defect location: surface, near-surface, or internal.
- Classify the material: ferromagnetic, non-ferromagnetic, or non-conductive.
- Call applicable_methods(defect_class, material) for the sorted method list valid for the combination.
- Rank the applicable methods with sensitivity_rank and call select_method(defect_class, material) for the top pick, the alternates, and the rationale.
- Report cost_rank(method) as secondary information only; it never overrides sensitivity.
- Validate inputs first: an unknown defect class or material class raises ValueError from applicable_methods and select_method.
Pitfalls
- Eddy current on a non-conductive material: ET needs conductivity; on a composite use PT for surface defects.
- Magnetic particle on a non-ferromagnetic part: MT needs a ferromagnetic material; use PT or ET instead.
- Cost as the primary driver: cost_rank is reporting only and must not override sensitivity in the pick.
- Surface defects do not get RT or UT: only PT, plus MT on ferromagnetic or ET on non-ferromagnetic material, apply.
- Tie handling: MT and PT both rank 3, so surface plus ferromagnetic picks PT, not MT, per the fixed tie-break order.
- Misspelled class names: an unknown class or material raises ValueError instead of silently returning an empty list.
Behavior contract (gate 3)
The selection logic is exercised by the gate 3 contract test: scripts/test_ndt_selection.py against scripts/ndt_selection_logic.py (stdlib unittest, offline). Run: python3 scripts/test_ndt_selection.py
Compliance
- Standards referenced, not reproduced: AS9100 clause 8.5.1.3 frames special-process control; the method table is common NDT methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.