vergunningzoeker-6d29fc0a/docs/technical-design.md

2.0 KiB

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:

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