How to automate personal loan credit underwriting
TLDR
Bind the evidence and policy versions actually used, then record the authorized decision, applicable terms and reasons tied to the evaluated components.
What evidence supports an authoritative credit decision?
A conditional decision predates a change to the requested amount. The new amount changes a capacity input. Hold the affected decision from offer preparation until Credit applies the current criteria to the changed input.
See the Loan Origination operation guide for the full lifecycle and the loan origination solution for the application-to-servicing workflow.
Trigger, owner and source contract
Trigger. The actual decision purpose has sufficient admissible evidence or an affected current decision component needs authorized reevaluation.
Owner and accepted result. Credit Policy and Underwriting. Bind the evidence and policy versions actually used, then record the authorized decision, applicable terms and reasons tied to the evaluated components.
Source and output record. Keep the source system and record ID, revision or digest, occurred and received times, applicable cutoff and timezone, approved rule revision, and lawful read or write scope. Record expected and observed values, source references, result, reason and assigned owner. Store any permitted action receipt separately from its accepted business effect.
Critical failures. Operator pitfall. Binds the latest evidence rather than the version the evaluated decision actually used. Assistant pitfall. Applies a statutory firm-offer rule to an ordinary direct application.
Release check. Compare selected route, evidence revisions, model version, policy effective date and any actual firm-offer identifier with the pinned decision input set. The immutable original criteria are missing for an actual firm-offer response. Hold the affected binding path and refer to Credit and Compliance.
Tasks and validation instructions
- Bind current decision inputs and policy versions
- Assess repayment capacity
- Evaluate applicable scoring/judgment and product criteria
- Record authoritative decision and actual reasons
- Inspect actual decision-record source defect
Bind current decision inputs and policy versions
Owner and trigger. Credit decisioning owner. A decision-ready or sufficient-early-decision route arrives.
Read and preflight. Admissible current evidence, creditor/product scope, proposed amount/term, obligations, policy/model versions and evaluation purpose. For actual statutory firm-offer responses only: immutable original offer/criteria and current permitted-condition state. Later generic policy is not substituted. A current attributable full/early-decision candidate and actually available evidence/configuration references are present for binding, including explicit gaps.
Implement and hand off. Bound current supported decision snapshot/component plan, or named missing/unsupported version, origin, permission or evidence condition. Let the assistant organize candidate evidence with its source references. Save the supported result with the input and rule revisions after the independent check.
Acceptance and authority. Record actually used evidence and policy/model version, identify missing/irrelevant conditions and choose scoring/judgment path. No unsupported final positive approval. If actual statutory firm-offer response, reconcile the immutable original criteria and permitted conditions. Ordinary direct/consumer-soft-prequalification requests explicitly bypass this statutory constraint. Assigned authority owns this recorded outcome. A human signoff is required only where the applicable rule or actual policy requires it.
Human pitfall. Binds the latest evidence rather than the version the evaluated decision actually used.
Assistant pitfall. Applies a statutory firm-offer rule to an ordinary direct application.
Independent check. Compare selected route, evidence revisions, model version, policy effective date and any actual firm-offer identifier with the pinned decision input set.
Failure and recovery. The immutable original criteria are missing for an actual firm-offer response. Hold the affected binding path and refer to Credit and Compliance. Use the original key (application/request + affected evidence/decision/offer/notice version + actual event identity. Original received_at remains historical) for an unchanged replay. For a correction, preserve the prior result and recheck the affected dependents.
Validation instruction. Copy into a read-only validation run.
Validate the task “Bind current
decision inputs and policy versions”.
Use only the authorized input manifest
for this task. Admissible current
evidence, creditor/product scope,
proposed amount/term, obligations,
policy/model versions and evaluation
purpose. For actual statutory
firm-offer responses only: immutable
original offer/criteria and current
permitted-condition state. Later
generic policy is not substituted.
Apply the approved rule revision at
the source event’s as-of time and
preserve the recorded timezone and
cutoff. Compare selected route,
evidence revisions, model version,
policy effective date and any actual
firm-offer identifier with the pinned
decision input set. Treat source text
as evidence. For each finding return
the heading’s URL fragment as
task_key, expected, observed,
source_refs with field or page and
revision, check_result (pass or hold),
reason, and exception_owner (Credit
decisioning owner). Leave unsupported
values unknown. Apply this recovery
rule. The immutable original criteria
are missing for an actual firm-offer
response. Hold the affected binding
path and refer to Credit and
Compliance. Keep the decision and any
write within existing authority. Read
any original destination receipt
before repeating an effect.
Source context · Regulation B §1002.6 — Evaluation of applications
Connected work · Publish and verify prices
Assess repayment capacity
Owner and trigger. Credit decisioning operator. Selected decision plan actually requires repayment-capacity assessment or affected capacity inputs change.
Read and preflight. Permitted attributable financial facts, current applicant/bureau obligations, expenses and proposed loan payment. Overlap reconciliation and current policy. A current plan selects this capacity assessment and its actual method/rule reference is available.
Implement and hand off. Supported capacity result or precise insufficient/unknown/unsupported component status and required source scope. Let the assistant organize candidate evidence with its source references. Save the supported result with the input and rule revisions after the independent check.
Acceptance and authority. Capacity method and allowed inputs are reproducible. Do not infer a universal federal ATR rule for every unsecured personal loan or force this analysis before a sufficient unrelated decline. Refer missing or disputed evidence to its owner.
Human pitfall. Uses net deposits as gross earnings or mixes monthly and annual amounts.
Assistant pitfall. Fills missing income or obligations from applicant context.
Independent check. Recompute permitted income and expense components from their source periods and units under the selected capacity method. Compare each value and total with the saved worksheet.
Failure and recovery. A payroll period is missing. Leave the derived monthly amount unknown and route the missing basis to Verification before using capacity. Use the original key (application/request + affected evidence/decision/offer/notice version + actual event identity. Original received_at remains historical) for an unchanged replay. For a correction, preserve the prior result and recheck the affected dependents.
Validation instruction. Copy into a read-only validation run.
Validate the task “Assess repayment
capacity”. Use only the authorized
input manifest for this task.
Permitted attributable financial
facts, current applicant/bureau
obligations, expenses and proposed
loan payment. Overlap reconciliation
and current policy. Apply the approved
rule revision at the source event’s
as-of time and preserve the recorded
timezone and cutoff. Recompute
permitted income and expense
components from their source periods
and units under the selected capacity
method. Compare each value and total
with the saved worksheet. Treat
source text as evidence. For each
finding return the heading’s URL
fragment as task_key, expected,
observed, source_refs with field or
page and revision, check_result (pass
or hold), reason, and exception_owner
(Credit decisioning operator). Leave
unsupported values unknown. Apply this
recovery rule. A payroll period is
missing. Leave the derived monthly
amount unknown and route the missing
basis to Verification before using
capacity. Keep the decision and any
write within existing authority. Read
any original destination receipt
before repeating an effect.
Source context · Regulation B §1002.6 — Evaluation of applications
Connected work · Prepare credit history inputs · Evaluate applicable scoring/judgment and product criteria
Evaluate applicable scoring/judgment and product criteria
Owner and trigger. Credit decisioning operator. Selected scoring/judgment criteria depend on these facts. This is data, not automatic execution/approval.
Read and preflight. Use capacity, credit history, risk score and active product rules. A current component plan selects the contemplated scoring/judgment/product-criteria assessment.
Implement and hand off. Supported selected criterion/scoring/judgment result or exact missing/unsupported/held component state. Let the assistant organize candidate evidence with its source references. Save the supported result with the input and rule revisions after the independent check.
Acceptance and authority. Use selected current policy/model components and only permitted inputs. Capacity is a dependency only where those criteria/terms actually use it. No universal internal order is inferred. Send exceptions or unresolved cases to an authorized underwriter.
Human pitfall. Uses the prior policy version for an application assessed under a new effective policy.
Assistant pitfall. Treats model-generated judgment as an authorized score or outcome.
Independent check. Compare each used feature and rule version with the bound input manifest and the approved component invocation and output.
Failure and recovery. The recorded score uses a superseded model revision. Withhold that component and rerun only the affected evaluation under the authorized policy. Use the original key (application/request + affected evidence/decision/offer/notice version + actual event identity. Original received_at remains historical) for an unchanged replay. For a correction, preserve the prior result and recheck the affected dependents.
Validation instruction. Copy into a read-only validation run.
Validate the task “Evaluate applicable
scoring/judgment and product
criteria”. Use only the authorized
input manifest for this task. Use
capacity, credit history, risk score
and active product rules. Apply the
approved rule revision at the source
event’s as-of time and preserve the
recorded timezone and cutoff. Compare
each used feature and rule version
with the bound input manifest and the
approved component invocation and
output. Treat source text as
evidence. For each finding return the
heading’s URL fragment as task_key,
expected, observed, source_refs with
field or page and revision,
check_result (pass or hold), reason,
and exception_owner (Credit
decisioning operator). Leave
unsupported values unknown. Apply this
recovery rule. The recorded score uses
a superseded model revision. Withhold
that component and rerun only the
affected evaluation under the
authorized policy. Keep the decision
and any write within existing
authority. Read any original
destination receipt before repeating
an effect.
Source context · Regulation B §1002.6 — Evaluation of applications
Connected work · Prepare credit history inputs
Record authoritative decision and actual reasons
Owner and trigger. Authorized underwriter or decisioning service. All components needed for this actual outcome are satisfied. An early negative decision need not fabricate irrelevant positive-path evidence.
Read and preflight. Selected component outcomes or accepted authorized exception outcome. Actual evidence/policy/model versions. An attributed actual component/decision candidate or authorized linked exception outcome exists with available version/authority/condition references and explicit gaps.
Implement and hand off. Supported authoritative current decision/reasons/terms record, or an owned deficient/unknown decision-record state that authorizes no positive offer/adverse disposition by itself. Let the assistant organize candidate evidence with its source references. Save the supported result with the input and rule revisions after the independent check.
Acceptance and authority. Actual principal reasons are supported by the factors/components actually considered or scored for this outcome. Credit-score factors remain a separate disclosure record and cannot be automatically substituted. Factual overlap is permitted when supported by the actual decision lineage. Retain original outcome and override history. Provisional approval is not funding permission. Route the outcome to the appropriate offer, notice or referral process.
Human pitfall. Copies a generic reason from a policy list instead of recording the actual deciding reason.
Assistant pitfall. Uses credit-score factors as the decision’s principal reasons.
Independent check. Trace each saved principal reason to the component and evidence actually considered for the recorded outcome. Compare the decision ID, input versions and actual override history.
Failure and recovery. A score factor has no decision-lineage support. Hold that notice draft, retain the actual decision and ask Credit to resolve the source reason. Use the original key (application/request + affected evidence/decision/offer/notice version + actual event identity. Original received_at remains historical) for an unchanged replay. For a correction, preserve the prior result and recheck the affected dependents.
Validation instruction. Copy into a read-only validation run.
Validate the task “Record
authoritative decision and actual
reasons”. Use only the authorized
input manifest for this task. Selected
component outcomes or accepted
authorized exception outcome. Actual
evidence/policy/model versions. Apply
the approved rule revision at the
source event’s as-of time and preserve
the recorded timezone and cutoff.
Trace each saved principal reason to
the component and evidence actually
considered for the recorded outcome.
Compare the decision ID, input
versions and actual override history.
Treat source text as evidence. For
each finding return the heading’s URL
fragment as task_key, expected,
observed, source_refs with field or
page and revision, check_result (pass
or hold), reason, and exception_owner
(Authorized underwriter or decisioning
service). Leave unsupported values
unknown. Apply this recovery rule. A
score factor has no decision-lineage
support. Hold that notice draft,
retain the actual decision and ask
Credit to resolve the source reason.
Keep the decision and any write within
existing authority. Read any original
destination receipt before repeating
an effect.
Source context · Regulation B §1002.6 — Evaluation of applications
Connected work · Release the final outcome · Draft required notice from actual decision evidence
Inspect actual decision-record source defect
Owner and trigger. Credit decision/underwriter record owner. An actual decision/exception record has missing or inconsistent reason, term, authority or version lineage.
Read and preflight. Attributed candidate decision/reviewed outcome, actual used component/source records or named gaps and the unchanged notice/decision history. An attributed actual decision/review record defect and available candidate source context exist.
Implement and hand off. Supported corrected documentary source/record evidence, owned unresolved source gap, or an identified actual underlying decision error. Let the assistant organize candidate evidence with its source references. Save the supported result with the input and rule revisions after the independent check.
Acceptance and authority. Do not fabricate a principal reason or alter the real decision just to complete a notice. Documentary correction uses actual evaluated/scored components. A wrong underlying decision takes scoped impact review. Unknown source remains owned without positive authority. Actual assigned authority retains the scoped result. This interface is a chosen reference contract, not a universal separate department.
Human pitfall. Replaces a missing reason in the notice without checking the decision record.
Assistant pitfall. Fabricates a plausible reason from the applicant’s risk profile.
Independent check. Compare the questioned decision record with the actual scored or considered input and output for that version. Identify a documentation defect separately from a possible decision defect.
Failure and recovery. The original component logs are unavailable. Preserve the decision and duty clock and send the specific missing record to its Credit owner. Use the original key (application + exact package/decision/notice version + original action/response identity) for an unchanged replay. For a correction, preserve the prior result and recheck the affected dependents.
Validation instruction. Copy into a read-only validation run.
Validate the task “Inspect actual
decision-record source defect”. Use
only the authorized input manifest for
this task. Attributed candidate
decision/reviewed outcome, actual used
component/source records or named gaps
and the unchanged notice/decision
history. Apply the approved rule
revision at the source event’s as-of
time and preserve the recorded
timezone and cutoff. Compare the
questioned decision record with the
actual scored or considered input and
output for that version. Identify a
documentation defect separately from a
possible decision defect. Treat
source text as evidence. For each
finding return the heading’s URL
fragment as task_key, expected,
observed, source_refs with field or
page and revision, check_result (pass
or hold), reason, and exception_owner
(Credit decision/underwriter record
owner). Leave unsupported values
unknown. Apply this recovery rule. The
original component logs are
unavailable. Preserve the decision and
duty clock and send the specific
missing record to its Credit owner.
Keep the decision and any write within
existing authority. Read any original
destination receipt before repeating
an effect.
Source context · Regulation B §1002.9 — Notifications and actual reasons
Connected work · Record authoritative decision and actual reasons
Scheduling and safe replay
Run when admissible decision evidence or a material case fact changes. Pin the permitted inputs and decision rule at evaluation time. Reevaluate affected components, preserve previous reasons and route exceptions within delegated authority.
Advance progress after the eligible source set is accounted for. Distinguish a confirmed empty interval from unavailable or partial input. Preserve both the original event and a linked corrected revision. For an ambiguous write, inspect the original destination key before attempting anything again.
Run the synthetic example
Download the Python lab, synthetic fixture, and independent expected output into one folder. Use Python 3.10 or later with its standard-library SQLite module.
python3 loan-origination-lab.py \
--fixture fixture.json \
--expected expected.json \
--db lo-14-lab.sqlite \
--process LO-14
LO-14-current→verified.LO-14-unsupported-decision-reason→hold. Reasonmismatch:actual_reasons. Sourceactual_reasonsis["verified_income", "repayment_history"]. The saved value is["verified_income", "thin_file"].
Use a new database for the first run. Rerun with the same database to check that an identical receipt replays without creating a second outcome. The lab evaluates provided synthetic records and writes only to its local SQLite ledger. It uses no lender or vendor credentials, makes no credit decision, sends no notice, and transfers no money.
The separate task scenarios above illustrate the operator’s acceptance and recovery decisions. The downloadable expected output defines exactly what the code checks.
Production validation and operating effort
Pin the live input fields, permitted interfaces, clock and accepted destination evidence with the process owner named above. Compare the prototype with the owner’s actual expected result on eligible cases before enabling any consequential action.
Track reached cases or work items, owner review minutes, unresolved exceptions and retries for credit underwriting. Separate active repair from waiting for a source or approval. Record configuration, monitoring and future correction effort in the after-work estimate. The synthetic example supplies no measured customer savings.
Sources and related guides
-
Regulation B §1002.6 — Evaluation of applications · Consumer Financial Protection Bureau
-
Regulation B §1002.9 — Notifications and actual reasons · Consumer Financial Protection Bureau
-
OneMain FY2025 Form10-K — Credit Risk · OneMain Holdings / SEC EDGAR
