DOT D&A binder: add driver enrollment guidance + Form G roster
Customers (the DER) had no concrete how-to for onboarding/enrolling drivers or what information to collect. Add: - Section 1 'Enrolling a driver (new-hire onboarding)' subsection: exact info to collect, the onboarding sequence (collect info, sign Forms A/B, Clearinghouse query, prior-employer inquiry, add to C-TPA pool, pre-employment test, wait for MRO negative), and a driver-removal note. - Form G — Driver Enrollment & Covered-Employee Roster: per-driver enrollment block (name, DOB, SSN last4, CDL #/state, contact, hire date, test result, Clearinghouse/prior-employer status) plus a roster table for the covered pool. - TOC, email, and handler text updated A-F -> A-G.
This commit is contained in:
parent
7c79cc9a08
commit
b569a32f3a
3 changed files with 110 additions and 4 deletions
|
|
@ -15,7 +15,7 @@ program under the applicable DOT testing regulation:
|
|||
6. Violations, SAP access, return-to-duty / follow-up
|
||||
7. EAP / rehab / treatment resources
|
||||
8. Recordkeeping instructions + retention schedule
|
||||
9. All required compliance forms (Forms A-F), each on its own page
|
||||
9. All required compliance forms (Forms A-G), each on its own page
|
||||
10. The regulations (citations + how to read the actual rule text)
|
||||
(+ optional state Drug-Free Workplace addendum)
|
||||
|
||||
|
|
@ -424,7 +424,7 @@ def generate_da_binder(
|
|||
"**Section 7 — EAP, Rehab & Treatment Resources.** Employee Assistance "
|
||||
"Program information and treatment referrals.",
|
||||
"**Section 8 — Recordkeeping.** What to keep, where, and for how long.",
|
||||
"**Section 9 — Required Forms (A-F).** Every form you need, ready to "
|
||||
"**Section 9 — Required Forms (A-G).** Every form you need, ready to "
|
||||
"use, each on its own page.",
|
||||
"**Section 10 — The Regulations.** Citations and how to read the actual "
|
||||
"rule text.",
|
||||
|
|
@ -510,6 +510,56 @@ def generate_da_binder(
|
|||
"Make sure selected employees proceed to collection immediately.",
|
||||
"Maintain the confidential records file and produce it on audit.",
|
||||
])
|
||||
|
||||
b.h3("Enrolling a driver (new-hire onboarding)")
|
||||
b.body(
|
||||
"Every covered employee must be enrolled in your testing program and "
|
||||
"random pool, and must pass a pre-employment drug test, **before** they "
|
||||
"first perform safety-sensitive functions. Use Form G to capture each "
|
||||
"driver's information and add them to your roster. Follow this sequence "
|
||||
"for every new hire:")
|
||||
enroll = [
|
||||
"**Collect the driver's information** (Form G): full legal name, date "
|
||||
"of birth, the last four digits of the SSN (or the full SSN if your "
|
||||
"C-TPA requires it for lab matching), CDL number and state, address, "
|
||||
"phone, email, hire date, and position.",
|
||||
"**Have the driver sign Form A** (policy acknowledgment) and **Form B** "
|
||||
"(pre-employment consent and prior-employer release).",
|
||||
]
|
||||
if meta.get("clearinghouse"):
|
||||
enroll.append(
|
||||
"**Run the FMCSA Clearinghouse pre-employment full query** (with "
|
||||
"the driver's electronic consent in the Clearinghouse) and confirm "
|
||||
"the driver is **not prohibited**.")
|
||||
enroll.append(
|
||||
"**Request the prior-employer DOT testing history** for the past "
|
||||
"three years (Form B); for CDL drivers the Clearinghouse covers "
|
||||
"violations on/after 1/6/2020 — still request manual records for "
|
||||
"the period before that.")
|
||||
else:
|
||||
enroll.append(
|
||||
"**Request the prior-employer DOT testing history** for the past "
|
||||
"two years (Form B) and document the inquiry.")
|
||||
enroll += [
|
||||
"**Add the driver to your C-TPA roster / random pool.** Send Form G to "
|
||||
f"{provider_name} (or enter it in their portal) so the driver is in the "
|
||||
"next random selection. Do this on or before the hire date.",
|
||||
"**Send the driver for the pre-employment drug test** at an approved "
|
||||
"collection site. The site uses the federal chain-of-custody form "
|
||||
"(CCF) — you do not supply it. Give the driver the collection site "
|
||||
"name, address, hours, and any donor pass/authorization your C-TPA "
|
||||
"issues.",
|
||||
"**Wait for the MRO-verified negative result** before letting the "
|
||||
"driver perform any safety-sensitive function. Keep the negative "
|
||||
"result and all enrollment records in the driver's confidential file.",
|
||||
]
|
||||
b.numbered(enroll)
|
||||
b.body(
|
||||
"**Removing a driver:** when a covered employee leaves or stops "
|
||||
"performing safety-sensitive functions, notify your C-TPA to remove "
|
||||
"them from the random pool and note the departure on your roster "
|
||||
"(Form G). Keep their records for the required retention period "
|
||||
"(Section 8).")
|
||||
b.page_break()
|
||||
|
||||
# ── Section 2 — Written policy ──────────────────────────────────────────
|
||||
|
|
@ -895,6 +945,7 @@ def generate_da_binder(
|
|||
"**Form D** — Reasonable-Suspicion Observation Record.",
|
||||
"**Form E** — Post-Accident Testing Decision Worksheet.",
|
||||
"**Form F** — Supervisor Training Completion Record.",
|
||||
"**Form G** — Driver Enrollment & Covered-Employee Roster.",
|
||||
])
|
||||
|
||||
_form_a(b, carrier_name, meta)
|
||||
|
|
@ -903,6 +954,7 @@ def generate_da_binder(
|
|||
_form_d(b, carrier_name)
|
||||
_form_e(b, carrier_name)
|
||||
_form_f(b, carrier_name)
|
||||
_form_g(b, carrier_name, meta, provider_name)
|
||||
|
||||
# ── Section 10 — Regulations ───────────────────────────────────────────
|
||||
b.page_break()
|
||||
|
|
@ -1201,6 +1253,60 @@ def _form_f(b, carrier_name):
|
|||
"reasonable-suspicion testing decision.")
|
||||
|
||||
|
||||
def _form_g(b, carrier_name, meta, provider_name):
|
||||
_form_header(b, "G", "Driver Enrollment & Covered-Employee Roster")
|
||||
b.body(
|
||||
f"Complete one enrollment block for each covered employee of "
|
||||
f"{carrier_name or 'the Company'} and add them to the roster below. "
|
||||
f"Send the information to {provider_name} so the employee is placed in "
|
||||
"the random pool, and keep this form in your records. Enroll a driver "
|
||||
"**before** they perform any safety-sensitive function.")
|
||||
|
||||
b.h3("New-driver enrollment")
|
||||
for label in [
|
||||
"Full legal name:",
|
||||
"Date of birth: SSN (last 4): ____ ____",
|
||||
"CDL number: CDL state:",
|
||||
"Address:",
|
||||
"Phone: Email:",
|
||||
"Position / job title:",
|
||||
"Hire date: Date added to random pool:",
|
||||
]:
|
||||
b.fill_line(label + " " + "_" * max(4, 58 - len(label)), gap=15)
|
||||
b.spacer(4)
|
||||
for label in [
|
||||
"Pre-employment drug test result: [ ] Negative [ ] Pending "
|
||||
"[ ] Positive/Refusal (do NOT place on duty)",
|
||||
]:
|
||||
b.fill_line(label, gap=8)
|
||||
if meta.get("clearinghouse"):
|
||||
b.fill_line(
|
||||
"Clearinghouse pre-employment full query: [ ] Not prohibited "
|
||||
"[ ] Prohibited Date run: ____________", gap=8)
|
||||
b.fill_line(
|
||||
"Prior-employer DOT testing history requested: [ ] Yes [ ] No "
|
||||
"[ ] No prior DOT employer", gap=8)
|
||||
b.fill_line(
|
||||
"Forms collected: [ ] Form A (policy ack.) [ ] Form B "
|
||||
"(consent/inquiry)", gap=12)
|
||||
|
||||
b.h3("Covered-employee roster")
|
||||
b.body(
|
||||
"Keep this roster current. Add each new hire and mark the date a "
|
||||
"departing employee was removed from the random pool.", italic=True)
|
||||
b.table(
|
||||
["Employee name", "CDL # / state", "Position", "Added to pool",
|
||||
"Removed (date)"],
|
||||
[["", "", "", "", ""] for _ in range(9)],
|
||||
[2.0, 1.4, 1.1, 1.0, 1.1],
|
||||
alt=False,
|
||||
)
|
||||
b.small(
|
||||
"Retain enrollment records and the negative pre-employment result in "
|
||||
"each driver's confidential file. Notify your C-TPA promptly of every "
|
||||
"addition and removal so your random rate stays accurate.")
|
||||
|
||||
|
||||
# ── Misc helpers ────────────────────────────────────────────────────────────
|
||||
def _covered_count(cdl_drivers, owner_operators) -> str:
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -859,7 +859,7 @@ def _send_instant_delivery(
|
|||
"testing policy, step-by-step instructions for your Designated "
|
||||
"Employer Representative, supervisor reasonable-suspicion training "
|
||||
"materials, SAP and treatment resources, a recordkeeping schedule, "
|
||||
"and every form you need (Forms A–F).",
|
||||
"and every form you need (Forms A–G).",
|
||||
"<strong>What to do next:</strong> open the document, fill in the "
|
||||
"blanks (DER name, testing provider, effective date), have it "
|
||||
"reviewed by your counsel if you wish, then sign the policy, give a "
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ automatically (no admin step). DOCX is used so the carrier and its counsel
|
|||
can review and adapt the program before adopting it. The binder bundles the
|
||||
written testing policy, program-management instructions, supervisor-training
|
||||
materials and access, EAP / rehab / SAP resources, regulation citations,
|
||||
random-testing instructions, all required forms (A-F, each on its own page),
|
||||
random-testing instructions, all required forms (A-G, each on its own page),
|
||||
and recordkeeping guidance.
|
||||
|
||||
Policy variant (DOT operating administration) selection:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue