BUSL-1.1 · Version 18.0.1.4.1

Training register

Who owes which training, by when, proven by which document, and valid until when.

Video · Training register · 0:59
Who owes which training, by when, and what is already overdue
Who owes which training, by when, and what is already overdue

An e-learning module plays content. This one keeps the register, which is not the same work.

A requirement says who owes what, and it takes two forms that do not reduce to one another: a specific activity each covered person must have taken and kept valid, or a number of hours in certain categories, with the categories that do not count. From that rule comes one line per person, with its due date and its state: that list is what you show the inspector.

Facing it, the completion carries the proof: the real date, the hours, the provider, the number, the certificate attached, and the expiry date.

⚠️ Nothing is overwritten: three first-aid courses over nine years leave three lines, and the sequence shows. Expiry moves on its own, carried by a daily task rather than a field frozen the day it was written.

And what is missing is not worth zero: a line with no hours is marked incomplete and leaves the totals, instead of entering them at a null value that looks like a measurement.

Comparable to A corporate LMS, cut back to what can be proven

bf_training · Version 18.0.1.4.1 · Guide chapter · View the source · See it in the catalogue

8 add-on modules

Online coursesA finished course becomes a register line, dated the day it was actually finished.

Odoo's content player keeps no completion date, and the line it adds to an employee file carries the date of the recomputation.

This bridge writes the record the moment completion happens, with the course hours. Anyone without a portal account is given one, without which a finished course reports nothing at all.

It also watches the content: when a course gains or loses chapters afterwards, the register flags it and decides nothing. Raising the version makes everyone who took the old one sit it again; acknowledging the change freezes the count and asks for nothing.

⚠️ Fixing a typo should not send anyone back to class, and that is why the decision stays with a person rather than with a rule.

The activity catalogue: what runs online, what happens in a room, and how long each stays valid
The activity catalogue: what runs online, what happens in a room, and how long each stays valid

bf_training_slides · Version 18.0.1.0.1 · Guide chapter · View the source

SCORM contentPlay a SCORM 1.2 or 2004 package inside Odoo eLearning, and carry its completion to the register.

Odoo 18 knows no standard course format: its player takes an image, an article, a document, a video or a quiz, and that is all. A provider delivering training as SCORM, which is nearly all of them, has no way to play it or to get the result back.

This module adds the missing type, with both APIs the standard mandates, the 1.2 one and the 2004 one, because any real catalogue holds some of each.

Completion reaches the register through the player's own hook: there is a single write path.

⚠️ The module says what it does not do: SCORM 2004 sequencing is not applied, and it announces that on the package record. A player that claims to sequence and gets it wrong is worse than one that says it does not sequence.

A SCORM 1.2 package with its two SCOs, and the attempts that reach the register
A SCORM 1.2 package with its two SCOs, and the attempts that reach the register

bf_training_scorm · Version 18.0.1.0.2 · Guide chapter · View the source

Classroom session and signed attendanceThe classroom session run by Events, and the signed attendance sheet that turns it into proof.

Odoo Events already runs a session: the date, the room, the seats, the registrations, the check-in. This bridge does not redo any of it.

It adds the two things a training session needs and an event does not carry: the signed attendance sheet, produced as a PDF with the signatures on it, and the write to the register.

⚠️ It also fixes two false friends in the native module. Odoo's “Attended Date” holds the moment someone clicked: a March session marked off in September would be dated September, and the register would date the training from the day somebody remembered it. The bridge takes the date of the session.

And a cancelled registration keeps its attended date, because the computation never clears it: reading that field would count people who never showed up.

An unsigned attendance is recorded and flagged incomplete, never lost: the person was there.

A session's registrations, from registered to attendance recorded
A session's registrations, from registered to attendance recorded

bf_training_session · Version 18.0.1.0.1 · Guide chapter · View the source

Signed acknowledgementReading a policy and confirming it in writing becomes a register line, dated and tied to the version read.

Some training is not a course: it is a document to read, and the expected proof is a dated, sometimes signed acknowledgement filed in the person's record. A prevention policy, a multi-module onboarding process, a procedure that changes.

