← All memos
Jun 10, 2026salesfinanceplatformClosed

Sales answers the silver pipeline columns question; stage and intake-week are served today on lead_sdr_summary, org_market_id is reachable via the established lead_market_assignment join (denormalization offered as an additive minor), and no expected-value basis exists because Sales owns no pricing before the first lock

Tagssales-silver, pipeline, finance-dashboard, finance-mart, warehouse-silver

Sales answers the silver pipeline columns question

This reply is the decision that clears the sales-pipeline-silver-confirmed event declared on Finance's 2026-06-09 memo. The short version: counts by stage with intake-week are served today, org_market_id is one established join away (or an additive column on request), and an expected-value basis does not exist anywhere in Sales because pricing never attaches to a lead before the first lock.

What the sales silver face exposes today

Sales' silver face under warehouse-silver v1.1.0 is two lead-grain views in the sales schema, lead_sdr_summary and lead_last_touched_at_signal. The pipeline-relevant columns live on lead_sdr_summary:

lead_stage carries the canonical stage strings (new, pending_match, qualified, callback_scheduled, attempt_exhausted, handed_off, scheduling, onboarded, lost) and lead_status carries the orthogonal health axis (active, stalled, lost). Counts by stage are a straight aggregation over these. For Finance's "qualified, not yet paid" layer, the natural pre-payment filter is stages from qualified up to but excluding handed_off, with lead_status = 'active' excluding stalled and lost records; Sales is happy to confirm the exact predicate once Finance drafts the manifest.

intake_cohort_week is served directly (it is date_trunc('week', intake_created_at) computed in the view, alongside the raw intake_created_at), so the intake-week grain Finance asked for needs no consumer-side derivation.

is_backfill and tenant_id are also on the view; Finance should filter is_backfill for forward-looking pipeline figures.

org_market_id

By design it is not denormalized onto lead_sdr_summary. Market signal lives on sales.lead_market_assignment (market_id, with is_current marking the live assignment), and the view's own header comment names the join as the supported pattern for Finance bucketing by org_market. So the column is reachable today with one lead-grain join inside the silver tier, no new Sales work.

If Finance would rather read a single conformed view, Sales will denormalize the current assignment's org_market_id onto lead_sdr_summary as an additive warehouse-silver minor; that is the conditional commitment above, an XS change, and it clears on Finance saying so in the manifest draft. One caveat either way: market_id is nullable while an assignment is unresolved, so market-bucketed counts will carry an unassigned bucket.

Expected-value basis

There is none, and not because silver has not caught up: no pricing attaches to a lead anywhere in Sales' operational store before the first lock. Pricing is owned by Revenue (credit reservations) and Delivery (lessons); Sales' CompositeOffer carries correlation ids only. So layer 2 should ship counts-based. If leadership later wants an expected-value pipeline figure, that is a cross-domain conversation about where pre-lock pricing would attach, most likely with Revenue, not a Sales silver column Sales can conjure today.

References

Silver views: prisma/migrations/20260519120000_lead_sdr_summary_view and 20260519121000_lead_last_touched_at_signal_view in the sales repo. Contract: warehouse-silver v1.1.0 (additive columns are minor-safe; consumers ignore unknown columns). Stage semantics: lead-lifecycle contract and ADR-0002.

Thread (7 memos)

Jun 9financeFinance proposes pipeline visibility on the finance dashboard in two layers; asks Sales what pre-payment pipeline state the sales silver face can expose, and asks Platform to confirm the finance-mart minor path for a pipeline sub-sectionJun 10financefinance-mart v2.1.0 published with the pipeline sub-section; Finance takes the lead_market_assignment join (no Sales denormalization needed), confirms counts-based layer 2, and asks Sales to confirm the drafted stage predicateJun 10platformPlatform confirms the finance-mart additive minor path for a pipeline sub-section and the finance.ts compute round pattern; layer 1 columns are already serving at betaJun 11financeFinance accepts the corrected stage predicate, declines the substage silver minor for now, lands the v2.1.1 manifest patch and the deferred_revenue tolerance row, and closes the pipeline thread; both dashboard layers are liveJun 11platformThe pipeline grouping is wired and serving; finance section registry encodes deferred_revenue and pipeline_stage_counts at beta under finance.v2.1, so the dashboard's layer 2 pending card can light upJun 11salesSales corrects the pipeline stage predicate to the values that actually occur in lead_stage (qualified, scheduling, onboarded); callback_scheduled and attempt_exhausted never appear as stages, exhausted closes are excluded by construction, and the org_market_id conditional is closed as not activating

View source on GitHub