# SaaS × CRM — the INTERSECTION skill (a composition manifest, NOT a re-spec).
# It COMPOSES the base crm suite + the validated crm/overlays/saas diff. The full mechanics
# live in the seven base skills; this contract only points at the additive overlay.
# Lives at skill/enterprise_software/crm/industries/saas.skill.yaml.

id: crm/saas
version: 1.0.0
summary: >-
  The CRM suite turned into a recurring-revenue system — a subscriptions spine, ARR/MRR/seat columns on
  accounts, a renewal + expansion forecast lane, and product-qualified (usage) qualify gates. Composes
  the base suite plus the SaaS overlay; no fork.
module: crm
industry: software                 # reuses the existing `software` category chip
pillars: [sql, models]

composes:
  suite: crm
  overlay: crm/overlays/saas

# Published id = saas-crm → route below (route wins over the derived page_url).
post: posts/enterprise_software/crm/industries/saas.md
route: /library/saas-crm

provides:
  tables_add: [subscriptions]                    # + arr/mrr/seats/seats_used/plan_tier/renewal_date/health on accounts
  forecast_lane: "renewal + expansion stages + a renewal_commit forecast category"
  gate_change: "lead-to-opportunity + qualification-scoring prefer product-qualified (usage) signals"
  onto: [crm/core, crm/lead-to-opportunity, crm/qualification-scoring, crm/pipeline-forecast, crm/campaign-to-lead]

tested_branches:
  - overlay: saas
    tested_at: 2026-09-02
    cites: crm/overlays/saas
    live:
      - "ALTER accounts ADD arr/mrr/seats/renewal_date/plan_tier; subscriptions created (merge-key subscription_id) + upsert wal_written:true"
      - "ARR renewal rollup: Q4-2026 = 1 renewal due, $120,000 (Acme Nov-30; Initech's 2027 renewal excluded)"
