fix: PDF iframe størrelse + AI skelner leverandør fra BMC-modtager v2.2.31

This commit is contained in:
Christian 2026-03-02 12:59:17 +01:00
parent 8d29302b01
commit 4b2b0ea0f3
3 changed files with 23 additions and 10 deletions

View File

@ -2361,13 +2361,20 @@ async def reprocess_uploaded_file(file_id: int):
extracted_fields = llm_result extracted_fields = llm_result
confidence = llm_result.get('confidence', 0.75) confidence = llm_result.get('confidence', 0.75)
# Post-process: clear own CVR if AI mistakenly returned it # Post-process: clear own CVR(s) if AI mistakenly returned them
extracted_cvr = llm_result.get('vendor_cvr') extracted_cvr = llm_result.get('vendor_cvr')
own_cvr = getattr(settings, 'OWN_CVR', '') own_cvr = getattr(settings, 'OWN_CVR', '29522790')
if extracted_cvr and own_cvr and str(extracted_cvr).replace('DK', '').strip() == str(own_cvr).strip(): OWN_CVRS = {str(own_cvr).strip(), '29522790', '14416285'} # alle BMC CVR numre
logger.warning(f"⚠️ AI returned own CVR ({own_cvr}) as vendor_cvr - clearing it") extracted_cvr_clean = str(extracted_cvr).replace('DK', '').strip() if extracted_cvr else ''
if extracted_cvr_clean and extracted_cvr_clean in OWN_CVRS:
logger.warning(f"⚠️ AI returned own CVR ({extracted_cvr_clean}) as vendor_cvr - clearing it")
llm_result['vendor_cvr'] = None llm_result['vendor_cvr'] = None
extracted_cvr = None extracted_cvr = None
# Also clear vendor_name if it looks like BMC
vendor_name = llm_result.get('vendor_name', '') or ''
if 'BMC' in vendor_name.upper() and 'DENMARK' in vendor_name.upper():
logger.warning(f"⚠️ AI returned own company name '{vendor_name}' as vendor_name - clearing it")
llm_result['vendor_name'] = None
# Try to find vendor in DB by extracted CVR or name (overrides detected_vendor_id) # Try to find vendor in DB by extracted CVR or name (overrides detected_vendor_id)
if extracted_cvr: if extracted_cvr:

View File

@ -884,11 +884,11 @@
<div class="modal-body p-0 d-flex" style="height: calc(100vh - 120px); overflow:hidden;"> <div class="modal-body p-0 d-flex" style="height: calc(100vh - 120px); overflow:hidden;">
<!-- LEFT: PDF viewer --> <!-- LEFT: PDF viewer -->
<div class="d-flex flex-column border-end" style="width:58%; min-width:400px;"> <div class="d-flex flex-column border-end" style="width:58%; min-width:400px; height:100%;">
<div class="px-3 py-2 bg-body-tertiary border-bottom small text-muted"> <div class="px-3 py-2 bg-body-tertiary border-bottom small text-muted flex-shrink-0">
<i class="bi bi-file-pdf text-danger me-1"></i>Faktura PDF <i class="bi bi-file-pdf text-danger me-1"></i>Faktura PDF
</div> </div>
<iframe id="qvPdfFrame" src="" style="flex:1; border:none; width:100%; height:100%;" title="PDF Preview"></iframe> <iframe id="qvPdfFrame" src="" style="flex:1 1 0; min-height:0; border:none; width:100%;" title="PDF Preview"></iframe>
</div> </div>
<!-- RIGHT: Vendor form --> <!-- RIGHT: Vendor form -->

View File

@ -29,10 +29,16 @@ class OllamaService:
def _build_system_prompt(self) -> str: def _build_system_prompt(self) -> str:
"""Build Danish system prompt for invoice extraction with CVR""" """Build Danish system prompt for invoice extraction with CVR"""
own_cvr = getattr(settings, 'OWN_CVR', '29522790') own_cvr = getattr(settings, 'OWN_CVR', '29522790')
# BMC har to CVR numre begge er VORES (køber), aldrig leverandør
own_cvr_rule = ( own_cvr_rule = (
f"4b. KRITISK - LEVERANDØR CVR: CVR {own_cvr} er VORES eget CVR (køberen/modtageren). " f"4b. KRITISK - LEVERANDØR vs. MODTAGER:\n"
f"Sæt ALDRIG vendor_cvr til {own_cvr}! Leverandørens CVR er CVR-nummeret der hører til " f" - På en dansk faktura er LEVERANDØREN (vendor) det firma der HAR SENDT fakturaen.\n"
f"firmaet som har SENDT fakturaen (ikke modtageren).\n" f" De kendes på: firmalogo øverst, bankkonto/IBAN/Gironr. nedad, ingen 'Faktureres til' label.\n"
f" - MODTAGEREN (os, buyer) kendes på: navnes under 'Faktureres til', 'Att.', 'Kundenr.', adresseblok med vores navn.\n"
f" - BMC DENMARK APS og alle varianter af 'BMC' er ALDRIG leverandøren det er os (modtageren).\n"
f" - CVR {own_cvr} er VORES eget CVR. Sæt ALDRIG vendor_cvr til {own_cvr}.\n"
f" - CVR 14416285 er også VORES CVR. Sæt ALDRIG vendor_cvr til 14416285.\n"
f" - Ignorer 'SE/CVR-nr.' der hører til modtager-blokken brug KUN afsenderens CVR som vendor_cvr.\n"
) )
return ("""Du er en ekspert i at læse og udtrække strukturerede data fra danske fakturaer, kreditnotaer og leverandørdokumenter. return ("""Du er en ekspert i at læse og udtrække strukturerede data fra danske fakturaer, kreditnotaer og leverandørdokumenter.