SymbifoxUser guide Français

Part 5 · People and team

Training register

Who owes which training, by when, proven by which document and valid until when, with the certificate and the annual statement.

Symbifox 18.0 (September 2026 catalogue) · Modules: Registre de formation, Registre de formation : raccord eLearning, Registre de formation : Québec, Registre de formation : entraînement à la tâche, Registre de formation : accusé signé par module · Revised 2026-09-13

Training keeps your workforce's training file. You write the rule once ("every member of staff must hold this certificate, current, and renew it every three years"), and the application turns it into one line per person, with a due date and a state. Facing it, every course taken leaves dated proof: the hours, the provider, the number, the certificate received as an attachment. The application is for whoever answers for compliance, whoever keeps the register day to day, and every employee for their own file.

Overview#

Six notions structure the application, and the distinction between the first three is the whole point.

  • The activity is the catalogue: a title, a category, a mode (classroom, online, on-the-job, external, conference, professional order), an expected duration, a provider and a validity in months.
  • The requirement is the rule. It takes two forms, and neither reduces to the other: a named activity every person in scope must have taken and kept current, or a number of hours in given categories, with the categories that do not count.
  • The obligation is the rule applied to one person: one line per person in scope, with its due date, its state and the document covering it. It is built from the requirement.
  • The completion record is the proof: who, what, when for real, how many hours, from which provider, under which number, with the certificate received from outside attached.
  • The training plan holds the learning duration established in advance and the proof of the consultation held on that plan. Some activities are only eligible within a plan.
  • The assignment is the act: asking someone to take an activity, and reminding them before the due date. You can assign without a requirement, and satisfy a requirement with nothing ever assigned.

The application builds on applications you already know. People come from Employees, and their record gains a Training tab. Online courses come from the eLearning described in Website, blog and eLearning: that player serves the content, and serves it well; the register holds the proof. The two fit together, and the bridge between them avoids entering anything twice.

What sets the approach apart: a state that depends on today's date is written every night by a scheduled job, never computed once and stored. A certificate that lapses stops counting the day it lapses, not the day someone remembers. And a completion record is never overwritten: three first-aid renewals over nine years leave three lines, which is the only way to show continuity.

(Published module, not illustrated: the application is not yet in the demonstration company, so this chapter is written without screenshots.)

Configuration#

Access and rights#

Two groups, set in the Training register section of a user record (SettingsUsers and companiesUsers). The second includes the first.

Group What it opens
None (any internal user) Their own completion records, obligations and assignments. Nothing about anyone else.
Officer The register: completion records, obligations, assignments, activities. Records, assigns, reminds, issues certificates.
Manager All of the above, plus requirements, training plans, participation statements, categories and regulatory references.

On installation the administrator joins the Manager group automatically: without that the menus would exist and the screens would refuse to open. The rest is granted by hand.

Settings#

Three settings, in the technical parameters, and none needs touching to get started.

Setting What it does Shipped value
bf_training.default_due_days The default grace period of an assignment created without a due date 30 days
bf_training.reminder_days How early an assignment starts being chased 7 days
bf_training.auto_grant_portal Create a portal account for someone who has none, so an online course can record their completion on

Two more drive the participation statement, and they change by regulation: bf_training_qc.payroll_threshold (the payroll above which the duty applies, $2,000,000 as shipped) and bf_training_qc.participation_rate (the rate, 1%).

Master data#

Six categories ship with the application: occupational health and safety, first aid, trade skills, compliance and privacy, onboarding, management and supervision. Rename them, drop the ones you do not need, add your own. They are not decorative: they are what lets you write "six hours a year, and first aid does not count toward it".

Eleven regulatory references ship too, quoted in full with their chapter, their section and their excerpt: workforce skills participation and its threshold, on-the-job training, justification and retention, the eligible salary calculation, training and instruction under occupational health and safety, the psychological harassment prevention policy, first aid and annual professional development in childcare services, onboarding and mandatory training in private seniors' residences. A requirement links to one instead of quoting it from memory.

Getting started#

