From 9c557be5e811bf3d2a3e98c89da1db51f7e661e3f285d0b8f1f3335836274396 Mon Sep 17 00:00:00 2001 From: tlg Date: Fri, 12 Jun 2026 12:48:42 +0200 Subject: [PATCH] =?UTF-8?q?Spec:=20Distanz=20per=20Nominatim-Geokodierung?= =?UTF-8?q?=20+=20Haversine;=20Kontakt-Firma-Verkn=C3=BCpfung=20explizit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Einsatzort-Distanz wird geocodiert (Nominatim, nur DE) statt LLM-geschätzt; Bänder ≤50/50-60/>60 km bleiben, Fallback bei unbekanntem Ort → ❔. - 6.2: Verknüpfung des neuen Kontakts zur Firma (accountId) explizit gefordert. - Feasibility verifiziert (München 19, Rosenheim 38, Augsburg 71, Nürnberg 170 km). Co-Authored-By: Claude Opus 4.8 (1M context) --- ...6-12-projekt-anlegen-erweiterung-design.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/superpowers/specs/2026-06-12-projekt-anlegen-erweiterung-design.md b/docs/superpowers/specs/2026-06-12-projekt-anlegen-erweiterung-design.md index 52b40f7..3032b52 100644 --- a/docs/superpowers/specs/2026-06-12-projekt-anlegen-erweiterung-design.md +++ b/docs/superpowers/specs/2026-06-12-projekt-anlegen-erweiterung-design.md @@ -46,14 +46,14 @@ durch den Skill `projekt-anlegen`. Ändern sich selten. ## Einsatzort-Regel - 100 % Remote → ✅ (Ort egal). -- Onsite/Hybrid, Ort ≲ 50 km Luftlinie um Sauerlach → ✅. -- Onsite/Hybrid, Ort grenzwertig ≈ 50–60 km → ❔. -- Onsite/Hybrid, Ort ≳ 60 km → ❌. +- Onsite/Hybrid, Ort ≤ 50 km Luftlinie um Sauerlach → ✅. +- Onsite/Hybrid, Ort 50–60 km (grenzwertig) → ❔. +- Onsite/Hybrid, Ort > 60 km → ❌. - Einsatzort/Remote-Anteil unklar oder nicht genannt → ❌. -### Referenz-Distanzen ab Sauerlach (Luftlinie, gerundet) -- München-Zentrum ≈ 25 km ✅ · Holzkirchen ≈ 10 km ✅ · Wolfratshausen ≈ 15 km ✅ · Rosenheim ≈ 40 km ✅ -- Augsburg ≈ 75 km ❌ · Landshut ≈ 80 km ❌ · Ingolstadt ≈ 95 km ❌ · Nürnberg ≈ 150 km ❌ · Stuttgart ≈ 200 km ❌ +Distanz = Luftlinie zwischen Onsite-Ort und Sauerlach (47,9721 N / 11,6528 O), +bestimmt per Geokodierung (Nominatim/OpenStreetMap, nur Deutschland) und Haversine. +Unbekannter/mehrdeutiger Ort → ❔. Hinweis: „heute" = aktuelles Datum der Session. „8 Wochen" = 56 Tage. ``` @@ -72,7 +72,7 @@ Zusätzlich zu Projektname/URL/Anforderungen aus der Ausschreibung ziehen: Misc-Anforderungen zu Verfügbarkeit/Auslastung/Laufzeit/Einsatzort werden gegen `vorgaben/rahmenbedingungen.md` bewertet und erhalten direkt ✅/❌/❔ gemäß den Regeln in §3 — **statt** des bisherigen pauschalen ❔. Greift eine Regel nicht eindeutig (Auslastung/Start nicht genannt, Ort grenzwertig), bleibt es ❔. -- Distanzbeurteilung: Luftlinie vom genannten Onsite-Ort nach Sauerlach schätzen; Referenz-Distanzen aus §3 als Anker. Klar innerhalb → ✅, klar außerhalb → ❌, grenzwertig/unbekannter Ort → ❔ bzw. ❌ gemäß Regel. +- Distanzbeurteilung per **Geokodierung**: Onsite-Ort über Nominatim (OpenStreetMap; `format=json`, `countrycodes=de`, `limit=1`, eigener `User-Agent`; max. 1 Request/s) auflösen, Luftlinie zu Sauerlach (47,9721 N / 11,6528 O) per Haversine berechnen, gegen die Bänder ≤ 50 / 50–60 / > 60 km prüfen. Geokodierung gescheitert oder Ort mehrdeutig → ❔. (Feasibility verifiziert: München 19 km, Rosenheim 38 km, Augsburg 71 km, Nürnberg 170 km.) - Startdatum: „heute + 8 Wochen" (56 Tage) gegen den genannten Projektstart prüfen. - Misc-Zeilen gehen weiterhin **nicht** in die Match-Prozente ein; die automatische Bewertung ist informativ und spart das manuelle Setzen. @@ -90,7 +90,8 @@ Alle Schreibvorgänge erst **nach** der Review-Freigabe (§7). ### 6.2 Kontakt (`Contact`) 1. Dedup-Suche per Name analog zu 6.1. -2. Kein/zu bestätigender Treffer → nach Freigabe neu anlegen: `POST /Contact` mit `{firstName, lastName, accountId}` (verknüpft mit der Firma aus 6.1). +2. Kein/zu bestätigender Treffer → nach Freigabe neu anlegen: `POST /Contact` mit `{firstName, lastName, accountId}`. + - **Die Verknüpfung zur Firma aus 6.1 wird beim Neu-Anlegen zwingend mitgesetzt** (`accountId`), sodass der neue Kontakt der Firma zugeordnet ist. - Namensaufteilung: letztes Token = `lastName`, der Rest = `firstName`. Ungewöhnliche Fälle im Review klären. ### 6.3 Verkaufschance (`Opportunity`) @@ -118,7 +119,7 @@ Erst nach Freigabe werden Firma, Kontakt und Verkaufschance in dieser Reihenfolg - Unberührt: `cowork-projekt-match` (Archiv). ## 9. Bewusst NICHT enthalten (YAGNI) -- Keine automatische Geokodierung/Distanz-API — Distanz wird anhand der Referenz-Anker geschätzt; Grenzfälle → ❔. +- Keine Fahrstrecken-/Routing-Berechnung — für das 50-km-Kriterium genügt die Luftlinie (Haversine) auf Basis der Nominatim-Geokodierung. - Keine automatische Zusammenführung bestehender CRM-Dubletten. - Keine Änderung der Must/Nice-Bewertungslogik oder der Match-Berechnung.