3.3 KiB
3.3 KiB
Dataflows en invarianten
Flow A — Publieke vacaturepagina
- Scheduler selecteert alleen
allow+active/trial+ due. - Fetcher controleert policy, URL, DNS/IP, poort en iedere redirect.
- Response wordt begrensd op type/grootte en als
RawDocumentmet korte retentie opgeslagen. - Registry kiest RSS wanneer XML/feed, anders JSON-LD en daarna generieke HTML.
ExtractedJobwordt gesanitized en genormaliseerd.- Dedupe zoekt external ID, canonieke URL, canonieke key en conservatieve fuzzy kandidaat.
- Pipeline schrijft werkgever, vacature, alias, provenance en versie.
- Alle actieve profielen krijgen een nieuwe
ScoreRun. - SourceRun registreert metrics en plant volgende run.
Invarianten:
- geen fetch zonder policy + URL-validatie;
- één canonieke vacature per canonical key;
- originele bronURL blijft als alias bewaard;
- HTML in de UI is gesanitized;
- verwerking van dezelfde broninhoud is idempotent.
Flow B — Vacaturemail
- IMAP-task haalt maximaal een begrensd aantal berichten op.
message_identitygebruikt RFC Message-ID of SHA-256 fallback.- Bestaand record stopt dubbele verwerking.
- Raw mail wordt tijdelijk opgeslagen.
- E-mailadapter extraheert alleen HTTP(S)-links en slaat unsubscribe/privacylinks over.
- Iedere link wordt als vacaturedraft verwerkt; denylistlink wordt niet automatisch gefetcht.
- Record bewaart linklijst, processedstatus en begrensde foutmelding.
Invarianten:
- mailboxpassword staat alleen in environment/secrets;
- geen attachmentverwerking in MVP;
- e-mailtekst is data, geen AI-/agentinstructie;
- duplicate Message-ID maakt geen extra vacaturesnapshot.
Flow C — Feedback en sollicitatie
- Authenticated user POST met CSRF.
- Actie wordt tegen enum gevalideerd.
Feedbackis append-only.appliedmaakt atomair éénApplicationper user/job.- Dossier krijgt vacaturesnapshot en standaard opvolgdatum.
- Externe verzending bestaat niet.
Invarianten:
- user-scoped querysets voor dossierwijziging;
- één dossier per user/job;
- undo/verbergen is traceerbaar;
- feedbackleren mag uitsluitend begrensde soft weights wijzigen.
Flow D — Dagelijkse digest
- Scheduler evalueert actieve profielen in hun tijdzone.
- Alleen binnen het 30-minutenvak rond digesttijd wordt een outbox gemaakt.
- Dedupe key is profiel + lokale datum.
- Selectie neemt laatste sterke/mogelijke score per actieve vacature, verborgen jobs uitgesloten.
- Template rendert tekst en HTML.
- Bij succes status
sent; bij foutfailedmet begrensde foutcontext.
Invarianten:
- maximaal één outbox per profiel/dag;
- een reeds verzonden outbox wordt niet opnieuw verzonden;
- geen recipient betekent
skipped, geen crash; - digest bevat nooit raw HTML van vacaturebron.
Dataretentie
| Data | Standaard | Reden |
|---|---|---|
| Raw publieke documenten | 7 dagen | parserdebug en provenance |
| Raw vacaturemail | 7 dagen | idempotentie/debug; daarna verwijderen |
| Canonieke vacature | totdat verwijderd/retentiebeleid | gebruikerswaarde en historie |
| JobVersion | blijvend tenzij gebruiker wist | wijzigingsaudit |
| ScoreRun | configureerbaar, initieel blijvend | uitlegbaarheid/modelvergelijking |
| Feedback/Application | totdat gebruiker wist | persoonlijke opvolging |
| Logs | operationeel begrensd/geroteerd | foutdiagnose zonder inhoud/secrets |