diff --git a/.claude/skills/projekt-anlegen/SKILL.md b/.claude/skills/projekt-anlegen/SKILL.md index 2065c79..a98cac8 100644 --- a/.claude/skills/projekt-anlegen/SKILL.md +++ b/.claude/skills/projekt-anlegen/SKILL.md @@ -40,6 +40,12 @@ Daraus entnehmen: - **Projekt-URL**: die tatsächliche URL der Seite, falls vorhanden. - **Beschreibung und Aufgaben**: nur Kontext für die Bewertung, keine Tabellenzeilen. - **Anforderungen**: jede Anforderung einzeln, im Originalwortlaut (behutsam kürzen ist erlaubt, Bedeutung nie verändern). Rahmenbedingungen (Start, Einsatzort/Remote-Anteil, Auslastung, Laufzeit) zählen als Anforderungen der Kategorie Misc. +- **Angebotstyp** (bestimmt das CRM-Team der Verkaufschance, siehe Schritt 7.0): + - **Projekt** — Freiberufler-/Werkauftrag, ob über Agentur oder als Direktauftrag → Team `DesTEngS`. + - **Arbeitnehmer-Angebot** — Fest-/Angestelltenverhältnis (Signale: „Festanstellung", „unbefristet", „Anstellung", „Gehalt", „Arbeitsvertrag") → Team `Arbeitnehmer`. + - **Arbeitnehmerüberlassung (ANÜ)** — Personalüberlassung/Zeitarbeit (Signale: „Arbeitnehmerüberlassung", „ANÜ", „AÜG", „Überlassung") → Team `ANÜ`. + - Nicht eindeutig zuordenbar → im Review nachfragen. + - Der Käufer-Typ (Agentur/Direktauftrag) unten ist nur eine Unterscheidung **innerhalb** des Angebotstyps „Projekt". - **Käufer-Typ**: Agentur (Wiederverkäufer) ODER Endkunde (Direktauftrag). - Agentur-Signale: bekannte Personaldienstleister/Vermittler (Hays, GULP/Randstad, SThree/Computer Futures, Aristo …), Formulierungen wie „im Auftrag unseres Kunden", „für unseren Kunden", Vermittler-Kontext des Portals. - Nicht eindeutig bestimmbar → im Review nachfragen. @@ -132,12 +138,13 @@ Must-have-Match: 50 % · Nice-to-have-Match: 33 % Niemals ohne explizite Freigabe ins CRM schreiben. Im Chat zeigen: 1. Vorgesehener **Name** der Opportunity (= Projektname) und **Projektlink**. -2. **Käufer-Typ** (Agentur/Direktauftrag) mit Kurzbegründung. -3. **Firma:** Name und `type` (Reseller bei Agentur, Customer bei Direktauftrag); „neu anlegen" oder „bestehende nutzen: ". Bei ähnlichen, nicht identischen Treffern die Kandidatenliste zeigen und entscheiden lassen. -4. **Kontakt:** Name; „neu anlegen" oder „bestehend nutzen: ". -5. **Verknüpfungs-Zuordnung** der Verkaufschance (account vs. cAccount1, Kontakt). -6. Den wörtlichen Beschreibungs-Markdown in einem Codeblock. -7. Kurze Begründungen zu allen ❌- und ❔-Bewertungen (Must/Nice/Misc) außerhalb der Tabelle. +2. **Angebotstyp** (Projekt / Arbeitnehmer-Angebot / ANÜ) und resultierendes **Team** (`DesTEngS` / `Arbeitnehmer` / `ANÜ`) mit Kurzbegründung. +3. **Käufer-Typ** (Agentur/Direktauftrag) mit Kurzbegründung — nur bei Angebotstyp „Projekt". +4. **Firma:** Name und `type` (Reseller bei Agentur, Customer bei Direktauftrag); „neu anlegen" oder „bestehende nutzen: ". Bei ähnlichen, nicht identischen Treffern die Kandidatenliste zeigen und entscheiden lassen. +5. **Kontakt:** Name; „neu anlegen" oder „bestehend nutzen: ". +6. **Verknüpfungs-Zuordnung** der Verkaufschance (account vs. cAccount1, Kontakt, Team). +7. Den wörtlichen Beschreibungs-Markdown in einem Codeblock. +8. Kurze Begründungen zu allen ❌- und ❔-Bewertungen (Must/Nice/Misc) außerhalb der Tabelle. Korrekturen kommen als „Nr. X → ✅/❌/❔" oder als Korrektur zu Firma/Kontakt/Typ. Danach betroffene Matches neu berechnen und geänderte Werte nennen. Erst nach Freigabe weiter zu Schritt 7. @@ -150,6 +157,19 @@ KEY=$(grep -oE '[0-9a-f]{32}' .secrets/espocrm-api.md | head -1) BASE=$(grep -oE 'https://[^ `]+/api/v1' .secrets/espocrm-api.md | head -1) ``` +### 7.0 Team-ID ermitteln (aus Angebotstyp) +Team-Name aus dem Angebotstyp (Schritt 1): Projekt → `DesTEngS`, Arbeitnehmer-Angebot → `Arbeitnehmer`, ANÜ → `ANÜ`. ID per Namens-Suche holen: + +```bash +curl -s -G "$BASE/Team" -H "X-Api-Key: $KEY" \ + --data-urlencode 'where[0][type]=equals' \ + --data-urlencode 'where[0][attribute]=name' \ + --data-urlencode 'where[0][value]=' \ + --data-urlencode 'select=name' --data-urlencode 'maxSize=10' +``` + +`id` aus dem Treffer als TEAM_ID merken. **Niemals eine Team-ID raten.** Kommt die Liste leer zurück oder fehlt der API-Rolle der Team-Zugriff (Lesen leer trotz `200`, `POST /Team` → `403 No create access`), nicht weiterschreiben, sondern im Chat melden: Der CRM-Benutzer `cowork-api` braucht Zugriff auf die Entität `Team` (mindestens Lesen + Team-Zuweisung auf Verkaufschancen), und die Teams `DesTEngS`, `Arbeitnehmer`, `ANÜ` müssen im CRM existieren. Erst dann lässt sich `teamsIds` setzen. + ### 7.1 Firma (Account) Dedup-Suche mit einem Kern-Token des Namens (z. B. „Aristo"): @@ -211,8 +231,10 @@ Payload nach `/tmp/opp.json`. Verknüpfungen je Käufer-Typ: - **Agentur:** `cAccount1Id` = ACCOUNT_ID („Über Agentur"); **kein** `accountId`. - **Direktauftrag:** `accountId` = ACCOUNT_ID; **kein** `cAccount1Id`. +Zusätzlich immer `teamsIds` = `[""]` aus Schritt 7.0 (Angebotstyp-Team) setzen. + ```json -{"name": "", "description": "", "cProjektlink": "", "contactsIds": [""], "cAccount1Id": ""} +{"name": "", "description": "", "cProjektlink": "", "contactsIds": [""], "teamsIds": [""], "cAccount1Id": ""} ``` ```bash @@ -229,4 +251,4 @@ Nach dem POST den Datensatz gegenlesen: curl -s -G "$BASE/Opportunity/" -H "X-Api-Key: $KEY" ``` -Prüfen: stimmen Name und Projektlink, hat die Beschreibung die Match-Zeile und alle Tabellenzeilen, sind ✅/❌/❔ intakt; sind die Verknüpfungen korrekt — Agentur: `cAccount1Name` gesetzt und `accountName` leer; Direktauftrag: `accountName` gesetzt; `contactsIds`/`contactId` enthält den Kontakt. Dann im Chat melden: gewählter Name (inkl. evtl. Duplikat-Suffix), beide Match-Zahlen, Firma und Kontakt (jeweils neu/bestehend) und der Direktlink `https://crm.creature-go.com/#Opportunity/view/`. +Prüfen: stimmen Name und Projektlink, hat die Beschreibung die Match-Zeile und alle Tabellenzeilen, sind ✅/❌/❔ intakt; sind die Verknüpfungen korrekt — Agentur: `cAccount1Name` gesetzt und `accountName` leer; Direktauftrag: `accountName` gesetzt; `contactsIds`/`contactId` enthält den Kontakt; `teamsNames` enthält das richtige Team (`DesTEngS` / `Arbeitnehmer` / `ANÜ`). Dann im Chat melden: gewählter Name (inkl. evtl. Duplikat-Suffix), beide Match-Zahlen, Firma und Kontakt (jeweils neu/bestehend), zugewiesenes Team und der Direktlink `https://crm.creature-go.com/#Opportunity/view/`.