Files
our-claude-skills/custom-skills/96-ourdigital-estimate-engine/SKILL.md
Andrew Yim 08cb20fc67 Add real digital_ads + digital_branding catalogs
Built from real D.intelligence docs (not the 견적 자료 folder, which has only
GA4/GTM + education — confirmed):
- digital_branding: TNS 유학원 디지털 브랜딩 진단 컨설팅 → ₩9,000,000 (5 fixed stages)
- digital_ads: 디하이브 디지털 광고·퍼포먼스 마케팅 대행 계약 → ₩6,000,000/월 retainer
  (media-spend commission % is per-deal, kept as a parameter — not invented)

effort method now supports fixed-amount tasks (Unit Cost) and monthly retainers
(unit: monthly); render shows 고정/—//월 and retainer/commission notes.
Validated: branding ₩9.0M, ads ₩6.0M/월; no regression (SEO 25.0M, coaching 1.57M).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 02:06:59 +09:00

60 lines
3.9 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.
---
name: ourdigital-estimate-engine
description: Method-aware estimate/견적 engine for OurDigital / D.intelligence professional services (SEO, GA4/GTM, education/coaching, digital ads, branding, …). Generates a Korean 견적 (md/xlsx/json) from a generic scope.json using the real company rate card. Use for "OurDigital 견적", "estimate", "quote", "proposal pricing", "cost estimate", "견적서 생성", or when another skill needs to price a service. Costing methods: effort (role×billing×hours), coaching (lesson×hours), procurement (+15%).
---
# OurDigital Estimate Engine
Single source of truth for OurDigital/D.intelligence pricing. Consuming skills map their
context into a `scope.json` and call the engine CLI; the engine owns the rate card + service
catalog and renders the 견적.
## Costing methods (catalog entry declares its `method`)
- **effort** — `role_rate × 청구율(0.70) × 표준 업무시간`, by module; auto-tier (smb/basic/treatment)
by portfolio size + premium-vertical floor; On-page hours scale by sub-brands (cap ×2.0);
제안가 = 합계 절사. Also supports **fixed-amount tasks** (`fixed:` Unit Cost — e.g. branding
진단 stages) and **monthly retainers** (`unit: monthly` — e.g. ads 대행). Reproduces real
SEO (10.5M/25.0M), branding (₩9.0M), ads (₩6.0M/월).
- **coaching** — `Σ(lesson_type_price × hours)` over a lesson plan; student discount opt-in.
Reproduces real GA4/GTM 코칭 (₩1,570,000). Base prices default; subject×level matrix optional.
- **procurement** — `unit_cost × qty × (1 + 0.15)` for non-labor items.
## Files
- `references/rate_card.yaml` — universal: role rates, billing, basis, terms, tiering, scaling,
procurement, coaching prices/levels/discounts, tools. **Private.**
- `catalog/<service>.yaml` — per-service: `service`, `method`, body. All real:
`seo` (effort, role-hours tiers), `education` (coaching, incl. GA4/GTM course),
`digital_branding` (effort, fixed 진단 stages → ₩9.0M), `digital_ads` (effort, ₩6.0M/월
retainer; media commission % is per-deal, not in catalog).
- `scripts/estimate.py` — CLI dispatcher; `scripts/methods/{effort,coaching,procurement}.py`;
`scripts/render.py` (md/xlsx/json). `scope.schema.json` — input contract.
## Usage
```
python scripts/estimate.py \
--rate-card references/rate_card.yaml --catalog-dir catalog \
--scope scope.json --out-dir <engagement> [--seq N]
```
`scope.json` examples (see `scope.schema.json`):
- effort: `{"service":"seo","tier":"auto","signals":{"properties_total":25,"subbrands_total":5,"vertical":"hotel_resort"},"prospect":{"name":"…","audit_date":"YYYY-MM-DD"}}`
- coaching: `{"service":"education","course":"ga4_gtm_intermediate","students":1,"prospect":{…}}`
- procurement: `{"service":"seo","method":"procurement","items":[{"label":"SEMrush Guru","unit_cost":330000,"qty":6}]}`
Outputs `05_estimate_ko.md`, `05_estimate.xlsx`, `data/estimate.json`. The effort `estimate.json`
shape is consumed by `ourdigital-presales-seo/build_deck.py`.
## Consuming from another skill (CLI)
1. Map your context → `scope.json` (service, tier signals or lessons, prospect).
2. Call `estimate.py`. 3. Use the rendered 견적; for SEO, feed `data/estimate.json` to the deck.
Example consumer: `ourdigital-presales-seo` (`findings_to_scope.py` → engine → 견적 + deck).
## Adding / editing services
- New real service: add `catalog/<service>.yaml` with `method` + body from a **real quote**.
- Any new stub should carry `_stub: true` (the 견적 prints a ⚠STUB banner) until replaced with
real quote data. All current catalogs are real.
- Rates change in `rate_card.yaml` only (single source). Validate against a known real quote.
## Conventions
Korean-first output · 부가세 별도 · 유효기간 14d · 현금 · `OD-YYYY-NNN`. Don't invent rates —
stub and flag instead. Legal entity (주)디인텔리전스 / info@ourdigital.org.