Files

31 lines
1.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const normalize = value => value.normalize('NFC').replace(/\s+/g, ' ').trim();
/** Preserve useful draft text, while making missing requested sections explicit. */
export function qualifyOfferDraft(result, requested) {
if (!Array.isArray(result?.bolumler) || !result.bolumler.length)
throw new Error('Model bölüm üretmedi; tekrar deneyin.');
const byTitle = new Map();
for (const row of result.bolumler) {
if (typeof row?.baslik !== 'string' || typeof row?.icerik !== 'string' || !row.baslik.trim())
throw new Error('Model geçersiz bir taslak bölümü döndürdü. Yeniden deneyin.');
const key = normalize(row.baslik);
if (byTitle.has(key)) throw new Error('Model aynı taslak bölümünü birden fazla kez döndürdü. Yeniden deneyin.');
byTitle.set(key, {baslik:row.baslik.trim(), icerik:row.icerik.trim()});
}
const missingSections = [];
const bolumler = requested.map(baslik => {
const key = normalize(baslik), found = byTitle.get(key);
byTitle.delete(key);
if (found?.icerik) return {...found, baslik};
missingSections.push(baslik);
return {baslik, icerik:`[DOLDURUN: ${baslik} bölümü model tarafından tamamlanmadı. Kaynak belgelerle hazırlayın.]`};
});
// Keep unexpected useful content; it cannot substitute for a missing section.
const extraSections = [...byTitle.values()].filter(row => row.icerik);
return {bolumler:[...bolumler, ...extraSections], draftReview:{
status:missingSections.length || extraSections.length ? 'partial' : 'draft',
requestedSections:requested, missingSections, extraSections:extraSections.map(row=>row.baslik),
note:'Bu çıktı düzenlenebilir bir taslaktır. Bölümlerin bulunması, bilgilerin doğru veya resmi teklif dosyasının hazır olduğunu göstermez. Kaynak, firma bilgileri, fiyatlar ve zorunlu belgeler ayrıca kontrol edilmelidir.',
}};
}