کارت نمره معیار (CriterionScoreCard)
کارت rubric فشرده با ساختار «بعد × نمره ۰–۱۰۰ × آستانه» برای معیارهای ارزیابی کمی — تعامل، رشد، کیفیت، ثبات.
معرفی
CriterionScoreCard کارت فشرده برای نمایش یک معیار نمرهدار در ارزیابی کمی یک پیج، ورکر، یا هر entity نمرهپذیر است. هر کارت: نام معیار + نمره (۰-۱۰۰) + تِر (عالی/خوب/متوسط/ضعیف/بحرانی) + اختیاراً وزن، ورودی خام، روند، و آستانههای rubric.
پنج تِر canonical با توکنهای --score-*:
- excellent (≥۸۰) →
--score-excellent(سبز تیره) - good (≥۶۰) →
--score-good(سبز) - moderate (≥۴۰) →
--score-moderate(کهربایی) - poor (≥۲۰) →
--score-poor(نارنجی) - critical (کمتر از ۲۰) →
--destructive-default(قرمز)
چه زمانی استفاده کنیم:
- نمایش معیارهای ارزیابی کمی یک پیج (تعامل، رشد، ثبات، کیفیت محتوا)
- rubric scoring یک worker (نرخ موفقیت، بهرهوری، پایداری)
- دستهای از chips quality برای یک تحلیل
- daşboard کلی که از چند معیار composite score میسازد
چه زمانی استفاده نکنیم:
- یک متریک تکعدد بدون مفهوم tiering — از
MetricCardاستفاده کنید - نمایش فقط benchmark بدون بار rubric — از
EngagementRateBenchmarkاستفاده کنید - وقتی سلامت entity concept اصلی است، نه rubric — از
EntityHealthCardاستفاده کنید - فقط وضعیت (running/paused/…) — از
JobCard/StatusBadgeاستفاده کنید
نمره تعامل
میانگین لایک و کامنت نرمالشده بر فالوور
زمین بازی
با تغییر تنظیمات زیر، پیشنمایش زنده را مشاهده کنید.
کیفیت محتوا
ارزیابی نوآوری و دقت محتوای منتشرشده
استفاده
'use client'
import { CriterionScoreCard } from '@parto-system-design/ui'
export function PageCriteria({ page }) {
return (
<div className="grid gap-3 sm:grid-cols-2">
<CriterionScoreCard
name="نمره تعامل"
description="میانگین لایک و کامنت نرمالشده بر فالوور"
score={page.metrics.engagementScore}
weight={0.6}
input={{ label: 'نرخ تعامل', value: `${page.eRate.toFixed(1)}٪` }}
trend={{ delta: 12, label: 'نسبت به ماه قبل' }}
showThresholdHint
/>
<CriterionScoreCard
name="نمره رشد"
description="درصد افزایش فالوور در ۳۰ روز اخیر"
score={page.metrics.growthScore}
weight={0.4}
input={{ label: 'رشد ماهانه', value: '+۵٫۲٪' }}
trend={{ delta: -3 }}
/>
</div>
)
}پنج تِر با آستانههای پیشفرض
عالی
خوب
متوسط
ضعیف
بحرانی
هر کارت auto-detects تِر را از score / max + آستانههای پیشفرض. برای override، tier را صریحاً پاس دهید یا tierThresholds را سفارشی کنید.
با وزن، ورودی، و روند
نمره تعامل
میانگین لایک + کامنت بر فالوور
نمره رشد
درصد افزایش فالوور در ۳۰ روز اخیر
نمره ثبات
یکنواختی پستگذاری در بازه
نمره کیفیت محتوا
میانگین تعامل نسبی هر پست
weight— عدد ۰ تا ۱. به صورت «وزن ۶۰٪» در header نمایش داده میشود.input— ورودی خام که نمره را ساخت (شفافیت برای کاربر).trend— دلتای نسبت به baseline (مثبت = بهتر شده).
حالت compact برای ردیفهای لیست
با layout="compact"، کارت به یک ردیف فشرده تبدیل میشود: نام + نوار کوچک + نمره + tier chip. مناسب:
- جدول criteria breakdown
- cardهای inline در AnalysisPage
- drawer زیرمجموعه با چندین criterion
با آستانه rubric (آموزشی)
نمره کیفیت محتوا
میانگین لایک و کامنت نسبت به فالوور
با showThresholdHint، یک ردیف footer با آستانههای tier (مثلاً «≥۸۰ عالی · ≥۶۰ خوب · …») رندر میشود. مناسب صفحه تحلیل که کاربر تازهوارد نیاز به راهنما دارد.
آستانههای سفارشی
<CriterionScoreCard
name="سرعت پاسخ worker"
score={72}
tierThresholds={{ excellent: 50, good: 35, moderate: 20, poor: 10 }}
showThresholdHint
/>برای دامنههایی که thresholdهای پیشفرض مناسب نیستند (مثلاً متریک معکوس یا logarithmic)، آستانهها را override کنید. همیشه به صورت «۰-۱۰۰» بیان میشوند و به max شما scale میشوند.
اندازهها
small
medium (پیشفرض)
large
Props
helpers
import { getCriterionTier, DEFAULT_CRITERION_THRESHOLDS, CRITERION_TIER_KEYS } from '@parto-system-design/ui'
// Auto-classify a score
getCriterionTier(72) // 'good'
getCriterionTier(85) // 'excellent'
getCriterionTier(8, 10) // 'excellent' (80%)
// Canonical tier order (worst → best or similar use)
CRITERION_TIER_KEYS // readonly: ['excellent', 'good', 'moderate', 'poor', 'critical']
DEFAULT_CRITERION_THRESHOLDS // { excellent: 80, good: 60, moderate: 40, poor: 20 }راهنمای استفاده
بکنید
- برای کارت ارزیابی معیار از scoreLabels با ۵ تِر معنادار استفاده کنید (عالی/خیلی خوب/خوب/متوسط/ضعیف) - وزن معیار را
در صورت نیاز نمایش دهید تا تأثیر آن در نمره کل واضح باشد - برای ردیفهای لیست از حالت
compactاستفاده کنید — ارتفاع کمتر، اطلاعات کافی
نکنید
- آستانههای سفارشی را بدون توضیح به کاربر تغییر ندهید — رنگ تِر سیگنال معنایی است - این کارت را برای KPI متریک ساده
استفاده نکنید —
MetricCardمناسبتر است - نمره را بدون scale (0-100) ارسال نکنید — تِربندی به این فرض میسازد
دسترسیپذیری
- نوار پیشرفت
role="progressbar"باaria-valuenow/aria-valuemin=0/aria-valuemax={max}است. - عنوان معیار به صورت
<h4>semantic رندر میشود — در hierarchy صفحه جای خود را پیدا میکند. aria-labelروی badge وزن حاوی متن کامل localized است (مثلاً «وزن: ۶۰٪»).- Trend arrow
aria-hidden="true"است — مقدار متنی aria-label حاوی delta + label است. - تِر فقط با رنگ منتقل نمیشود — همیشه label متنی همراه chip است (برای کاربران color-blind).
کامپوننتهای مرتبط
- EntityHealthCard — وقتی روایت سلامت entity اصلی است، CriterionScoreCard را داخل آن compose کنید
- EngagementRateBenchmark — benchmark عمومی بدون بار rubric — این نسخه در سطح «کارت» است
- MetricCard — متریک تکعدد بدون tier
- ProgressBar — نوار عمومی بدون semantic
- StatDisplay — stat فشرده با trend برای inline
بنچمارک نرخ تعامل (EngagementRateBenchmark)
نوار افقی فشرده با نشانگر موقعیت روی مقیاس ضعیف → متوسط → خوب → عالی، با پشتیبانی از benchmark های مرجع (میانگین صنعت، هدف، …).
نقشه حرارتی فراوانی انتشار (PostingFrequencyHeatmap)
Heatmap ۷×۲۴ روز×ساعت برای نمایش الگوی زمانی انتشار پستها، با شاخص ثبات، طولانیترین فاصله، و درصد روزهای فعال.