SOQ International Academy

SkillsFuture Credit

SkillsFuture Credit (SFC) - Operator Guide

### SkillsFuture Credit (SFC)

Package `soq-sg-sfc` - permissions 90120-90123 (90124-90129 reserved) - implementation guide: [SkillsFuture Credit Module](../engineering/modules/sfc/MODULE.md)

#### What this module does

SkillsFuture Credit lets learners record an SFC claim ID and amount during checkout for eligible courses. SOQ deducts the claimed amount from learner payable, tracks open claims, and lets finance reconcile SSG payout imports later. This is not an SSG claim-submission API integration.

#### UI map: where to click

| UI area | Path | What operators do | Key buttons / controls |
|---|---|---|---|
| SFC claims | `/admin/sfc` | Review claims, reconcile payouts, reject invalid claims, export/import payout files. | **Export**, file import, **Reconcile**, **Reject** |
| SFC settings | `/admin/sfc/settings` | Enable SFC, set claim window, add/remove eligible courses. | **Save settings**, add/remove course |
| Learner cart | `/cart` | Learner enters MySkillsFuture claim ID and amount. | Claim ID, amount, **Use maximum** |

#### Permissions

| Permission | Purpose |
|---|---|
| `admin_sg_sfc` | Parent access |
| `admin_sg_sfc_claims` | Claim list/export |
| `admin_sg_sfc_reconcile` | Import payout, reconcile, reject |
| `admin_sg_sfc_settings` | Settings and eligible courses |

Run `php artisan soq:seed-sfc` to install sections and safe defaults.

#### Field guide

| Field / control | What to enter | Impact |
|---|---|---|
| Accept SkillsFuture Credit at checkout | Turn on only after eligible courses are configured. | Shows SFC block in cart. |
| Claim window | Days before course start, default 60. | Cart warning uses this window; it does not hard-block. |
| Eligible courses | SSG-approved courses. | Only these courses can use SFC. |
| SFC claim ID | ID learner receives from MySkillsFuture. | Each ID can be used once. |
| Claimed amount | Amount learner wants to use. | Deducted from checkout payable. |
| Disbursed amount | Amount SSG actually paid. | Used to reconcile or flag discrepancy. |
| Payout reference | SSG payout statement reference. | Stored for finance audit. |
| Payout import file | CSV/XLSX with `claim_reference`, `disbursed_amount`, `payout_reference`. | Bulk reconciles claims. |

Settings bag: `soq_sg_sfc_settings`.

#### First-time setup

1. Run `php artisan migrate`.
2. Run `php artisan soq:seed-sfc`.
3. Open `/admin/sfc/settings`.
4. Add SFC-eligible courses.
5. Set claim window.
6. Turn on **Accept SkillsFuture Credit at checkout** and save.
7. Run a test checkout with partial SFC and another with full SFC coverage.
8. Open `/admin/sfc` and verify claim status.

#### UAT script

| Step | Action | Expected result |
|---|---|---|
| 1 | Add eligible paid course. | Course appears in settings. |
| 2 | Learner enters claim ID and partial amount in cart. | Payable balance is reduced. |
| 3 | Learner enters maximum claim amount. | **Use maximum** fills allowed amount. |
| 4 | Complete checkout. | Claim appears in `/admin/sfc` as awaiting payout. |
| 5 | Finance enters disbursed amount equal to claim and clicks **Reconcile**. | Status becomes reconciled. |
| 6 | Finance enters lower disbursed amount. | Claim becomes discrepancy / partial state according to module rules. |
| 7 | Upload payout CSV/XLSX. | Matching rows reconcile in bulk. |
| 8 | Reject invalid claim. | Claim marked rejected; operator must collect amount manually if needed. |

#### Daily operations

- Finance checks `/admin/sfc` when SSG payout statements arrive.
- Use **Export** before manual reconciliation if finance wants an offline working sheet.
- Import payout file when statement format matches required columns.
- Investigate discrepancy claims before closing the learner's balance.

#### Troubleshooting

| Symptom | Check |
|---|---|
| SFC block missing | Module disabled, course not eligible, free course, gift purchase, installment plan, or mobile checkout. |
| Claim ID rejected | Claim ID already used or format invalid. |
| Full SFC order did not enrol | Check claim amount and payment status; full coverage should enrol after checkout. |
| Import file rejected | Required columns missing or file is not CSV/XLSX. |
| Refund mismatch | SOQ refunds only learner-paid portion; SFC reversal must be handled in MySkillsFuture. |

#### Policy notes

- SOQ records learner-entered claims; it does not submit claims to SSG.
- Orders with SFC cannot be paid from account balance.
- Gift purchases and installment plans do not use SFC in v1.