Skip to content

BSC total score goals

Configuration document id: bsc-total-score-goals-{cycle_id} (per fiscal cycle; legacy id bsc-total-score-goals migrated to -2025).

API field: bsc_total_score_goals on GET / PATCH /v1/scorecard/configurations?cycle_id=….

See Fiscal cycles & locks for cycle selection and edit rules.

Structure (fixed)

  • 3 employee levels: 1, 2, 3 (employment_data.employee_level)
  • 3 tenure rows per level: min_years 1, 2, 3 (whole years employed: 1 yr+, 2 yrs+, 3 yrs+)
  • 3 bands per row: Standard, Expectation, Goal (each minmax, 0–100)

Resolving the correct row

  1. Look up employee_level (1–3).
  2. From tenure tiers, use the row with the largest min_years where years_employed >= min_years.

Example: 2.5 years → treat as 2 whole years → use the 2 yr+ row (not 3 yr+).

Classifying a total BSC score (dashboard)

After the weighted BSC total is calculated (0–100), compare it to that row’s minimum thresholds (contiguous lower-bound rules — same as the web UI and bonus qualification):

  1. If score ≥ Goal minGoal
  2. Else if score ≥ Expectation minExpectation
  3. Else if score ≥ Standard minStandard
  4. Else → below standard

Scores are not rounded to integers before classification (e.g. 94.69 with Goal min 95 stays Expectation, not Goal).

Helper: classify_total_score() in api/app/domains/bsc/total_score_goals.py.

Code

  • Schema: api/app/schemas/scorecard_config.py (BscTotalScoreGoals, …)
  • Helpers: api/app/services/bsc_total_score_goals.py
  • UI tab: BSC Total Score Goals