Backend: Kaufpreis aus Beleg-PDF schätzen

guess_price_cents zieht den Kaufpreis aus dem Belegtext: bevorzugt den Betrag
nach einem Summen-Stichwort (Gesamtbetrag/Total/…), sonst den groessten Betrag.
Versteht Tausendertrenner (1'299.00) und deutsches Format (1.299,00). Der
Upload liefert den Vorschlag als suggested_price_cents mit. 5 neue Tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-26 20:57:30 +02:00
parent 61270e6d00
commit ba65e48d47
4 changed files with 95 additions and 9 deletions

View File

@@ -31,7 +31,11 @@ from ..schemas import (
ItemUpdate,
)
from ..services.items import generate_uid, item_to_out
from ..services.warranty import extract_pdf_text, guess_warranty_until
from ..services.warranty import (
extract_pdf_text,
guess_price_cents,
guess_warranty_until,
)
router = APIRouter(tags=["items"])
@@ -240,19 +244,20 @@ async def upload_item_document(
db.commit()
db.refresh(doc)
# Garantieende nur aus PDFs schätzen (Bilder haben keine Textebene).
suggestion = None
# Garantieende und Preis nur aus PDFs schätzen (Bilder haben keine Textebene).
warranty = price = None
if content_type == "application/pdf":
suggestion = guess_warranty_until(
extract_pdf_text(data), acquired_on=item.acquired_on
)
text = extract_pdf_text(data)
warranty = guess_warranty_until(text, acquired_on=item.acquired_on)
price = guess_price_cents(text)
return ItemDocumentUploadOut(
id=doc.id,
filename=doc.filename,
content_type=doc.content_type,
uploaded_at=doc.uploaded_at,
suggested_warranty_until=suggestion,
suggested_warranty_until=warranty,
suggested_price_cents=price,
)