Special Comment Codes provide additional context about an account's status. Peach automatically applies some codes and allows manual override of others.
| Code | Description | When Applied |
|---|---|---|
AC | Paying Under Partial Payment Agreement | Active payment plan with amount less than scheduled payment |
AI | Recalled to Active Military Duty | Active military duty case exists |
AP | Credit Line Suspended | Line of credit is frozen |
AU | Account Paid in Full for Less Than Full Balance | Charged-off or paid-off loan with zero balance and at least one service credit of type settlementOfDebt, settlementOfDebtNoLoss, or badDebt |
AW | Affected by Natural or Declared Disaster | Active FEMA case exists |
CI | Account Closed Due to Inactivity | Line of credit closed for inactivity |
These codes can be set via API:
| Code | Description |
|---|---|
B | Account Payments Managed by Financial Counseling Program |
CN | Loan Modified Under Federal Government Plan |
CO | Loan Modified |
M | Account Closed at Grantor's Request |
O | Account Transferred to Another Company/Servicer |
FUNCTION determine_special_comment(loan, snapshot, reporting_status):
# Priority 1: Manual override
override = get_one_time_field_value(SpecialComment)
IF override IS NOT NULL:
RETURN override
# Priority 2: Settlement/Bad Debt detection
IF snapshot.loan_status IN ('ChargedOff', 'PaidOff') AND balance = 0:
settlement_credits = find_service_credits(
types=['settlementOfDebt', 'settlementOfDebtNoLoss', 'badDebt'],
status='Succeeded'
)
IF count(settlement_credits) > 0:
RETURN 'AU' # Paid for Less Than Full Balance
# Priority 3: Active payment plan (less than regular payment)
IF snapshot.loan_status = 'Active':
IF active_payment_plan_amount < scheduled_payment_amount:
RETURN 'AC' # Paying Under Partial Payment Agreement
# Priority 4: Frozen line of credit
IF is_open_ended AND snapshot.loan_status = 'Frozen':
RETURN 'AP' # Credit Line Suspended
# Priority 5: Inactivity closure (LOC)
IF is_open_ended AND loan.is_closed AND close_reason = 'inactivity':
RETURN 'CI' # Closed Due to Inactivity
# Priority 6: FEMA disaster case
IF active_fema_case_exists():
RETURN 'AW' # Affected by Disaster
# Priority 7: Military duty
IF active_military_duty_case_exists():
RETURN 'AI' # Active Military Duty
RETURN '' # No special commentCompliance Condition Codes indicate specific regulatory circumstances, primarily related to disputes.
| Code | Description |
|---|---|
XA | Account Closed at Consumer's Request |
XB | Account Information Disputed Under FCRA |
XC | FCRA Dispute Investigation Completed - Consumer Disagrees |
XD | Account Closed at Consumer's Request + Disputed Under FCRA |
XE | Account Closed at Consumer's Request + Investigation Completed - Consumer Disagrees |
XF | Account in Dispute Under FCBA |
XG | FCBA Dispute Investigation Completed - Consumer Disagrees |
XH | Account Previously in Dispute |
XJ | Account Closed at Consumer's Request + Disputed Under FCBA |
XR | Remove Previously Reported Code |
XA (Account Closed at Consumer's Request): Applied automatically when:
- Portfolio type is open-ended (C, R, O)
- Loan is closed
- Close reason is
requestedByBorrower
Compliance Condition Codes can be set via API:
PUT /people/{personId}/loans/{loanId}/credit-reporting
{
"metro2": {
"complianceConditionCode": "XB"
}
}Consumer Information Indicators report bankruptcy status. These are automatically determined based on bankruptcy case data.
Important: Bankruptcy cases must be in
ProcessingorCompletedstatus to be reported in Metro2. Cases inInitiatedorCanceledstatus are NOT reported. Lenders must manually change the case status toProcessingafter reviewing case details.
| Code | Description |
|---|---|
A | Petition for Chapter 7 Bankruptcy |
B | Petition for Chapter 11 Bankruptcy |
C | Petition for Chapter 12 Bankruptcy |
D | Petition for Chapter 13 Bankruptcy |
E | Discharged Through Chapter 7 Bankruptcy |
F | Discharged Through Chapter 11 Bankruptcy |
G | Discharged Through Chapter 12 Bankruptcy |
H | Discharged Through Chapter 13 Bankruptcy |
Q | Remove Previously Reported Bankruptcy |
Z | Bankruptcy - Undesignated Chapter |
1A | Personal Receivership |
Note: Codes I-P (Dismissed/Withdrawn by chapter) are defined in Metro 2 but Peach uses code
Qfor all dismissed, withdrawn, or closed cases per CRRG guidance.
Step-by-step logic:
Fetch bankruptcy cases where:
case.type = 'bankruptcy'case.status IN ('Processing', 'Completed')- Date filter applies (see below)
Apply date filter — case must be active during reported month:
(reported_month >= case.courtCaseFiledDate::month/year AND reported_month <= coalesce(case.courtCaseClosedDate::month/year, case.courtCaseDebtorDispositionDate::month/year)) OR (reported_month >= case.courtCaseFiledDate::month/year AND case.courtCaseClosedDate == empty AND case.courtCaseDebtorDispositionDate == empty)Determine bkCaseInPetition flag:
- If
coalesce(courtCaseClosedDate, courtCaseDebtorDispositionDate)is within reported month →bkCaseInPetition = false - Otherwise →
bkCaseInPetition = true
- If
Return code based on bkCaseInPetition + chapter:
| bkCaseInPetition | courtCaseChapter | Disposition | Loan Associated? | Code |
|---|---|---|---|---|
true | chapter7 | — | — | A |
true | chapter11 | — | — | B |
true | chapter12 | — | — | C |
true | chapter13 | — | — | D |
false | chapter7 | discharged | Yes | E |
false | chapter11 | discharged | Yes | F |
false | chapter12 | discharged | Yes | G |
false | chapter13 | discharged | Yes | H |
false | any | discharged | No | Q |
false | any | dismissed/closed | — | Q |
Full Algorithm:
FUNCTION determine_consumer_information_indicator(loan, reported_month):
# Step 1: Fetch qualifying bankruptcy cases
# Filter by: type, status, and date range
case = find_case(
type = 'bankruptcy',
status IN ('Processing', 'Completed'),
date_filter: (
(reported_month >= case.courtCaseFiledDate::month/year
AND reported_month <= coalesce(case.courtCaseClosedDate::month/year,
case.courtCaseDebtorDispositionDate::month/year))
OR
(reported_month >= case.courtCaseFiledDate::month/year
AND case.courtCaseClosedDate == empty
AND case.courtCaseDebtorDispositionDate == empty)
)
)
# If multiple cases exist, select the most recent based on case.createdAt
IF case IS NULL:
RETURN '' # Blank - no applicable bankruptcy
# Step 2: Determine if case is still in petition (active)
bkCaseInPetition = True
final_date = coalesce(case.courtCaseClosedDate, case.courtCaseDebtorDispositionDate)
IF final_date IS NOT NULL AND final_date IS WITHIN reported_month:
bkCaseInPetition = False # Case was finalized in the reported month
# Step 3: Return petition codes if bkCaseInPetition = true
IF bkCaseInPetition = True:
IF case.courtCaseChapter = 'chapter7': RETURN 'A'
IF case.courtCaseChapter = 'chapter11': RETURN 'B'
IF case.courtCaseChapter = 'chapter12': RETURN 'C'
IF case.courtCaseChapter = 'chapter13': RETURN 'D'
# Step 4: Handle discharged cases (bkCaseInPetition = false)
IF bkCaseInPetition = False AND case.courtCaseDebtorDisposition = 'discharged':
# CRITICAL: Discharge codes E/F/G/H only apply when loan IS associated with case
IF loan_is_associated_with_case(loan, case):
IF case.courtCaseChapter = 'chapter7': RETURN 'E'
IF case.courtCaseChapter = 'chapter11': RETURN 'F'
IF case.courtCaseChapter = 'chapter12': RETURN 'G'
IF case.courtCaseChapter = 'chapter13': RETURN 'H'
ELSE:
# Loan is NOT associated with the discharged case
RETURN 'Q' # Remove previously reported bankruptcy
# Step 5: Handle dismissed/closed cases (bkCaseInPetition = false)
IF bkCaseInPetition = False:
IF case.courtCaseDebtorDisposition = 'dismissed' OR
case.courtCaseLastStatus IN ('dismissed', 'closedFiledInError',
'closedTransferredOut', 'closedDischargeNA',
'closedUndeterminedReason'):
RETURN 'Q' # Remove previously reported bankruptcy
RETURN '' # BlankCode Q (Remove Previously Reported Bankruptcy) is reported when:
- A bankruptcy case is dismissed, withdrawn, or closed without discharge
- A bankruptcy case is discharged but the loan was not associated with the case
- The closure/disposition occurred in the current reporting month
- This tells bureaus to remove the bankruptcy indicator from subsequent reports
The Servicemembers Civil Relief Act (SCRA) and Military Lending Act (MLA) provide protections for active-duty military members.
When a borrower has active military duty status:
| Impact | Description |
|---|---|
| Special Comment | Code AI (Recalled to Active Military Duty) is applied |
| Account Status | May report as current (11) during protected period |
| Delinquency | Protected servicemembers may not be reported as delinquent |
For military protection to apply in credit reporting:
- A Military Duty case must exist in Peach
- Case status must be
ProcessingorCompletedwithApprovedoutcome duty_start_datemust be on or before the reporting dateduty_end_datemust be null or on/after the reporting date
For bankruptcy cases where the account is current:
- DOFD is set to the
court_case_filed_date - This applies when Consumer Information Indicator is a bankruptcy code
- Account Status is current (11)
When a consumer disputes information under FCRA:
| Stage | Compliance Condition Code |
|---|---|
| Dispute received | XB |
| Investigation completed, consumer disagrees | XC |
| Dispute resolved | XR (remove) or clear |
For billing disputes under FCBA (credit cards, revolving accounts):
| Stage | Compliance Condition Code |
|---|---|
| Dispute in process | XF |
| Investigation completed, consumer disagrees | XG |
| Dispute resolved | XR or clear |
When a consumer closes an account AND disputes:
XD: Closed + FCRA dispute pendingXE: Closed + FCRA investigation complete, disagreesXJ: Closed + FCBA dispute pending