# Callkeep Datenbank-Schema

Gefunden in `/DATA/.media/HDD_1TB/CallKeep/callkeep.db` (16 KB).

## Tabellen

### `contacts`

| Feld | Typ | Bedeutung |
|------|-----|-----------|
| id | INTEGER PK | Kontakt-ID |
| name | TEXT | Name |
| nickname | TEXT | Spitzname |
| relationship | TEXT | Beziehung (Default: 'Freund') |
| frequency | TEXT | Häufigkeit: 'Täglich', 'Wöchentlich', 'Alle 2 Wochen', 'Monatlich', 'Alle 2 Monate', 'Vierteljährlich', ... |
| priority | INTEGER | 1–5, kleiner = wichtiger (Default: 3) |
| notes | TEXT | Notizen |
| birthday | TEXT | Geburtstag |
| photo_url | TEXT | Bild-URL |
| created_at | TEXT | ISO-Datetime |
| updated_at | TEXT | ISO-Datetime |

### `calls`

| Feld | Typ | Bedeutung |
|------|-----|-----------|
| id | INTEGER PK | Eintrag-ID |
| contact_id | INTEGER FK | -> contacts.id |
| direction | TEXT | 'Ausgehend' oder 'Eingehend' (Default: 'Ausgehend') |
| duration_minutes | INTEGER | Dauer in Minuten |
| topics | TEXT | Gesprächsthemen |
| mood | TEXT | Stimmung (Default: 'neutral') |
| follow_up_needed | INTEGER | 0/1 |
| follow_up_note | TEXT | Folgenotiz |
| called_at | TEXT | ISO-Datetime oder ISO-Date |
| next_call_at | TEXT | Geplanter nächster Anruf |
| created_at | TEXT | ISO-Datetime |
| summary | TEXT | Kurzzusammenfassung |

## Häufigkeit → Tage Mapping (Fälligkeitsberechnung)

| frequency | Tage |
|-----------|------|
| Täglich | 1 |
| Wöchentlich | 7 |
| Alle 2 Wochen | 14 |
| Monatlich | 30 |
| Alle 2 Monate | 60 |
| Vierteljährlich | 90 |
| Halbjährlich | 180 |
| Jährlich | 365 |

## Typische Abfragen

```sql
-- Alle Kontakte mit letztem Anruf
SELECT c.*, MAX(cl.called_at) as last_call
FROM contacts c
LEFT JOIN calls cl ON c.id = cl.contact_id
GROUP BY c.id
ORDER BY c.name;

-- Anrufe eines Kontakts
SELECT * FROM calls WHERE contact_id = ? ORDER BY called_at DESC;
```
