# KYN POS — Phase 2 Manual Test Checklist

Use this checklist after installing Phase 2 locally.

## File checks

- [ ] `/sql/migrations/002_core_pos_schema.sql` exists.
- [ ] `/sql/seeds/002_core_pos_seed_minimum.sql` exists.
- [ ] `/modules/schema/controller.php` exists.
- [ ] `/templates/schema/index.php` exists.
- [ ] `/docs/DATABASE_DICTIONARY_PHASE_2.md` exists.
- [ ] `/docs/PHASE_2_SCHEMA_NOTES.md` exists.

## Routing checks

Open:

```text
/public/page.php?p=dashboard
```

Expected:

- [ ] Dashboard loads.
- [ ] Dashboard says Phase 2.
- [ ] Phase 2 files are listed.

Open:

```text
/public/page.php?p=schema_catalog
```

Expected:

- [ ] Schema Catalog route loads.
- [ ] Schema groups display as cards.
- [ ] Migration files are listed.
- [ ] No SQL or business logic appears inside the template.

## Syntax checks

From the project root, run:

```bash
find . -name "*.php" -print0 | xargs -0 -n1 php -l
```

Expected:

- [ ] No PHP syntax errors.

## Database checks

Run migrations in this order:

```text
/sql/migrations/001_foundation_schema.sql
/sql/migrations/002_core_pos_schema.sql
/sql/seeds/002_core_pos_seed_minimum.sql
```

Expected:

- [ ] All tables are created as InnoDB.
- [ ] Tables use `utf8mb4_unicode_ci`.
- [ ] Seed rows insert without creating duplicate rows.
- [ ] Staff roles exist.
- [ ] Service types exist.
- [ ] Payment methods exist.
- [ ] Discount reason codes exist.
- [ ] Void reason codes exist.

## Design separation checks

- [ ] Schema display data is prepared in `modules/schema/controller.php`.
- [ ] Visual markup is kept in `templates/schema/index.php`.
- [ ] CSS-only adjustments are in `/public/assets/css/kyn-pos.css`.
- [ ] No database queries are added to templates.
- [ ] No business calculations are added to templates.

## Phase 2 acceptance

- [ ] The schema supports staff/PIN, dining tables, menu items, modifiers, checks, check lines, payments, voids, discounts, and daily close.
- [ ] KYN/Food Cost/TFF bridge placeholders exist.
- [ ] The app still runs with design separated from code.