The walkthrough below writes a first requirement and checks it, in about ten minutes.

  1. Open TrainingConfigurationActivities, then New. Name the activity (say "Workplace first aid"), pick its category, set the mode to Classroom, an expected duration of 16 hours and a validity of 36 months.
  2. In the Eligibility conditions section, leave both boxes unticked: a classroom course given by a provider needs neither a plan nor supervision.
  3. Open TrainingRulesRequirements, then New. Name it, leave the form on A named activity and pick the activity you just created.
  4. Choose the scope: The whole company to start. Leave the trigger on Immediate, and set a 90-day grace period so everyone has time.
  5. In the Regulatory basis tab, pick a reference from the catalogue: the title, the citation and the text fill themselves in.
  6. Save, then click Recompute. The application creates one line per person in scope.
  7. Open TrainingRegisterObligations. You see the named list, each line with its due date and state. That screen is what you show on inspection day.

To close the loop, record a completion: TrainingRegisterCompletion recordsNew, pick the person and the activity, set the real date and the hours, and attach the certificate received. Confirm, then go back to the obligations: the line has moved to Current, with its validity end date.

Common tasks#

Write an hours requirement#

Some duties are not about a named course but about a volume of hours by subject, with subjects that do not count.

  1. TrainingRulesRequirementsNew.
  2. Choose the form A number of hours by category.
  3. Enter the hours required, then the categories counted. Leave the list empty to count every category.
  4. Fill in the excluded categories: these are real hours that do not count toward this requirement.
  5. Choose the period: Per calendar year or Over a rolling period.
  6. Save and click Recompute.

Result: each obligation line shows hours done against hours required, and moves to Current when the count is met.

Good to know. To express "six hours a year, at least three of them on one subject", write two requirements: one for six hours overall, one for three hours on the subject. Each reads and checks on its own.

Start a clock at hiring#

A duty that must be met "within the first year on the job" is set by the trigger.

  1. On the requirement, choose the trigger From the hiring date.
  2. Enter the grace period in days (365 for a year).
  3. Check the reference date on each person's record: the Training tab of the employee. It comes from the first contract where one exists, otherwise from the record's creation, and it can be corrected by hand.
  4. Recompute.

Result: each person gets their own due date, counted from their own date. Someone without a reference date gets the state No due date rather than an invented one.

Record a certificate received from outside#

This is the most frequent act, and the one the whole register rests on.

  1. TrainingRegisterCompletion recordsNew.
  2. Pick the person and the activity. The mode, the duration and the provider come from the activity, and the hourly cost from the employee record.
  3. Correct the date to the day the training was taken, not the day you are keying it in.
  4. Enter the hours actually spent, the certificate number and its issue date.
  5. In the Supporting documents tab, attach the PDF you received.
  6. Click Confirm.

Result: the record counts, the expiry date is computed from the activity's validity, and the matching obligation moves to Current.

Issue a training certificate#

When nobody else issues one, the employer must be able to.

  1. Open a confirmed completion record.
  2. Click Certificate.

Result: a PDF carrying the subject of the activity, the date of the training, the hours, the mode, the trainer, the number, the validity and the retention end date. The legal entity named is the one on the record, not the one belonging to whoever prints it.

Good to know. When the duration was not recorded, the certificate says so. It does not print zero hours.

Assign a course and chase it#

  1. TrainingRegisterAssignmentsNew.
  2. Pick the person and the activity. A due date is set by default.
  3. If the activity is backed by an online course, click Enrol in the course: the person is enrolled, and a portal account is created if they have none.
  4. Click Remind to send a reminder now, or let the scheduled job do it before the due date.

Result: the course progress flows back onto the assignment, and completion closes it.

Careful. The reminder job ships switched off. It writes to real people: turn it on once you have checked who it would be writing to.

Handle a course whose content has changed#

When an online course gains or loses chapters, the activity is flagged as drifted and two options open.

  1. Open the activity: a banner reports the gap.
  2. Click Acknowledge without re-running if the change was a correction: the count is frozen and nobody retakes the course.
  3. Click Raise the version if the content changed enough that those who took it should take it again.

Result, in the second case: records earned on the previous version are marked outdated version, and the matching obligations reopen.

