PPE Management¶
Last Updated: March 2026 Target Audience: HR Officers, Safety Managers, Department Managers
The PPE Management module tracks the allocation of Personal Protective Equipment to employees. HR creates equipment requests, marks products as PPE with usage indications and expiry rules, validates allocations, and prints receipt forms for employee sign-off. A daily automated job checks for expired PPE and flags it accordingly.
This module is provided by the OCA (Odoo Community Association) and extends the base Personal Equipment Request system with PPE-specific fields, expiry tracking, and a printable receipt report.
Key Concepts¶
Personal Equipment Request -- A request record tied to one employee that contains one or more equipment line items. This is the parent record that groups individual PPE allocations together.
Personal Equipment (Allocation) -- An individual line item within a request. Each allocation tracks a specific product assigned to the employee, along with its quantity, dates, and state. When the product is marked as PPE, the allocation gains additional fields for expiry, indications, and certification.
PPE Product -- A product in the Products catalog that has been flagged as both "Is Employee Personal Equipment" and "Is PPE." PPE products can optionally have expiry duration rules and usage indications that auto-populate onto allocations.
Navigating to PPE¶
PPE management lives under the Employees top menu:
- Employees > Personal Equipment > Personal Equipment Request -- Create and manage requests
- Employees > Personal Equipment > Allocations -- View all individual equipment allocations across employees
You can also access an employee's equipment from their employee form. Two smart buttons appear when records exist:
| Smart Button | What It Shows |
|---|---|
| PE Request | Opens all equipment requests for that employee |
| PE | Opens all accepted/valid/expired allocations for that employee |
Setting Up PPE Products¶
Before you can allocate PPE to employees, you need to configure products in the product catalog as PPE items.
Product PPE Fields¶
These fields appear on the product template form under the Personal Equipment tab, inside the Employee PPE section:
| Field | What It Means | Example |
|---|---|---|
| Is Employee Personal Equipment | Base flag that marks this product as allocatable equipment. Must be checked before PPE options appear. | Checked |
| Is PPE | Marks this product specifically as Personal Protective Equipment. Only visible when "Is Employee Personal Equipment" is checked. | Checked |
| PPE Indications | Text describing when the employee should use this equipment. Auto-copied to allocations. Only visible when "Is PPE" is checked. | "Required when handling CRT monitors or any broken glass materials" |
| Expirable PPE | Whether this PPE type has a shelf life or certification period. Only visible when "Is PPE" is checked. | Checked |
| PPE Duration | Number of time units before the PPE expires. Required when "Expirable PPE" is checked. | 90 |
| PPE Interval Type | The unit of time for the duration. Options: Minutes, Hours, Days, Weeks, Months. Required when "Expirable PPE" is checked. | Days |
Set duration rules on the product, not on each allocation
When you configure PPE Duration and Interval Type on the product, the system automatically calculates the expiry date for every allocation of that product. This keeps expiry rules consistent and saves time when issuing the same PPE to multiple employees.
Creating a PPE Product¶
- Navigate to any product form (or create a new product)
- Go to the Personal Equipment tab
- Check Is Employee Personal Equipment
- Check Is PPE
- Fill in PPE Indications with the situations where this equipment must be worn
- If the PPE expires, check Expirable PPE
- Enter the PPE Duration (e.g.,
180) and PPE Interval Type (e.g.,Days) - Save the product
Products without expiry
Not all PPE expires. Items like steel-toed boots or hard hats may not have a fixed expiry period. Leave "Expirable PPE" unchecked for these items -- they will still be tracked as PPE allocations but will not trigger automatic expiry.
Equipment Request Lifecycle¶
A PPE allocation follows this lifecycle, managed across two linked records: the Request (parent) and the individual Allocation lines.
Request States¶
| State | Meaning |
|---|---|
| Draft | Request has been created but not yet approved. Lines can still be added or modified. |
| Accepted | HR has approved the request. Individual line items move to "Accepted" and can now be validated. |
| Cancelled | Request was cancelled. All line items are also cancelled. |
Allocation States¶
| State | Color in List | Meaning |
|---|---|---|
| Draft | Default | Line item created but request not yet accepted. |
| Accepted | Blue | Request accepted; allocation is ready to be validated (issued to employee). |
| Valid | Green | PPE has been issued and is currently active. Expiry date is set if the product is expirable. |
| Expired | Red | PPE has passed its expiry date (set automatically by the daily cron job or manually). |
| Cancelled | Gray | Allocation was cancelled. |
State Flow Diagram¶
Common Tasks¶
Creating a PPE Request for an Employee¶
- Navigate to Employees > Personal Equipment > Personal Equipment Request
- Click New
- Select the Employee who will receive the PPE
- In the Personal Equipment tab, click Add a line
- Select a product that is marked as PPE -- the Is PPE, Expirable, and Indications fields auto-populate from the product
- Set the Quantity
- Optionally set a Start Date (defaults to today when validated)
- Add more lines if issuing multiple PPE items at once
- Save the request
Observations tab
HR Officers can add internal notes in the Observations tab. This tab is only visible to users with the HR Officer role.
Accepting a Request¶
- Open the equipment request in Draft state
- Click the Accept button in the header (HR Officer role required)
- Confirm the action when prompted
- All line items move to Accepted state
- The Issued By field on each line is automatically set to the user who accepted the request
Validating (Issuing) PPE Allocations¶
After a request is accepted, each line item must be individually validated to mark it as issued:
- Open an allocation line (click into the line from the request, or find it under Allocations)
- Verify the details are correct
- Optionally enter a Certification Number (e.g., the PPE product's batch or certification ID)
- Click the Validate button (HR Officer role required)
- Confirm the action when prompted
- The allocation moves to Valid state
- If no start date was set, it defaults to today
- If the product is expirable and no expiry date was manually set, the system automatically calculates the expiry date as: Start Date + PPE Duration
Expiry date validation
The system will reject validation if the expiry date is earlier than the start date. If you manually set an expiry date, make sure it falls after the start date.
Printing the PPE Receipt¶
The receipt is a PDF document titled "Receipt of Personal Protection Equipment" that employees sign to acknowledge they received their PPE.
- Open the equipment request (must be in Draft or Accepted state)
- The Print Receipt of PPE button appears only if the request contains at least one PPE item
- Click Print Receipt of PPE (HR Officer role required)
- A PDF downloads containing:
- The company name and employee name
- A table of all PPE items with product name, quantity, and indications
- An acknowledgment statement that the employee agrees to wear the PPE
- Signature and date lines for the employee to sign
Print before validation
The receipt button is available in Draft and Accepted states. Print the receipt and have the employee sign it before you validate the allocations. Once all lines are validated, the button is no longer visible.
Manually Expiring an Allocation¶
If PPE needs to be taken out of service before its calculated expiry date:
- Open the allocation in Valid state
- Click the Expire button
- Confirm the action
- The allocation moves to Expired state
- If no expiry date was previously set, today's date is recorded as the expiry date
Cancelling a Request¶
- Open the request in Draft state
- Click Cancel
- Confirm the action
- The request and all its line items move to Cancelled state
Allocation Fields Reference¶
These fields appear on the individual equipment allocation form when the product is marked as PPE:
| Field | What It Means | Example |
|---|---|---|
| Product | The PPE product being allocated | Safety Glasses |
| Employee | The employee receiving the PPE (set from the parent request) | John Smith |
| Quantity | Number of units issued | 2 |
| Unit of Measure | UoM for the product | Units |
| Is PPE | Read-only flag showing this is a PPE item. Auto-set from the product. | Checked |
| Expirable | Whether this PPE has an expiry date. Auto-set from the product. Editable in Draft/Accepted states (HR Officers only). | Checked |
| Start Date | Date the PPE was issued. Defaults to today when validated if not set manually. | 2026-03-01 |
| Expiry Date | Date the PPE expires. Auto-calculated from start date + product duration, or set manually. Visible only when Expirable is checked or state is Expired. | 2026-09-01 |
| Certification Number | Optional certification or batch number for the PPE. Editable in Draft/Accepted states. | CERT-2026-0342 |
| Issued By | The user who accepted the request. Set automatically. Read-only. | Jane Doe |
| PPE Indications | Usage instructions copied from the product. Read-only. | "Required in warehouse processing area" |
| Equipment Request | Link back to the parent request | Personal Equipment Request by John Smith |
| State | Current lifecycle state | Valid |
Automatic Expiry (Daily Cron Job)¶
A scheduled action named "PPE's expiry date verification" runs once per day. It automatically transitions allocations from Valid to Expired when their expiry date has passed.
How it works:
- The cron job runs daily (configured in Odoo's Scheduled Actions)
- It searches for all equipment allocations where the expiry date is before today's date
- Each matching record's state is set to Expired
Expired PPE must be replaced
The cron job only changes the state -- it does not automatically create a new request for replacement PPE. HR should regularly review expired allocations and create new requests as needed.
Cron job scope
The expiry check runs against all hr.personal.equipment records with a past expiry date, not just those flagged as PPE. However, only PPE products typically have expiry dates set, so in practice it primarily affects PPE allocations.
Checking Expired PPE¶
To find all expired allocations:
- Navigate to Employees > Personal Equipment > Allocations
- Use the Expired filter in the search bar
- Review the list -- expired items appear in red
To find allocations expiring soon, you can filter or group by Expiry Date to identify PPE that will need replacement.
PPE Receipt Report¶
The Receipt of Personal Protection Equipment is a PDF report generated from an equipment request. It serves as a formal acknowledgment document.
Report Contents¶
The report includes:
- Header: "Receipt of Personal Protection Equipment"
- Introduction: "[Company Name] is providing [Employee Name] with the following Personal Protection Equipment (PPE):"
- PPE Table:
| Column | Description |
|---|---|
| Product | Name of the PPE product |
| Quantity | Number of units provided |
| Indications | When and where the employee should use this PPE |
- Acknowledgment Text: The employee confirms receipt, acknowledges training on proper use and maintenance, and agrees to report loss or damage. The employee also agrees to wear the equipment when facing the relevant exposure and acknowledges that failure to comply may result in disciplinary action.
- Signature Block: Lines for the employee's signature and the date
Keep signed receipts on file
Print two copies -- one for the employee and one for HR records. Signed PPE receipts are important documentation for safety compliance and audits.
Security & Access Control¶
Access Levels¶
| Role | Equipment Requests | Equipment Allocations |
|---|---|---|
| Internal User (base.group_user) | Read, Write, Create (own only) | Read, Write, Create, Delete (own only, delete only in Draft) |
| HR Officer (hr.group_hr_user) | Read, Write, Create (all employees) | Read, Write, Create, Delete (all employees, delete only in Draft) |
Record Rules¶
| Rule | Effect |
|---|---|
| Own records only (Users) | Regular employees can only see their own equipment requests and allocations |
| All records (HR Officers) | HR Officers can see and manage equipment for all employees |
| Delete in Draft only | Equipment allocations can only be deleted when in Draft state, regardless of user role |
PPE-Specific Permissions¶
| Action | Who Can Do It |
|---|---|
| Accept a request | HR Officer |
| Validate an allocation | HR Officer |
| Expire an allocation | HR Officer |
| Print PPE Receipt | HR Officer |
| Edit Certification Number | HR Officer (in Draft/Accepted states) |
| Edit Expirable / Start Date / Expiry Date | HR Officer (in Draft/Accepted states) |
| View PPE Indications | All users (read-only) |
Regular employees
Regular internal users can create their own equipment requests and view their own allocations. However, they cannot accept requests, validate allocations, or print receipts. Most PPE-specific fields (expirable, dates, certification) are read-only for regular users.
Technical Reference¶
| Item | Value |
|---|---|
| Module name | hr_employee_ppe |
| Depends on | hr_personal_equipment_request |
| Models extended | hr.personal.equipment, product.template, hr.personal.equipment.request |
| Cron job | "PPE's expiry date verification" -- runs daily |
| Report | hr_employee_ppe.hr_employee_ppe_report_template (QWeb PDF) |
| Source | OCA/hr repository, version 17.0.1.0.0 |
| License | AGPL-3.0 |
Questions? Contact your HR administrator or safety manager.