# Findings → estimate mapping (effort-based, SMB-aware) `estimate.py` builds the 견적 from `sow_templates.yaml` priced via `rate_card.yaml`: **cost = role_rate × billing_rate × standard_hours**, grouped by module; 제안가 = 합계 floored to `rounding_unit`. Mirrors OurDigital/D.intelligence's real SOW-based quoting. ## Tier selection (smb / basic / treatment) - `treatment` if `properties_total > 5` OR `subbrands_total > 3` (multi-brand / chain) - `smb` if `properties_total <= 1` AND `subbrands_total == 0` (single-property SMB) - `basic` otherwise (small multi-property / mid) - override with `--baseline`. **Note:** tiering is by portfolio size only — quote a single *premium* property as `basic`/`treatment` manually. Per-tier billing: `smb` uses `billing_rate: 0.55` (set in sow_templates); `basic`/ `treatment` use `rate_card.billing_rate` (0.70). Override with `--billing`. ## Module inclusion Each tier carries its standard module set (P&M · Technical SEO · On-page SEO · SEO Growth). Findings annotate modules via the `trigger` field: | Module | trigger finding classes | |---|---| | Planning & Management | always | | Technical SEO | crawlability, cwv, schema_entity | | On-page SEO | onpage, schema_entity | | SEO Growth | measurement, always | ## Hours scaling (portfolio) Only **On-page** tasks (`scale: true`) scale, sub-linearly, by the `rate_card.scaling.driver` (= `subbrands_total`, i.e. distinct brands/templates), capped at **×2.0**. Rationale: chains share page templates, so on-page work grows with template variety, not raw property count. **Technical SEO is fixed** site-wide work (`scale: false`); P&M and SEO Growth are fixed too. Single-brand → ×1.0. ## Tools & terms `tools` (e.g. SEMrush Guru) listed separately — client-subscribed, +15% procurement markup if billed through us. VAT 별도 · 유효기간 14d · 현금 · 절사 from `rate_card.terms`. ## Validated (2026-05-28) - `basic` ×1.0 → 합계 10,612,000 → 제안가 **10,500,000** (real Basic quote) - `treatment` ×1.0 → 합계 25,340,000 → 제안가 **25,000,000** (real Treatment quote) - `smb` single property → ~**3,000,000** (lean × 55% billing) - chain example (SHR, 5 sub-brands ×1.6, treatment) → ~**29,500,000** (vs naive 71.5M) Edit `rate_card.yaml` + `sow_templates.yaml` together when rates, hours, tiers, or scaling change.