# ۱۶ — فاز ۶: گزارش والدین با نمودار روند + تحلیل حروف ضعیف

درخواست کاربر: «گزارش والدین با نمودار روند — الان جدول ساده است؛ نمودار پیشرفت هفتگی + کدام حروف ضعیف‌اند و …»

## چی ساخته شد

### سرور — `GET /children/:id/report` گسترش یافت (سازگار با قبلی)

- **`daily`**: همه‌ی روزهای بازه (۷/۱۴ روز، **صفر-پرشده** — روزهای بدون بازی هم دیده می‌شوند) با `{date, sessions, stars, correct, wrong}` — درست/غلط از رویدادهای success/fail شمرده می‌شود.
- **`masteryDist`**: پخش تسلط `{l0..l4}` از letter_progress.
- **`letters`**: آمار کامل هر حرف `{id, mastery, correct, wrong}` برای تحلیل سمت کلاینت.
- فیلدهای قبلی (summary/timeline/weakLetters/dueToday) دست‌نخورده.

### کلاینت

- **`core/reportModel.js`** — منطق خالص (تست‌پذیر):
  - `weakList`: امتیاز ضعف = ۰.۷×نرخ‌خطا + ۰.۳×(۱−تسلط/۴)؛ حداقل ۳ تلاش و نرخ خطا ≥۴۰٪؛ مرتب از ضعیف‌ترین؛ سقف ۶
  - `chartBars`: هندسه‌ی میله‌های SVG با پشتیبانی RTL (زمان از راست به چپ) و LTR
  - `donutSegs`: کمان‌های پخش تسلط · `shortDate`: برچسب محور
- **`ui/components/reportCard.js`** — کارت گزارش بازسازی‌شده در پنل والدین:
  - 📊 **نمودار روند ۷/۱۴ روزه**: میله‌های SVG (ستاره‌های هر روز) با گرادیان، انیمیشن رشد پلکانی، tooltip (ستاره/درست/غلط) و سوییچ ۷/۱۴ روز
  - 🎯 **حروف ضعیف**: کارت هر حرف = حرف درشت + نام + سطح + نوار تسلط + «✅ x · ❌ y · نرخ خطا٪» — حالت خالی: «💪 آفرین! حرف ضعیفی نیست»
  - 🍩 **پخش تسلط**: donut رنگی L0..L4 با راهنما و تعداد هر سطح
  - خلاصه‌ی عددی قبلی (آشنایی/تسلط/امروز/میانگین دقیقه) حفظ شد
- همه‌چیز SVG خالص + CSS — بدون کتابخانه‌ی نمودار بیرونی (پیش‌نمایش آفلاین هم سالم)

## تست

- `tests/report.test.js` (**۱۱ تست**): سناریوهای weakList (نرخ بالا/تلاش کم/حرف قوی/مرتب‌سازی/سقف)، هندسه‌ی RTL/LTR، مرزهای کادر، جمع کمان‌های donut، shortDate
- api.test.js گسترش یافت: `daily` صفر-پرشده = طول بازه، فیلدهای هر روز، جمع `masteryDist` = تعداد حروف
- e2e.mjs **+۱ استپ (۱۴ کل)**: seed فعالیت واقعی (batch + events از طریق API) → نمودار ≥۷ میله + «ا» در لیست ضعیف‌ها + donut

## وضعیت

- واحد: **۹۹/۹۹** (engine 18 · sync 10 · api 28 · packs 13 · pwa 10 · trace 6 · imports 2 · report 11 — به‌علاوه تست sync «flush ناموفق»)
- E2E: **۱۴/۱۴** بدون خطای کنسول
- نسخه: **1.2.0**
