Files
Jason StedwellandClaude Opus 5.5 5b52636003 MPM Documentation Kit v1.3 (CW-034)
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
2026-11-09 11:51:56 -06:00

67 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""TEMPLATE — Proposal (PRO). Copy this folder to <PROJECT>/source/ and fill it in.
Pre-award: the customer's need, MPM's proposed solution, why MPM, scope, investment, timeline, next
steps. It persuades with facts, not adjectives. Marked CONFIDENTIAL by default (pricing). 3–8 pages.
After award, the agreed scope becomes a SOW with its own number.
See MPM_Document_Standard.md §9.9.
Order: masthead (Prepared for · Valid until) → parties → At a glance (KPI tiles) → 1 Your situation
→ 2 Proposed solution → 3 Why Message Point Media → 4 Scope summary → 5 Investment (priced BOM)
→ 6 Timeline → 7 Assumptions and exclusions → 8 Next steps → approval → Revision history
Rules: every price comes from the quotation (never estimated); every proof point in §3 is a fact
(deployments, agencies, years, uptime) you can back up. No superlatives.
"""
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
from mpmdoc.brand import PROVIDER
doc = Doc(
number="PRO-MPM-SUBJ-01", rev="0.1", date="2026-11-06", customer="Agency name", subject="Project",
title="Wayside Real-Time Signage for Agency",
lede="What MPM proposes, for whom, in one line.",
meta=[("Prepared for", "Agency name"), ("Valid until", "Dec 6, 2026")],
slug="Customer_Project_Proposal",
history=[("0.1", "2026-11-06", "Initial draft.")],
)
price = doc.priced([ # extended prices from Quotation S00000; totals are computed
("Hardware subtotal", [("SKU-0000", "Outdoor LED sign, model", 4, 40000.00), ("MNT-0000", "Mounting kit", 4, 2000.00)]),
("Services subtotal", [("SVC-INST", "Installation, per sign", 4, 8000.00), ("SVC-PM", "Project management", 1, 3000.00)]),
])
doc.add(
doc.parties([("Prepared for", {"name": "Agency name", "contact": "Contact, title", "address": "City, ST"}),
("Prepared by", PROVIDER)]),
doc.kpis([("Signs", "4", "Wayside, outdoor", "strong"), ("Investment", doc.money(doc.price_total), "plus applicable tax", "key"),
("Install", "8 weeks", "from award", "")]),
doc.section("1. Your situation"),
doc.p("The agency's need in its own terms: riders, stops, current system, what is not working."),
doc.section("2. Proposed solution"),
doc.p("What MPM will install and how it works for the rider. One paragraph, then the parts."),
doc.bullets(["Signs: model, size, brightness, accessibility (audio, contrast).", "Content: MP.TV platform, real-time feed.",
"Support: monitoring, warranty, service."]),
doc.section("3. Why Message Point Media"),
doc.bullets(["Fact: comparable deployments, with agency names where permitted.", "Fact: years in transit signage.",
"Fact: platform uptime or support response, from records."]),
doc.section("4. Scope summary"),
doc.table([("Phase", "", "22%"), ("MPM provides", ""), ("Agency provides", "", "30%")],
[["Survey and design", "Site survey, mounting design", "Site access"], ["Install", "Hardware, installation, configuration", "Power and network at each pole"]]),
doc.section("5. Investment"),
price,
doc.note("Pricing", "Per MPM Quotation S00000, dated Nov 6, 2026. Valid until Dec 6, 2026. Sales tax not included."),
doc.section("6. Timeline"),
doc.table([("Phase", ""), ("Duration", "", "20%"), ("Starts", "", "25%")], [["Survey and design", "2 weeks", "Award"], ["Production", "4 weeks", "Design approval"], ["Install", "2 weeks", "Delivery"]]),
doc.section("7. Assumptions and exclusions"),
doc.two(doc.sub("Assumptions") + doc.bullets(["Power and network available at each location."]),
doc.sub("Exclusions") + doc.bullets(["Permits, unless listed in §5.", "Civil work and trenching."])),
doc.section("8. Next steps"),
doc.steps(["Review this proposal and send questions to MPM.", "Issue a purchase order or notice of award.",
"MPM issues the Statement of Work and schedules the site survey."]),
doc.approval("Jason Stedwell", "Director of Technical Services, Message Point Media | Irondale, AL", "2026-11-06", label="Submitted by"),
)
doc.build()