Versie document: 1.0.0
Datum: 2026-05-13
Dit document beschrijft de actuele, werkende declaratieflow met Double Commander, Synology/MailPlus, Cloudflare DNS en Brevo SMTP relay.
De losse knoppen blijven beschikbaar voor herstel en troubleshooting. De normale ingang is de hoofdknop Declaraties maandrun wizard.
/Volumes/ExtraData/Projecten/declaraties
Belangrijke mappen:
Inbox/ bronbestanden / bonnetjes
Declaratie/ actuele build-output PDF/XLSX
Archive/ gearchiveerde maandruns
config/ configuratie en .env
Tools/ Python-tools
Docs/ documentatie/checklists
logs/ review/corrections/logoutput
/Volumes/ExtraData/Projecten/double_commander
Belangrijke mappen:
scripts/declaraties/ DC shell wrappers/dialogs
icons/ toolbar- en dialogiconen
logs/ wrapper/dialog logs
Normale hoofdingang.
Command:
/Volumes/ExtraData/Projecten/double_commander/scripts/declaraties/declaraties_month_run_dialog_launcher.sh
Icon:
/Volumes/ExtraData/Projecten/double_commander/icons/declaraties_monthrun_toolbar_48.png
Doel:
Wizard/indexknop waarmee je de juiste stap in de maandrun kiest.
Maakt parserreview en review-XLSX.
Maakt corrections JSONL op basis van ingevulde review-XLSX.
Maakt declaratie-XLSX en PDF.
Archiveert de batch met originals, metadata, report en manifest.
Bereidt ZIP/mailbijlagen voor en kan optioneel echt verzenden.
Veilige standaard:
E-mail daadwerkelijk versturen = uit
send_mail_synology.py 1.3.2
declaraties_prepare_zip.sh 1.2.2
declaraties_prepare_zip_dialog.sh 1.2.3
declaraties_month_run.sh 1.0.0
declaraties_month_run_dialog.sh 1.0.0
archive_declaraties.py 1.3.0
build_declaratie.py 1.2.0
smoke_parse.py 1.6.0
Controlecommando:
grep -n "SCRIPT_VERSION" /Volumes/ExtraData/Projecten/double_commander/scripts/declaraties/*.sh
grep -n "SCRIPT_VERSION" /Volumes/ExtraData/Projecten/declaraties/Tools/send_mail_synology.py
Hoofdconfig:
/Volumes/ExtraData/Projecten/declaraties/config/declaraties.yml
Secrets:
/Volumes/ExtraData/Projecten/declaraties/config/.env
Rechten voor .env:
chmod 600 /Volumes/ExtraData/Projecten/declaraties/config/.env
De .env bevat lokaal:
BREVO_SMTP_KEY='...'
Deze key nooit uploaden of delen.
De mailflow gebruikt Brevo als SMTP relay.
synology_smtp:
host: 'smtp-relay.brevo.com'
port: 587
use_starttls: true
use_ssl: false
username: 'ab1bdf001@smtp-brevo.com'
password_env: 'BREVO_SMTP_KEY'
from_email: 'declaraties@arp-ict.nl'
from_name: '<aangepaste nette naam>'
send:
mode: smtp
to: ['danny.arp@hcs-company.com']
cc: ['d.arpie@gmail.com']
bcc: []
reply_to: ['danny.arp@hcs-company.com']
report_attachment: 'pdf'
Pas omzetten na de eerste echte declaratieset:
send:
to: ['declaraties@hcs-company.com', 'peter.vader@hcs-company.com']
cc: ['danny.arp@hcs-company.com']
Cloudflare is de actieve DNS-zone voor arp-ict.nl.
Werkende records:
A mail.arp-ict.nl 149.143.105.80 DNS only
MX arp-ict.nl mail.arp-ict.nl priority 10
TXT arp-ict.nl v=spf1 mx -all
TXT _dmarc.arp-ict.nl v=DMARC1; p=none; adkim=s; aspf=s; rua=mailto:declaraties@arp-ict.nl
TXT mail._domainkey.arp-ict.nl Synology DKIM public key
TXT arp-ict.nl brevo-code:...
CNAME brevo1._domainkey b1.arp-ict-nl.dkim.brevo.com
CNAME brevo2._domainkey b2.arp-ict-nl.dkim.brevo.com
Controle:
dig @1.1.1.1 A mail.arp-ict.nl +short
dig @1.1.1.1 MX arp-ict.nl +short
dig @1.1.1.1 TXT arp-ict.nl +short
dig @1.1.1.1 TXT _dmarc.arp-ict.nl +short
dig @1.1.1.1 CNAME brevo1._domainkey.arp-ict.nl +short
dig @1.1.1.1 CNAME brevo2._domainkey.arp-ict.nl +short
Bewezen resultaat:
SPF: PASS
DKIM: PASS
DMARC: PASS
HCS/Microsoft accepteert Brevo-mail met:
compauth=pass
SCL: 1
dest:I
Gebruik normaal de knop:
Declaraties maandrun wizard
Daarmee doorloop je veilig de stappen.
Zet alle bonnen/PDF’s/JPG’s in:
/Volumes/ExtraData/Projecten/declaraties/Inbox
Via wizard of losse Review-knop.
Controleer de review-XLSX in:
/Volumes/ExtraData/Projecten/declaraties/logs
Vul review-XLSX in en maak corrections JSONL.
Maakt:
Declaratie/declaratie_YYYY-MM-DD.xlsx
Declaratie/declaratie_YYYY-MM-DD.pdf
PDF-export staat aan:
export_pdf_on_build: true
Archiveer de batch.
Output:
Archive/YYYY-MM_Declaraties[-NN]/
originals/
metadata/
derived/
report/
manifest.jsonl
Gebruik de mailknop.
Kies rapportbijlage:
Alleen PDF
Alleen XLSX
PDF + XLSX
Default:
Alleen PDF
Veilige standaard:
E-mail daadwerkelijk versturen = uit
De dialog toont:
Status
Onderwerp
Naar
CC
Bijlagen
ZIP-pad
Archiefpad
Mail-log
Wrapper-log
Zet pas aan als alles klopt:
E-mail daadwerkelijk versturen = aan
Elke prepare/send-actie wordt gelogd in:
Archive/<batch>/mail_log.jsonl
Voorbeeld bekijken:
cat /Volumes/ExtraData/Projecten/declaraties/Archive/2026-05_Declaraties-03/mail_log.jsonl
Laatste actie:
tail -1 /Volumes/ExtraData/Projecten/declaraties/Archive/2026-05_Declaraties-03/mail_log.jsonl | jq .
JSONL is gekozen omdat het geschikt is voor append-only logs: elke actie is één JSON-regel.
cd /Volumes/ExtraData/Projecten/declaraties
source .venv/bin/activate
python config/smoke_parse.py
python Tools/build_declaratie.py --corrections logs/<review>.corrections.jsonl
python Tools/archive_declaraties.py --dry-run --corrections logs/<review>.corrections.jsonl
python Tools/archive_declaraties.py --corrections logs/<review>.corrections.jsonl
python Tools/send_mail_synology.py \
--archive "/Volumes/ExtraData/Projecten/declaraties/Archive/<batch>" \
--prepare-only \
--force-zip \
--report-attachment pdf
python Tools/send_mail_synology.py \
--archive "/Volumes/ExtraData/Projecten/declaraties/Archive/<batch>" \
--force-zip \
--report-attachment pdf
--report-attachment pdf
--report-attachment xlsx
--report-attachment both
Controleer:
grep -nA12 "synology_smtp:" config/declaraties.yml
grep -nA10 "^send:" config/declaraties.yml
ls -l config/.env
grep -n "BREVO_SMTP_KEY" config/.env
Controleer:
ls -lh Archive/<batch>/*.zip
find Archive/<batch> -maxdepth 2 -type f | sort
Waarschijnlijk is archive gemaakt vóór PDF-export aan stond.
Controleer:
grep -n "export_pdf_on_build" config/declaraties.yml
find Archive/<batch>/report -type f | sort
Controleer in Brevo:
Transactional → Logs
Controleer in HCS/Microsoft headers:
spf=pass
dkim=pass
dmarc=pass
compauth=pass
Direct verzenden vanaf de NAS is niet geschikt, omdat het publieke IP op Spamhaus PBL stond. Daarom wordt Brevo relay gebruikt.
1. Productie-ontvangers pas omzetten na eerste echte declaratieset.
2. Eventueel mail_log uitbreiden met Brevo message-id als Brevo dat later exposeert.
3. Eventueel maandrun-wizard slimmer maken met automatische statusdetectie per stap.
4. Eventueel oude losse README’s opschonen/samenvoegen.
Dit is het huidige stabiele eindplaatje:
Double Commander wizard + losse knoppen
Parser/review/corrections/build/archive werkend
PDF-export werkend
ZIP-bijlage werkend
Brevo SMTP relay werkend
HCS delivery bewezen
Gmail CC bewezen
Mail-log per archive werkend
Veilige send-toggle in dialog