# Account Status Codes

## Understanding Loan Statuses

### Status Descriptions

| Status | Description | Credit Reporting Impact |
|  --- | --- | --- |
| Pending | Application submitted, not yet originated | Not reported |
| Originated | Loan created but not activated | Not reported |
| Active | Loan is active, accruing interest | Reported based on DPD |
| Frozen | Temporarily suspended (forbearance, SCRA) | Reported with Special Comment |
| Accelerated | Full balance due immediately | Reported as delinquent |
| ChargedOff | Written off as a loss | Reported as 64, 97, DA, or DF |
| PaidOff | Fully repaid | Reported as 13 |
| Canceled | Closed before activation | Not reported |


### Snapshot Loan Status Values

The snapshot system uses specific status codes:

| Snapshot Status | Peach Status | Description |
|  --- | --- | --- |
| `LOAN_STATUS_PENDING` | Pending | Pre-activation |
| `LOAN_STATUS_ORIGINATED` | Originated | Created but not active |
| `LOAN_STATUS_ACTIVE` | Active | Normal active state |
| `LOAN_STATUS_FROZEN` | Frozen | Temporarily suspended |
| `LOAN_STATUS_ACCELERATED` | Accelerated | Full balance due |
| `LOAN_STATUS_CHARGED_OFF` | ChargedOff | Written off |
| `LOAN_STATUS_PAID_OFF` | PaidOff | Fully paid |
| `LOAN_STATUS_CANCELED` | Canceled | Closed pre-activation |
| `LOAN_STATUS_DECLINED` | N/A | Application declined |


## Account Status Codes

The following codes can appear in Metro 2 files generated by Peach. Codes are either automatically determined by the system based on loan state, or set via API when stopping/deleting credit reporting.

### Automatically Determined Codes

These codes are assigned by the system based on loan status and delinquency:

| Code | Description | When Applied |
|  --- | --- | --- |
| `11` | Current | Account is current (0-29 days past due) |
| `13` | Paid or Closed | Loan status is PaidOff |
| `64` | Paid in Full - Charge-off | Loan charged off (bankruptcy/term) with zero balance |
| `71` | Past Due 30-59 Days | 30-59 days delinquent |
| `78` | Past Due 60-89 Days | 60-89 days delinquent |
| `80` | Past Due 90-119 Days | 90-119 days delinquent |
| `82` | Past Due 120-149 Days | 120-149 days delinquent |
| `83` | Past Due 150-179 Days | 150-179 days delinquent |
| `84` | Past Due 180+ Days | 180+ days delinquent |
| `93` | Assigned to Collections | Loan assigned to debt collection agency |
| `97` | Charged Off | Loan charged off (bankruptcy/term) with balance remaining |
| `DA` | Delete Account (Non-Fraud) | Reporting deleted, or charged off for legal reasons |
| `DF` | Delete Account (Fraud) | Loan charged off due to fraud |


### API-Settable Codes (Lender Override)

These codes can be set via the `accountStatusCode` parameter when calling the credit reporting delete endpoints:

| Code | Description | Requirements |
|  --- | --- | --- |
| `13` | Paid or Closed | Account paid in full or closed with zero balance |
| `61` | Paid in Full - Voluntary Surrender | Requires: loan paid off, Current Balance = 0, Amount Past Due = 0 |
| `62` | Paid in Full - Collection Account | Requires: loan paid off, Current Balance = 0, Amount Past Due = 0 |
| `63` | Paid in Full - Repossession | Requires: loan paid off, Current Balance = 0, Amount Past Due = 0 |
| `93` | Assigned to Collections | Account sent to internal or external collections |
| `95` | Voluntary Surrender | Consumer voluntarily surrendered; balance may remain |
| `96` | Merchandise Repossessed | Collateral repossessed; balance may remain |
| `97` | Charged Off | Unpaid balance reported as loss |
| `DA` | Delete Account (Non-Fraud) | Remove entire account (reasons other than fraud) |
| `DF` | Delete Account (Fraud) | Remove entire account due to confirmed fraud |


