From 95351a0cf8805422afe2f941eb15003afb97d293 Mon Sep 17 00:00:00 2001 From: Druppie Agent Date: Wed, 10 Jun 2026 14:41:32 +0000 Subject: [PATCH] Technisch ontwerp vergunningzoeker met Druppie SDK --- docs/technical-design.md | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/technical-design.md diff --git a/docs/technical-design.md b/docs/technical-design.md new file mode 100644 index 0000000..2fd4707 --- /dev/null +++ b/docs/technical-design.md @@ -0,0 +1,63 @@ +# Technisch Ontwerp: Vergunningzoeker + +## Stack +- Backend: Python Flask (project template) +- Frontend: React met Vite +- Database: PostgreSQL +- AI: Druppie platform modules via SDK + +## Druppie Modules +De app gebruikt de Druppie SDK (`druppie_sdk`) om platformmodules aan te roepen. +Geen directe API-keys of externe provider-calls in de app. + +| Module | Tool | Gebruik | +|--------|------|---------| +| vision | ocr | Tekst extraheren uit gescande vergunningdocumenten (PDF/afbeelding) | +| llm | chat | Classificatie van vergunningtype op basis van geëxtraheerde tekst | + +Gebruik: +```python +from druppie_sdk import DruppieClient +druppie = DruppieClient() + +# OCR op geüpload document +ocr_result = druppie.call("vision", "ocr", {"image_source": image_url}) +extracted_text = ocr_result["text"] + +# Classificatie van vergunningtype +classify_result = druppie.call("llm", "chat", { + "prompt": f"Classificeer dit vergunningdocument...\n\n{extracted_text}", + "system": "Je bent een specialist in watervergunningen." +}) +``` + +## Componenten +- UploadHandler: verwerkt document uploads, slaat op in DB +- OCRProcessor: roept druppie vision/ocr aan voor tekstextractie +- Classifier: roept druppie llm/chat aan voor classificatie +- PermitStore: PostgreSQL repository voor vergunningmetadata +- SearchHandler: zoekt in opgeslagen metadata + +## Datamodel +``` +Permit: + id: UUID (PK) + permit_number: String + applicant_name: String + permit_type: String (geclassificeerd door LLM) + extracted_text: Text (OCR output) + source_file: String (bestandsnaam) + upload_date: DateTime + created_at: DateTime +``` + +## API Endpoints +- POST /api/permits/upload — upload document, start OCR + classificatie +- GET /api/permits — lijst van alle vergunningen met metadata +- GET /api/permits/:id — details van een vergunning +- GET /api/permits/search?q=term — zoek in metadata + +## Belangrijk +- GEEN hardcoded API keys in de app +- GEEN openai package — gebruik druppie_sdk +- DRUPPIE_URL wordt automatisch geïnjecteerd bij deploy