Safety
Incidents with an investigation lifecycle and corrective actions, plus toolbox talks with attendee signatures
Safety holds two kinds of record, and they are deliberately opposite in meaning:
- An incident is an exposure that already happened. It carries an investigation and corrective actions.
- A toolbox talk is a control that was applied. It carries a topic and the people who signed that they were there.
A near miss and a toolbox talk are both "safety" and the project cannot count them as one number, so they are two registers under one Safety surface.
What Struxen does not claim
Nothing here produces a regulatory form, asserts recordkeeping compliance, or satisfies a filing obligation of any kind.
"Recordable" is the classification the person filing the record chose. It is not a determination Struxen made, and the safety rates report says so on its own face.
Record an incident
- Open Safety and click Record incident.
- Choose the Kind. Five values, and they are the ones a superintendent actually distinguishes:
| Kind | Meaning |
|---|---|
| Near miss | Nobody was hurt and easily could have been |
| First aid | Treated on site, nothing beyond first aid |
| Recordable | The person filing classified it as a recordable injury |
| Property damage | Equipment, structure or material damage, no injury |
| Environmental | A spill, a release, a permit exceedance |
- Set When it happened. This is when the incident occurred, not when you typed it in.
- Set the Location, free text ("Level 3 east, north stair, laydown yard").
- Write the Description.
- Add People involved: a name, optionally a company and a trade or role, and an injured flag. There is no worker registry, no badge number and no safety ID behind this. A name on a form is a name on a form.
- Add Witness statements in the witness's own words. The record keeps the witness's name and, separately, who typed the statement in. On a jobsite those are routinely different people, and a record that hides which is which loses a claim.
Incidents are numbered per project: INC-001, INC-002, and so on.
Recording an incident needs Standard access, not administrator access. Anything stricter would mean a superintendent has to find a project manager before they can write down that somebody got hurt.
Nothing in this module calls a model, and nothing here costs credits. A project that hesitates to file a near miss because it costs credits is a project that stops filing near misses.
The incident lifecycle
Reported ──> Investigating ──> Corrective action
│ │ │
└──────────────┴─── close ─────────>Closed
│
reopen
v
Investigating
| State | What it means | Who can move it |
|---|---|---|
| Reported | Waiting for somebody to look | Where a new incident starts |
| Investigating | Somebody is looking | STANDARD |
| Corrective action | Work is booked against a finding | STANDARD |
| Closed | The project is finished with it | ADMIN |
Three things about this machine are worth knowing:
- Close is reachable from every open state. A near miss with an obvious cause and no action needed is a legitimate record, and forcing it through an investigation it does not warrant is how a register fills with permanently open rows nobody reads.
- Closure is not final. A medical outcome changes weeks later, a root cause turns out to be wrong, an insurer asks a question. Reopen is administrator-only and lands in Investigating, not back in Reported, because the record has already been looked at and pretending otherwise loses that fact.
- There is no rejected state. Nobody rejects an incident. It happened.
Starting an investigation is Standard because anyone who can record an incident should be able to move their own report forward. Closing is Admin because closure is the statement that this project is finished with an event that hurt somebody, and it is the state an insurer reads.
Every incident carries a version counter, so two people editing the same incident produce one write and one conflict error rather than one silent erasure.
Corrective actions
A corrective action hangs off its incident: a title, an assignee, a due date, and a status. They use the same five-state task lifecycle the rest of the platform uses:
Initiated → In Progress → Ready for Review → Closed, with Void as a dead end.
A corrective action can be created in Initiated, In Progress, or Ready for Review. Closed and Void are not offered at creation: a record created in its own terminal state has no history and nothing to audit.
The register shows how many corrective actions an incident has and how many are still open.
Toolbox talks
Click Record toolbox talk. A talk carries a topic ("Working at height, ladder use, silica dust"), a date, notes on What was covered, and an attendee list.
A talk is immutable once written. The topic, the notes and the date are fixed at creation. The only thing that changes afterwards is the attendee list, and only by appending. A talk record whose topic could be edited after people signed it is a record of a talk that may never have happened.
Each attendee signature stores the signer's name, a snapshot of their company and role at the time, and separately who physically performed the signing. When those differ, the record marks it as on behalf. A signature row exists only once it is signed: there is no pending or declined state, because storing a row that asserts a signature which has not happened would make every reader remember to filter it out.
Safety events on a daily log
The daily log has its own Safety events sub-log for a near miss, a violation, or a talk noted in passing. One of those can be escalated into a formal record here: near misses and violations become incidents, talks become toolbox talks, and the daily-log row keeps a pointer to whatever it became.
Linking to a daily-log row additionally requires READ_ONLY on the Daily Logs tool, and the refusal names that tool rather than saying "forbidden". Recording a safety record without a link needs no Daily Logs access at all.
An observation can also be promoted into an incident.
Safety rates report
Safety rates (TRIR/DART) is generated from Reports over a date range. It reports the recordable count, the man-hours worked in the window, and the rate the two produce.
Be precise about what it holds:
- The rate is recordable count × 200,000 ÷ man-hours. The 200,000 figure is the conventional basis of 100 people working a 2,000-hour year. No standard is cited, because none is claimed.
- Man-hours come from the daily log: workers multiplied by hours per worker, summed over every manpower entry in the range.
- DART is not computed. Days away, restricted duty and job transfer are not recorded anywhere in Struxen, so DART cannot be derived from the data held. The report says so instead of printing the recordable count under a DART label or approximating it from the injured count.
- EMR is not computed. It is issued by an insurer.
- Zero man-hours is a refusal, never a zero. With no man-hours in the window there is no rate, and the report says "Man-hours are not recorded for this range." The recordable count is still reported, because it is a real number that was really recorded.
- Every page carries the line: "Informational rates computed from recorded data. Not an official filing."
Only incidents of kind Recordable count toward the rate. That derivation lives in one place, so the rate cannot disagree with the register it was computed from.
The report needs READ on both the Safety records and Daily Logs, because the count comes from one and the man-hours from the other. A caller who can see only one is refused rather than handed a rate with half its arithmetic missing.
Permissions
Safety records gate on the Observations tool. There is no separate Safety permission today. See Permissions.
| Action | Level |
|---|---|
| Read both registers | READ_ONLY on Observations |
| Record an incident or a toolbox talk | STANDARD on Observations |
| Move an investigation forward, raise a corrective action, edit | STANDARD on Observations |
| Close or reopen an incident | ADMIN on Observations |
| Link a safety record to a daily-log entry | Additionally READ_ONLY on Daily Logs |
Limits
| Limit | Value |
|---|---|
| People per incident | 50 |
| Witness statements per incident | 50 |
| Corrective actions per incident | 100 |
| Attendees per toolbox talk | 250 |
| Incidents per project | 5,000 |
| Toolbox talks per project | 5,000 |
| Description and root cause | 10,000 characters each |
| Witness statement | 10,000 characters |
| Corrective action title | 300 characters |
| Talk topic | 300 characters |
Every enforced limit across Struxen is collected at Limits.
Troubleshooting
"Not every incident is loaded." The register hit its read ceiling and is showing part of the list. It says so rather than implying the list is complete. Filter the register down.
Close is not offered. Closing an incident needs ADMIN on the Observations tool. Starting an investigation and raising a corrective action do not.
A linked safety event was refused, naming Daily Logs. Writing the link touches a row in the daily log, so it needs READ_ONLY on Daily Logs as well. Record the incident without the link, or ask for that grant.
An edit came back as a conflict. Somebody else saved the same incident between your read and your write. Reload and re-apply your change; the other person's edit is intact.
The safety rates report refused to give a rate. No man-hours were recorded in that window. Rates are a quotient and Struxen will not invent a denominator or quietly widen the window to find one. Log manpower in the daily log for the range, or narrow the range to one that has it.
The report says the underlying read hit its ceiling. The figures were computed from an incomplete read and should not be relied on. Narrow the date range and generate it again.