**API Example:**


```json
POST /people/{personId}/loans/{loanId}/credit-reporting/{creditAgencyId}/delete
{
  "deletedReason": "other",
  "metro2": {
    "accountStatusCode": "97"
  }
}
```

## Account Status Determination Algorithm


```
FUNCTION determine_account_status(loan, snapshot, reporting_status):
  
  # Priority 1: Lender-supplied status (API override)
  IF reporting_status.metro2_account_status IS NOT NULL:
    RETURN reporting_status.metro2_account_status
  
  # Priority 2: Deleted reporting status
  IF reporting_status.reporting_status = 'Deleted':
    RETURN 'DA'  # Delete Account Non-Fraud
  
  # Priority 3: Active/Frozen/Accelerated loan status
  IF snapshot.loan_status IN ('Active', 'Frozen', 'Accelerated'):
    
    # Closed with zero balance → Paid or Closed
    IF snapshot.loan.is_closed = True AND snapshot.outstanding_balance_total_amount = 0:
      RETURN '13'  # Paid or Closed
    
    IF snapshot.overdue_number_days < 30:
      RETURN '11'  # Current
    
    # Check if assigned to collection agency
    IF loan.serviced_by = 'DebtCollectionAgency'
       AND loan.collection_agency_status IN ('Assigned', 'PendingAssignment')
       AND loan.collection_agency_assigned_on_date <= date_of_account_info:
      RETURN '93'  # Assigned to Collections
    
    # Delinquency buckets
    IF snapshot.overdue_number_days < 60: RETURN '71'   # 30-59 days
    IF snapshot.overdue_number_days < 90: RETURN '78'   # 60-89 days
    IF snapshot.overdue_number_days < 120: RETURN '80'  # 90-119 days
    IF snapshot.overdue_number_days < 150: RETURN '82'  # 120-149 days
    IF snapshot.overdue_number_days < 180: RETURN '83'  # 150-179 days
    RETURN '84'  # 180+ days
  
  # Priority 4: Paid Off loan status OR closed with zero balance
  IF snapshot.loan_status = 'PaidOff':
    RETURN '13'  # Paid or Closed
  
  # Priority 5: Charged Off loan status
  IF snapshot.loan_status = 'ChargedOff':
    
    IF charged_off_reason = 'fraudulent':
      RETURN 'DF'  # Delete - Confirmed Fraud
    
    IF charged_off_reason = 'legal':
      RETURN 'DA'  # Delete - Non-Fraud
    
    IF charged_off_reason IN ('bankruptcy', 'term'):
      # Check for service credit transaction types that indicate a loss.
      # These indicate a loss even if balance is zero.
      # Note: settlementOfDebtNoLoss is intentionally NOT in this list —
      # it is the variant of settlement credit that does NOT force a 97 status.
      loss_service_credits = find_service_credits(
        types = ['settlementOfDebt', 'fraud', 'badDebt', 'deceased'],
        status = 'Succeeded'
      )
      
      IF snapshot.outstanding_balance_total_amount = 0 AND count(loss_service_credits) = 0:
        RETURN '64'  # Paid in Full - Charge-off (no loss)
      ELSE:
        RETURN '97'  # Charged Off (with balance or loss occurred)
  
  RAISE ERROR "Could not determine account status"
```

## Codes Not Currently Supported

The following Metro 2 Account Status codes exist in the CRRG specification but are not currently supported by Peach (cannot be set via API or auto-determined):

| Code | Description | Notes |
|  --- | --- | --- |
| `05` | Account Transferred | Obsolete as of April 2022 per CRRG |
| `65` | Paid in Full - Foreclosure Started | Not applicable to current product types |
| `88` | Claim Filed for Insured Portion | Government-insured loan specific |
| `89` | Deed Received in Lieu of Foreclosure | Mortgage-specific |
| `94` | Foreclosure Completed | Mortgage-specific |


## Status 64 vs. Status 97 Decision Logic

This is a critical distinction for charge-off reporting:

**Status 64 (Paid in Full - Charge-off):**

