Management Review (manufacturing-quality/as9100/management-review)
Use when the task is planning and scoring the periodic top-management
review process of an AS9100-style quality management system: computing
the review due date from the last review date and the base interval,
checking the coverage of the mandatory review inputs against the
presented input set, tracking the action items with owners and due
dates from the review decisions, and issuing the review verdict that
gates the top-management review record. This leaf implements the
review process mechanics in pure Python, stdlib only, with no
randomness. It pairs with manufacturing-quality/as9100/
internal-quality-audit, whose audit program results are one of the
input families reviewed here, and with manufacturing-quality/as9100/
corrective-action and risk-management, whose records feed other review
inputs. AS9100 is referenced, not reproduced; the input families below
are paraphrased leaf-owned constants per the organization's QMS
documentation.
Domain quick reference
- Review cadence: the due date is the last review date plus
base_interval_months (12.0 declared default) in calendar months with
the day clamped to the target month end, so 2025-11-30 plus 12
months is due 2026-11-30, while 2026-01-31 plus 1 month clamps to
2026-02-28 and 2024-01-31 clamps to 2024-02-29 in the leap year.
- Interval compliance: interval_compliant = today <= due date, meaning
the review is being planned no later than its due date. It is an
informational flag only, not a verdict failure: a review that is not
yet due with no other finding still returns the "compliant" verdict.
- Mandatory input families: MANDATORY_INPUT_FAMILIES =
(audit-results, customer-feedback, process-performance,
product-conformity, corrective-action-status, risk-register,
resource-adequacy, changes, external-provider-performance). These
are paraphrased leaf-owned constants per the organization's QMS
documentation, not a reproduced standard clause list.
- Input coverage: coverage_ratio = present required families / 9
required families. Only required families count, so an extra
documented input never pushes the ratio above 1.0; missing_inputs is
the sorted list of required families not presented.
- Coverage threshold: COVERAGE_PASS_THRESHOLD = 0.85, the declared
leaf methodology; a ratio at or above 0.85 passes the input coverage
check.
- Action tracking: an action is overdue when its status is "open" and
its due date is strictly before the passed today; overdue_ratio =
overdue count / total (0.0 when there are no actions).
- Verdict ladder: coverage below 0.85 and overdue actions together
give "incomplete-inputs-and-overdue-actions"; coverage below 0.85
alone gives "incomplete-inputs"; overdue actions alone give
"overdue-actions"; otherwise the verdict is "compliant".
Workflow
- Plan the review date: management_review_due_date(last_review_iso,
base_interval_months) returns the due date ISO string, with the day
clamped to the target month end.
- Score the inputs: review_input_coverage(present_inputs) returns
{coverage_ratio, present_count, required_count, missing_inputs}
over the nine required families.
- Track the decisions: track_actions(actions, today_iso) returns
{total, open_count, overdue_count, overdue_ratio,
overdue_actions} from the action list {id, owner, due_date_iso,
status}.
- Issue the verdict: review_verdict(interval_compliant,
coverage_ratio, overdue_count) returns the verdict string from the
coverage threshold and the overdue action count; the interval flag
is informational.
- Chain the whole process: management_review_review(last_review_iso,
today_iso, present_inputs, actions) returns due_date_iso,
interval_months, coverage_ratio, missing_inputs, total_actions,
open_actions, overdue_actions and verdict in one dict.
- Confirm the deterministic checks with the contract test
scripts/test_management_review.py.
Worked example
Last management review 2025-11-30, today 2026-09-04 (planning the
next review). The presented set holds 8 of the 9 required families
(all but resource-adequacy) plus the extra documented input
management-changes, and the decision log has 4 actions, 3 open with 1
overdue (a3, due 2026-08-15). Running the module prints:
- due_date_iso "2026-11-30" (12 calendar months from 2025-11-30; the
month end clamp keeps the 30th).
- interval_months 12.0; today 2026-09-04 <= 2026-11-30, so
interval_compliant is True.
- coverage_ratio 0.889 (8/9); missing_inputs ["resource-adequacy"].
- Action tracking: total 4, open 3, overdue 1, overdue_ratio 0.25,
overdue_actions ["a3"].
- verdict "overdue-actions": coverage 0.889 is at or above the 0.85
threshold so the coverage check passes, and the 1 overdue action
drives the verdict.
- Full chain dict keys: {due_date_iso, interval_months,
coverage_ratio, missing_inputs, total_actions, open_actions,
overdue_actions, verdict}.
Verification
- management_review_due_date clamps month ends: 2026-01-31 plus 1
month gives 2026-02-28, 2024-01-31 gives 2024-02-29, and 2026-08-31
plus 1 month gives 2026-09-30.
- Malformed dates, intervals at or below 0, empty mandatory input
sets, and actions with an unknown status or an empty owner all raise
ValueError.
- Coverage: all required families present gives ratio 1.0 with no
missing inputs; none present gives ratio 0.0 with all 9 missing
sorted; extras and duplicates never raise the ratio above the true
required count.
- Overdue detection is relative to the passed today: an open action
due after (or on) today is not overdue, and a closed action is never
overdue.
- Verdict truth table: (True, 8/9, 1) -> "overdue-actions"; (True,
0.8, 0) -> "incomplete-inputs"; (True, 0.7, 2) ->
"incomplete-inputs-and-overdue-actions"; (True, 0.9, 0) ->
"compliant"; (False, 0.9, 0) -> "compliant" because the interval
flag is informational.
- Determinism: no RNG anywhere, run-to-run identical output.
- Run the contract test offline: python3
scripts/test_management_review.py (35 tests, deterministic).
Related leaves
- manufacturing-quality/as9100/internal-quality-audit: runs the
periodic audit program whose results feed the audit-results input
family of the management review.
- manufacturing-quality/as9100/quality: the clause mapping companion
for audit evidence planning in the same pack.
- manufacturing-quality/as9100/corrective-action: owns the corrective
action records whose status is one of the review input families.
- manufacturing-quality/as9100/risk-management: owns the risk
register reviewed as an input family here.
- manufacturing-quality/as9100/supplier-control: external provider
performance monitoring that feeds the review inputs.
Pitfalls
- Reading the interval flag as a verdict input: interval_compliant is
informational only, so (False, 0.9, 0) still returns "compliant" -
a review planned late but with full inputs and no overdue actions is
not failed on schedule alone.
- Reporting the coverage ratio against everything presented: only the
nine required families count, so extra documented inputs and
duplicates never push the ratio above the true required count, and
missing_inputs names only required families.
- Applying the verdict ladder out of order: coverage below 0.85 with
overdue actions returns "incomplete-inputs-and-overdue-actions"
(not just "incomplete-inputs"), while overdue actions alone drive
"overdue-actions" even when coverage passes - as in the worked
example at 8/9 with one overdue action.
- Judging overdue against the wrong reference date: overdue is
relative to the passed today, an open action due on or after today
is not overdue, and a closed action is never overdue.
- Computing due dates without the month-end clamp: 2026-01-31 plus 1
month is 2026-02-28 (2024-02-29 in the leap year) and 2026-08-31
plus 1 month is 2026-09-30 - naive month arithmetic lands in the
wrong month.
- Treating the nine input families as reproduced standard text: they
are paraphrased leaf-owned constants per the organization's QMS
documentation, and non-physical inputs (malformed dates, intervals
at or below 0, empty mandatory sets, actions with unknown status or
empty owner) raise ValueError rather than scoring.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_management_review.py
The test covers due date planning with month end clamping including
the leap year, the coverage ratio with extras and duplicates excluded,
the sorted missing input list, overdue detection relative to the
passed today, the full verdict truth table, the worked example outputs
inside the spec magnitude bounds, the exact convenience dict keys,
ValueError rejection of every non-physical input, and run-to-run
determinism.
Compliance
- Standards referenced, not reproduced: AS9100 is a commercial SAE
standard; the mandatory input families above are paraphrased
leaf-owned constants per the organization's QMS documentation,
summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: management-review3description: Use when you must plan and score the periodic top-management review process under an AS9100-style quality management system: compute the management review due date from the last review date and the base interval, check the mandatory review input coverage against the presented input set, track the action items from the review decisions, and issue the review verdict from the interval compliance, the input coverage ratio and the overdue action count. Produces the due date, the input coverage ratio with the missing input list, the action tracking summary and the review verdict that gate the top-management review record. Trigger: management-review, top-management, review-interval, review-inputs, action-item-tracking, review-verdict, qms-review.4license: Apache-2.05---67# Management Review (manufacturing-quality/as9100/management-review)89Use when the task is planning and scoring the periodic top-management10review process of an AS9100-style quality management system: computing11the review due date from the last review date and the base interval,12checking the coverage of the mandatory review inputs against the13presented input set, tracking the action items with owners and due14dates from the review decisions, and issuing the review verdict that15gates the top-management review record. This leaf implements the16review process mechanics in pure Python, stdlib only, with no17randomness. It pairs with manufacturing-quality/as9100/18internal-quality-audit, whose audit program results are one of the19input families reviewed here, and with manufacturing-quality/as9100/20corrective-action and risk-management, whose records feed other review21inputs. AS9100 is referenced, not reproduced; the input families below22are paraphrased leaf-owned constants per the organization's QMS23documentation.2425## Domain quick reference2627- Review cadence: the due date is the last review date plus28 base_interval_months (12.0 declared default) in calendar months with29 the day clamped to the target month end, so 2025-11-30 plus 1230 months is due 2026-11-30, while 2026-01-31 plus 1 month clamps to31 2026-02-28 and 2024-01-31 clamps to 2024-02-29 in the leap year.32- Interval compliance: interval_compliant = today <= due date, meaning33 the review is being planned no later than its due date. It is an34 informational flag only, not a verdict failure: a review that is not35 yet due with no other finding still returns the "compliant" verdict.36- Mandatory input families: MANDATORY_INPUT_FAMILIES =37 (audit-results, customer-feedback, process-performance,38 product-conformity, corrective-action-status, risk-register,39 resource-adequacy, changes, external-provider-performance). These40 are paraphrased leaf-owned constants per the organization's QMS41 documentation, not a reproduced standard clause list.42- Input coverage: coverage_ratio = present required families / 943 required families. Only required families count, so an extra44 documented input never pushes the ratio above 1.0; missing_inputs is45 the sorted list of required families not presented.46- Coverage threshold: COVERAGE_PASS_THRESHOLD = 0.85, the declared47 leaf methodology; a ratio at or above 0.85 passes the input coverage48 check.49- Action tracking: an action is overdue when its status is "open" and50 its due date is strictly before the passed today; overdue_ratio =51 overdue count / total (0.0 when there are no actions).52- Verdict ladder: coverage below 0.85 and overdue actions together53 give "incomplete-inputs-and-overdue-actions"; coverage below 0.8554 alone gives "incomplete-inputs"; overdue actions alone give55 "overdue-actions"; otherwise the verdict is "compliant".5657## Workflow58591. Plan the review date: management_review_due_date(last_review_iso,60 base_interval_months) returns the due date ISO string, with the day61 clamped to the target month end.622. Score the inputs: review_input_coverage(present_inputs) returns63 {coverage_ratio, present_count, required_count, missing_inputs}64 over the nine required families.653. Track the decisions: track_actions(actions, today_iso) returns66 {total, open_count, overdue_count, overdue_ratio,67 overdue_actions} from the action list {id, owner, due_date_iso,68 status}.694. Issue the verdict: review_verdict(interval_compliant,70 coverage_ratio, overdue_count) returns the verdict string from the71 coverage threshold and the overdue action count; the interval flag72 is informational.735. Chain the whole process: management_review_review(last_review_iso,74 today_iso, present_inputs, actions) returns due_date_iso,75 interval_months, coverage_ratio, missing_inputs, total_actions,76 open_actions, overdue_actions and verdict in one dict.776. Confirm the deterministic checks with the contract test78 scripts/test_management_review.py.7980## Worked example8182Last management review 2025-11-30, today 2026-09-04 (planning the83next review). The presented set holds 8 of the 9 required families84(all but resource-adequacy) plus the extra documented input85management-changes, and the decision log has 4 actions, 3 open with 186overdue (a3, due 2026-08-15). Running the module prints:8788- due_date_iso "2026-11-30" (12 calendar months from 2025-11-30; the89 month end clamp keeps the 30th).90- interval_months 12.0; today 2026-09-04 <= 2026-11-30, so91 interval_compliant is True.92- coverage_ratio 0.889 (8/9); missing_inputs ["resource-adequacy"].93- Action tracking: total 4, open 3, overdue 1, overdue_ratio 0.25,94 overdue_actions ["a3"].95- verdict "overdue-actions": coverage 0.889 is at or above the 0.8596 threshold so the coverage check passes, and the 1 overdue action97 drives the verdict.98- Full chain dict keys: {due_date_iso, interval_months,99 coverage_ratio, missing_inputs, total_actions, open_actions,100 overdue_actions, verdict}.101102## Verification103104- management_review_due_date clamps month ends: 2026-01-31 plus 1105 month gives 2026-02-28, 2024-01-31 gives 2024-02-29, and 2026-08-31106 plus 1 month gives 2026-09-30.107- Malformed dates, intervals at or below 0, empty mandatory input108 sets, and actions with an unknown status or an empty owner all raise109 ValueError.110- Coverage: all required families present gives ratio 1.0 with no111 missing inputs; none present gives ratio 0.0 with all 9 missing112 sorted; extras and duplicates never raise the ratio above the true113 required count.114- Overdue detection is relative to the passed today: an open action115 due after (or on) today is not overdue, and a closed action is never116 overdue.117- Verdict truth table: (True, 8/9, 1) -> "overdue-actions"; (True,118 0.8, 0) -> "incomplete-inputs"; (True, 0.7, 2) ->119 "incomplete-inputs-and-overdue-actions"; (True, 0.9, 0) ->120 "compliant"; (False, 0.9, 0) -> "compliant" because the interval121 flag is informational.122- Determinism: no RNG anywhere, run-to-run identical output.123- Run the contract test offline: python3124 scripts/test_management_review.py (35 tests, deterministic).125126## Related leaves127128- manufacturing-quality/as9100/internal-quality-audit: runs the129 periodic audit program whose results feed the audit-results input130 family of the management review.131- manufacturing-quality/as9100/quality: the clause mapping companion132 for audit evidence planning in the same pack.133- manufacturing-quality/as9100/corrective-action: owns the corrective134 action records whose status is one of the review input families.135- manufacturing-quality/as9100/risk-management: owns the risk136 register reviewed as an input family here.137- manufacturing-quality/as9100/supplier-control: external provider138 performance monitoring that feeds the review inputs.139140## Pitfalls141142- Reading the interval flag as a verdict input: interval_compliant is143 informational only, so (False, 0.9, 0) still returns "compliant" -144 a review planned late but with full inputs and no overdue actions is145 not failed on schedule alone.146- Reporting the coverage ratio against everything presented: only the147 nine required families count, so extra documented inputs and148 duplicates never push the ratio above the true required count, and149 missing_inputs names only required families.150- Applying the verdict ladder out of order: coverage below 0.85 with151 overdue actions returns "incomplete-inputs-and-overdue-actions"152 (not just "incomplete-inputs"), while overdue actions alone drive153 "overdue-actions" even when coverage passes - as in the worked154 example at 8/9 with one overdue action.155- Judging overdue against the wrong reference date: overdue is156 relative to the passed today, an open action due on or after today157 is not overdue, and a closed action is never overdue.158- Computing due dates without the month-end clamp: 2026-01-31 plus 1159 month is 2026-02-28 (2024-02-29 in the leap year) and 2026-08-31160 plus 1 month is 2026-09-30 - naive month arithmetic lands in the161 wrong month.162- Treating the nine input families as reproduced standard text: they163 are paraphrased leaf-owned constants per the organization's QMS164 documentation, and non-physical inputs (malformed dates, intervals165 at or below 0, empty mandatory sets, actions with unknown status or166 empty owner) raise ValueError rather than scoring.167168## Behavior contract (gate 3)169170Run the deterministic contract test (stdlib unittest, offline):171172 python3 scripts/test_management_review.py173174The test covers due date planning with month end clamping including175the leap year, the coverage ratio with extras and duplicates excluded,176the sorted missing input list, overdue detection relative to the177passed today, the full verdict truth table, the worked example outputs178inside the spec magnitude bounds, the exact convenience dict keys,179ValueError rejection of every non-physical input, and run-to-run180determinism.181182## Compliance183184- Standards referenced, not reproduced: AS9100 is a commercial SAE185 standard; the mandatory input families above are paraphrased186 leaf-owned constants per the organization's QMS documentation,187 summary-only per standards-map.yaml.188- compliance: STANDARDS-REF, gated: false.