Good to know. The application never raises the version on its own. Fixing a typo should not send anyone back to class, and a register that re-demands training on every edit gets ignored within three weeks.

Write a training plan and prove its consultation#

Some activities are only eligible if their duration is established in a plan, and if the consultation held on that plan is kept on file.

  1. TrainingRulesTraining plansNew.
  2. Name the plan and give it start and end dates.
  3. In the Planned activities tab, add the activities covered.
  4. Fill in the consultation date and the committee members.
  5. In the What was consulted tab, describe the consultation and attach the proof.
  6. Click Mark consulted, then Approve.

Result: the plan becomes selectable on a completion record, and its Consultation proven indicator turns green.

Produce the annual participation statement#

  1. TrainingRulesParticipation statementsNew.
  2. Choose the calendar year and enter the payroll.
  3. If last year left a surplus, carry it into Surplus carried forward.
  4. Click Compute.

Result: the application reads that year's register, separates what counts from what does not, and shows the minimum contribution, the eligible spending and, where applicable, the levy payable.

Careful. Excluded records are not counted as zero: they move to their own tab, with their hours and the reason. A statement that swallows gaps produces a wrong figure that looks right. And the statement supports the filing rather than replacing it: both the screen and the document say so.

Exempt someone from an obligation#

  1. Open the obligation line.
  2. Click Exempt and confirm.
  3. Note the reason in the field provided.

Result: the line stays in the register with the state Exempt, and recomputation does not undo it. An exemption is a human decision.

Correct a wrong completion record#

  1. Open the record.
  2. Click Cancel.

Result: it leaves the totals and stops covering an obligation, but the document stays on file. A confirmed record still within its retention period refuses deletion, and says so plainly.

The menus, one by one#

The Training application has three groupings.

Training > Register holds the daily work.

  • Training > Register > Completion records: the list of training taken, most recent first. Useful columns: the date, the person, the activity, the hours, the total cost, the expiry date and the validity. Lapsed lines are red, expiring ones amber. Filters: confirmed, incomplete, lapsed, expiring soon, this calendar year.
  • Training > Register > Obligations: the named list, grouped by requirement. This is the inspection screen. Overdue lines are red, expiring ones amber, exempt ones grey.
  • Training > Register > To handle: the same list, cut down to what is overdue or about to expire.
  • Training > Register > Assignments: what was asked of whom, with progress and the number of reminders sent.

Training > Rules is for the manager.

  • Training > Rules > Requirements: the rules, with the count of people in scope, those current, and the coverage rate.
  • Training > Rules > Training plans: the plans, their dates, their state and the consultation-proven indicator.
  • Training > Rules > Participation statements: one statement per calendar year and company.

Training > Configuration is also for the manager.

  • Training > Configuration > Activities: the catalogue.
  • Training > Configuration > Categories: the subjects, edited inline in the list.
  • Training > Configuration > Regulatory references: the texts quoted in full.

Reference#

Fields on the Completion record form#

Field Description Required or default
Person The employee whose file this is Required
Activity What was taken Required
Taken on The day the training was taken Required, today by default
Hours The hours actually spent From the activity's expected duration
Mode Classroom, online, on-the-job, external, conference, professional order From the activity
Trainer or provider Who gave the training From the activity
Certificate number The number on the document received Optional
Expires on Computed from the activity's validity, and editable Computed
Validity Never expires, valid, expiring, lapsed Written, then refreshed nightly
Hourly cost Frozen at entry From the employee record
Training plan The plan under which the duration is established Required if the activity asks for it
Supporting documents The certificates received Optional, but this is the proof

Fields on the Requirement form#

Field Description Required or default
Form A named activity, or a number of hours by category Named activity
Required activity What must have been taken Required if the form is "activity"
Hours required The volume to reach Required if the form is "hours"
Categories counted The subjects that count; empty means all Empty
Excluded categories Real hours that do not count here Empty
Period Once, per calendar year, or over a rolling period Once
Scope The whole company, a department, a job position, named people The whole company
Trigger From hiring, from a fixed date, or immediately Immediate
Grace period The time allowed after the trigger 0
Renewal The cycle; 0 takes the activity's validity 0
Warning window Days before the due date when the state turns to "expiring" 90
Regulatory basis The title and the section, in full Optional