- Loan was charged off due to term or bankruptcy reason
- Balance is now ZERO
- **No loss-indicating service credit transaction types** (`settlementOfDebt`, `fraud`, `badDebt`, `deceased`) were used to bring the balance to zero
- `settlementOfDebtNoLoss` and `bankruptcy` are NOT counted as loss credits, so a balance zeroed via those types can still report 64
- Account is terminal (stops reporting after final report)


**Status 97 (Charged Off):**

- Loan was charged off due to term or bankruptcy reason
- Balance is GREATER than zero, OR
- Balance is zero BUT **loss-indicating service credit transaction types** (`settlementOfDebt`, `fraud`, `badDebt`, `deceased`) were used
- Account continues reporting (or reports final 97 if zero balance with loss)


> **Service Credit Transaction Types Indicating Loss:** Only service credits of type `settlementOfDebt`, `fraud`, `badDebt`, or `deceased` indicate the lender took a loss. Even with a zero balance, these accounts report status 97 instead of 64 because the account was not "paid in full." `settlementOfDebtNoLoss` is explicitly NOT in this list — it is the variant for settlement scenarios where the lender does not want a loss recorded, allowing a 64 outcome.


**Decision Logic:**


```
IF charged_off_reason IN ('bankruptcy', 'term'):
  # Check for service credit transaction types that indicate a loss.
  # settlementOfDebtNoLoss is intentionally NOT in this list — that is the
  # variant of settlement credit that does NOT force a 97 status.
  loss_service_credits = find_service_credits(
    types = ['settlementOfDebt', 'fraud', 'badDebt', 'deceased'],
    status = 'Succeeded'
  )
  
  IF outstanding_balance_total_amount = 0 AND count(loss_service_credits) = 0:
    RETURN Status 64  # Paid in Full - Charge-off (no loss)
  ELSE:
    RETURN Status 97  # Charged Off (balance remaining or loss occurred)

IF charged_off_reason = 'fraudulent':
  RETURN Status DF  # Delete - Confirmed Fraud

IF charged_off_reason = 'legal':
  RETURN Status DA  # Delete - Non-Fraud
```

## Delinquency Scenarios

### Delinquency Timeline Example


```
Month 1: Payment Due $100, Paid $0
  DPD: 30+ on due date + 30 days
  Status: 71 (30-59 days past due)

Month 2: Payment Due $100, Paid $0 (cumulative missed: $200)
  DPD: 60+
  Status: 78 (60-89 days past due)

Month 3: Payment Due $100, Paid $0 (cumulative missed: $300)
  DPD: 90+
  Status: 80 (90-119 days past due)

Month 4: Payment Due $100, Paid $0 (cumulative missed: $400)
  DPD: 120+
  Status: 82 (120-149 days past due)

Month 5: Payment Due $100, Paid $0 (cumulative missed: $500)
  DPD: 150+
  Status: 83 (150-179 days past due)

Month 6: Payment Due $100, Paid $0 (cumulative missed: $600)
  DPD: 180+
  Status: 84 (180+ days past due)
```

### Partial Payment Scenarios

Scenario: Monthly payment is $500, borrower pays $300.


```
IF paid_amount >= scheduled_payment:
  Status remains current (11) or advances toward current
ELSE:
  Shortfall accumulates toward overdue balance
  Status determined by total DPD
```

### Re-aging (Cure)

When a delinquent borrower becomes current:


```
Month 1: Status 78 (60-89 DPD)
Month 2: Borrower pays all past-due amounts
  DPD resets to 0
  Status: 11 (Current)
  Payment History: Previous months retain delinquency codes
```

## Charge-Off Reasons

Peach supports the following charge-off reasons:

| Reason | Metro 2 Status | Description |
|  --- | --- | --- |
| `term` | 64 or 97 | Standard charge-off (contractual delinquency) |
| `bankruptcy` | 64 or 97 | Borrower filed bankruptcy |
| `fraudulent` | DF | Account is fraudulent |
| `legal` | DA | Legal reasons (litigation, errors) |