Distributing a version assigns the training. The acknowledgement writes the completion record, dated the moment it arrives and tied to the version read, not to the document in general. A new version reopens the obligation for anyone who only acknowledged the old one, because a policy that changes has to be read again.

⚠️ A required signature is genuinely required: until it is there, nothing is recorded. A ticked box does not replace a dated, signed document.

When an onboarding process has several modules, each gets its own, which is the only shape that can say which one is missing.

Distributions and their acknowledgements: who got which version, when, and who still owes one
Distributions and their acknowledgements: who got which version, when, and who still owes one

bf_training_sign · Version 18.0.1.0.0 · Guide chapter · View the source

On-the-job trainingThe swimlane on your process map finally says who holds the role, and the step says what it takes to hold it.

A process map says what gets done and by which role. The register says who must know how. Between the two sat a fact nobody held: who holds the role.

The bridge adds it to the lane, and a training requirement can then target that lane instead of a hand-copied list of names that goes stale on the first departure. Someone joining the role inherits the requirement; someone leaving it stops being covered.

⚠️ A lane with nobody in it targets nobody, and certainly not everyone by default.

From a step on the map you see what it takes to hold it, and from there who is current. On-the-job training is recorded with what stands as its proof: the trainer, the learner, the step worked on, and both confirmations. Training that only the trainer attests to is not training received.

Completions: the proof, the hours, and the validity that moves on its own
Completions: the proof, the hours, and the validity that moves on its own

bf_training_process · Version 18.0.1.0.0 · Guide chapter · View the source

What it actually costsThe real cost of training taken, carried into the budget, and the hours you cannot price counted as such.

The register knows what a training course cost: the hours, the hourly rate, the employer contributions, the fees. The budget knows what was planned. This bridge puts the two side by side.

A budget line names training categories and its actuals pick up the cost of training taken in the period, with no accounting entry. What is owed and not yet taken shows up as committed, not as a year-end surprise.

⚠️ The refusal is shared by both modules: incomplete training does not enter the actuals, its hours join the unvalued hours where the budget already flags them, and an obligation that cannot be priced is counted rather than silently skipped.

An under-stated commitment is worse than a missing one, because it looks filled in.

A training budget line, planned against actual, with its monthly split
A training budget line, planned against actual, with its monthly split

bf_training_budget · Version 18.0.1.0.0 · Guide chapter · View the source

On your phoneMy training on my phone: what I owe, by when, and what I have already proven.

The mobile surface of the register: my obligations with their due dates, my completed training with its expiry, and what has been assigned to me.

⚠️ Three deliberate refusals.

No route takes an employee id: the person comes from the token, never from what the client sends, because a parameter you do not accept is a parameter nobody can forge. An organisation's training register holds precisely what people have no business knowing about each other.

Nothing writes to the register from the phone: proof of training is filed, not declared.

And an account with no employee record returns an empty list rather than an error: not being in the register is not a fault.

bf_training_mobile · Version 18.0.1.0.0 · Guide chapter · View the source

QuebecThe certificate you must be able to issue, the six-year retention, and the 1 % statement.

Three duties a generic register does not carry.

The certificate first: an employer must be able to issue one to anyone who attended training it delivered itself, when the outside trainer issues none. The PDF carries the subject, the hours, the dates, the trainer, and the right legal entity: the one on the record, not the one printing it.

Retention next: six years after the last year the document relates to, computed, and deleting a line still covered is refused.

The statement last: payroll, the minimum contribution, eligible spending computed as hours times hourly rate, the carried-over surplus and, where applicable, the levy.

⚠️ Incomplete records are kept out and listed separately with their hours, because a statement that swallows gaps produces a wrong figure that looks right. The document says of itself that it supports the filing rather than replacing it.

Eleven regulatory references ship with it, quoted in full.

bf_training_qc · Version 18.0.1.0.1 · Guide chapter · View the source

The 97 other applications

Shall we look at your case together?

Tell us what you run today. We will tell you honestly whether Symbifox helps or not.

Keep in touch

The catalog grows almost every month.

What gets added, what we learn deploying it, and nothing else. You leave whenever you want.

One confirmation email, and nothing before you follow its link. Then 10 welcome emails, one a week, then the updates. No tracker, no resale.