# E3.S1 - Organization Seed

**Epic:** E3 - Patients & Organizations
**Story:** E3.S1 - Organization seed
**Story Points:** 2
**Status:** 🔄 In Progress (scripts ready, database migration pending)

## Doel

Default organization voor development aanmaken.

## Acceptatiecriteria

- [x] Default organization in seed data
- [x] Organization heeft realistische GGZ data
- [x] Organization is bruikbaar voor development
- [ ] Migratie toegepast op database (wacht op Supabase maintenance)

## Implementatie

### 1. Migratie bestand aangemaakt

📁 **Locatie:** `supabase/migrations/20251122_seed_default_organization.sql`

De migratie maakt een default GGZ organization aan met:
- **ID:** `00000000-0000-0000-0000-000000000001`
- **AGB-code:** `AGB-DEMO-001`
- **KVK-nummer:** `12345678`
- **Naam:** Demo GGZ Instelling
- **Alias:** Demo GGZ, DGGZ
- **Contact:** 030-1234567, info@demo-ggz.nl
- **Adres:** Demonstratiestraat 1, 3511 AB Utrecht

### 2. Scripts aangemaakt

#### TypeScript script (aanbevolen)
📁 **Locatie:** `scripts/seed-organization.ts`

**Gebruik:**
```bash
npx tsx scripts/seed-organization.ts
```

Dit script:
- ✅ Gebruikt Supabase service role key (bypass RLS)
- ✅ Idempotent: kan veilig opnieuw uitgevoerd worden
- ✅ Verificatie na insert/update
- ✅ Duidelijke output en error handling

#### Bash script (alternatief)
📁 **Locatie:** `scripts/apply-organization-seed.sh`

**Gebruik:**
```bash
chmod +x scripts/apply-organization-seed.sh
./scripts/apply-organization-seed.sh
```

### 3. Handmatige toepassing

Als de scripts niet werken, kan de migratie handmatig toegepast worden via:

**Supabase Dashboard:**
1. Ga naar: https://supabase.com/dashboard/project/dqugbrpwtisgyxscpefg/sql
2. Kopieer de SQL uit `supabase/migrations/20251122_seed_default_organization.sql`
3. Plak in SQL Editor
4. Klik "Run"

**Supabase CLI:**
```bash
npx supabase db push
```

**psql (met database password):**
```bash
psql 'postgresql://postgres:[PASSWORD]@db.dqugbrpwtisgyxscpefg.supabase.co:5432/postgres' \
  -f supabase/migrations/20251122_seed_default_organization.sql
```

## Verificatie

Na het toepassen van de migratie, controleer:

```sql
SELECT * FROM organizations WHERE identifier_agb = 'AGB-DEMO-001';
```

**Verwacht resultaat:**
```
id                                   | 00000000-0000-0000-0000-000000000001
identifier_agb                       | AGB-DEMO-001
identifier_kvk                       | 12345678
name                                 | Demo GGZ Instelling
alias                                | {Demo GGZ,DGGZ}
type_code                            | prov
type_display                         | Healthcare Provider
telecom_phone                        | 030-1234567
telecom_email                        | info@demo-ggz.nl
telecom_website                      | https://demo-ggz.nl
address_line                         | {Demonstratiestraat 1}
address_city                         | Utrecht
address_postal_code                  | 3511 AB
address_country                      | NL
active                               | t
```

## Afhankelijkheden

Deze organization wordt gebruikt door:
- ✅ **Practitioners** - organizational affiliation
- ✅ **Encounters** - organization_id foreign key (zie seed data in `20241121_seed_demo_data.sql`)
- ✅ **Care Plans** - care team organization

De bestaande seed data (`20241121_seed_demo_data.sql`) verwijst al naar deze organization via `identifier_agb = 'AGB-DEMO-001'`, maar de organization werd nog niet aangemaakt. Deze story lost dat op.

## Technische details

### Database schema

De `organizations` tabel bestaat al in de database (zie `docs/archive/migrations/20251122-current-db-scheme.sql` - archived snapshot):

```sql
CREATE TABLE public.organizations (
  id uuid NOT NULL DEFAULT gen_random_uuid(),
  identifier_agb text UNIQUE,
  identifier_kvk text,
  name text NOT NULL,
  alias text[],
  type_code text DEFAULT 'prov'::text,
  type_display text DEFAULT 'Healthcare Provider'::text,
  telecom_phone text,
  telecom_email text,
  telecom_website text,
  address_line text[],
  address_city text,
  address_postal_code text,
  address_country text DEFAULT 'NL'::text,
  active boolean DEFAULT true,
  created_at timestamp with time zone DEFAULT now(),
  updated_at timestamp with time zone DEFAULT now(),
  CONSTRAINT organizations_pkey PRIMARY KEY (id)
);
```

### Idempotentie

De migratie gebruikt `ON CONFLICT (id) DO UPDATE` om te zorgen dat:
1. Bij eerste run: organization wordt aangemaakt
2. Bij herhaalde runs: organization wordt geupdatet met nieuwe waardes
3. Geen dubbele entries ontstaan

## Volgende stappen

Na het voltooien van E3.S1:
- [ ] **E3.S2** - Patients lijst pagina (`/clients` met tabel, search, filters)
- [ ] **E3.S3** - Patient CRUD (Create/Update/Delete patient + validatie)

## Referenties

- **Bouwplan:** `docs/bouwplan-mini-epd.md` (regel 352-356)
- **Database schema:** `docs/archive/migrations/20251122-current-db-scheme.sql` (archived snapshot, regel 175-194)
- **Bestaande seed data:** `supabase/migrations/20241121_seed_demo_data.sql` (regel 13-19, 173-188)

---

**Datum aangemaakt:** 2025-11-22
**Laatste update:** 2025-11-22
**Status:** Scripts klaar, database migratie moet handmatig worden toegepast
**Blocker:** Supabase environment variables niet geconfigureerd (NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)
**Actie vereist:** Voer migratie handmatig uit via Supabase Dashboard SQL Editor
