Document Details

Purpose

This matrix links requirements to business rules, design decisions, controls, tests, risks, and implementation evidence.

View or Download

Document Preview

Requirements and Design Traceability

Purpose

Provide a business analyst trace from business need to implemented design, verification evidence, risks, and validation needs for the Odin to Lunchtab Balance Transfer project.

Inputs

  • User request: "business analyst deliverable for requirements and design tracability" with heavy alignment.
  • Product documentation: README.md.
  • Core implementation: src/odin_lunchtab/workflow.py, managed.py, manual_reconciliation.py, initial_balances.py, profiles.py, exception_candidates.py, candidate_viewer.py, gui_controller.py, run_reports.py, audit_control.py.
  • Verification evidence: tests/test_workflow.py, tests/test_managed.py, tests/test_manual_reconciliation.py, tests/test_initial_balances.py, tests/test_matching_profiles.py, tests/test_exception_candidates.py, tests/test_candidate_viewer.py, tests/test_gui_controller.py, tests/test_sandbox_data.py.

BA Activities

  • Plan and monitor analysis work: scoped this artifact to current implementation traceability, not solution redesign.
  • Elicit and collaborate: captured the user-provided need for requirements and design traceability.
  • Manage requirements lifecycle: assigned stable requirement, design, rule, risk, and test-reference IDs.
  • Analyze requirements and define design options: mapped observable behavior to design choices and validation needs.
  • Evaluate solution: compared implemented behavior and tests against trace coverage.

Techniques Applied

  • Document analysis: used README, code, and tests as evidence.
  • Interface analysis: traced file inputs, CSV/XLSX contracts, generated artifacts, manifests, and GUI controller states.
  • Business rules analysis: identified validation, matching, quarantine, audit, and publication rules.
  • Data modeling: traced key data objects such as Odin records, Lunchtab users, transfer rows, InitialBalances rows, profiles, candidates, manifests, and audit summaries.
  • Acceptance criteria: derived testable criteria from observed tests and business rules.
  • Risk analysis: linked high-risk operational behaviors to existing controls and validation needs.

Requirement Trace Catalog

Requirement ID Requirement Statement Evidence Quality Business Rule Links Design Links Verification Links Risk Links Lifecycle Status
REQ-001 The system shall transfer Odin account balances into a copy of the Lunchtab users export without changing the selected source files. Observed BR-001, BR-008 DES-001, DES-010 TEST-001, TEST-002, TEST-017 RISK-001, RISK-006 Draft
REQ-002 The system shall preserve every Lunchtab user row and add OdinBalanceAmount immediately after DefaultFamilyBalanceAmount. Observed BR-002 DES-001 TEST-002, TEST-009 RISK-001 Draft
REQ-003 The system shall quarantine unsafe, ambiguous, malformed, duplicate, stale, unmatched, or name-validation-failed records instead of guessing. Observed BR-003, BR-004, BR-005 DES-002, DES-003, DES-004 TEST-003, TEST-004, TEST-010, TEST-011, TEST-012 RISK-002, RISK-003 Draft
REQ-004 The system shall support venue-specific matching profiles with ordered rules, transforms, crosswalks, account-type scope, email username matching, and optional name fallback. Observed BR-004, BR-006 DES-003, DES-005 TEST-010, TEST-011, TEST-012, TEST-013 RISK-002, RISK-007 Draft
REQ-005 The system shall require surname and first/preferred-name compatibility for identifier and crosswalk matches. Observed BR-004 DES-002, DES-003 TEST-003, TEST-011, TEST-012 RISK-002 Draft
REQ-006 The system shall provide accepted-match audit evidence for automated reconciliation without adding matching metadata to the Lunchtab import CSV. Observed BR-008 DES-006, DES-010 TEST-009, TEST-017 RISK-004 Draft
REQ-007 The system shall provide reconciliation audit-control totals that prove valid Odin dollars equal matched dollars plus valid exception dollars. Observed BR-007 DES-006 TEST-005 RISK-004, RISK-005 Draft
REQ-008 The system shall create manual-review exception and candidate-match artifacts for unresolved reconciliation cases. Observed BR-003, BR-009 DES-004, DES-007 TEST-014, TEST-015, TEST-016 RISK-003 Draft
REQ-009 The candidate viewer shall support filtering, ambiguity awareness, actionable selection, proposed transfer generation, and decision audit output while preserving the original transfer file. Observed BR-009, BR-010 DES-007 TEST-016 RISK-003, RISK-006 Draft
REQ-010 The manual reconciliation review shall compare original and edited transfer files, classify edits by severity, and block invalid manual amounts. Observed BR-011 DES-008 TEST-006, TEST-007 RISK-003, RISK-005 Draft
REQ-011 The InitialBalances workflow shall validate the reconciled transfer and target InitialBalances schema before writing a processed import. Observed BR-012, BR-013 DES-009 TEST-018, TEST-019 RISK-005, RISK-006 Draft
REQ-012 The InitialBalances workflow shall aggregate populated OdinBalanceAmount values by case-sensitive DefaultFamilyCode, add them to target Amount, and preserve target rows. Observed BR-013, BR-014 DES-009 TEST-018 RISK-001, RISK-005 Draft
REQ-013 The InitialBalances workflow shall omit the processed import when blocking exceptions exist while still writing audit evidence. Observed BR-015 DES-009, DES-010 TEST-019, TEST-020 RISK-005, RISK-006 Draft
REQ-014 Managed desktop workflows shall publish completed run folders atomically after staging all outputs and manifests. Observed BR-016 DES-010 TEST-017, TEST-020, TEST-023 RISK-006 Draft
REQ-015 Run manifests shall record filenames, hashes, summary counts, profile details where applicable, generated artifact hashes, and avoid absolute source paths or row-level private data. Observed BR-017 DES-010 TEST-017, TEST-020, TEST-023 RISK-004, RISK-008 Draft
REQ-016 The desktop GUI shall enforce validation before processing and reset prior validation/results when inputs or profiles change. Observed BR-018 DES-011 TEST-021 RISK-003, RISK-006 Draft
REQ-017 The application shall decode supported CSV encodings safely and reject unsupported, ambiguous, or binary-looking content. Observed BR-019 DES-012 TEST-022 RISK-008 Draft
REQ-018 The sandbox generator shall create deterministic synthetic data packs and verify production reconciliation and InitialBalances workflows. Observed BR-020 DES-013 TEST-023 RISK-009 Draft
REQ-019 Windows packaging shall support a per-user installer, Start Menu entries, uninstall support, and release checks. Observed BR-021 DES-014 TEST-024 RISK-010 Draft

