Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Attendance
  3. EH HR Attendance Pro v 17.0
  4. Sales Conditions FAQ

EH HR Attendance Pro

by ERP Heritage https://erpheritage.com.au
Odoo
v 17.0 Third Party 35
Download for v 17.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Attendances (hr_attendance)
• Employees (hr)
• Discuss (mail)
Community Apps Dependencies Show
• EH HR Approval Engine
• EH HR Compatibility
• EH HR Notify Engine
• EH HR Platform Core
• EH HR Policy Engine
• EH HR Workflow Engine
Lines of code 4972
Technical Name eh_hr_attendance_pro
LicenseLGPL-3
Websitehttps://erpheritage.com.au
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
Event-sourced attendance for Odoo 17

HR Attendance Pro

An append-only event log, a rebuildable day projection, and standard hr.attendance kept in sync, so payroll and reporting read native rows while integrity lives in an immutable chain.

Free · LGPL-3Odoo 17 CommunityAppend-only event logv1.0.0
Immutable event log
Rebuildable day projection
Syncs to hr.attendance
Kiosk, mobile, webhook, import
Shift rounding and grace

Why this module

HR Attendance Pro

Source of record

Events are immutable, days are derived

Every check-in, check-out, and break lands once in an append-only log guarded against edit and delete. Day totals are a projection computed by a service, not ORM triggers, so they rebuild deterministically from the events at any time.

No lock-in

Standard hr.attendance stays in sync

Paired sessions project into native hr.attendance rows tagged as managed, so payroll, reporting, and any module reading attendance just work. Rows created directly in standard Odoo are tagged unmanaged and never touched.

Capture anywhere

One ingest pipeline for every source

Kiosk, mobile, biometric webhook, manual, and bulk import all flow through a single validated, idempotent ingest path. Re-sending the same event is a no-op, so offline buffers and retried batches converge instead of duplicating.

Day in the life

A late biometric punch and a correction

An employee clocks in at a kiosk, then a biometric controller posts the same out punch twice after a network blip. The unique correlation id absorbs the duplicate, the day recomputes with rounding and grace-to-schedule applied, and late and overtime minutes settle. A missing check-out trips an anomaly that notifies the manager. The employee files a correction with a photo; once the approval chain clears, the apply step writes new events linked back to the request, and the nightly reconcile converges the trailing days.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

Idempotent ingest

Every event carries a correlation id under a UNIQUE constraint. Duplicate kiosk batches, retried webhooks, and re-applied corrections dedupe silently instead of creating phantom punches.

Append-only guard

The event model blocks writes to all but a few operational fields and refuses unlink outside the retention purge context, so attendance history cannot be quietly edited or deleted through any surface.

Overnight shifts

Civil-date attribution anchors the tail of an overnight shift to the correct day, so a 2am clock-out is counted against the shift that started the previous evening rather than splitting across two days.

Grace-to-schedule rounding

When the first clock-in falls within the in-grace of the roster start, or the last clock-out within the out-grace of the end, paid time snaps to the scheduled boundary; minute rounding then applies on top, with nearest, up, or down modes.

Roster resolution

Per-employee dated shift assignments win over the company default, and the shortest range covering a day beats a long rotation, so a one-day override takes precedence with the latest start breaking ties.

Idempotent reconcile

The nightly cron recomputes the trailing days for every active employee in batches of 200 with a commit between batches, so a worker restart never loses progress and re-running converges rather than double-counting.

Self-approval and roles

Corrections inherit the platform approval chain and workflow mixins, with capture roles cascading from employee to manager to officer to admin, so amendments are reviewed as declared data rather than ad hoc edits.

Stolen-token containment

Kiosk tokens are short-lived HMAC-signed JWTs, the device directory listing is off by default and page size is capped server-side, and ingest is throttled per device, so a leaked token cannot bulk-pull the directory or flood events.

Multi-company scoping

Events, days, devices, and geofences carry company_id with record rules, and device resolution refuses a kiosk whose company does not match the employee, keeping capture inside company boundaries.

Retention with audit

Old events archive after a configurable window and, after a grace period, export to a CSV attachment before purge, so hot reads stay fast while the audit trail is preserved.

What is inside

Built to do the job, end to end.

  • Immutable event log and derived day. eh.hr.attendance.event is append-only with covering indexes for day-window scans and a unique correlation id; eh.hr.attendance.day is a one-row-per-employee-per-day projection rebuilt by a compute service that resolves shift, policy thresholds, rounding, late, early-leave, and overtime.
  • Capture surfaces and controllers. JSON endpoints for kiosk pair, token refresh, batched events, and a gated employee picker; a session-authenticated mobile endpoint with today and history; and an HMAC-verified biometric webhook. A CSV import service streams batches through the same ingest path.
  • Kiosk, geofence, and offline. Paired kiosk devices with short-lived HS256 tokens, per-device throttle, and a quarantine and retire lifecycle; haversine point-in-fence geofence tagging; and an IndexedDB offline buffer in the kiosk OWL app that drains on reconnect.
  • Corrections, anomalies, and crons. A workflowed correction model with evidence attachments and an approval chain that applies as new linked events; an anomaly service flagging missing punches, overlaps, double check-ins, geo mismatches, and excessive daily minutes with manager notifications; nightly reconcile and retention crons.

Honest about the edges

What this does not do, so nothing surprises you.

  • This module depends on the EH HR Platform layer (eh_hr_core, the workflow, approval, policy, and notification engines, and eh_hr_compat) and is not a standalone add-on to plain Odoo. It targets Odoo 17 Community.
  • Workflow states, approval chains, late and overtime thresholds, and notification dispatch are owned by the platform engines, not by this module. It owns capture, derivation, and surfaces only.
  • Geofence matching is a linear haversine scan over active fences per company, suitable for typical fence counts; it is not a spatial index, and the off-shift anomaly check is intentionally conservative and currently returns no codes.
  • Idempotency and convergence come from the unique correlation id plus dedupe-on-ingest and batch-committed reconcile, not from Postgres advisory locks; concurrent compute relies on the per-day unique constraint rather than row locking.
  • Day status treats approved leave via the platform leave projection when present and falls back to core hr.leave otherwise; payroll rules, pay codes, and rate calculation are out of scope and consume the day projection downstream.
  • Kiosk signing secrets and webhook secrets live in ir.config_parameter; encryption at rest depends on the operator wiring database-level encryption. Biometric and HRIS vendor adapters are HMAC webhook contracts, not bundled device drivers.
Search

odoo 17 attendance, time and attendance odoo, employee time clock odoo, kiosk attendance odoo, biometric attendance odoo, geofence attendance, shift roster odoo, overtime tracking odoo, attendance import csv, hr.attendance sync, attendance corrections approval, event sourced attendance, late and early leave tracking, multi company attendance, attendance anomaly detection

Work with ERP Heritage

Need this fitted to the way you work?

ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.

Build and tailor
Odoo Implementation, Customization and Development, scoped to your workflow.
Connect and move
Odoo Integration and Migration across systems and Odoo versions.
Run and support
Odoo Support and Training so your team stays productive after go live.
Plan and advise
Odoo Consultation and ERP Consulting, from discovery to roadmap.

We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.

Languages

Available in 19 languages

The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.

ArabicChinese (Simplified)Chinese (Traditional)DutchFrenchGermanHindiIndonesianItalianJapaneseKoreanPolishPortuguese (Brazil)RussianSpanishSwedishThaiTurkishVietnamese
ERP Heritage

Production-grade Odoo HR, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by ERP Heritage - Odoo Implementation • LinkedIn

v1.0.0 · LGPL-3 · Odoo 17 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with