Inleiding
In Odoo bepaalt een model hoe zakelijke gegevens gestructureerd en bewaard worden in de database. Alles wat met je bedrijfsvoering te maken heeft — van offertes en facturen tot personeelsgegevens — leeft in een model dat bepaalt welke informatie bewaard wordt en hoe die met andere gegevens verbonden is.
Kennis van Odoo-modellen is cruciaal voor zowel ontwikkelaars als functionele consultants. Modellen vormen de ruggengraat van de gegevensarchitectuur: ze leggen velden vast, beschrijven relaties en kapselen bedrijfsregels in die op consistente wijze door het systeem worden toegepast.
Dit artikel zoomt in op een kernmodel binnen de HR-module: hr.employee. Of je nu HR-processen wil automatiseren, loonstrookintegraties bouwt of aanwezigheidsregistratie configureert, dit model komt altijd terug als centrale bron van personeelsinformatie.
Wat is het hr.employee-model
Het hr.employee-model staat voor de digitale fiche van een medewerker in Odoo. Alle relevante persoonsgegevens, organisatorische koppelingen en verwijzingen naar contracten of planning worden hier samengehouden.
Het model maakt deel uit van de HR-app en wordt door meerdere functies gebruikt: van aanwezigheidsregistratie en verlofbeheer tot contracten, payroll en timesheets. Daardoor vormt het een gedeelde dataset voor veel bedrijfsfuncties.
Het model wordt geïnstalleerd bij activering van de Employees-app en kan door andere modules uitgebreid worden via Odoo-inheritance. Module hr_contract voegt contractgerelateerde velden toe; hr_attendance voegt check-in/-out-logica toe; hr_leave verzorgt alles rond verlof. Zo breiden modules functionaliteit uit zonder de kernstructuur te dupliceren.
Odoo voorziet ook in een afgeschermde weergave: hr.employee.public. Dat is een gelimiteerde interface op dezelfde gegevens, bedoeld voor gebruikers met beperkte zichtbaarheid — een voorbeeld van hoe model-niveaus en erven worden ingezet om toegang te reguleren.
Belangrijke velden in het model
Hieronder vind je de belangrijkste velden van hr.employee. Als je deze kent, kun je werknemersrecords correct beheren en inschatten welke velden invloed hebben op processen zoals verlof, payroll en planning.
1. name
Type: Char. Bewaart de naam van de medewerker. Dit veld verschijnt vaak in lijsten en formulieren en fungeert als primaire herkenning van het record.
2. create_date
Type: Datetime. Registratie van wanneer het record is aangemaakt. Wordt automatisch beheerd en is nuttig voor auditlogs en rapportage.
3. write_date
Type: Datetime. Tijdstip van de laatste wijziging. Automatisch bijgehouden en helpt om wijzigingen en updates te traceren.
4. active
Type: Boolean. Soft-delete vlag. Staat op False wanneer een medewerker gearchiveerd is — zo verdwijnt die uit standaardlijsten zonder definitief te verwijderen.
5. company_id
Type: Many2one (res.company). Geeft bij multi-company aan bij welke vennootschap de medewerker hoort. Dit is belangrijk voor bedrijfsafhankelijke regels en documenten.
6. user_id
Type: Many2one (res.users). Verbindt de medewerker met een Odoo-gebruiker. Alleen ingesteld wanneer iemand moet kunnen inloggen — belangrijk voor timesheets, goedkeuringen of portaltoegang.
7. work_email
Type: Char. Werkmailadres. Wordt gebruikt voor interne notificaties en communicatie.
8. work_phone
Type: Char. Werktelefoon. Verschijnt in medewerkersformulieren en contactworkflows.
9. mobile_phone
Type: Char. Mobiel nummer voor werk. Handig voor dringende meldingen of sms-notificaties.
10. department_id
Type: Many2one (hr.department). De afdeling waartoe de medewerker behoort. Relevant voor organigrammen, rapporten en goedkeuringsregels.
11. job_id
Type: Many2one (hr.job). Verwijst naar de functietitel binnen hr.job, nuttig om rollen en openstaande vacatures te koppelen.
12. job_title
Type: Char. Vrij tekstveld voor functietitel. Wordt gebruikt wanneer er geen formele job_id ingesteld is of voor aangepaste titels.
13. parent_id
Type: Many2one (hr.employee). Geeft de hiërarchische leidinggevende aan. Wordt gebruikt voor goedkeuringsketens en het organigram.
14. coach_id
Type: Many2one (hr.employee). Aangeeft wie de coach of mentor is. Dit veld ondersteunt performance- en ontwikkelingsprocessen; de coach krijgt standaard geen extra rechten.
15. resource_id
Type: Many2one (resource.resource). Koppeling naar het resource-model voor planning en capaciteitsbeheer; belangrijk voor agendabeheer en projectplanning.
16. work_contact_id
Type: Many2one (res.partner). Het zakelijke contactrecord dat gebruikt wordt voor documenten en werkgerelateerde correspondentie.
17. address_id
Type: Many2one (res.partner). Werkadres gekoppeld aan een res.partner-record voor locatiegebonden processen.
18. address_home_id
Type: Many2one (res.partner). Privéadres van de medewerker — vaak relevant voor loonadministratie en noodgevallen.
19. resource_calendar_id
Type: Many2one (resource.calendar). Werkschema dat uren en werkdagen definieert; essentieel voor aanwezigheid, verloftelling en planning.
20. employee_type
Type: Selection. Type medewerker: medewerker, freelancer of stagiair. Verplicht en beïnvloedt hoe contracten en historiek worden behandeld.
21. barcode
Type: Char. Badge-ID voor aanwezigheidssystemen of andere barcode-scanninguse-cases.
22. pin
Type: Char. Persoonlijke code voor kiosk-modus in de Attendance-app of voor POS-cashierwissels.
23. birthday
Type: Date. Geboortedatum voor HR-registratie en optionele verjaardagsherinneringen.
24. identification_id
Type: Char. Nationaliteits- of rijksregisternummer voor HR- en payrollconformiteit.
25. passport_id
Type: Char. Paspoortnummer voor reis- en verblijfsvergunningbeheer.
26. bank_account_id
Type: Many2one (res.partner.bank). Bankrekening voor salarisbetalingen.
27. private_email
Type: Char. Privé e-mailadres van de medewerker, gebruikt wanneer werkmail niet beschikbaar is.
28. phone
Type: Char. Privételefoonnummer, verschillend van zakelijke contactgegevens.
29. contract_id
Type: Many2one (hr.contract). Verwijzing naar het actieve contract.
30. contract_ids
Type: One2many (hr.contract). Historiek van alle contracten die aan de medewerker gelinkt zijn.
31. image_1920
Type: Binary. Foto of avatar van de medewerker; Odoo slaat meerdere groottes op en gebruikt die in formulieren en het personeelsregister.
32. related_partner_id
Type: Many2one (res.partner). De gekoppelde contactkaart die de medewerker verbindt met CRM en andere partnergebaseerde functies.
33. leave_manager_id
Type: Many2one (res.users). Gebruiker verantwoordelijk voor het goedkeuren van verlofaanvragen; indien leeg valt goedkeuring terug op een beheerder of aangewezen goedkeurder.
34. expense_manager_id
Type: Many2one (res.users). Gebruiker die onkostennota's goedkeurt; bij leegte neemt een beheerder de rol over.
35. timesheet_manager_id
Type: Many2one (res.users). Verantwoordelijke voor het goedkeuren van timesheets; anders wordt een timesheetbeheerder of administrator betrokken.
Hoe dit model in bedrijfsprocessen wordt gebruikt
1. Medewerkersgids en onboarding
Bij het aanmaken van een nieuwe medewerker vult HR het hr.employee-record in: naam, afdeling, functie, directe leidinggevende en contactgegevens. Alleen medewerkers die toegang tot Odoo nodig hebben krijgen een gekoppelde user_id.
2. Aanwezigheid en tijdregistratie
Aan- en afwezigheden worden via de Attendance-app geregistreerd; die logs worden aan hr.employee gelinkt via hr.attendance. Velden zoals barcode en pin maken kiosk-gebruik mogelijk.
3. Verlof en afwezigheden
Verlofdossiers verwijzen naar de medewerker: leave_manager_id bepaalt wie goedkeurt en resource_calendar_id beïnvloedt hoeveel verlofdagen er toegewezen en berekend worden.
4. Payroll en contractbeheer
Voor loonverwerking gebruikt payroll gegevens uit hr.employee zoals salarisstructuur, bankrekening en contractverwijzing. contract_id wijst naar het huidige contract; contract_ids bewaren de volledige contracthistoriek.
5. Timesheets en projectallocatie
Wanneer medewerkers uren registreren op projecten, koppelt de timesheet naar het hr.employee-record. timesheet_manager_id regelt goedkeuring en resource_id koppelt aan planningstools voor allocatie.
Hoe ontwikkelaars dit model uitbreiden
Ontwikkelaars bouwen op hr.employee voort met verschillende patronen, waarbij Odoo-modelerven het centrale instrument is.
Modelerven
Je breidt hr.employee uit door in je module _inherit = 'hr.employee' te gebruiken. Zo voeg je velden toe, overschrijf je methoden of leg je extra constraints vast, terwijl je wijzigingen netjes in een aparte module blijven voor eenvoudige upgrades.
Velden toevoegen
Definieer nieuwe velden met het juiste type: Char, Many2one, Boolean, Integer, Text, Selection. Denk aan company-dependent velden in multi-company om correcte gedragingen per vennootschap af te dwingen.
Python-extensies
Overschrijf methoden zoals create, write of unlink om extra logica in te voegen, maar roep steeds super() aan om bestaande functionaliteit intact te houden. Let bijzonder op berekende velden en hun dependencies.
Odoo Studio
Odoo Studio is handig om snel velden en views toe te voegen zonder code. Voor eenvoudige aanpassingen is het ideaal, maar voor onderhoud en upgrades blijft een custom module vaak robuuster.
Aanbevolen werkwijzen
- Maak user_id alleen aan wanneer de medewerker effectief Odoo-toegang nodig heeft. Niet elke werknemer behoeft een gebruikersaccount.
- Bouw de hiërarchie met parent_id op vanaf het topniveau zodat goedkeuringsstromen en organigrammen correct functioneren.
- Stel resource_calendar_id in om uniforme werkuren te garanderen — dat voorkomt inconsistenties bij berekening van aanwezigheid en verlof.
- Voor API-koppelingen gebruik je XML-RPC of JSON-RPC. hr.employee is via de Odoo API toegankelijk; let op betrouwbare mapping van externe ID's en synchronisatieregels.
- Geef custom velden een prefix zoals
x_of je module-namespace om naamconflicten met toekomstige Odoo-versies te vermijden. - Beperk velden met gevoelige HR-data tot gebruikers met hr.group_hr_user door de juiste groepen op velddefinities te zetten, zodat die informatie niet onbedoeld wordt geprefetcht naar niet-geautoriseerde gebruikers.
Veelgemaakte fouten
- Duplicaatrecords maken in plaats van eerst te zoeken is een veelvoorkomend probleem. Gebruik werkmail of identificatienummers om duplicatie te vermijden tijdens imports of synchronisaties.
- Verwar user_id niet met related_partner_id: user_id is bedoeld voor Odoo-loginaccounts, related_partner_id koppelt aan het contactrecord.
- Vergeet employee_type niet in te vullen: het is verplicht en bepaalt hoe contractregels en historiek behandeld worden.
- Sla core-methoden niet over bij het overschrijven. Niet aanroepen van
super()kan compatibiliteitsproblemen veroorzaken met andere modules of toekomstige updates. - Voeg geen verplichte custom velden toe zonder defaultwaarde: bestaande records kunnen anders falen tijdens upgrades of module-installaties.
- Maak geen gevoelige HR-velden publiek. Gebruik groepen op velden die persoonlijke of vertrouwelijke data bevatten.
Slotwoord
Het hr.employee-model vormt het hart van HR-functionaliteit in Odoo: het houdt personeelsdata bij en verbindt die met contracten, aanwezigheid en verlof. Wie de velden en uitbreidingsmogelijkheden kent, kan Odoo doelgericht configureren, aanpassen en integreren.
Of je nu processen in kaart brengt als consultant of modules ontwikkelt als programmeur: een grondig begrip van hr.employee bespaart tijd en voorkomt veel voorkomende fouten.
Hulp nodig bij je Odoo-implementatie?
Dasolo ondersteunt bedrijven bij implementatie, maatwerk en optimalisatie van Odoo. Onze expertise ligt bij API-koppelingen en Odoo-ontwikkeling, met grondige kennis van datastructuren zoals hr.employee.
Heb je hulp nodig met je Odoo-implementatie, maatwerk voor HR of integraties? Wij helpen graag verder. Plan een demo om je project te bespreken.