Persoenliche Angaben unter Vorlagen statt hardcoded/Settings-Modal

- settings-Tabelle um email/telefon/ort/webseite/geburtsdatum erweitert
  (CREATE + ALTER-Migration + Default-INSERT)
- Vorlagen-Seite: neuer Bereich "Persoenliche Angaben" (8 Felder),
  POST /vorlagen/persoenlich; Settings-Modal + Zahnrad-Button entfernt
- Generierung: Kontakt kommt verbindlich aus den Settings (buildHeader
  laesst gespeicherte Werte ueber die KI-Extraktion gewinnen), bewerber-
  Fakten + Prompt angepasst; Design-Vorschau zeigt echte Kontaktdaten
- main.js: Settings-Modal-Handling entfernt; /api/settings bleibt bestehen

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-13 11:41:32 +02:00
co-authored by Claude
parent d1116d522d
commit e97d1b3687
6 changed files with 147 additions and 165 deletions
+23 -7
View File
@@ -195,6 +195,11 @@ async function generateTailoredTexts({ job, basisDokumente, settings, llmNotizen
const bewerber = [
settings && settings.name ? `Name: ${settings.name}` : null,
settings && settings.adresse ? `Adresse: ${settings.adresse}` : null,
settings && settings.email ? `E-Mail: ${settings.email}` : null,
settings && settings.telefon ? `Telefon: ${settings.telefon}` : null,
settings && settings.ort ? `Wohnort: ${settings.ort}` : null,
settings && settings.webseite ? `Webseite: ${settings.webseite}` : null,
settings && settings.geburtsdatum ? `Geburtsdatum: ${settings.geburtsdatum}` : null,
].filter(Boolean).join('\n') || 'Keine Angaben';
const basisText = basisDokumente
@@ -327,10 +332,12 @@ async function generateTailoredTexts({ job, basisDokumente, settings, llmNotizen
`"Facharzt", "Bachelor/Master", "Dipl.-..." u. Ä.). Im Zweifel eine neutrale, nicht geschützte ` +
`Tätigkeitsbezeichnung wählen (z. B. "Softwareentwickler", "IT-Fachkraft", "Anwendungsentwickler") ` +
`statt eines geschützten Titels.\n` +
`- kontakt: E-Mail, Telefon, Ort, Webseite, Geburtsdatum NUR übernehmen, wenn in den ` +
`Basis-Unterlagen vorhanden; sonst leerer String. Nichts erfinden. Geburtsdatum als ` +
`DD.MM.YYYY (z. B. "03.04.1990"). Keine anderen persönlichen Angaben (Führerschein, ` +
`Familienstand, Nationalität o. Ä.) - diese Felder bleiben leer.\n` +
`- kontakt: E-Mail, Telefon, Ort (Wohnort), Webseite und Geburtsdatum werden DIR oben ` +
`unter "Bewerber" als feste Angaben geliefert. Übernimm sie WORTWÖRTLICH (Geburtsdatum ` +
`als DD.MM.YYYY, z. B. "03.04.1990"). Fehlt eine Angabe dort, übernimm sie nur, wenn sie ` +
`in den Basis-Unterlagen steht, sonst leerer String. NIEMALS erfinden. Keine anderen ` +
`persönlichen Angaben (Führerschein, Familienstand, Nationalität o. Ä.) - diese Felder ` +
`bleiben leer.\n` +
`- anschreiben.empfaenger: Empfängerblock. firma = Unternehmen; adresse = Straße + Hausnr. ` +
`(nur falls aus Stellenanzeige oder Notizen bekannt, sonst leer); ort = "PLZ Ort"; ` +
`ansprechpartner = konkrete Kontaktperson (nur falls bekannt, sonst leer). Nutze eine in den ` +
@@ -1834,11 +1841,20 @@ function renderSingleColumn(compose, t) {
}
function buildHeader(settings, kontakt, headline) {
const s = settings || {};
// Persönliche Kontaktfelder kommen verbindlich aus den Settings (unter "Vorlagen"
// gepflegt) sie gewinnen gegenüber dem vom Modell extrahierten Wert. Ein leeres
// Settings-Feld fällt auf den KI-Wert zurück, damit nichts verloren geht.
return {
name: (settings && settings.name) || '',
adresse: (settings && settings.adresse) || '',
name: s.name || '',
adresse: s.adresse || '',
headline,
...kontakt,
email: s.email || (kontakt && kontakt.email) || '',
telefon: s.telefon || (kontakt && kontakt.telefon) || '',
ort: s.ort || (kontakt && kontakt.ort) || '',
webseite: s.webseite || (kontakt && kontakt.webseite) || '',
geburtsdatum: s.geburtsdatum || (kontakt && kontakt.geburtsdatum) || '',
fuehrerschein: kontakt && kontakt.fuehrerschein,
};
}