Skip to content

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.


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

  1. Navigate to any product form (or create a new product)
  2. Go to the Personal Equipment tab
  3. Check Is Employee Personal Equipment
  4. Check Is PPE
  5. Fill in PPE Indications with the situations where this equipment must be worn
  6. If the PPE expires, check Expirable PPE
  7. Enter the PPE Duration (e.g., 180) and PPE Interval Type (e.g., Days)
  8. 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

Draft --> Accepted --> Valid --> Expired
  |          |
  v          v
Cancelled  Cancelled

Common Tasks

Creating a PPE Request for an Employee

  1. Navigate to Employees > Personal Equipment > Personal Equipment Request
  2. Click New
  3. Select the Employee who will receive the PPE
  4. In the Personal Equipment tab, click Add a line
  5. Select a product that is marked as PPE -- the Is PPE, Expirable, and Indications fields auto-populate from the product
  6. Set the Quantity
  7. Optionally set a Start Date (defaults to today when validated)
  8. Add more lines if issuing multiple PPE items at once
  9. 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

  1. Open the equipment request in Draft state
  2. Click the Accept button in the header (HR Officer role required)
  3. Confirm the action when prompted
  4. All line items move to Accepted state
  5. 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:

  1. Open an allocation line (click into the line from the request, or find it under Allocations)
  2. Verify the details are correct
  3. Optionally enter a Certification Number (e.g., the PPE product's batch or certification ID)
  4. Click the Validate button (HR Officer role required)
  5. Confirm the action when prompted
  6. The allocation moves to Valid state
  7. If no start date was set, it defaults to today
  8. 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.

  1. Open the equipment request (must be in Draft or Accepted state)
  2. The Print Receipt of PPE button appears only if the request contains at least one PPE item
  3. Click Print Receipt of PPE (HR Officer role required)
  4. 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:

  1. Open the allocation in Valid state
  2. Click the Expire button
  3. Confirm the action
  4. The allocation moves to Expired state
  5. If no expiry date was previously set, today's date is recorded as the expiry date

Cancelling a Request

  1. Open the request in Draft state
  2. Click Cancel
  3. Confirm the action
  4. 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:

  1. The cron job runs daily (configured in Odoo's Scheduled Actions)
  2. It searches for all equipment allocations where the expiry date is before today's date
  3. 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:

  1. Navigate to Employees > Personal Equipment > Allocations
  2. Use the Expired filter in the search bar
  3. 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.