Business Rule Trace

Rule ID Rule Statement Evidence Enforcement Point Related Requirements Evidence Strength
BR-001 Source files are selected as inputs and are not changed, moved, or deleted by the normal workflow. README.md; run_workflow; run_managed_workflow writes to output/staging directories. src/odin_lunchtab/workflow.py; src/odin_lunchtab/managed.py REQ-001 Strong
BR-002 Transfer output preserves Lunchtab headers and inserts OdinBalanceAmount after DefaultFamilyBalanceAmount. workflow.py builds final_headers using the position of DefaultFamilyBalanceAmount. run_workflow REQ-002 Strong
BR-003 Non-safe reconciliation outcomes are reported as exceptions rather than applied to transfer rows. README exception language; match_balances_detailed exception branches. workflow.py REQ-003, REQ-008 Strong
BR-004 Identifier and crosswalk matches require compatible names. names_compatible; crosswalk and rule branches reject failed validation. workflow.py REQ-003, REQ-005 Strong
BR-005 Duplicate Odin identities and multiple Odin records targeting one Lunchtab user are quarantined. odin_id_counts; target_counts. workflow.py REQ-003 Strong
BR-006 Profiles support approved target fields, transforms, email-domain filters, scoped rules, crosswalks, and protected legacy default behavior. MatchingRule, TransformStep, CrosswalkEntry, MatchingProfile, LEGACY_DEFAULT_PROFILE. profiles.py; workflow.py; profile_gui.py REQ-004 Strong
BR-007 Reconciliation control totals must pass before workflow completion. write_reconciliation_audit_control status checked for PASS. workflow.py; audit_control.py REQ-007 Strong
BR-008 Matching metadata belongs in audit outputs, not the upload CSV. README; accepted match audit headers; transfer schema test. workflow.py REQ-006 Strong
BR-009 Candidate reports are advisory and ranked by evidence; actionable candidates require unique transfer trace and blank current balance. exception_candidates.py; candidate_viewer.py. Candidate report and viewer services REQ-008, REQ-009 Strong
BR-010 Proposed transfer creation from candidate selections writes a copy and audit; it does not mutate the original transfer. write_proposed_transfer_from_selections. candidate_viewer.py REQ-009 Strong
BR-011 Manual reconciliation review distinguishes normal manual resolutions from risky or blocking edits. Severity classification in manual_reconciliation.py. audit_manual_reconciliation REQ-010 Strong
BR-012 InitialBalances input must be exactly FamilyName,FamilyCode,Amount; reconciled transfer must include DefaultFamilyCode and OdinBalanceAmount. INITIAL_BALANCE_HEADERS; TRANSFER_HEADERS. inspect_initial_balances_inputs REQ-011 Strong
BR-013 Populated transfer balances are aggregated by trimmed, case-sensitive family code. amounts_by_code; target_indexes; README count definitions. _analyze_initial_balances REQ-012 Strong
BR-014 Blank InitialBalances Amount values are treated as zero; invalid target amounts block affected rows. _decimal(blank_as_zero=True); exception path for invalid target amount. _analyze_initial_balances REQ-012, REQ-013 Strong
BR-015 A blocked InitialBalances run writes audit, exception, control, summary, and manifest evidence but omits the processed import. processed = None when blocked. process_initial_balances; run_initial_balances_workflow REQ-013 Strong
BR-016 Managed workflows publish output only after staging succeeds, and staging is removed after failure. Staging directory creation, rename, and exception cleanup. managed.py; manual_reconciliation.py; initial_balances.py REQ-014 Strong
BR-017 Manifests use filenames and hashes, not absolute input paths or row-level data. Manifest builders; README privacy statement. managed.py; manual_reconciliation.py; initial_balances.py REQ-015 Strong
BR-018 GUI state must require validation before processing and invalidate stale validation when inputs/profile change. Controller state transitions. gui_controller.py REQ-016 Strong
BR-019 CSV decoding accepts UTF-8, Windows-1252, and BOM-marked UTF-16; unsafe text is rejected. _decode_csv_bytes; _validate_csv_text. workflow.py REQ-017 Strong
BR-020 Sandbox data must be deterministic and must verify against production workflows. Sandbox README and tests. sandbox_data.py; sandbox_gui.py REQ-018 Strong
BR-021 Windows installer supports per-user install and uninstall behavior. README release guidance; packaging tests. packaging/installer.iss; scripts/build-release.ps1 REQ-019 Moderate

