ZKTeco Fingerprint Attendance in Odoo, Jordan: 5 Steps to Payroll
Connect ZKTeco fingerprint, face or card terminals to Odoo in Jordan: pull or ADMS push, the Odoo Online bridge, a device checklist, clean punches and 125%/150% overtime under the Labour Law.
Published 2026-11-07 · METCH
Step 1: Pull or push? The two ways a ZKTeco terminal talks to Odoo
Searching «ربط جهاز البصمة مع أودو» usually starts from the same problem: every month someone in HR exports the fingerprint log to Excel, fixes it by hand and retypes the overtime into payroll. Connecting the terminal to Odoo's Attendances app removes that step, and there are only two ways to do it:
- Pull: Odoo, or a program working for it, connects to the device over the office network with the ZK protocol (port 4370 by default, TCP or UDP) and downloads the punch log on a schedule or on demand. The device must be reachable: same network, VPN or port forwarding.
- Push (ADMS, shown as Cloud Server Setting on many models): the device calls a server address over HTTP or HTTPS and sends each punch the moment it is made. It only needs internet access and can stay behind the office router.
Where your Odoo runs decides which one fits:
- Odoo on a server in your office: both work, and pull is the simplest.
- Odoo.sh or any hosted Odoo: push, because a cloud server cannot open a connection into your office unless you expose the device through a VPN or port forwarding. Odoo.sh redirects HTTP to HTTPS, so the device firmware must support HTTPS.
- Odoo Online: neither, directly. It cannot reach your office network and cannot install apps containing Python code, so a small bridge program on an office computer reads the terminals and sends the punches to Odoo through its external API. On Odoo Online, the external API is part of the Custom plan.
Not sure which one you run? Our Odoo Online vs Odoo.sh guide for Jordan explains the difference.
One rule of thumb for companies with branches: on Odoo.sh, push terminals in Irbid or Aqaba call Odoo directly over the internet. On Odoo Online, each branch needs its own bridge, or a network route from its terminals to one, so count that from day one.
Step 2: Choose the tool, then check the terminal: a 6-point checklist
Odoo's Attendances app has no ZKTeco connector of its own. Its hardware documentation covers kiosks on a tablet, phone or computer, where employees scan a printed badge or an RFID key fob, and the kiosk can also ask for a PIN. That kiosk is a fair choice if you don't need biometrics: no extra app and no IoT box, and it works on every hosting option, but it identifies a badge or a PIN, not a finger or a face.
ZKTeco terminals need a connector app from the Odoo Apps Store, or custom code. One option is METCH's ZKTeco Biometric Attendance (USD 199, about JOD 141 at the dinar's peg): pull and ADMS push in editions for Odoo 18, 19 and 20, Community or Enterprise, on Odoo.sh or on-premise (ask the publisher for it if the Odoo Apps Store does not list it yet), plus an Odoo Online edition with the office bridge, listed on the Apps Store as a 20.0 edition and a 19.0 edition to match your database's version. Either way, send the model and firmware version to the publisher before you buy: support depends on the firmware, not the name on the box.
Then stand at the terminal with this checklist:
- Push support: is there a COMM. > Cloud Server Setting menu (ADMS on some models)? If not, you are limited to pull.
- HTTPS: needed when Odoo is served only over HTTPS, as on Odoo.sh; older firmware speaks HTTP only.
- Serial number: under System Info > Device Info, or on the back label. A push server recognises the device by it.
- Communication key: the code pull connections use, 0 if none was set. Odoo's side must match it.
- Fixed IP addresses: a reserved local address for pull, and a fixed public address for the office with push, so the server accepts punches only from you, since ADMS uses no password.
- Clock and time zone: Amman time, recorded as Asia/Amman. Jordan has stayed on UTC+3 all year since late 2022, so make sure no daylight-saving option shifts the clock. A terminal one hour fast turns every 08:00 arrival into a late one.
Step 3: Map device user IDs to employees, with consent on file
A terminal knows people only by number: user 17 punched at 07:56. Odoo has to know that user 17 is the storekeeper in your Sahab warehouse. Build this mapping sheet once, and update it with every hire and leaver:
- Device user ID, the same on every terminal and branch
- Name as enrolled on the device
- Employee in Odoo, with company and branch
- Working schedule, such as Saturday to Thursday, 8 hours a day
- Card number, if the person also uses a card
- Consent date and form reference
In Odoo, the ID goes on the employee record. A good connector also lists the users enrolled on each terminal so you can pick the matching employee, and holds punches from unmapped IDs until you map them, instead of dropping them.
Plan for two things. Cost: a worker who never logs in is still an employee record, and Odoo's subscription agreement counts active employee records with no linked user as Light Users, quoted by an Odoo Advisor. Our Odoo cost guide for Jordan explains it; get that quote in writing before you load 200 factory workers.
Law: Jordan's Personal Data Protection Law No. 24 of 2023 counts biometric data as sensitive personal data (Article 2). Prior consent must be explicit, documented in writing or electronically, and specific about purpose and duration (Article 5), unless an Article 6 exception applies, and Article 11 lists processing sensitive data among the cases that require a data protection officer. Ask the Ministry of Digital Economy and Entrepreneurship or your lawyer how this applies to your terminals; meanwhile:
- Collect signed consent at enrolment, naming the purpose (attendance and payroll) and how long punches are kept.
- Keep fingerprint and face templates on the terminal; Odoo needs only the user ID and the time.
- Offer a card to anyone who withdraws consent: using that right cannot carry financial or contractual consequences (Article 4).
Step 4: Clean punches: duplicates, missing check-outs and offline terminals
A raw punch log is not attendance yet. People press twice, forget to punch out, or punch at a terminal that was offline for a day. Settle these five rules before the first payroll:
- Check-in or check-out: either punches alternate (in, out, in, out, so a lunch break gives two attendances), or the in and out keys on the device decide. Alternating is simpler; keys suit sites with breaks and shift changes.
- Duplicates: a second punch within a short window, say 3 minutes, is ignored. Without it, a double press at 07:58 and 07:59 checks the employee in and straight back out.
- Missing check-outs: if the next punch comes more than a maximum shift after a check-in, say 16 hours, close the old attendance without hours and send it to HR. Never let a forgotten punch on Sunday evening become a 24-hour day, and never guess the hours either.
- Late punches: a terminal normally keeps punches in memory while the network is down and sends them when it is back. Each punch must be stored once, however many times it arrives, and processed in time order.
- Unknown IDs: keep punches from IDs with no employee until HR maps them.
Watch two Odoo settings. Odoo's Attendances settings include Automatic Check-Out, which closes an attendance once the working schedule plus a tolerance you set has passed, and Absence Management, which logs absences not tied to a time off request. If the real check-out reaches Odoo after the automatic close, because of a download interval or an outage, the overtime may need a manual fix. Push and a generous tolerance make that rarer.
A ten-minute routine for HR, every Sunday:
- Filter attendances with no check-out and fix each one with the employee's manager.
- Review punches from unknown IDs and map the new hires.
- Check each terminal's last contact: a silent device means missing days.
- Compare at least one employee's week with their schedule.
Step 5: From clean attendance to overtime pay under Jordan's Labour Law
Clean attendance pays off only when payroll uses it. As of November 2026, the Ministry of Labour's text of Labour Law No. 8 of 1996, with its amendments to 2023 sets these rules:
- Ordinary hours: at most 8 a day or 48 a week, with meals and breaks not counted (Article 56).
- Overtime: with the worker's consent, paid at least 125% of the regular wage for each overtime hour (Article 59a). Article 57 lists the cases, such as the annual stocktake, in which an employer may require it.
- Weekly day off, religious holidays and official holidays: at least 150% of the regular wage for the work performed (Article 59b). Friday is the weekly day off unless the nature of the work dictates otherwise (Article 60).
- Not covered: people in general supervision or management of the institution, and staff whose work requires travel (Article 58).
- Timing: wages and overtime are paid within seven days of falling due (Article 46), and a claim for overtime wages cannot be heard after two years (Article 138), so keep punches and approved attendance at least that long.
A worked example: a storekeeper in Sahab has a regular wage of JOD 2.000 an hour. In December he works 6 extra hours on working days and 8 hours on a Friday stocktake. Working days: 6 × 2.000 × 125% = JOD 15.000. Friday: 8 × 2.000 × 150% = JOD 24.000. Total on top of salary: JOD 39.000. Agree with your lawyer how the hourly wage is derived from a monthly salary.
In Odoo 19 and 20, Overtime Rulesets can encode this: a Quantity rule (hours on a Day above the contract) paid at 125%, a Timing rule (When employee is off) paid at 150%, and Rate Combination Mode set to Maximum Rate, so a Friday hour pays 150%, not 175%. Test it on a past month against your manual payroll; our Jordan payroll and social security guide covers the rest of the payslip. METCH, an official Odoo partner serving Jordan, can set up the whole flow, from terminal to payslip.
Frequently asked questions
How do I connect a ZKTeco fingerprint device to Odoo?
Through a connector app or a custom integration, because Odoo's Attendances app has no ZKTeco connector of its own. The connector either pulls the punch log from the device over the office network (ZK protocol, port 4370 by default) or receives each punch in real time when the device pushes it through its ADMS / Cloud Server setting. Then map each device user ID to an employee, set the device time zone to Asia/Amman, and check the first week of attendances before running payroll.
Can Odoo Online work with a fingerprint attendance device?
Yes, but not directly. Odoo Online cannot reach devices on your office network and cannot install apps containing Python code, so a small bridge program on an office computer reads the terminals and sends the punches to Odoo through its external API, which on Odoo Online is part of the Custom plan. On the Standard plan, the built-in alternative is Odoo's own Attendances kiosk with badges, RFID fobs or a PIN. Odoo.sh and on-premise databases can receive punches pushed by the device directly.
How is overtime calculated in Jordan?
Under Labour Law No. 8 of 1996, as amended, ordinary hours are at most 8 a day or 48 a week, and each overtime hour worked with the worker's consent is paid at least 125% of the regular wage (Article 59). Work on the weekly day off, religious holidays or official holidays is paid at least 150% of the regular wage. At JOD 2.000 an hour, that is at least JOD 2.500 per normal overtime hour and JOD 3.000 per hour on a Friday off. This reflects the law as of November 2026; confirm your case with the Ministry of Labour or a lawyer.
Do I need employee consent for fingerprint attendance in Jordan?
Yes, unless one of the law's exceptions applies. Jordan's Personal Data Protection Law No. 24 of 2023 counts biometric data as sensitive personal data and requires prior consent that is explicit, documented in writing or electronically, and specific about purpose and duration. Collect signed consent at enrolment, keep fingerprint templates on the device rather than in Odoo, offer a card to anyone who withdraws consent, and ask a lawyer or the Ministry of Digital Economy and Entrepreneurship whether you also need a data protection officer.
Connect your attendance terminals to Odoo
METCH, an official Odoo partner serving Jordan, connects ZKTeco terminals to Odoo Attendances, maps your employees and sets up overtime rules ready for payroll.
Start with Odoo