52 lines
3.4 KiB
Python
52 lines
3.4 KiB
Python
"""TEMPLATE — Field Work Order (WO). Copy this folder to <PROJECT>/source/ and fill it in.
|
||||
|
|
|
|||
|
|
A dispatch ticket for one job at one site, for MPM technicians or a subcontract installer. It says where,
|
|||
|
|
when, what to do, what to bring and what to send back; the technician fills in the completion record and
|
|||
|
|
both parties sign. Marked INTERNAL USE (it carries contacts and access details). 1–3 pages.
|
|||
|
|
See MPM_Document_Standard.md §9.11.
|
|||
|
|
|
|||
|
|
Order: masthead (Scheduled · Assigned to) → status pill → parties (Site · Site contact · MPM dispatch)
|
|||
|
|
→ job details (kv) → Safety → Work to be performed → Parts and materials → Return with this work order
|
|||
|
|
→ Completion record → signatures → Revision history
|
|||
|
|
Status pill: Dispatched (gold) · On site (ink) · Complete (green) · On hold (red).
|
|||
|
|
The signed, completed copy is scanned into the project's _INPUTS/ (never edited); this PDF stays as issued.
|
|||
|
|
Issue at 1.0; a re-dispatch with changed scope or date is 1.1.
|
|||
|
|
"""
|
|||
|
|
import sys, pathlib
|
|||
|
|
HERE = pathlib.Path(__file__).resolve().parent
|
|||
|
|
sys.path.insert(0, str(next(p / "_STANDARDS" for p in HERE.parents if (p / "_STANDARDS").is_dir())))
|
|||
|
|
|
|||
|
|
from mpmdoc import Doc
|
|||
|
|
|
|||
|
|
doc = Doc(
|
|||
|
|
number="WO-MPM-SITE-01", rev="1.0", date="2026-11-06", customer="Agency", subject="Site",
|
|||
|
|
title="Install: Site Name, Sign Type",
|
|||
|
|
lede="One line: the job, the site, the outcome.",
|
|||
|
|
meta=[("Scheduled", "Nov 10, 2026 · 8:00 AM"), ("Assigned to", "Technician · Company")],
|
|||
|
|
slug="Customer_Site_Work-Order",
|
|||
|
|
history=[("1.0", "2026-11-06", "Issued.")],
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
doc.add(
|
|||
|
|
doc.pill("Dispatched", "gold"),
|
|||
|
|
doc.parties([("Site", {"name": "Stop or facility name", "address": "Street, City, ST", "coordinates": "00.00000, -00.00000"}),
|
|||
|
|
("Site contact", {"name": "Name", "contact": "Role, agency", "phone": "000-000-0000"}),
|
|||
|
|
("MPM dispatch", {"name": "Jason Stedwell", "contact": "Director of Technical Services", "phone": "000-000-0000"})]),
|
|||
|
|
doc.kv([("Customer / project", "Agency · project name"), ("Installer", "MPM, or subcontractor company and lead"),
|
|||
|
|
("Access", "Hours, badge, escort, keys, lift or traffic control"),
|
|||
|
|
("Reference documents", "INS-…, DWG-…, SVY-… (bring or have on a device)")]),
|
|||
|
|
doc.note("Safety", "PPE, work at height, traffic control, lockout at the breaker before opening any enclosure.", tone="warn"),
|
|||
|
|
doc.section("Work to be performed"),
|
|||
|
|
doc.bullets(["Confirm the mounting point matches the drawing.", "Mount the sign; torque fasteners to spec.",
|
|||
|
|
"Terminate power and network; confirm the sign reports online on MP.TV."], check=True),
|
|||
|
|
doc.bom([("Parts and materials", [("Sign assembly", "Model, size", 1, "ea", "PN-0000"), ("Mounting kit", "Per drawing", 1, "kit", "PN-0000")],
|
|||
|
|
"Parts")], checks=("Staged", "Used")),
|
|||
|
|
doc.section("Return with this work order"),
|
|||
|
|
doc.bullets(["Photos: before, mounted, wired, powered with content.", "Serial number of every unit installed or removed.",
|
|||
|
|
"Any difference from the drawing, measured."], check=True),
|
|||
|
|
doc.fields([("Arrival", "Date and time"), ("Departure", "Date and time"), ("Serial(s) installed", ""), ("Serial(s) removed", ""),
|
|||
|
|
("Online on MP.TV", "Time confirmed"), ("Issues or deviations", "")], cols=2, title="Completion record"),
|
|||
|
|
doc.signatures([("Technician", "Name · company · date"), ("Site contact", "Name · date")]),
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
doc.build()
|