projekt-anlegen: Angebotstyp bestimmen und CRM-Team setzen

Neuer Prozessschritt: Angebotstyp (Projekt / Arbeitnehmer-Angebot / ANUE)
klassifizieren und daraus das Team der Verkaufschance ableiten -
Projekt -> DesTEngS, Arbeitnehmer -> Arbeitnehmer, ANUE -> ANUE; bei
Unklarheit nachfragen. Team-ID per Namens-Suche ermitteln (nie raten) und
als teamsIds in den Opportunity-Payload aufnehmen; Review und Verifikation
um Angebotstyp/Team erweitert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
tlg
2026-06-16 17:03:30 +02:00
parent 23d51fa42b
commit 130d72dc57

View File

@@ -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: <Name/ID>". Bei ähnlichen, nicht identischen Treffern die Kandidatenliste zeigen und entscheiden lassen.
4. **Kontakt:** Name; „neu anlegen" oder „bestehend nutzen: <Name/ID>".
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: <Name/ID>". Bei ähnlichen, nicht identischen Treffern die Kandidatenliste zeigen und entscheiden lassen.
5. **Kontakt:** Name; „neu anlegen" oder „bestehend nutzen: <Name/ID>".
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]=<TEAM>' \
--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` = `["<TEAM_ID>"]` aus Schritt 7.0 (Angebotstyp-Team) setzen.
```json
{"name": "<EINDEUTIGER_NAME>", "description": "<BESCHREIBUNG_MARKDOWN>", "cProjektlink": "<PROJEKT_URL>", "contactsIds": ["<CONTACT_ID>"], "cAccount1Id": "<ACCOUNT_ID — nur bei Agentur, sonst Feld weglassen und stattdessen accountId setzen>"}
{"name": "<EINDEUTIGER_NAME>", "description": "<BESCHREIBUNG_MARKDOWN>", "cProjektlink": "<PROJEKT_URL>", "contactsIds": ["<CONTACT_ID>"], "teamsIds": ["<TEAM_ID>"], "cAccount1Id": "<ACCOUNT_ID — nur bei Agentur, sonst Feld weglassen und stattdessen accountId setzen>"}
```
```bash
@@ -229,4 +251,4 @@ Nach dem POST den Datensatz gegenlesen:
curl -s -G "$BASE/Opportunity/<id>" -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/<id>`.
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/<id>`.