P2503 · Projektpartnerportal · RSM-Fallback

RSM Bewerbungs-Webform — Email-Flow für Projektangebote

REFINED P2503-199 Erstellt & Refined: 2026-05-30 (via solcom-grill)

User Story

Als Projektpartner (eingeloggt oder anonym) möchte ich mich auf ein konkretes Projektangebot bewerben können, auch während Salesforce noch nicht live ist, damit meine Bewerbung trotzdem beim zuständigen Bearbeiter ankommt und weiterverarbeitet werden kann.

Outcome

Auf der Detailseite jedes RSM-Projektangebots erscheinen zwei Bewerbungsoptionen: (1) Minggo-Link-Button (wenn field_minggo_url befüllt), (2) ein Drupal-Webform. Das Webform generiert beim Submit eine E-Mail an bewerbung@solcom.de (CC: Bearbeiter) im exakten Format, das die Microsoft Power App parsen kann. Pflichtfelder werden bei eingeloggten Nutzern automatisch vorausgefüllt.

Scope

Webform-Felder

FeldTypVorausgefüllt (eingeloggt)Pflicht
AnredeSelect (Herr/Frau/Divers)Aus User-Profil (wenn gepflegt)Ja
VornameTextAus User-ProfilJa
NachnameTextAus User-ProfilJa
TelefonTelAus User-Profil (wenn gepflegt)Ja
E-Mail-AdresseEmailAus User-AccountJa
StraßeTextJa
PostleitzahlTextJa
OrtTextJa
LandTextDeutschland (Default)Ja
Datenschutzerklärung akzeptiertCheckboxJa
CV / DokumentFile UploadJa

Email-Generierung beim Submit

Vertrag (revidiert 2026-07-04): Die Mail repliziert die Neos-Bewerbungsmail 1:1 — die empfangende Microsoft Power App bleibt unverändert und parst weiterhin das Neos-Format. Der frühere Plaintext-„Ersatzvertrag" (Label-Doppelpunkt-Zeilen, Y-m-d-Datum, „Anonymous User") ist verworfen.

Format-Quelle: Neos Fluid-Template Contenance.Solcom → Mail/Application.html (lokal unter temp/web54_extracted/) plus Referenzmail unter docs/rsm/. Kern-Eigenschaften:

  • HTML-Tabellen-Mail (text/html): 2-Spalten-Tabelle, Label fett (<strong>Label:</strong>), Wert in eigener Zelle — kein Plaintext.
  • Neos-Labels: Geburtstag, Mobiltelefon, Eigene Webseite, Stundensatz, freelance.de-Profil, XING-Profil, Freelancermap-Profil, Fremdsprachen, Bewerbungstext; Einsatzorte als Einzelzeilen (Einsatzort Deutschland: Ja …).
  • Leere Felder werden weggelassen (Neos rendert nur befüllte Felder); Zeilenreihenfolge = Neos-Formular-POST-Reihenfolge.
  • skills + focus_areas werden zu einer Fachliche Schwerpunkte:-Zeile zusammengeführt (kommasepariert, Neos-Algorithmus); Straße = street + house_number kombiniert.
  • Fixer Block immer vorhanden: Bewerbertyp (Account User | Gast), Datenschutzerklärung akzeptiert true, Gesendet {d.m.Y - H:i:s}, Session ID {Node-UUID des Projekts}, PPP-ID {field_ppp_id | leer bei anonym}, danach Datei N von M-Zeilen (keine Zeile bei 0 Dateien).
  • Nutzerkonto: Ein Nutzerkonto wurde angelegt. wenn im Submit ein Konto erstellt wurde; Anrede: Divers wird ausgegeben (Erweiterung ggü. Neos, Entscheidung 2026-07-04).

Email-Routing

  • An: bewerbung@solcom.de
  • Von: SOLCOM Projektportal <no-reply@solcom.de>
  • CC: field_contact_email des Projektangebots (= Bearbeiter aus RSM-XML)
  • Betreff: Bewerbung über Projektportal /  Projekt-Nummer: {lfdNr} / {Titel} — das Doppel-Leerzeichen nach dem ersten Slash ist Neos-exakt.
  • Anhang: Hochgeladener CV/Datei (Fallback: Profil-Dokumente)
  • Eingangsbestätigung: EINE Sammel-Mail an Bewerber (auch bei Apply-all), BCC bewerbung@solcom.de, Betreff Eingangsbestätigung / Projekt-Nummer: {IDs mit / gejoint}{ / Titel nur bei Einzelprojekt}, From-Name SOLCOM Projektportal.

State Flag & Sichtbarkeit

Das Webform ist nur sichtbar wenn solcom_project_offer.rsm_fallback_enabled = 1. Der Minggo-Link-Button erscheint parallel wenn field_minggo_url nicht leer ist — unabhängig vom Flag.