Design Element Trace

Design ID Design Element Design Purpose Evidence Related Requirements Evidence Strength
DES-001 Transfer CSV generation with inserted OdinBalanceAmount. Produce Lunchtab-compatible copy carrying Odin balances. workflow.py output path and header construction. REQ-001, REQ-002 Strong
DES-002 Name normalization and compatibility functions. Reduce false positives while allowing preferred names, initials, accents, and punctuation variance. normalize_name, first_names_compatible, names_compatible. REQ-003, REQ-005 Strong
DES-003 Profile-driven matching engine. Support venue-specific matching without code changes. profiles.py; match_balances_detailed. REQ-003, REQ-004, REQ-005 Strong
DES-004 Exception and manual-review report partitioning. Route unresolved and high-risk cases to operational review. EXCEPTION_HEADERS; MANUAL_REVIEW_EXCEPTIONS_OUTPUT_NAME. REQ-003, REQ-008 Strong
DES-005 Profile editor and preview model. Let operators configure and compare profile effects before processing. preview_profile; profile_gui.py; tests. REQ-004, REQ-016 Moderate
DES-006 Audit-control summaries. Provide control-total traceability for financial reconciliation. audit_control.py; run_reports.py. REQ-006, REQ-007, REQ-013 Strong
DES-007 Candidate review services and viewer state. Support guided manual resolution of exception accounts. exception_candidates.py; candidate_viewer.py; candidate_viewer_gui.py. REQ-008, REQ-009 Strong
DES-008 Manual reconciliation delta audit. Detect whether staff edits are normal, risky, or blocking before InitialBalances. manual_reconciliation.py. REQ-010 Strong
DES-009 InitialBalances preflight and processor. Validate, aggregate, block, audit, and produce final import. initial_balances.py. REQ-011, REQ-012, REQ-013 Strong
DES-010 Managed staging, timestamped run folders, manifests, and hashes. Protect output integrity and support auditability. managed.py; manifest builders in workflow modules. REQ-001, REQ-014, REQ-015 Strong
DES-011 GUI controllers with explicit workflow phases. Prevent invalid operations and stale results in desktop tabs. gui_controller.py. REQ-016 Strong
DES-012 Shared CSV reader with encoding metadata. Make ingestion safer across Windows/Excel exports. read_csv_with_metadata; _decode_csv_bytes. REQ-017 Strong
DES-013 Sandbox data generator and verifier. Provide synthetic test packs for non-live validation. sandbox_data.py; sandbox_gui.py. REQ-018 Strong
DES-014 Windows packaging and release scripts. Distribute the app without requiring Python or admin install. packaging/installer.iss; scripts/build-release.ps1; README. REQ-019 Moderate

