# SSU Mint Burn Flow

## Overview

The Synthetic Settlement Unit (SSU) is a stabilized cross-border settlement asset with composition: 40% currency, 30% commodity, 20% CBDC, 10% LAM. This flow documents the minting and burning processes, including composition calculation and liquidity verification.

## Prerequisites

- SSU exists or can be created (default SSU)
- Sufficient liquidity in underlying assets (for minting)
- Valid mint/burn request
- SSU service operational
- Composition service available

## Visual Flow Diagram

### Minting Flow

```
┌─────────────┐
│ Mint Request│
└──────┬──────┘
       │
       │ 1. Get/Create SSU
       ▼
┌─────────────────────────┐
│ Get or Create Default   │
│  SSU                     │
│  - Lookup active SSU     │
│  - Create if not exists  │
└──────┬──────────────────┘
       │
       │ 2. Verify Liquidity
       ▼
┌─────────────────────────┐
│ Verify Liquidity for    │
│  Minting                 │
│  - Check underlying      │
│  - Verify sufficient     │
└──────┬──────────────────┘
       │
       │ 3. Calculate Composition
       ▼
┌─────────────────────────┐
│ Calculate SSU            │
│  Composition              │
│  - 40% currency          │
│  - 30% commodity         │
│  - 20% CBDC              │
│  - 10% LAM               │
└──────┬──────────────────┘
       │
       │ 4. Create Transaction
       ▼
┌─────────────────────────┐
│ Create Mint Transaction │
│  - Transaction ID        │
│  - Amount                │
│  - Type: mint            │
└──────┬──────────────────┘
       │
       │ 5. Complete
       ▼
┌─────────────┐
│ SSU Minted  │
└─────────────┘
```

### Burning Flow

```
┌─────────────┐
│ Burn Request│
└──────┬──────┘
       │
       │ 1. Verify SSU
       ▼
┌─────────────────────────┐
│ Verify SSU Exists        │
│  - Lookup SSU by ID       │
│  - Check status: active   │
└──────┬──────────────────┘
       │
       │ 2. Create Transaction
       ▼
┌─────────────────────────┐
│ Create Burn Transaction  │
│  - Transaction ID        │
│  - Amount                │
│  - Type: burn            │
└──────┬──────────────────┘
       │
       │ 3. Complete
       ▼
┌─────────────┐
│ SSU Burned  │
└─────────────┘
```

## Step-by-Step Process

### Minting Process

#### Step 1: Get or Create Default SSU
1. Receive mint request with:
   - Amount to mint
   - Trigger bank ID (optional)
   - Transaction ID (optional)
2. Lookup default SSU:
   - Search for SSU with name: "DBIS Global SSU"
   - Filter by status: `active`
3. If SSU doesn't exist:
   - Generate SSU ID: `SSU-{uuid}`
   - Create SSU record:
     - SSU ID
     - SSU name: "DBIS Global SSU"
     - Description: "DBIS Synthetic Settlement Unit - Global settlement asset"
     - Underlying assets: empty array (initialized later)
     - Status: `active`
   - Initialize composition via composition service
4. Return SSU (existing or newly created)

**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:46-208`

#### Step 2: Verify Liquidity for Minting
1. Validate mint amount:
   - Convert to Decimal
   - Verify: `amount > 0`
   - If invalid, throw error: "Mint amount must be greater than zero"
2. Verify underlying asset liquidity:
   - In production: check liquidity pools for:
     - 40% currency reserves
     - 30% commodity reserves
     - 20% CBDC reserves
     - 10% LAM reserves
   - Currently: assume liquidity available (simplified)
3. If insufficient liquidity, throw error

**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:213-221`

#### Step 3: Calculate Composition
1. Call composition service to calculate current composition:
   - Pass SSU ID
   - Service calculates based on:
     - Current market values
     - Reserve availability
     - Target composition ratios
2. Composition service returns:
   - Currency percentage: 40%
   - Commodity percentage: 30%
   - CBDC percentage: 20%
   - LAM percentage: 10%
3. Store composition for this mint operation

**Code Reference**: `src/core/settlement/ssu/ssu-composition.service.ts`

#### Step 4: Create Mint Transaction
1. Call SSU transaction service to create transaction:
   - SSU ID
   - Transaction type: `mint`
   - Amount: mint amount
   - Source bank ID: trigger bank ID (if provided)
   - Settlement ID: transaction ID (if provided)
