MPM Document Standard 1.3, mpmdoc build engine, templates for TN, INS, SOP, BOM, SVY, TAP, DWG, TSB, PRO, SOW and WO (Chinese editions for TN and DWG), glossary, MPM fonts and logos, and the mpm-technical-documents plugin 1.3.0. Worked examples ship in the kit zip on Drive only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWatTMmqmGatgHjDZvWs5b
77 lines
4.4 KiB
Markdown
77 lines
4.4 KiB
Markdown
# _STANDARDS
|
|
|
|
Standards, engine and templates for documents produced in this project.
|
|
|
|
| File | What it is |
|
|
|---|---|
|
|
| `MPM_Document_Standard.md` | **The rules**: types, numbering, revisions, files, layout, writing. Read this first. |
|
|
| `glossary_zh.md` | Master English → Simplified Chinese terms for Chinese editions (standard §12). |
|
|
| `registry.md` | Customer codes and every issued document number (a snapshot: claim numbers in the shared master registry, standard §11). |
|
|
| `mpmdoc/` | The build engine: stylesheet, header/footer, components, PDF renderer. Fonts and logos come from `../_ASSETS/mpm/`. |
|
|
| `templates/<TYPE>/` | Starter `build.py` + `figs.py` per MPM document type (TN, INS, SOP, BOM, SVY, TAP, DWG, TSB, PRO, SOW, WO), with a `_preview_*.pdf`. TN and DWG also have `build_zh.py` (Chinese edition). |
|
|
|
|
## Start a new document
|
|
|
|
1. Register the number in `registry.md` (and the customer code in `mpmdoc/brand.py` if new).
|
|
2. Copy `templates/<TYPE>/` to `<PROJECT FOLDER>/source/`.
|
|
3. Fill in `build.py` (content) and `figs.py` (source numbers + figures).
|
|
4. Run `python3 build.py` from `source/`. The PDF lands in the project folder.
|
|
|
|
`build.py` finds `_STANDARDS` by walking up from its own folder, so a project folder
|
|
can sit anywhere under DOCUMENTATION PROJECT.
|
|
|
|
## Requirements
|
|
|
|
Python 3.10+, `pip install playwright && playwright install chromium`.
|
|
Run `setup.sh` in the kit root once to install them, plus poppler (see `START_HERE.md`).
|
|
|
|
## Engine cheat sheet
|
|
|
|
```python
|
|
doc = Doc(number, rev, date, title, lede, meta=[(k, v), (k, v)], slug, history,
|
|
customer=None, subject="", kicker=None, footer=None, classification=None)
|
|
doc.add(
|
|
doc.kpis([(label, value, sub, tone)]), # tone: None|key|strong|ok|bad
|
|
doc.result([...]) / doc.before_you_start([...]),
|
|
doc.section("Title", new_page=False),
|
|
doc.table(cols, rows, caption=, ref=), # KeyRow([...]), TotalRow([...]), up(), dn(), TBC
|
|
doc.calc(["# comment", (name, working, result, "PASS")]),
|
|
doc.figure(svg, caption, ref=), # cite as [[fig:ref]] / [[tab:ref]]
|
|
doc.note(kicker, body, tone="info|warn|ok|verify"),
|
|
doc.two(left_html, right_html), doc.bullets([...], check=True),
|
|
doc.assumptions([...], [...]), doc.signoff(),
|
|
# procedures (INS / SOP)
|
|
doc.before_you_start([...]), doc.glance([(label, sub[, mark, other])]),
|
|
doc.step(n, kicker, title, doc.steps([...]) + doc.note(...), figure, wide=False, side="35%"),
|
|
doc.shot("img/x.jpg", caption, width), doc.shots(...), ui("Button"), doc.chain([...]),
|
|
doc.special(kicker, title, body, figure), doc.checklist(title, [...], cols=2),
|
|
# BOM
|
|
doc.bom([(section, [(item, spec, qty, uom[, part_no])], subtotal_label)]),
|
|
# surveys / plans (SVY / TAP)
|
|
doc.kv([(label, value)]), doc.part(label, title, internal=False), doc.photo("img/x.jpg", caption, ref),
|
|
doc.photos(...), verify(), doc.transcript(heading, [lines]), doc.approval(name, role, date),
|
|
# commercial and field (PRO / SOW / WO / TSB); MPM provider block: from mpmdoc.brand import PROVIDER
|
|
doc.parties([(heading, {name, contact, address, phone, email, web, coordinates})]),
|
|
doc.priced([(subtotal_label, [(sku, description, qty, extended)])]), # totals computed -> doc.price_total
|
|
doc.milestones([(milestone, criteria, share, amount)], expect=doc.price_total), doc.money(v),
|
|
doc.pill(text, "red|gold|grey|ink|green"), doc.fields([label | (label, hint)], cols=2, title=),
|
|
doc.table(cols, [[""] * n] * 6, cls="fill"), doc.signatures([(role, who)]),
|
|
)
|
|
# Chinese edition (TN / DWG): source/build_zh.py next to build.py, same figs.py; build English first
|
|
# tr = i18n.Translator({doc phrases}); F = {k: tr.svg(f()) for k, f in FIGS.items()}; tr.check()
|
|
# Doc(..., lang="zh") / Drawing(..., lang="zh") -> {NUMBER}_{slug}_ZH_Rev{X.Y}.pdf
|
|
# TSB: one build.py loops over editions ("customer", slug "_TSB") and ("internal", slug "_TSB-Internal")
|
|
|
|
# drawings (DWG): see templates/DWG/build.py
|
|
dwg = Drawing(number, rev, date, title, subtitle, project, client, slug, history, location, discipline, drawn, checked, approved)
|
|
dwg.sheet(views=[dwg.view(svg, n, title, scale, area="1 / 1 / 5 / 3")], schedule=[(tag, name, desc, qty)], notes=[...])
|
|
dwg.build()
|
|
doc.build()
|
|
|
|
```
|
|
|
|
## Changing the standard
|
|
|
|
Edit `MPM_Document_Standard.md` and the engine together, bump the standard's version line,
|
|
and rebuild one document of each affected type to check.
|