00-Index.md
Language Markdown4.2 KB103 lines
---type: mocscope: project-roottags: [outreach, moc, index]created: 2026-06-16updated: 2026-08-12---# 00 Index: Quarterly OutreachBird's-eye view of the client database. Orientation and process live in [[README]];how Claude works here is in [[CLAUDE]].## At a glanceThis repo ships a **generated sample**, not a real client book: `07-Automation/sample/generate_sample.py`invents it and `run_sample.py` replays two Monday runs (2026-09-14 and 2026-09-21). See [[README]].State after the 2026-09-21 run:- **130 client stubs** in `03-Clients/client-stubs/`: the partner base (Palladium and up bylifetime spend). Palladium 86, Platinum 29, Iridium 8, Rhodium 7.- **381 Plinth accounts** in the local order history, from which the 130 partner clients are classified.- **130 chunks** in the XML census (`partner-client-master-list.xml`); **43 clients sit in atleast one outreach pipeline** (45 pipeline blocks, so 2 sit in more than one).- **54 deals** across the four audited funnels, 28 of them with a verified touch.- Last routing pass: Winback 50, cat 24 first touch 31, Dormant queue 4, excluded 45.- Maintained by the **Weekly Partner Client Pipeline**, Mondays 06:00 CT.Details in [[Weekly-Partner-Pipeline-SOP]]; current working state in [[HEARTBEAT]].## Open tasksEvery unchecked task in the vault, wherever it lives. Add a `- [ ]` anywhere and it appears here.```dataviewTASKWHERE !completedGROUP BY file.link```## Tier mix```dataviewTABLE WITHOUT ID user_group_correct AS "Tier", length(rows) AS "Clients"FROM "03-Clients/client-stubs"GROUP BY user_group_correctSORT length(rows) DESC```## Placements by tier × pipelineCells count **placements**, not people: a client in two funnels is counted in both.The `Clients` column counts each person once. A pipeline block only counts if it carries areal `stage`; empty scaffolding is ignored, which is what used to inflate this table.```dataviewjs// Client tier × outreach pipeline. Cells are PLACEMENTS; `Clients` is distinct people.// A block with no `stage` is scaffolding, not a placement. A batch of such shells was removed// on 2026-08-12 and this guard stops any future ones inflating the counts.const order = ["Retail","Palladium Partner","Platinum Partner","Iridium Partner","Rhodium Partner"];const cols = [["Check-In","quarterly_checkin"],["Winback","winback"],["Partner Tier Upgrade","partner_outreach"]];const placed = (op, key) => {const b = op?.[key];return !!(b && String(b.stage ?? "").trim());};const counts = {}, people = {};const totals = { quarterly_checkin: 0, winback: 0, partner_outreach: 0 };let distinct = 0;for (const p of dv.pages('"03-Clients/client-stubs"')) {const op = p.outreach_pipelines;if (!op) continue;const hits = cols.filter(([, key]) => placed(op, key));if (!hits.length) continue;const tier = (p.user_group_correct || p.user_group || "(unset)").toString();if (!counts[tier]) { counts[tier] = { quarterly_checkin: 0, winback: 0, partner_outreach: 0 }; people[tier] = 0; }people[tier]++; distinct++;for (const [, key] of hits) { counts[tier][key]++; totals[key]++; }}const extra = Object.keys(counts).filter(k => !order.includes(k));const rows = [...order, ...extra].filter(t => counts[t]).map(t => {const c = counts[t];return [t, people[t], c.quarterly_checkin, c.winback, c.partner_outreach,c.quarterly_checkin + c.winback + c.partner_outreach];});const grand = totals.quarterly_checkin + totals.winback + totals.partner_outreach;rows.push(["**Total**", distinct, totals.quarterly_checkin, totals.winback,totals.partner_outreach, grand]);dv.table(["Tier", "Clients", "Check-In", "Winback", "Partner Tier Upgrade", "Placements"], rows);```## Email pipeline standingWhere every drafted email sits. Stage definitions in [[README]].```dataviewjsconst stages = ["01 - Drafted","02 - Audit Result/audit-PASS","02 - Audit Result/audit-FAIL","03 - Unsent","04 - Sent","05 - Archive","06 - Parked"];const pipes = ["First Email","Second Email"];const rows = stages.map(s => [s, ...pipes.map(p => dv.pages(`"05-Outputs/${p}/${s}"`).length)]);dv.table(["Stage", "First Email", "Second Email"], rows);```