پرتوپرتو

کارت نمره معیار (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 استفاده کنید

نمره تعامل

میانگین لایک و کامنت نرمال‌شده بر فالوور

وزن ۶۰٪خوب
۷۲/۱۰۰+۱۲نسبت به ماه قبل
نرخ تعامل۳٫۲٪
آستانه‌ها:۸۰ عالی۶۰ خوب۴۰ متوسط۲۰ ضعیف

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی

کیفیت محتوا

ارزیابی نوآوری و دقت محتوای منتشرشده

وزن ۲۵۰۰٪خوب
۷۲/۱۰۰
تنظیمات
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

'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

Prop

Type

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