# ICMIS prisons_m4 — Modules 14, 15, 16, 21 (delivered)

This build implements the four previously-stubbed prison modules and tidies the navigation.

## New modules
| Req | Module | Controller | Tables | Views |
|-----|--------|-----------|--------|-------|
| 14  | Borstal Institution Management | `BorstalController` | `borstal_institutions`, `borstal_admissions` | `prison/borstal/*` |
| 15  | Presidential Pardons | `PresidentialPardonController` | `presidential_pardons` | `prison/presidential-pardons/*` |
| 16  | Other Pardons | `OtherPardonController` | `other_pardons` | `prison/other-pardons/*` |
| 21  | Lockups & Unlocks | `LockupController` | `lockup_counts` | `prison/lockups/*` |

Shared pardon biometric workflow: `app/Support/HandlesPardonBiometrics.php`.

## Run after pulling
```bash
php artisan migrate          # adds the 5 new tables
php artisan route:clear && php artisan view:clear
```

## Hardware-dependent steps (wired, awaiting devices)
All hardware steps are already wired to the existing service layer and degrade
gracefully until a device is connected — no code change needed to go live:

- **Biometric approval** (pardons 15/16) and **biometric tally** (lockups 21) →
  `App\Services\BiometricService`. Set `BIOMETRIC_DRIVER=device` + `BIOMETRIC_ENDPOINT`
  in `.env` when the reader is installed.
- **CCTV / access-control** (Borstal 14g) → `App\Services\Hardware\*`. Driven by
  `config/command_centre.php` once cameras/barriers are connected.
- **Alerts** (accommodation change, irregular movement, emergency, forward-to-PoM) →
  `App\Services\AlertService` (in-app inbox now; email/SMS when configured).

Until then the full software workflow runs and records intent; status badges show
"pending hardware".

## Navigation
`resources/views/layouts/app.blade.php` — Prison Management submenu cleaned up and
regrouped: Borstal under **Inmate Management**, Lockups under **Operations**, and a
new **Pardons & Clemency** group for Presidential/Other pardons.
