SmartQHSE's picture
publish: interactive incident-rate calculator
366e22f verified
Raw
History Blame Contribute Delete
10.7 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HSE Incident Rate Calculator — TRIR / LTIFR / DART / AFR | SmartQHSE</title>
<meta name="description" content="Interactive calculator for TRIR (OSHA Total Recordable Incident Rate), LTIFR (Lost Time Injury Frequency Rate), DART (Days Away Restricted Transferred), AFR (Accident Frequency Rate), and Severity Rate. Formulas + benchmarks + open data. CC BY 4.0." />
<link rel="canonical" href="https://huggingface.co/spaces/SmartQHSE/hse-incident-rate-calculator" />
<style>* { box-sizing: border-box; }
body { font-family: system-ui, -apple-system, sans-serif; margin: 0; background: #fafaf9; color: #191919; line-height: 1.55; }
header { background: #191919; color: white; padding: 32px 24px; text-align: center; }
header h1 { margin: 0 0 8px 0; font-size: 28px; font-weight: 700; }
header p { margin: 0 auto; opacity: 0.75; font-size: 14px; max-width: 640px; }
header a { color: #0B998C; text-decoration: none; }
main { max-width: 900px; margin: 0 auto; padding: 24px; }
.calc { background: white; border: 1px solid #e5e5e5; border-radius: 12px; padding: 24px; margin-bottom: 20px; }
.calc h2 { margin: 0 0 4px 0; font-size: 20px; font-weight: 700; }
.calc .formula { font-family: ui-monospace, "Cascadia Code", monospace; background: #f5f5f4; padding: 8px 12px; border-radius: 6px; font-size: 13px; margin: 8px 0 16px 0; color: #37352F; }
.calc .source { font-size: 12px; color: #6B6B6B; margin-bottom: 16px; }
.calc .source a { color: #0B998C; text-decoration: none; }
.input-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
.input-row label { display: flex; flex-direction: column; font-size: 13px; color: #6B6B6B; gap: 4px; }
.input-row input { padding: 10px 12px; border: 1px solid #e5e5e5; border-radius: 8px; font-size: 16px; outline: none; font-family: inherit; }
.input-row input:focus { border-color: #0B998C; box-shadow: 0 0 0 3px rgba(11,153,140,0.1); }
.result { background: linear-gradient(135deg, #0B998C 0%, #057264 100%); color: white; padding: 16px 20px; border-radius: 8px; font-size: 18px; font-weight: 700; margin-top: 12px; display: flex; justify-content: space-between; align-items: baseline; }
.result .label { font-size: 13px; font-weight: 500; opacity: 0.85; }
.result .value { font-size: 28px; }
.result .note { font-size: 12px; opacity: 0.85; margin-top: 4px; font-weight: 400; }
.benchmark { font-size: 12px; color: #6B6B6B; margin-top: 8px; }
.benchmark strong { color: #37352F; }
nav.intra { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px; }
nav.intra a { padding: 6px 12px; background: white; border: 1px solid #e5e5e5; border-radius: 999px; text-decoration: none; color: #37352F; font-size: 13px; }
nav.intra a:hover { border-color: #0B998C; color: #0B998C; }
footer { text-align: center; padding: 32px 24px; color: #6B6B6B; font-size: 13px; border-top: 1px solid #e5e5e5; margin-top: 40px; }
footer a { color: #0B998C; text-decoration: none; }
</style>
</head>
<body>
<header>
<h1>HSE Incident Rate Calculator</h1>
<p>TRIR · LTIFR · DART · AFR · Severity Rate · TRIFR — calculated to OSHA 29 CFR 1904, ILO and HSE methods. Benchmarks from <a href="https://huggingface.co/datasets/SmartQHSE/hse-benchmarks-2026">SmartQHSE/hse-benchmarks-2026</a>. CC BY 4.0.</p>
</header>
<main>
<nav class="intra">
<a href="#trir">TRIR</a>
<a href="#ltifr">LTIFR</a>
<a href="#dart">DART</a>
<a href="#afr">AFR</a>
<a href="#severity">Severity Rate</a>
<a href="#trifr">TRIFR</a>
</nav>
<section class="calc" id="trir">
<h2>TRIR — OSHA Total Recordable Incident Rate</h2>
<div class="formula">TRIR = (recordable cases × 200,000) ÷ total hours worked</div>
<div class="source">Source: <a href="https://www.osha.gov/recordkeeping" target="_blank" rel="noopener">OSHA 29 CFR 1904</a> · 200,000 ≈ 100 employees × 40 hr/wk × 50 wk/yr · <a href="https://www.smartqhse.com/trir-calculator" target="_blank" rel="noopener">Full guide</a></div>
<div class="input-row">
<label>Recordable cases<input type="number" id="trir-cases" min="0" step="1" value="3" /></label>
<label>Total hours worked<input type="number" id="trir-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">TRIR</span><span class="value" id="trir-out"></span></div>
<div class="benchmark" id="trir-bench">US private-industry avg: <strong>2.7</strong> · Construction: <strong>2.5</strong> · Mining: <strong>1.7</strong> · Manufacturing: <strong>2.8</strong> (BLS SOII 2024)</div>
</section>
<section class="calc" id="ltifr">
<h2>LTIFR — Lost Time Injury Frequency Rate</h2>
<div class="formula">LTIFR = (LTI cases × 1,000,000) ÷ total hours worked</div>
<div class="source">Source: <a href="https://www.ilo.org/global/statistics-and-databases/lang--en/index.htm" target="_blank" rel="noopener">ILO Resolution III</a> · International standard, per million hours · <a href="https://www.smartqhse.com/safety-blog/ltir-vs-trir-vs-ltifr-differences" target="_blank" rel="noopener">LTIFR vs TRIR</a></div>
<div class="input-row">
<label>Lost time injuries<input type="number" id="ltifr-lti" min="0" step="1" value="2" /></label>
<label>Total hours worked<input type="number" id="ltifr-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">LTIFR</span><span class="value" id="ltifr-out"></span></div>
<div class="benchmark">UK HSE all industries: <strong>~1.0</strong> · GCC oil &amp; gas (IOGP): <strong>0.4–0.8</strong> · Construction (UAE OSHAD-SF): <strong>~3.0</strong></div>
</section>
<section class="calc" id="dart">
<h2>DART — Days Away, Restricted, or Transferred Rate</h2>
<div class="formula">DART = (DART cases × 200,000) ÷ total hours worked</div>
<div class="source">Source: <a href="https://www.osha.gov/recordkeeping" target="_blank" rel="noopener">OSHA 29 CFR 1904.7</a> · subset of TRIR; cases with days away or job transfer/restriction</div>
<div class="input-row">
<label>DART cases<input type="number" id="dart-cases" min="0" step="1" value="2" /></label>
<label>Total hours worked<input type="number" id="dart-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">DART</span><span class="value" id="dart-out"></span></div>
<div class="benchmark">US private-industry avg: <strong>1.7</strong> (BLS SOII 2024)</div>
</section>
<section class="calc" id="afr">
<h2>AFR — Accident Frequency Rate</h2>
<div class="formula">AFR = (accidents × 1,000,000) ÷ total hours worked</div>
<div class="source">Generic frequency rate per million hours; UK HSE / GCC default. Use this when "accident" is broader than OSHA recordable.</div>
<div class="input-row">
<label>Accidents<input type="number" id="afr-acc" min="0" step="1" value="5" /></label>
<label>Total hours worked<input type="number" id="afr-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">AFR</span><span class="value" id="afr-out"></span></div>
</section>
<section class="calc" id="severity">
<h2>Severity Rate — Days Lost per Million Hours</h2>
<div class="formula">Severity = (days lost × 1,000,000) ÷ total hours worked</div>
<div class="source">Source: <a href="https://www.ilo.org/global/statistics-and-databases/lang--en/index.htm" target="_blank" rel="noopener">ILO Resolution III</a> · how serious the injuries are, on average</div>
<div class="input-row">
<label>Total days lost<input type="number" id="sev-days" min="0" step="1" value="40" /></label>
<label>Total hours worked<input type="number" id="sev-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">Severity Rate</span><span class="value" id="sev-out"></span></div>
</section>
<section class="calc" id="trifr">
<h2>TRIFR — Total Recordable Injury Frequency Rate</h2>
<div class="formula">TRIFR = (recordable injuries × 1,000,000) ÷ total hours worked</div>
<div class="source">Australia / NZ / IOGP standard. Same numerator as TRIR but per-million-hours basis. <a href="https://www.smartqhse.com/safety-blog/ltir-vs-trir-vs-ltifr-differences" target="_blank" rel="noopener">Comparison</a></div>
<div class="input-row">
<label>Recordable injuries<input type="number" id="trifr-cases" min="0" step="1" value="3" /></label>
<label>Total hours worked<input type="number" id="trifr-hours" min="0" step="1000" value="500000" /></label>
</div>
<div class="result"><span class="label">TRIFR</span><span class="value" id="trifr-out"></span></div>
<div class="benchmark">IOGP global oil &amp; gas: <strong>~0.83</strong> · Australian construction: <strong>~5.2</strong> (Safe Work Australia)</div>
</section>
</main>
<footer>
<p>Open data: <a href="https://huggingface.co/datasets/SmartQHSE/hse-benchmarks-2026">Benchmarks</a> · <a href="https://huggingface.co/datasets/SmartQHSE/osha-rates-2026">OSHA Rates</a> · <a href="https://huggingface.co/datasets/SmartQHSE/hse-glossary">Glossary</a> · <a href="https://huggingface.co/collections/SmartQHSE/smartqhse-open-hse-data-69f7597712196f8018c2dab5">Full collection</a><br />
Built by <a href="https://www.smartqhse.com">SmartQHSE</a> — the AI-native HSE/QHSE platform. CC BY 4.0.</p>
</footer>
<script>
function calc(rateInputs, multiplier, outId, benchId) {
const update = () => {
const num = Number(document.getElementById(rateInputs.num).value) || 0;
const hrs = Number(document.getElementById(rateInputs.hrs).value) || 0;
const out = document.getElementById(outId);
if (hrs <= 0) { out.textContent = "—"; return; }
const v = (num * multiplier) / hrs;
out.textContent = v.toFixed(2);
};
document.getElementById(rateInputs.num).addEventListener("input", update);
document.getElementById(rateInputs.hrs).addEventListener("input", update);
update();
}
calc({num:"trir-cases", hrs:"trir-hours"}, 200000, "trir-out");
calc({num:"ltifr-lti", hrs:"ltifr-hours"}, 1000000, "ltifr-out");
calc({num:"dart-cases", hrs:"dart-hours"}, 200000, "dart-out");
calc({num:"afr-acc", hrs:"afr-hours"}, 1000000, "afr-out");
calc({num:"sev-days", hrs:"sev-hours"}, 1000000, "sev-out");
calc({num:"trifr-cases", hrs:"trifr-hours"}, 1000000, "trifr-out");
</script>
</body>
</html>