Out of Scope

  • SF-natives Bewerbungsformular (nach SF-Go-Live, eigener Task)
  • Initiativbewerbung via Minggo (F-330)
  • PPP-ID Auto-Assignment bei Neuregistrierung (klärt sich mit User-Migrations-Task)

Akzeptanzkriterien

  1. Das Webform erscheint auf /fuer-freiberufler/projektliste/{node} wenn rsm_fallback_enabled = 1.
  2. Nach Submit landet eine E-Mail im exakten Neos-HTML-Format (siehe Vertrag oben) in bewerbung@solcom.de.
  3. CC geht an field_contact_email des Nodes.
  4. Anhang (CV-Datei) ist der E-Mail beigefügt, Dateiname erscheint in Datei 1 von 1-Zeile.
  5. Eingeloggter Nutzer: Vor-/Nachname und E-Mail sind vorausgefüllt; PPP-ID-Zeile enthält field_ppp_id.
  6. Anonymer Nutzer: Bewerbertyp: Gast, PPP-ID-Zeile ist leer (Neos-Verhalten; revidiert 2026-07-04, vorher UUID).
  7. Wenn field_minggo_url befüllt: Minggo-Button erscheint neben dem Webform (beide sichtbar gleichzeitig).
  8. Wenn Flag = 0: Webform nicht sichtbar; Minggo-Link (wenn vorhanden) bleibt sichtbar.

QA-Plan (Click-Pfade)

AKURLAktionErwartet
1/fuer-freiberufler/projektliste/{node}Flag=1, Seite aufrufenWebform sichtbar
2Webform ausfüllen + absendenAlle Felder ausfüllen, SubmitE-Mail in bewerbung@solcom.de, Format exakt
3E-Mail prüfenCC-Empfänger prüfenBearbeiter-Email aus Node im CC
4E-Mail prüfenAnhang prüfenCV-Datei angehängt, Dateiname in Body
5Eingeloggt, WebformFormular öffnenVorname/Nachname/Email vorausgefüllt
5bE-Mail prüfenPPP-ID-ZeileNumerische field_ppp_id des Users
6Anonym, Webform absendenFormular ausfüllen + SubmitBewerbertyp „Gast", PPP-ID-Zeile leer
7Node mit FreelancerLinkSeite aufrufenMinggo-Button UND Webform sichtbar
8Flag=0, SeiteFlag deaktivieren, aufrufenWebform weg, Minggo-Button (wenn vorhanden) bleibt

Offene Fragen

Bewerbertyp-Werte (geklärt 2026-07-04): Die Power App wird nicht angepasst — es gelten die Neos-Werte Account User / Gast. Der Vorschlag Anonymous User ist verworfen.
UTM-Betreff-Override (offen): Neos ersetzte den Betreff-Kanal aus UTM-Cookies (Bewerbung über {utm_source} / …). Im Drupal-Stack existiert keine UTM-Cookie-Infrastruktur — Nachbau als eigener Task beschlossen (2026-07-04), Ticket noch anzulegen.
Datenschutzerklärung-Link: URL der Datenschutzerklärung für Checkbox-Label noch zu klären.

Abhängigkeiten

Worklog

  • 2026-07-04 — Neos-1:1-Umbau der Bewerbungsmail. Parity-Prüfung gegen Neos-Quellcode (temp/web54_extracted/) und Referenz-.msg (docs/rsm/) ergab: Plaintext-Format wich in Struktur (HTML-Tabelle vs. Text), Labels, Datumsformat, Bewerbertyp-Wert und Betreff-Spacing vom Neos-Original ab; die Eingangsbestätigung hatte kein BCC und lief pro Projekt statt gesammelt. Entscheidung: Power App bleibt unverändert, Drupal repliziert Neos 1:1. Umsetzung auf Branch feature/p2503-199-neos-mail-parity: RsmProjectOfferMailHandler baut jetzt die Neos-HTML-Tabelle (Labels, Reihenfolge, Leerfeld-Auslassung, d.m.Y - H:i:s, Gast, Session-ID = Projekt-Node-UUID, PPP-ID leer bei anonym, Nutzerkonto-Zeile), hook_mail sendet text/html, Betreff mit Neos-Doppel-Leerzeichen, Sammel-Eingangsbestätigung mit BCC bewerbung@solcom.de + From-Name SOLCOM Projektportal; neues Hidden project_offer_node_uuid im Webform. Kernel-Golden-Master (12 Tests) gegen das Neos-Format neu geschrieben — inkl. Fix der seit der ACK-Einführung roten Suite (fehlendes easy_email in der Test-Modul-Liste). Entscheidungen: skills+focus_areas zusammengeführt, „Divers" wird ausgegeben, UTM-Betreff-Override als separates Ticket.