Reports and exports#

The training certificate comes out as a PDF from a confirmed completion record, one per person and per course. Every list exports through the usual Odoo gestures.

Automations#

What happens on its own Frequency Shipped
Validity states are rewritten against the calendar daily on
Obligations are recreated and re-evaluated daily on
Assignments approaching their due date are chased daily off

Completing an online course writes a record at the moment it happens. Saving a record immediately recomputes the obligations of the people concerned.

Public pages and portal#

The application has no public page. The eLearning bridge creates a portal account where a person has none, without which an online course could record nothing of their completion.

Modules that extend this application#

Training register: online courses (bf_training_slides). Backs an activity with an online course. Completion writes a record dated the day it happens, with the course hours, and content drift is flagged without anything being decided. Turn it on if you serve courses from Symbifox.

Training register: Quebec (bf_training_qc). Adds the PDF certificate, the six-year retention, the participation statement and the eleven regulatory references. Turn it on for an organisation under Quebec law.

Training register: on-the-job training (bf_training_process). Connects the register to process mapping. The swimlane gains the people who hold the role, which lets a requirement target "everyone who does this" instead of a list of names. The step gains the training it takes to hold it. And on-the-job training is recorded with both the learner's and the trainer's confirmation: while either is missing, the record is incomplete.

Training register: signed acknowledgement (bf_training_sign). A policy or procedure from the knowledge base becomes training to complete. Distributing a version assigns it, the acknowledgement writes the dated record, and a new version reopens the obligation for anyone who only read the old one. ⚠️ Where the distribution requires a signature, nothing is recorded until it is there.

Understanding#

Why a register rather than an e-learning module. A content player answers "was this course opened". A register answers "is this person compliant, and since when". Those are two different questions, and the second is the one you get asked on inspection day. The two fit together: the bridge moves an online completion into the register, with its date and its hours.

Why expiry is written and not computed. A state that depends only on an end date, computed once and stored, never recomputes because time has passed: it would show "valid" forever. That is a lie you cannot see on the day you write it, but two years later, on a screen nobody reopens. Here a daily job rewrites the state.

Why nothing is overwritten. A register that keeps one line per person and per course cannot show continuity. Three first-aid renewals over nine years must leave three lines, otherwise "since when has this person been covered without a break" has no answer.

Why a gap is not a zero. A record without hours or without an hourly cost is flagged incomplete and stays out of the totals. Entering it at nil would make the total look like a measurement while being wrong, and nobody would know by how much.

Why a due date is never invented. Someone without a reference date gets the state No due date rather than a date taken from today. A wrong date looks like a measurement; a missing one is visible. For the same reason the "immediate" trigger anchors to the date the rule was written and not to the day of the computation: a due date that moves with the calendar is never passed, so it measures nothing.

The limits. The register starts from the employee record: a person without one has no training file, and the application will not create an employee to house a completion. It reads no SCORM content, does not manage classroom sessions with attendance sheets, and carries no training budget.

Troubleshooting#

Symptom Likely cause Fix
The menus exist but the screens refuse to open The user is in neither group Add them to Officer or Manager on their user record
An obligation stays at No due date The person has no reference date and the requirement starts at hiring Fill in the reference date in the Training tab of the employee record
A record is flagged incomplete Hours, hourly cost, plan or supervision are missing The What is missing field spells it out; fill it in
Someone in scope is absent from the obligations The requirement has not been recomputed since they arrived Click Recompute on the requirement, or wait for the next day's job
A finished course writes nothing to the register The person has no employee record, or the activity is not backed by the course Create the record, or set the course on the activity
A record refuses to be deleted It is still within the six-year retention period Click Cancel: it leaves the totals without disappearing
The statement excludes records Their activity has no eligibility basis, or they are incomplete Set the basis on the activity, or complete the record
Nobody gets reminded The reminder job ships switched off Turn it on in the scheduled jobs, once you have checked who it would write to

See also#