CV date format MM/YYYY instead of MM.YYYY
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+17
-9
@@ -158,13 +158,13 @@ async function generateTailoredTexts({ job, basisDokumente, settings, llmNotizen
|
||||
` "lebenslauf": {\n` +
|
||||
` "profil": "2–3 Sätze Kurzprofil, zugeschnitten auf die Zielstelle",\n` +
|
||||
` "berufserfahrung": [\n` +
|
||||
` { "zeitraum": "02.2025 – heute", "titel": "Jobtitel", "firma": "Arbeitgeber, Ort", "punkte": ["Aufgabe/Erfolg 1", "Aufgabe/Erfolg 2"] }\n` +
|
||||
` { "zeitraum": "02/2025 – heute", "titel": "Jobtitel", "firma": "Arbeitgeber, Ort", "punkte": ["Aufgabe/Erfolg 1", "Aufgabe/Erfolg 2"] }\n` +
|
||||
` ],\n` +
|
||||
` "studium": [\n` +
|
||||
` { "zeitraum": "10.2010 – 03.2017", "abschluss": "Studiengang", "institution": "Hochschule", "zusatz": "" }\n` +
|
||||
` { "zeitraum": "10/2010 – 03/2017", "abschluss": "Studiengang", "institution": "Hochschule", "zusatz": "" }\n` +
|
||||
` ],\n` +
|
||||
` "berufsausbildung": [\n` +
|
||||
` { "zeitraum": "08.2006 – 07.2009", "abschluss": "Ausbildungsberuf / Abschluss", "institution": "Betrieb/Berufskolleg", "zusatz": "" }\n` +
|
||||
` { "zeitraum": "08/2006 – 07/2009", "abschluss": "Ausbildungsberuf / Abschluss", "institution": "Betrieb/Berufskolleg", "zusatz": "" }\n` +
|
||||
` ],\n` +
|
||||
` "weiterbildungen": [],\n` +
|
||||
` "kenntnisse": ["Fähigkeit 1", "Fähigkeit 2"],\n` +
|
||||
@@ -241,7 +241,7 @@ async function generateTailoredTexts({ job, basisDokumente, settings, llmNotizen
|
||||
`- Keine negativen/entwertenden Vermerke: NIEMALS "nicht beendet", "abgebrochen", "ohne Abschluss", ` +
|
||||
`"arbeitslos", "arbeitssuchend", "gekündigt" o. Ä. Lasse "zusatz" in solchen Fällen leer und nenne nur ` +
|
||||
`Zeitraum, Bezeichnung und Institution neutral.\n` +
|
||||
`- Sachlich, positiv, konsistente Datumsformate (MM.JJJJ).\n\n` +
|
||||
`- Sachlich, positiv, konsistente Datumsformate (MM/YYYY), z. B. "02/2025 – heute".\n\n` +
|
||||
`Leere Felder als leerer String bzw. leeres Array. Antworte AUSSCHLIESSLICH mit dem ` +
|
||||
`JSON-Objekt, ohne Markdown, ohne Code-Fences, ohne weiteren Text.`;
|
||||
|
||||
@@ -313,15 +313,23 @@ function pickArray(obj, keys) {
|
||||
for (const k of keys) if (Array.isArray(obj[k]) && obj[k].length) return obj[k];
|
||||
return [];
|
||||
}
|
||||
// Render CV date ranges with a slash separator (MM/YYYY) regardless of how
|
||||
// the model formatted them, so the timeline reads consistently. Only the
|
||||
// month.year pattern is rewritten; year-only entries and "heute" stay as-is.
|
||||
function normalizeDate(s) {
|
||||
return String(s || '').replace(/\b(\d{1,2})\.(\d{4})\b/g, (_, m, y) => String(m).padStart(2, '0') + '/' + y);
|
||||
}
|
||||
|
||||
function toZeitraum(v) {
|
||||
if (!v) return '';
|
||||
if (typeof v === 'string') return v.trim();
|
||||
if (typeof v === 'object') {
|
||||
let out;
|
||||
if (typeof v === 'string') out = v.trim();
|
||||
else if (typeof v === 'object') {
|
||||
const von = str(pick(v, ['von', 'from', 'start', 'beginn']));
|
||||
const bis = str(pick(v, ['bis', 'to', 'ende', 'end']));
|
||||
return [von, bis].filter(Boolean).join(' – ');
|
||||
}
|
||||
return str(v);
|
||||
out = [von, bis].filter(Boolean).join(' – ');
|
||||
} else out = str(v);
|
||||
return normalizeDate(out);
|
||||
}
|
||||
|
||||
// After an Anrede ending in a comma, the body continues the sentence, so its
|
||||
|
||||
Reference in New Issue
Block a user