Files
mpm-project-kickoff/README.md
T

126 lines
7.8 KiB
Markdown
Raw 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.
# mpm-project-kickoff
CoWork skill that runs MPM's internal project kickoff the moment a purchase order lands. It verifies the PO against the Odoo Sales Order, fills in missing line costs and writes them back to Odoo, pulls the end-agency contacts, builds the internal kickoff deck and a three-tab project budget, copies the project folder, files the PO/SOW, and opens the project's GChat space.
**Version:** 1.0.0
**Author:** Andy Gilliom
**Repo:** https://git.mpm.to/mpm/mpm-project-kickoff
**CoWork Project:** CW-031 — MPM Project Kickoff
---
## Overview
When MPM gets a PO (usually from a reseller such as TripSpark, Vontas, Avail or Passio), the user drops the PO and the quotation into a CoWork chat and calls the skill. It reads both documents, finds the matching Odoo Sales Order through the `odoo-mpm` MCP (CW-003), and catalogues every PO-versus-SO discrepancy by severity. Lines with no cost are filled in: warranty is priced from its MSRP, and the user supplies the rest. Those costs are written back to the Odoo order lines, and user-entered costs also go to the product variant, but only after the user approves a table of the changes. The skill then builds two deliverables:
- a branded **internal kickoff deck** (Google Slides, built from the Kickoff Deck.pptx template)
- a **project budget** (Google Sheet: Summary / Project Budget / Actuals), whose hardware costs use the Hardware Calculator's formulas
Next it recreates the **Test Project Folder System** for the project in the PROJECT MANAGMENT shared drive through the Google Drive MCP. The deck, budget, PO and SOW are filed into that folder, and a GChat space is created with the PM of record. Chat is handled by the MPM Google Workspace MCP when it's connected, or by Claude in Chrome otherwise.
---
## Skills
| Skill | What It Does |
|---|---|
| `mpm-project-kickoff` | End-to-end internal kickoff from a PO + quotation. Triggers on: "we got the PO", "kick off this project", "set up the project", "kickoff deck", "project budget for S0xxxx", "new project folder", or a PO/quotation dropped into chat. |
---
## Components
| Path | Purpose |
|---|---|
| `SKILL.md` | The full 11-step workflow, Odoo field map, guardrails, and the three scripts embedded as appendices (the skill runs from SKILL.md alone). |
| `scripts/build_budget.py` | Builds the three-tab budget workbook. Every cost is a live formula: rate tables by HS column (8471 / 8528 / Steel / Other), calculator-driven hardware unit costs, and Actuals inputs with variance. |
| `scripts/build_deck.py` | Builds the internal kickoff deck from `Kickoff Deck.pptx` (cover + dark-panel content layout). Text and tables share a slide while they fit, and long content continues onto extra slides. |
| `scripts/read_calculator.py` | Extracts budget rates and per-SKU factory cost / gross KG / HS column from `Hardware Calculator.xlsx` into `calc.json`. |
---
## Workflow (11 steps)
1. **Project-team inputs.** Mounting, promised timelines, hardware and software customizations, and "anything else", asked in one message and pre-filled from the PO/quote. Anything unanswered becomes a placeholder for the kickoff.
2. **PO ↔ SO verification.** Line-by-line comparison, totals, parties, terms, execution (signed/numbered), and cross-border checks, catalogued High/Medium/Low.
3. **Every line has a cost.**
- Warranty cost = MSRP × 0.7569, written to the SO line only.
- Other $0 lines use the variant's `standard_price` as the default, or the user's input.
- Approved costs are written back to Odoo.
4. **End-agency contacts.** Taken from the delivery address or, when that's the reseller, from the PO ship-to, quote name or opportunity.
5. **Internal kickoff deck.** About 9 slides, rendered and checked before upload.
6. **Project budget.**
- Project Budget tab: the Hardware Calculator's rates.
- Actuals tab: today's HS-code tariffs, or the destination country's duties when hardware ships direct to a non-US customer.
7. **Folder copy.** A server-side recreation of Test Project Folder System through the Drive MCP (a local copy fails on cloud-only files).
8. **Uploads.** `device_commit_files` straight into the new folder, then Chrome **File → Save as Google Sheets / Slides**.
9. **Filing.**
- Work order with an SOW → Contract Documents.
- PO → Purchase & Change Orders.
- A single PDF with both → both folders.
10. **GChat space.** PM of record from `crm.lead.x_studio_project_manager` (or ask). The first message links the folder, budget and deck.
11. **Wrap-up.** Links, discrepancy counts, Odoo changes, open items, and MCP-improvement notes.
A **test mode** prefixes the folder, file and space names with `Skilltest-` and labels the GChat message as a test.
---
## Setup Instructions
1. Install the skill (Save skill on the proposal card, or install the `.skill` from the CW-031 Drive folder).
2. Connect the **odoo-mpm** plugin (CW-003) with your personal Odoo API key.
3. Connect **Google Drive** (a claude.ai connector) and link your computer so the PROJECT MANAGMENT and SALES/Product Cost Information shared drives are available as connected folders.
4. Enable **Claude in Chrome** (for the Google-native conversion and GChat steps), or reconnect the **MPM Google Workspace MCP** (CW-004) if it has Chat and convert tools.
5. The scripts need `openpyxl` and `python-pptx` (already present in the CoWork sandbox). LibreOffice is used for the recalculation and render checks.
### Setup Checklist
- [ ] Skill installed
- [ ] odoo-mpm connected and authenticated
- [ ] Google Drive connector connected
- [ ] Computer linked with PROJECT MANAGMENT + Product Cost Information folders
- [ ] Claude in Chrome available (or Workspace MCP with Chat tools)
---
## Connection Details
| Field | Value |
|---|---|
| Odoo | mpmedia.odoo.com via `odoo-mpm` MCP |
| Folder template | Shared drives › PROJECT MANAGMENT › Test Project Folder System (`1ZxrBJUxL75oRtqSE3qgqSNhtGxwcTQ9K`) |
| Hardware Calculator | Shared drives › SALES › Product Cost Information › Hardware Calculator.xlsx |
| Deck template | Test Project Folder System › Meeting Notes › Kickoff Deck.pptx |
| PM of record field | `crm.lead.x_studio_project_manager` |
---
## Workflow Notes
- **Odoo writes need approval.** The skill never confirms, cancels or locks orders.
- **The template folder is never modified.** All work goes into the new copy.
- **Budget rates:** the Project Budget tab uses the Hardware Calculator's rates. The Actuals tab uses rates researched on the day, with sources cited in the sheet.
- **Known calculator issue:** `MNT-Post-EX37sw-CNTLVR` sits in the 8528 rate column, but its HS code is 7308.90.6000 steel. The skill trusts the HS code and flags it.
- **Email domains:** MPM uses `mpmedia.tv`, `messagepoint.tv` and `messagepoint.media`. All are valid, so don't flag them.
---
## Requirements
- odoo-mpm plugin (CW-003)
- Google Drive connector
- Claude in Chrome, or MPM Google Workspace MCP (CW-004)
- Linked computer with Google Drive for Desktop
- Python 3 with `openpyxl`, `python-pptx`; LibreOffice (headless)
---
## Troubleshooting
| Symptom | Fix |
|---|---|
| `cp -R` of the template fails with "Resource deadlock avoided" | Expected for cloud-only Drive files. Use the Drive MCP recreate/copy walk described in SKILL.md. |
| New project folder doesn't show up in `device_bash ls` | Drive for Desktop hasn't caught up yet. `device_commit_files` to the full Mac path still works right away. |
| Deck tables overflow or split oddly | Keep table headings under ~40 characters and put text blocks before tables. Re-render and check every slide. |
| Budget total doesn't match the PO | Check for optional lines (qty 0 under "Optional Products") and the per-line `discount_pct`. |
| GChat step can't run | Reconnect the MPM Google Workspace MCP or enable Claude in Chrome. Otherwise the skill hands over the space name, members and message to paste. |