Verification Trace

Test ID Verification Evidence Protects Notes
TEST-001 tests/test_managed.py::test_inspect_inputs_reports_counts REQ-001, REQ-016 Validates input inspection and counts.
TEST-002 tests/test_workflow.py::test_end_to_end_writes_expected_files_columns_and_rows REQ-001, REQ-002, REQ-006 Confirms key output files, columns, and rows.
TEST-003 tests/test_workflow.py::test_quarantines_conflicts_ambiguous_names_and_unmatched_records REQ-003, REQ-005 Confirms ambiguous and unmatched paths.
TEST-004 tests/test_workflow.py::test_quarantines_duplicate_odin_ids and test_quarantines_multiple_odin_records_targeting_one_lunchtab_user REQ-003 Confirms duplicate safety behavior.
TEST-005 tests/test_workflow.py::test_reconciliation_audit_control_reconciles_matched_exceptions_and_malformed REQ-007 Confirms control totals and operator summary.
TEST-006 tests/test_manual_reconciliation.py::test_audit_records_manual_resolutions_without_flagging_unchanged_matches REQ-010 Confirms normal manual-resolution classification.
TEST-007 tests/test_manual_reconciliation.py::test_audit_flags_risky_balance_family_and_identity_edits and test_audit_blocks_invalid_manual_amount REQ-010 Confirms high-risk and blocking classifications.
TEST-008 tests/test_manual_reconciliation.py::test_audit_rejects_structural_mismatches REQ-010 Confirms edited transfer structure must match.
TEST-009 tests/test_matching_profiles.py::test_workflow_writes_match_audit_without_changing_transfer_schema REQ-002, REQ-006 Confirms metadata separation.
TEST-010 tests/test_matching_profiles.py::test_custom_rule_supports_arbitrary_mixed_identifier_and_external_id REQ-004 Confirms non-barcode identifier support.
TEST-011 tests/test_matching_profiles.py::test_crosswalk_has_precedence_and_does_not_fall_through_when_stale and test_name_validation_is_mandatory_for_rules_and_crosswalks REQ-003, REQ-004, REQ-005 Confirms crosswalk and name-validation controls.
TEST-012 tests/test_matching_profiles.py::test_email_username_matching_is_case_insensitive_and_preserves_plus_tag and domain/malformed email tests REQ-004, REQ-005 Confirms email username semantics.
TEST-013 tests/test_profiles.py profile storage, validation, migration, protection, and crosswalk tests REQ-004 Confirms profile lifecycle behavior.
TEST-014 tests/test_exception_candidates.py::test_candidate_report_ranks_preferred_name_and_identifier_evidence REQ-008 Confirms candidate ranking evidence.
TEST-015 tests/test_exception_candidates.py::test_candidate_report_traces_candidates_to_transfer_rows REQ-008 Confirms candidate transfer trace fields.
TEST-016 tests/test_candidate_viewer.py candidate viewer filtering, grouping, selection, proposed transfer, and decision audit tests REQ-009 Confirms candidate review workflow behavior.
TEST-017 tests/test_managed.py::test_managed_run_publishes_complete_folder_and_private_manifest REQ-014, REQ-015 Confirms managed publication and manifest privacy.
TEST-018 tests/test_initial_balances.py::test_process_aggregates_adds_and_preserves_target_rows REQ-011, REQ-012 Confirms aggregation, row preservation, and audit totals.
TEST-019 tests/test_initial_balances.py::test_process_blocks_import_and_writes_exception_reports REQ-011, REQ-013 Confirms blocked-run output behavior.
TEST-020 tests/test_initial_balances.py::test_managed_run_publishes_clean_or_blocked_run_atomically REQ-013, REQ-014, REQ-015 Confirms clean and blocked managed publication.
TEST-021 tests/test_gui_controller.py controller validation, invalidation, and phase tests REQ-016 Confirms workflow gating.
TEST-022 tests/test_workflow.py::test_read_csv_accepts_supported_encodings and test_read_csv_rejects_unsafe_or_unsupported_content REQ-017 Confirms CSV encoding behavior.
TEST-023 tests/test_sandbox_data.py deterministic generation, presets, manifests, and production workflow round trips REQ-018 Confirms synthetic test-pack behavior.
TEST-024 tests/test_packaging.py installer and release-builder tests REQ-019 Confirms packaging checks at repository level.

