Geen omschrijving
- Python 65.7%
- HTML 31.7%
- Shell 1.9%
- JavaScript 0.4%
- Dockerfile 0.2%
- Andere 0.1%
- DMS_VERSION in settings (env-overridebaar), getoond in de sidebar-footer via een 'versie'-context processor. - CHANGELOG.md met de volledige 1.0-inhoud (basis voor de acceptatie). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| backend | ||
| caddy | ||
| deploy | ||
| docs | ||
| .env.example | ||
| .gitignore | ||
| CHANGELOG.md | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| README.md | ||
DMS — Document Management System
Klant-gebaseerd Document Management System voor een NL administratie-/belastingadvieskantoor: versleutelde opslag, OCR + full-text search, AI-classificatie en -chat, WebDAV/drive-mount, Office Online (Collabora), M365-SSO, en koppelingen met Nextens en Scaleway-backup. Active-passive HA over twee datacenters.
Documentatie
- docs/architectuur.md — volledige technische architectuur.
- docs/handleiding.md — uitgebreide gebruikers- & beheerdershandleiding.
- docs/ha-architecture.md — High Availability (opzet + failover-draaiboek).
- docs/disaster-recovery.md — DR-plan & draaiboek (scenario's, RPO/RTO, sleutel-escrow, restore-tests).
- Verder in docs/: backup & herstel, Entra ID/SSO, Coolify-deploy, WireGuard, Office/WebDAV-mount; en deploy/*/README.md voor de Collabora-/HA-/backup-containers.
Stack
| Laag | Tech |
|---|---|
| Backend + admin | Django 5 + Django REST Framework |
| End-user UI | Django templates + HTMX + Alpine.js + Tailwind CSS |
| WebDAV | wsgidav (eigen container) |
| Database | PostgreSQL 16 |
| Search | Elasticsearch 8 |
| File storage | MinIO (S3-compatible) |
| Workers | Celery + Redis |
| OCR | Tesseract (NL + EN) + Poppler |
| AI | Mistral AI (Frankrijk, GDPR) — classificatie, RAG-chat, anomalieën |
| Auth | Microsoft 365 / Entra ID via OIDC + lokaal met TOTP-MFA |
| Office bewerken | Collabora Online (WOPI) |
| Fiscale koppeling | Nextens Synchronization API v2 |
| Reverse proxy / deploy | Traefik via Coolify (auto Let's Encrypt) |
| Off-site backup / HA | Scaleway (EU) · Postgres+MinIO-replicatie, WireGuard |
Local quickstart
# 1. Kopieer env template en pas aan
cp .env.example .env
# → genereer een echte DJANGO_SECRET_KEY (50+ chars random)
# → pas POSTGRES_PASSWORD en MINIO_ROOT_PASSWORD aan
# → vul OVERHEID_IO_API_KEY in (overheid.io abonnement)
# 2. Build + start de hele stack
docker compose up -d --build
# 3. Run database-migraties en maak een superuser
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py createsuperuser
# 4. Optioneel: seed default folder template
docker compose exec backend python manage.py seed_default_template
Open:
- App / admin login: http://localhost
- Django admin: http://localhost/admin
- MinIO console: http://localhost:9001 (login met
MINIO_ROOT_USER/MINIO_ROOT_PASSWORD) - Elasticsearch: http://localhost:9200
- WebDAV (direct, voor testing): http://localhost:8001
In Windows Verkenner mappen als drive (na Sprint 3):
- Map Network Drive →
http://webdav.localhost:8001(lokaal) ofhttps://webdav.testdms.memoriaal.com(prod)
Project structuur
DMSApp/
├── docker-compose.yml # alle services
├── .env.example # config template
├── caddy/ # reverse proxy
│ ├── Caddyfile.dev
│ └── Caddyfile.prod
├── backend/ # Django project
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── manage.py
│ ├── dms/ # project settings + celery
│ ├── accounts/ # custom user + M365 OIDC
│ ├── klanten/ # klant + folder-template engine
│ ├── documenten/ # documenten + metadata + versies
│ ├── permissies/ # rol × groep × klant matrix
│ ├── audit/ # append-only audit log
│ └── core/ # gedeelde utils (overheid.io, MinIO helpers)
├── webdav/ # wsgidav (Windows drive letter)
│ ├── Dockerfile
│ ├── requirements.txt
│ └── server.py
└── docs/ # architectuur & beslis-documenten
Fasering
| Fase | Inhoud |
|---|---|
| Fase 1 (huidige) | Klant CRUD met overheid.io, folder-template editor, M365 SSO + MFA, rol × groep permissies, WebDAV, web upload, Tesseract OCR, full-text search, audit log, versie-historie, off-site backup. |
| Fase 2 | Email-to-inbox intake, Mistral AI classificatie/extractie, scanner drop folder, retentie-policies actief, legal hold UI. |
| Fase 3 | Sync met boekhoudpakket, Outlook plugin, templates per klant-type, externe API. |
Compliance basis (vanaf Fase 1)
- Immutable audit log (append-only, alle acties)
- Soft-delete model (geen hard delete)
- MFA verplicht via M365
- EU-only AI (Mistral cloud, geen US-providers voor document content)
- Off-site EU backup (versleuteld nightly)
Productie deploy (preview)
Productie target: testdms.memoriaal.com + webdav.testdms.memoriaal.com op een EU VPS (Hetzner/Leaseweb). Caddy regelt auto-HTTPS via Let's Encrypt. Details in docs/deployment.md (volgt in Sprint 6).