2. Transaction service creates:
   - Transaction ID
   - Transaction record
   - Links to SSU
3. Update SSU balance (if tracked):
   - In production: increment SSU total supply
   - Currently: simplified (balance tracking)
4. Return transaction ID

**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:57-68`

### Burning Process

#### Step 1: Verify SSU Exists
1. Receive burn request with:
   - SSU ID
   - Amount to burn
   - Reason (optional)
2. Lookup SSU by ID
3. Verify SSU exists and status is `active`
4. If not found or inactive, throw error: "SSU not found or not active"

**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:74-94`

#### Step 2: Create Burn Transaction
1. Call SSU transaction service to create transaction:
   - SSU ID
   - Transaction type: `burn`
   - Amount: burn amount
2. Transaction service creates:
   - Transaction ID
   - Transaction record
   - Links to SSU
3. Update SSU balance (if tracked):
   - In production: decrement SSU total supply
   - Currently: simplified (balance tracking)
4. Return transaction ID

**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:84-93`

## Error Handling

### Error: SSU Not Found
- **Detection**: SSU lookup returns null
- **Action**: Throw error "SSU not found or not active"
- **Recovery**: Verify SSU ID, create SSU if needed

### Error: SSU Inactive
- **Detection**: SSU status is not `active`
- **Action**: Throw error "SSU not found or not active"
- **Recovery**: Activate SSU, retry

### Error: Invalid Mint Amount
- **Detection**: Amount <= 0
- **Action**: Throw error "Mint amount must be greater than zero"
- **Recovery**: Correct amount, retry

### Error: Insufficient Liquidity
- **Detection**: Underlying assets don't have sufficient liquidity
- **Action**: Throw error, prevent minting
- **Recovery**: Add liquidity to pools, retry

### Error: Composition Calculation Failure
- **Detection**: Composition service returns error
- **Action**: Throw error, prevent minting
- **Recovery**: Verify composition service, retry

## Integration Points

### Related Services
- **SSU Service**: `src/core/settlement/ssu/ssu-service.ts`
- **SSU Composition Service**: `src/core/settlement/ssu/ssu-composition.service.ts`
- **SSU Transaction Service**: `src/core/settlement/ssu/ssu-transaction.service.ts`
- **Liquidity Services**: GLP, ID-SLG for liquidity verification

### API Endpoints
- `POST /api/v1/ssu/mint` - Mint SSU
- `POST /api/v1/ssu/burn` - Burn SSU
- `GET /api/v1/ssu/:ssuId` - Get SSU details
- `GET /api/v1/ssu` - List active SSUs

### Database Models
- `SyntheticSettlementUnit` - SSU records
- `SsuTransaction` - SSU transaction records
- `SsuComposition` - Composition records

## Performance Metrics

- **SSU Lookup/Creation**: < 10ms target
- **Liquidity Verification**: < 20ms target
- **Composition Calculation**: < 30ms target
- **Transaction Creation**: < 10ms target
- **Total End-to-End**: < 70ms target
- **Throughput**: 5,000+ operations/second
- **Availability**: 99.99% uptime target

## Security Considerations

### SSU Validation
- Only active SSUs can be used
- SSU ID verification prevents unauthorized access

### Liquidity Verification
- Ensures underlying assets available
- Prevents over-minting
- Maintains composition ratios

### Transaction Tracking
- All mint/burn operations logged
- Transaction IDs provide audit trail
- Links to source transactions

## Testing Scenarios

### Happy Path - Minting
1. Valid mint request
2. SSU exists or created
3. Sufficient liquidity
4. Composition calculated
5. Transaction created
6. SSU minted

### Happy Path - Burning
1. Valid burn request
2. SSU exists and active
3. Transaction created
4. SSU burned

### Error Scenarios
1. SSU not found
2. SSU inactive
3. Invalid mint amount
4. Insufficient liquidity
5. Composition calculation failure

### Edge Cases
1. Maximum mint amount
2. Minimum mint amount
3. Mint with zero amount (should fail)
4. Burn more than available
5. Concurrent mint/burn operations

---

**Related Flows**:
- [SSU Atomic Settlement Flow](./ssu-atomic-settlement-flow.md)
- [FX/SSU Integration Flow](./fx-ssu-integration-flow.md)
- [GLP Contribution Withdrawal Flow](./glp-contribution-withdrawal-flow.md)