Risk Trace

Risk ID Risk Statement Related Requirements Current Mitigations Evidence Quality Validation Need
RISK-001 A balance could be applied to the wrong Lunchtab row or family. REQ-001, REQ-002, REQ-012 Name validation, duplicate quarantine, transfer row preservation, InitialBalances family audit. Observed Confirm residual risk acceptance.
RISK-002 Venue-specific identifier differences could produce false matches or excessive exceptions. REQ-003, REQ-004, REQ-005 Matching profiles, transforms, crosswalks, preview, mandatory name validation. Observed Confirm profile ownership and approval process.
RISK-003 Manual review could introduce incorrect or unaudited changes. REQ-003, REQ-008, REQ-009, REQ-010, REQ-016 Candidate audit, proposed transfer copy, manual reconciliation delta audit, GUI state gates. Observed Confirm manual approval workflow.
RISK-004 Audit evidence may be insufficient for financial or operational review. REQ-006, REQ-007, REQ-015 Accepted-match audit, audit-control summaries, run summaries, manifests, hashes. Observed Confirm audit evidence expectations.
RISK-005 Financial totals could fail to reconcile across source, exceptions, and import files. REQ-007, REQ-010, REQ-011, REQ-012, REQ-013 Reconciliation and InitialBalances control totals; blocked invalid/manual amounts. Observed Confirm control-total review ownership.
RISK-006 Partial or stale outputs could be used by operators. REQ-001, REQ-009, REQ-013, REQ-014, REQ-016 Staging folders, timestamped run folders, original-file preservation, controller invalidation. Observed Confirm output retention and naming policy.
RISK-007 Profile changes could alter matching behavior without business approval. REQ-004 Protected Legacy Default, import/export, validation, preview comparison. Observed Define profile change control.
RISK-008 Source data privacy could be weakened by logs, manifests, or encoding failures. REQ-015, REQ-017 Manifests use names/hashes/counts; logs are operational; unsafe CSV content rejected. Observed Validate against data-handling policy.
RISK-009 Synthetic testing could miss real operational edge cases. REQ-018 Multiple deterministic presets and production workflow verification. Observed Compare presets to known historical exceptions.
RISK-010 Release packaging could fail in clean operator environments. REQ-019 Release script, installer configuration, packaging tests, README checklist. Moderate Capture install/upgrade/uninstall acceptance evidence.

Traceability

  • REQ-001 through REQ-003 form the primary reconciliation safety chain: source input protection, transfer output preservation, and exception quarantine.
  • REQ-004 through REQ-006 form the matching-governance chain: configurable matching, mandatory name validation, and metadata separation.
  • REQ-007, REQ-014, and REQ-015 form the auditability chain: control totals, staged publication, manifests, and artifact hashes.
  • REQ-008 through REQ-010 form the manual-resolution chain: candidate recommendations, selection audit, and edited-transfer audit.
  • REQ-011 through REQ-013 form the InitialBalances import-control chain: schema validation, aggregation, and blocked-run evidence.
  • REQ-016 through REQ-019 form the operational enablement chain: desktop state control, robust CSV ingestion, sandbox validation, and Windows packaging.

Validation Needs

Validation ID Item Needing Validation Why It Matters Suggested Validation Owner Current Status
VAL-001 Whether all listed requirements are business-approved, not just implementation-observed. Code proves behavior, not stakeholder approval. Product owner or operations lead Unknown
VAL-002 Whether no Lunchtab match should continue to be excluded from manual-review exceptions. This shapes staff workload and unresolved-account handling. Operations lead Observed behavior, business approval unknown
VAL-003 Whether candidate score thresholds and evidence weights match staff confidence expectations. Candidate ranking affects manual review prioritization. Reconciliation staff lead Inferred intent
VAL-004 Whether blocked InitialBalances runs should always omit processed import even for partial safe rows. This is a strong safety posture with operational tradeoffs. Finance/operations approver Observed behavior, business approval unknown
VAL-005 Whether manifest privacy controls satisfy internal data-handling policy. Manifests include hashes and filenames but not row-level details. Data owner or compliance reviewer Unknown
VAL-006 Whether Windows packaging requirements include formal install/upgrade/uninstall acceptance evidence beyond current tests. Packaging tests inspect files but do not prove clean-machine install behavior. Release owner Unknown

Related case study