66 lines
4.2 KiB
Python
66 lines
4.2 KiB
Python
"""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()
|