Compare commits

..

2 Commits

Author SHA256 Message Date
tlg
66059c7470 Entwurf Bewerbung Vectorial GmbH (Data Scientist / AI Engineer, Remote)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:08:43 +02:00
tlg
130d72dc57 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>
2026-06-16 17:03:30 +02:00
2 changed files with 57 additions and 8 deletions

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>`.

View File

@@ -0,0 +1,27 @@
An: Herrn Thomas Zervos (Vectorial GmbH) über das freelancermap-Portal — eine E-Mail-Adresse ist nicht angegeben.
Betreff: Bewerbung als Data Scientist / AI Engineer, 100 % Remote
Anhänge: Lebenslauf_Dr-Ing_Thomas_Langer.pdf, Zertifikat TÜV AI Consultant
---
Sehr geehrter Herr Zervos,
ich bewerbe mich sehr gern auf genau diese Aufgabe, da sie meine Schwerpunkte bei Large Language Models, der Verarbeitung unstrukturierter Daten und der Datenanalyse mit Python unmittelbar trifft.
Verfügbarkeit: Ich kann ab Juli mit dem gewünschten Umfang von rund 60 Prozent einsteigen.
Stundensatz: Meine All-in-Stundensatz-Vorstellung liegt bei 120 € netto.
Remote: Die Leistung erbringe ich vollständig remote in meinem Ingenieurbüro in Unterhaching im Großraum München, mit eigenen Büroräumen und professionellem IT-Equipment.
Am meisten reizt mich, aus großen Mengen an Freitexten, Kommentaren und Notizen die relevanten Muster herauszuarbeiten und sie für Marketing und Vertrieb nutzbar zu machen.
Inhaltlich bringe ich die geforderten Bausteine mit: Ich habe LLM-basierte Analysen über Prompt Engineering und API-Integration aufgebaut, ein Sprachmodell per Supervised Fine-Tuning angepasst und unstrukturierte Texte mit Methoden des Natural Language Processing erschlossen sowie in strukturierte, tabellarische Formate gebracht. Die zugehörigen Python-Bausteine, von Pandas-gestützten Auswertungen bis zu durchgängigen Verarbeitungs-Pipelines, setze ich routiniert ein, ebenso die Auswahl und Evaluierung passender Modelle. Daten aus unterschiedlichen, auch web-basierten Quellen automatisiert zu erfassen, gehört dabei zu meiner Praxis.
In mehreren Positionen habe ich komplexe technische Systeme von Grund auf begleitet, vom Aufstellen der Anforderungen über Lösungskonzepte und Implementierung bis zu Verifikation, Deployment und geordnetem Wissenstransfer. Davon profitiert auch dieses Vorhaben, weil eine solche Lösung nicht nur entwickelt, sondern verlässlich in Betrieb genommen und nachvollziehbar dokumentiert werden muss.
Gern sende ich Ihnen anbei meinen aktuellen Lebenslauf sowie mein TÜV-Zertifikat als AI Consultant. Über Ihr Interesse freue ich mich sehr und stehe für Rückfragen oder ein Gespräch jederzeit zur Verfügung.
Mit besten Grüßen
Thomas Langer