FixControl kan HR-vragen van medewerkers beantwoorden onder een rechtenmodel dat jij bepaalt. Het wordt niet je HR-chatbot, je HR-brongegevenssysteem, je documentenarchief of je operationele servicedesk. Het bepaalt wie mag vragen, waaruit die beantwoord mag worden, hoe gevoelig de vraag is, wie de zaak mag lezen, wie het antwoord moet goedkeuren, en wat er wordt vastgelegd.
Deze pagina is de blik van de beheerder. De blik van de medewerker staat op HR-vragen.
Aanzetten
HR-beantwoording staat uit. Bestaande projecten veranderen op geen enkele manier totdat je het aanzet.
- Open het project → de instellingenkaart HR-governance (ook via
GET/PUT /api/projects/<id>/hr/settings). Het projectrechtproject.settings.managebewaakt hem, net als andere projectinstellingen. - Zet Ingeschakeld aan. Alleen projecten die je expliciet aanzet kunnen HR-vragen verwerken.
- Stel de drempel voor direct antwoorden in — de zekerheid die een algemeen beleidsantwoord nodig heeft voordat het direct afgeleverd mag worden. Daaronder wordt de vraag een concept of een reviewzaak.
Een project dat niet aanstaat is voor het hele HR-pad onzichtbaar. Een vraag daartegen wordt niet geweigerd met uitleg over wat er bestaat — hij valt gewoon door naar de normale intakestroom, en er wordt niets over HR prijsgegeven.
Projectrollen en HR-rechten
HR-rechten zijn projectrechten. Ze hangen aan geen enkele tenantrol, dus tenantbeheerder, platformbeheerder of technisch beheerder zijn geeft je geen enkele HR-inhoudstoegang. Elke HR-actie vereist een actief lidmaatschap van het project.
Verdeel rechten via projectrollen. Dit zijn de rechten die ertoe doen:
| Recht | Wat het toestaat |
|---|---|
hr.case.create | Überhaupt een HR-vraag stellen. Medewerkers hebben dit nodig. |
hr.case.read_own | Eigen vragen, zaken en antwoorden lezen. |
hr.case.read_assigned | Zaken met normale gevoeligheid in de wachtrij lezen. |
hr.case.read_sensitive | Een afgeschermde zaak lezen — en alleen wanneer die expliciet is toegewezen. |
hr.case.respond | Aan een zaak werken: opstellen, reageren, een antwoord als onjuist melden binnen leesbare scope. |
hr.case.assign | Een zaak aan een behandelaar overdragen. Ziet afgeschermde zaken alleen als metagegevens. |
hr.case.approve | Beslissen over een goedkeuring van een antwoord. |
hr.case.escalate / hr.case.close | Een zaak escaleren of afsluiten. Bij een afgeschermde zaak alleen door de toegewezen behandelaar. |
hr.communication.draft / .approve / .send | Een antwoord opstellen, goedkeuren, afleveren. |
hr.employee.read_self / .read_limited / .read_sensitive | Hoeveel medewerkergegevens deze rol mag zien. |
hr.payroll.read / hr.medical.read_restricted | Loon- en medische inhoud, apart toe te kennen. |
hr.audit.read | De HR-audittrail lezen. |
Projectinstellingen en ledenbeheer (project.settings.manage, project.members.manage) zijn beheer, geen inhoud. Een projectbeheerder kan HR aanzetten en de bezetting regelen en ziet nog steeds geen zaak, antwoord, taak of auditregel.
Een uitgewerkte rollenset
De demotenant zet een rollenset klaar die de bedoelde scheiding laat zien. Neem de vorm over, niet de namen:
| Rol | Idee |
|---|---|
| Employee | Vragen stellen, eigen zaken lezen, eigen minimale gegevens zien. Verder niets. |
| HR Service Desk | De normale wachtrij, reacties, beperkte medewerkergegevens. Geen gevoelige zaken, niet goedkeuren, niet toewijzen. |
| HR Advisor | Toegewezen gevoelig werk, toewijzen, goedkeuren, escaleren, afsluiten, afleveren, de audittrail lezen. |
| Payroll | Toegewezen werk plus loongegevens. Bewust geen toegang tot gevoelige zaken. |
| Confidential Advisor | Uitsluitend expliciet toegewezen gevoelig werk — bewust zonder hr.case.read_assigned, zodat deze rol de algemene wachtrij nooit ziet. |
| Project Administrator | Instellingen en lidmaatschappen. Geen HR-inhoud. |
| Technical Administrator | Technische project- en koppelingsgegevens. Geen HR-inhoud. |
Zet vanaf dag één een tweede behandelaar met goedkeuringsrecht klaar. Vier-ogen betekent dat één goedkeurder zichzelf blokkeert.
Gevoeligheidsniveaus en de brug via toewijzing
Elke vraag draagt een van drie niveaus: NORMAL, SENSITIVE, HIGHLY_RESTRICTED. Medische of verzuim-, juridische of compliance-, en vertrouwelijke arbeidsrelatie-inhoud volgt een beperkte route. Classificatie gebeurt eerst op vaste regels; een AI-voorstel mag het niveau verhogen of een reviewvereiste toevoegen, en kan beide nooit verlagen.
Het niveau bepaalt wie de zaak mag lezen, en toewijzing is de brug tussen het bestaan van een zaak en het recht om eraan te werken:
- Wie
hr.case.assignheeft, ziet een afgeschermde zaak alleen als metagegevens — status, gevoeligheid, route. De samenvatting is voor hem niet leesbaar. - Hij mag de zaak alleen overdragen aan een actief projectlid met een rol die het recht draagt dat bij die gevoeligheid hoort:
hr.case.read_assignedbij een normale zaak,hr.case.read_sensitivebij een afgeschermde. Je kunt een vertrouwelijke zaak niet toewijzen aan iemand die hem daarna zou mogen lezen omdát jij hem toewees. - Toewijzen brengt nieuw of wachtend werk naar getrieerd, verhoogt de zaakversie, en wordt vastgelegd.
- Een afgeschermde zaak afsluiten of escaleren vereist bovendien dat je de toegewezen behandelaar bent — het recht alleen is niet genoeg.
Zaken met normale gevoeligheid kunnen worden gespiegeld naar een servicedesk op de toegestane lijst, en dan alleen als een gemaskeerde titel plus een classificatielabel — nooit de vraagtekst. Afgeschermde zaken worden nooit gespiegeld.
Vier-ogen-goedkeuring, verval en aflevering
Een goedkeuring is een momentopname: de antwoordtekst en -versie, de ontvanger, de zaak, de gebruikte bronversies, het beleidsbesluit, de classificatie en een inhoudshash.
- Vier-ogen wordt op het chokepoint afgedwongen. Wie een goedkeuring aanvroeg, kan er nooit over beslissen. Er is geen instelling die dit versoepelt.
- Een gewijzigd antwoord maakt de goedkeuring ongeldig. Het besluit wordt vergeleken met de actuele hash en versie.
- Goedkeuringen vervallen na 72 uur, op de server. Clients kunnen dat venster niet kiezen of verlengen.
- Afleveren verbruikt de goedkeuring in één voorwaardelijke stap, zodat dubbelklikken of een herhaald verzoek niet twee keer aflevert. Daarna wordt het antwoord als afgeleverd gemarkeerd.
- Een herhaald besluit is idempotent, dus een nieuwe poging is een status, geen tweede besluit.
Antwoorden over iemands eigen situatie zijn per beleid concept of review. Alleen een actuele, gezaghebbende, niet-tegenstrijdige algemene of procedurele bron boven jouw zekerheidsdrempel kan direct worden afgeleverd. Ontbrekende, verlopen of tegenstrijdige bronnen, een onbereikbare koppeling, lage zekerheid en een onduidelijke bedoeling gaan elk naar een mens in plaats van naar een gok — die routering wordt met een redencode vastgelegd.
Correctie en intrekking
De vragensteller, en HR-medewerkers binnen de scope die ze toch al mogen lezen, kunnen een antwoord als onjuist markeren. Het antwoord gaat in review, de originele rij blijft bewaard, en er ontstaat een correctie plus reviewtaak.
- Een correctie publiceren maakt een nieuwe versie, markeert de oude als vervangen, legt de herkomst vast en sluit de taak. Het overschrijft het origineel nooit.
- Intrekken is de route zonder veilige vervanging: het origineel blijft bewaard en wordt als ingetrokken gemarkeerd, en de correctie sluit als ingetrokken.
AFAS Profit en Visma Raet Youforce koppelen
Beide koppelingen zijn alleen-lezen. Ze lezen een kleine, benoemde set velden en schrijven niets terug naar je HR-systeem.
Activeren gebeurt aan twee kanten. Inloggegevens maken een koppeling beschikbaar voor de tenant; het project moet die koppeling daarnaast als actief opvoeren voordat FixControl hem gebruikt. Een tenant zonder configuratie heeft die koppeling eenvoudigweg niet — dat geeft geen foutmelding, en geen project kan per ongeluk gaan lezen uit een systeem dat niemand heeft ingericht.
Inloggegevens staan per tenant. De voorkeursbron is de eigen koppelingsinvoer van de tenant (type afas of youforce), waarvan het token versleuteld wordt opgeslagen. Centrale platforminstellingen blijven als terugvaloptie bestaan voor omgevingen die al waren ingericht voordat opslag per tenant bestond. Een half ingevulde invoer — een token zonder basis-URL, of een secret zonder client-id — wordt genegeerd in plaats van samengevoegd met centrale waarden, zodat de inloggegevens van de ene omgeving nooit aan de host van een andere omgeving gekoppeld raken.
| Systeem | Wat het nodig heeft |
|---|---|
| AFAS Profit | Een app-connector-token en je ProfitRestServices-URL, plus drie GetConnector-overzichten die je in AFAS definieert met voorgeschreven veld-id's (medewerker, verlof, loon). |
| Visma Raet Youforce | Een OAuth2 client-id en secret, het token-endpoint, de basis-URL van de domein-API, en drie endpoint-sjablonen. Sjablonen moeten op dezelfde host als de basis-URL blijven, via https — een vreemde host of een niet-ingevulde plaatshouder wordt geweigerd voordat er ook maar één verzoek uitgaat. |
De veld-id's zijn voorgeschreven, nooit geraden: medewerker-id, e-mail, dienstverbandpercentage, dienstverbandsoort, cao; resterende verlofuren met peildatum; een looncode met peildatum. Heet een veld in jouw systeem anders, map het dan in je eigen overzicht of API-gateway. Elke aanroep filtert op één persoon en projecteert het antwoord op die vaste vorm, zodat het verbreden van een overzicht aan jouw kant geen extra persoonsgegevens in een antwoord kan laten lekken.
Falen gebeurt eerlijk. Een ontbrekend record, een onleesbare waarde, een onverwachte antwoordvorm of een onbereikbaar endpoint sturen de vraag alle naar een mens en leggen een redencode vast. Er wordt geen getal verzonnen, en een verlofsaldo wordt nooit op nul gezet. Foutmeldingen dragen een vaste code en hooguit een HTTP-status — nooit een token, een URL, een responsbody of een e-mailadres.
Gezondheid is zichtbaar voordat een medewerker erop stuit. Beide koppelingen draaien een periodieke verbindingscontrole — bij AFAS een gefilterde leesactie die op geen enkele medewerker kan matchen, bij Youforce een geforceerde tokenvernieuwing — zodat een ingetrokken token of geroteerd secret opduikt als een falende controle, een auditgebeurtenis en een beheerdersmelding in plaats van als een mislukt antwoord. Alleen de verbinding wordt gecontroleerd; één ontbrekend medewerkerrecord is een datasituatie, geen kapotte koppeling, en kleurt de koppeling niet voor iedereen rood.
Wat de AI wel en niet mag
Het model krijgt alleen de vraagtekst, om een classificatie voor te stellen, en die aanroep loopt buiten de tenanttransactie om. Dossiergegevens, opgehaalde documenten en antwoordteksten gaan nooit naar een model; de antwoorden zelf worden opgesteld uit sjablonen en bronnen die de server heeft gekozen.
Het model heeft geen databasetoegang en geen vrij HTTP-gereedschap. Het kan geen identiteit vaststellen, geen lidmaatschap verlenen, geen classificatie verlagen, geen bron-id's kiezen, geen koppeling benaderen, het beleid niet evalueren, en niet goedkeuren of afleveren. Bronverwijzingen bij een antwoord komen uitsluitend uit rijen die de server heeft geselecteerd, dus een door het model aangeleverd bron-id wordt nooit vertrouwd. Valt de aanbieder weg, dan wordt de regelgebaseerde route gebruikt en loopt de vraag gewoon door.
Audit en privacy
HR-auditgebeurtenissen leggen de tenant- en projectscope vast, kenmerken van de aggregaten, classificaties, bron-id's en -versies, het beleidsbesluit met redencode, en een correlatie-id. Ze bevatten bewust niet de vraagtekst, medische inhoud, zaaksamenvattingen, medewerkerverwijzingen of antwoordteksten — die inhoud blijft in de HR-tabellen onder fail-closed row-level security.
Operationele metrieken gebruiken uitsluitend begrensde waarden (vraagsoort, besluit, of er een conflict of storing was, duur). Ze dragen geen labels voor gebruiker, medewerker, tenant, project, zaak of koppeling.
Terugdraaien
Zet eerst de projectinstelling uit, laat het lopende reviewwerk leeglopen, en exporteer de governanceverwijzingen die je nodig hebt voordat je de HR-tabellen verwijdert. Het verwijderen van de koppelingsinvoeren per tenant kost je de inloggegevens per tenant, niet de mogelijkheid — de koppelingen vallen dan terug op de centrale instellingen.
Bekende grenzen om rekening mee te houden
- De governanceteksten die een medewerker ziet (de statusregel, het antwoord, een verduidelijkende vraag) zijn vandaag alleen Nederlands. Dat geldt ook voor de chatbot-API, die Nederlandse governancetekst teruggeeft ongeacht de gevraagde taal. De omringende teksten van de chatkoppelingen zelf zijn EN en NL.
- Er is nog geen instelpagina voor de koppeling met AFAS of Youforce. Invoeren worden aangemaakt via de generieke infrastructuur-API, en er is voor deze twee geen kaart onder Instellingen → Integraties.
- Een geroteerde inloggegeven wordt opgepikt bij de volgende opbouw van de koppeling. Bij Youforce blijft een gecachet toegangstoken geldig voor de rest van zijn looptijd als je alleen het secret roteert, omdat de cache op token-URL en client-id is gesleuteld.
- Goedkeurings- en toewijzingsacties staan op het HR-board; meldingstermijnen voor behandelaarsteams bovenop de toewijzingslevenscyclus zijn niet gebouwd.
- Bewaar- en verwijdertaken voor afgeschermde HR-rijen zijn niet gebouwd — plan die onder je eigen privacyschema.
Verwante pagina's
- HR-vragen — de blik van de medewerker.
- Governance & beleid — de organisatiebrede beleidsmotor.
- Gebruikers & rollen — lidmaatschappen en projectrollen.