Most teams treat reason codes as an internal annotation layer. That framing collapses the moment someone appeals. Under the Equal Credit Opportunity Act and Regulation B, a creditor taking adverse action generally must give the applicant a statement of specific reasons, and the official interpretation of section 1002.9(a)(1) allows "incomplete application" only where the creditor genuinely lacks enough data to decide; if the file contains enough to decide, the notice must list the actual reasons (CFPB Regulation B section 1002.9). A phrase like "insufficient credit" is exactly what a compliance reviewer flags, because it does not tell the applicant which factor drove the outcome (CrossCheck Compliance on adverse action notices).
The consequence for taxonomy design is direct. If two reviewers can look at the same declined case and assign different codes, the sentence on the notice depends on who reviewed it, not on what the decision turned on. The appeal then tests something you cannot defend.
The same logic appears outside lending. UK Information Commissioner guidance on automated decision-making asks controllers to tell individuals about the processing, offer simple ways to request human intervention or challenge a decision, and run regular checks that systems work as intended (ICO guidance on automated decision-making). A reviewer who cannot map a case to a stable code cannot meaningfully intervene.
The code also belongs in the decision record, which is what you hand an auditor. Guidance on policy decision logs recommends capturing the outcome, the specific rule or policy version matched, the requesting identity, a timestamp and a correlation identifier, and notes that operating across regimes usually means retaining for the longest applicable minimum (policy decision log format and fields).



