Testy a evaluace EDPA v2.11.1
300 verifikačních kontrol — 105 scénářů × 6 členů týmu
105 testových scénářů v 8 kategoriích. Per-person testy (invarianty, dual-view, edge cases) běží pro každého z 6 členů týmu → 300 celkových kontrol. Vše prochází.
1. Matematické invarianty — 9 scénářů × 6 osob = 54 kontrol
Základní matematické garance EDPA engine — validováno při každém buildu. Tyto testy ověřují, že model nikdy neporušuje své klíčové sliby.
01 test_sum_equals_capacity PASS
Odvozené hodiny musí odpovídat deklarované kapacitě osoby.
Σ(hours) = capacity ± 0.01h 02 test_ratio_sum_equals_one PASS
Poměry se musí sečíst na 1.0 pro každou osobu s items.
Σ(ratio) = 1.0 ± 0.001 03 test_no_negative_hours PASS
Žádná osoba nesmí mít záporné odvozené hodiny.
All hours ≥ 0 04 test_no_negative_scores PASS
Žádné skóre nesmí být záporné.
All scores ≥ 0 05 test_score_formula PASS
Score se počítá jako JS × cw (per-item normalized share).
Score = JS × cw 06 test_per_item_cw_sums_to_one PASS
Per-item invariant: Σ cw napříč osobami na položce = 1.0.
Σ_persons cw[*, item] = 1.0 07 test_capacity_invariant PASS
Per-person invariant: Σ derived hours = declared capacity.
Σ_items DerivedHours[P, *] = Capacity[P, I] ± 0.01h 08 test_all_invariants_flag PASS
Příznak invariant_ok musí odrážet skutečné výsledky kontroly.
invariant_ok reflects actual checks 09 test_empty_items_no_crash PASS
Osoba s 0 items musí dostat 0h, bez pádu.
Person with 0 items → 0h, no crash 2. Evidence Detection — 10 scénářů
Ověření detekce GitHub signálů a additivní agregace do contribution_score. Signály se sčítají, výsledné CW je per-item normalizovaný podíl (Σ napříč osobami = 1.0 na položce).
01 test_commit_author_signal PASS
Commit s S-XXX/F-XXX/E-XXX/I-XXX v branchi/zprávě přidá signals.commit_author (default 4.00).
commit_author → +4.00 do score 02 test_pr_reviewer_signal PASS
Schválený PR review (vyjma self) přidá signals.pr_reviewer (default 2.17).
pr_reviewer → +2.17 do score 03 test_issue_comment_signal PASS
Komentář na issue/PR (boti vyloučeni) přidá signals.issue_comment (default 1.46).
issue_comment → +1.46 do score 04 test_signals_aggregate_additively PASS
Když má osoba commit + review + comment, váhy se sečtou (4.00 + 2.17 + 1.46 = 7.63), žádný highest-wins.
Σ fired signal_weights, ne max 05 test_contribute_directive_additive PASS
/contribute @osoba weight:0.6 přidá manual:* signál s váhou 0.6 do součtu — nepřepisuje auto-detekci.
/contribute @user weight:X → +X do score 06 test_per_item_normalization PASS
CW se po agregaci normalizuje per-item: cw = score / Σ persons. Invariant Σ cw[*, item] = 1.0.
Σ cw na položce = 1.0 (±0.001) 07 test_branch_naming_extraction_S_F_E_I PASS
Branch regex extrahuje S-/F-/E-/I-XXX pro Story, Feature, Epic, Initiative.
Detect: S-200, F-15, E-3, I-1 08 test_no_signals_no_contributor PASS
Osoba bez žádného fired signálu se neobjeví v contributors[] po agregaci.
score = 0 → vyloučen 09 test_bot_comments_filtered PASS
Komentáře od GitHub apps / botů se nezapočítávají jako issue_comment signály.
Bot login → signal nestreluje 10 test_commit_count_no_time_effect PASS
Počet commitů jednoho autora na itemu počítá jako jeden commit_author signál (relevance, ne objem).
1 commit = 10 commitů z hlediska score 3. CW Heuristika — 15 scénářů
Ověření správnosti heuristických signal weights a pravidel pro určování Contribution Weight. Heuristika musí být konzistentní a reprodukovatelná.
01 test_signal_weight_ordering PASS
Hierarchie: commit_author > pr_reviewer > issue_comment.
sw.commit_author >= sw.pr_reviewer >= sw.issue_comment 02 test_per_item_cw_normalization PASS
Per-item cw share: Σ cw napříč osobami = 1.0 na každém itemu.
Σ_persons cw[*, item] = 1.0 (engine invariant) 03 test_per_person_capacity_invariant PASS
Per-person hours invariant: Σ hours = capacity_per_iteration.
Σ_items DerivedHours[P, *] = Capacity[P, I] 04 test_no_role_overrides_in_heuristics PASS
Kalibrace běží na 3 signálových vahách.
cw_heuristics.yaml.role_overrides not present 05 test_signal_weights_commit PASS
Signál commit_author musí mít signal weight 4.00 v cw_heuristics.yaml.
signals.commit_author = 4.00 06 test_signal_weights_pr_reviewer PASS
Signál pr_reviewer musí mít signal weight 2.17 v cw_heuristics.yaml.
signals.pr_reviewer = 2.17 07 test_signal_weights_issue_comment PASS
Signál issue_comment musí mít signal weight 1.46 v cw_heuristics.yaml.
signals.issue_comment = 1.46 08 test_signals_aggregate_additively PASS
CW se počítá additivní agregací všech signálů + per-item normalizací. Žádné highest-signal-wins.
cw[P, item] = Σ signal_weights / Σ_persons Σ signal_weights 09 test_contribute_directive_additive PASS
Manuální /contribute @osoba weight:X přidá manual:* signál s váhou X — nepřepisuje auto-detekci.
cw_after = (cw_auto_score + X) / Σ_persons score 10 test_per_item_invariant PASS
Σ cw napříč osobami na jedné položce = 1.0 (engine invariant, ±0.001).
Σ_persons cw[*, item] = 1.0 11 test_cw_range_0_1 PASS
CW je per-item normalizovaný podíl, vždy v [0, 1.0]. Žádné fixní floor/ceiling per signál.
0 ≤ cw[P, item] ≤ 1.0 12 test_no_negative_contribution_score PASS
contribution_score se sčítá z pozitivních signal weights — žádný signál neodečítá.
contribution_score ≥ 0 vždy 13 test_per_item_independence PASS
CW jedné osoby na itemu A je nezávislé na CW na itemu B (per-item normalizace).
cw[P, A] nezávisí na cw[P, B] 14 test_per_person_independence PASS
CW dvou osob na stejném itemu jsou nezávislé (oba pocházejí z vlastních signal aggregations).
cw[P1, item] nezávisí na cw[P2, item] 15 test_strategic_role_via_signal_calibration PASS
PM/BO/Arch contribution se zachytí přes issue_comment + pr_reviewer + manual /contribute. Per-role multipliers se nepoužívají — bias se řeší kalibrací signal weights proti ground truth.
No role_overrides in heuristics 4. Dual-View konzistence — 12 scénářů × 6 osob = 72 kontrol
EDPA poskytuje dva pohledy — per-person a per-item. Oba musí být vzájemně konzistentní a součty musí sedět v obou směrech.
01 test_per_person_sum_equals_capacity PASS
Per-person pohled: součet odvozených hodin = kapacita pro každou osobu.
Σ DerivedHours[P, *] = Capacity[P] 02 test_per_item_shares_sum_100 PASS
Per-item pohled: součet podílů všech přispěvovatelů = 100% pro každý item.
Σ shares[*, item] = 100% 03 test_same_cw_same_results_both_views PASS
Stejné CW musí produkovat stejné výsledky v obou pohledech.
per-person hours consistent with per-item shares 04 test_no_transitions_degenerates_to_done_credit PASS
Když git history nezachycuje žádné Feature/Epic/Initiative transitions, engine kredituje pouze Story Done items.
gate_events empty → kredituje jen Story Done 05 test_per_person_hours_sum_cross_items PASS
Per-person: hodiny na item X + hodiny na všechny ostatní itemy = celková kapacita.
hours[P, X] + hours[P, rest] = capacity[P] 06 test_zero_contribution_excluded_both_views PASS
Itemy s nulovým příspěvkem se nezobrazují v žádném pohledu.
zero contribution → absent in both views 07 test_single_contributor_full_share PASS
Jediný přispěvovatel na itemu dostane 100% podíl v per-item pohledu.
single contributor → 100% share 08 test_two_equal_contributors_equal_split PASS
Dva přispěvovatelé se stejným CW dostanou 50/50 split v per-item pohledu.
equal CW → 50/50 share split 09 test_capacity_no_affect_per_item_share PASS
Různé kapacity neovlivní procentuální podíl v per-item pohledu.
capacity[P1] ≠ capacity[P2] → share% unchanged 10 test_cross_check_hours_vs_capacities PASS
Křížová kontrola: součet všech per-item hodin přes všechny itemy ≤ součet všech kapacit.
ΣΣ hours[P, item] ≤ Σ capacity[P] 11 test_three_contributors_weighted_split PASS
Tři přispěvovatelé s CW 1.0, 0.6, 0.25 — podíly odpovídají poměru vah.
1.0:0.6:0.25 → 54%:32%:14% share 12 test_per_item_hours_sum_matches_js_proportion PASS
Součet hodin na itemu od všech osob odpovídá proporci Job Size v rámci celkového rozpočtu.
item hours reflect JS weight in total budget 5. Edge Cases — 18 scénářů × 6 osob = 108 kontrol
Hraniční případy a extrémní scénáře, které musí EDPA engine zvládnout bez pádu, s korektními výsledky a bez ztrát přesnosti.
01 test_person_zero_relevant_items PASS
Osoba s 0 relevantními itemy musí dostat 0 hodin bez pádu aplikace.
0 items → 0h, no crash 02 test_person_single_item_full_capacity PASS
Osoba s jedním itemem musí dostat plnou kapacitu.
1 item → hours = capacity 03 test_all_items_same_job_size PASS
Všechny itemy se stejným Job Size — hodiny rozděleny pouze podle CW.
same JS → distribution by CW only 04 test_all_people_same_cw_on_item PASS
Všichni lidé se stejným CW na itemu — hodiny proporcionálně ke kapacitě.
same CW → hours proportional to capacity 05 test_job_size_zero_excluded PASS
Item s Job Size = 0 musí být vyloučen z kalkulace (žádné dělení nulou).
JS = 0 → item excluded, no division by zero 06 test_single_person_team PASS
Jednočlenný tým: osoba dostane plnou kapacitu bez ohledu na CW.
single person → full capacity 07 test_hundred_items_capacity_sum PASS
100 itemů pro jednu osobu — kapacita se stále musí sečíst správně.
100 items: Σ hours = capacity 08 test_max_job_size_allocation PASS
Maximální Job Size (20) musí produkovat správnou proporcionální alokaci.
JS = 20 → correct proportional allocation 09 test_min_job_size_allocation PASS
Minimální Job Size (1) musí produkovat správnou proporcionální alokaci.
JS = 1 → correct proportional allocation 10 test_all_cw_equal_distribution PASS
Všechna CW = 1.0 — hodiny rozděleny rovnoměrně podle Job Size.
all CW = 1.0 → equal distribution per JS 11 test_very_unequal_capacities PASS
Velmi nerovné kapacity (10h vs 160h) — každá osoba se sečte na svou kapacitu.
10h + 160h: each sums to own capacity 12 test_floating_point_precision PASS
Přesnost floatů: součet musí být v toleranci 0.01h od kapacity.
Σ within 0.01h tolerance 13 test_unicode_item_titles PASS
Unicode znaky v názvech itemů nesmí způsobit chyby zpracování.
Unicode titles → no processing errors 14 test_empty_iteration_graceful PASS
Prázdná iterace (žádné stories) musí být zpracována bez pádu.
empty iteration → graceful handling 15 test_person_only_epic_feature PASS
Osoba pouze na Epic/Feature (bez stories) musí stále dostat alokaci.
Epic/Feature only → still gets allocation 16 test_negative_job_size_rejected PASS
Záporný Job Size musí být odmítnut — žádná záporná alokace.
JS < 0 → item rejected 17 test_duplicate_person_on_item_no_double_count PASS
Duplicitní signály stejné osoby na itemu nesmí zdvojit alokaci.
duplicate signals → single CW entry 18 test_large_team_scaling PASS
20+ osob v týmu — výpočet stále konverguje a invarianty drží.
20+ people: all invariants hold 6. Auto-kalibrace — 12 scénářů
Ověření auto-kalibračního systému inspirovaného Karpathyho autoresearch vzorem. Kalibrace musí být bezpečná, reprodukovatelná a efektivní.
01 test_minimum_ground_truth_records PASS
Kalibrace vyžaduje minimum 20 manuálně potvrzených CW záznamů.
len(ground_truth) ≥ 20 required 02 test_mad_computation_correctness PASS
MAD (Mean Absolute Deviation) se správně počítá jako průměr |auto_cw - confirmed_cw|.
MAD = mean(|auto_cw - confirmed_cw|) 03 test_lower_mad_better PASS
Nižší MAD = lepší heuristika. Směr optimalizace musí být "lower is better".
direction: lower is better 04 test_calibrator_locked PASS
Kalibrátor (calibrate_signals.py) je zamčený — synthetic korpus + MAD cost function jsou v jednom souboru. Agent ho nesmí modifikovat (gaming).
calibrate_signals.py: LOCKED, read-only 05 test_single_change_per_iteration PASS
Každý experiment mění pouze jeden parametr — izolace efektu změn.
one parameter change per experiment 06 test_git_commit_after_experiment PASS
Po každém experimentu se provede git commit — paměť = git log.
git commit after each experiment 07 test_revert_on_worse_mad PASS
Při zhoršení MAD se experiment revertne (git reset --hard HEAD~1).
MAD worse → git revert 08 test_keep_on_better_or_equal_mad PASS
Při zlepšení nebo stejném MAD se experiment zachová.
MAD better/equal → keep commit 09 test_budget_50_experiments_max PASS
Maximální budget je 50 experimentů — ochrana před nekonečným cyklem.
budget ≤ 50 experiments 10 test_expected_improvement_range PASS
Očekávané zlepšení je 15–30% redukce MAD po 50 experimentech.
expected: 15-30% MAD reduction 11 test_ground_truth_format_validation PASS
Ground truth záznamy musí obsahovat: item_id, person_id, evidence_role, auto_cw, confirmed_cw.
required fields: item_id, person_id, evidence_role, auto_cw, confirmed_cw 12 test_no_data_leakage PASS
Žádný únik dat mezi trénovací a validační sadou — striktní separace.
no data leakage between train/validation 7. Governance & Audit — 17 scénářů
Ověření audit trail, freeze pravidel, governance procesů a compliance požadavků. EDPA musí být plně auditovatelné a reprodukovatelné.
01 test_snapshot_frozen_after_close PASS
Snapshot je zmrazený (frozen) po Iteration Close — nesmí být modifikován.
snapshot.frozen = true after close 02 test_frozen_snapshot_immutable PASS
Zmrazený snapshot nesmí být modifikován na místě (in-place).
frozen snapshot: no in-place modification 03 test_corrections_create_new_revision PASS
Opravy vytvářejí novou revizi (_rev2, _rev3), nikdy nepřepíšou originál.
correction → new revision (_rev2, _rev3) 04 test_snapshot_required_fields PASS
Snapshot musí obsahovat všech 10 požadovaných top-level klíčů.
10 required keys present in snapshot 05 test_branch_naming_enforced PASS
Branch naming konvence: {type}/{ITEM-ID}-description musí být dodržena.
branch: {type}/{ITEM-ID}-description 06 test_pr_references_work_item PASS
PR musí referencovat work item (S-XXX, F-XXX, E-XXX) v titulku nebo těle.
PR references: S-XXX, F-XXX, or E-XXX 07 test_traceability_chain PASS
Plný řetězec sledovatelnosti: Initiative → Epic → Feature → Story → PR → Commit.
Initiative → Epic → Feature → Story → PR → Commit 08 test_wsjf_calculation PASS
WSJF se správně počítá jako (BV + TC + RR&OE) / JS.
WSJF = (BV + TC + RR&OE) / JS 09 test_job_size_guardrails_story PASS
Job Size guardrails pro Story: JS ≤ 8 (ideálně ≤ 5).
Story JS ≤ 8 (recommended ≤ 5) 10 test_job_size_guardrails_feature PASS
Job Size guardrails pro Feature: JS ≤ 13.
Feature JS ≤ 13 11 test_job_size_guardrails_epic PASS
Job Size guardrails pro Epic: JS ≤ 20.
Epic JS ≤ 20 12 test_dor_checklist_validation PASS
Definition of Ready checklist: popis, AC, odhad, parent linked.
DoR: description, AC, estimate, parent linked 13 test_dod_checklist_validation PASS
Definition of Done checklist: code reviewed, testy prošly, PR mergnuto.
DoD: code reviewed, tests passed, PR merged 14 test_wip_limit_enforcement PASS
WIP limit: ideálně 1 Story na osobu v daném okamžiku.
WIP limit: 1 Story per person (ideal) 15 test_bankid_signature_support PASS
Podpora BankID elektronického podpisu (zákon 21/2020 Sb.).
BankID signature: zákon 21/2020 Sb. 16 test_reproducible_calculation PASS
Reprodukovatelný výpočet: stejné vstupy musí vždy produkovat stejné výstupy.
same inputs → same outputs (deterministic) 17 test_audit_trail_five_pillars PASS
Audit trail pokrývá 5 pilířů: GitHub evidence, kapacita, snapshot, reprodukovatelný výpočet, podpis.
5 pillars: evidence, capacity, snapshot, calc, signature 8. Plánování kapacity — 12 scénářů
Ověření Iteration Planning Protocol — planning_factor jako vlastnost týmu, pravidlo 80%, sledování buffer usage a workflow potvrzení kapacity.
01 test_planning_factor_team_level PASS
planning_factor musí být vlastnost týmu, ne kadence ani osoby.
teams[].planning_factor (not cadence, not person) 02 test_planning_factor_default PASS
Výchozí planning_factor musí být 0.8 (plánuj na 80% celkové kapacity).
planning_factor default = 0.8 03 test_planning_factor_range PASS
planning_factor musí být v rozsahu (0, 1.0] — nikdy nula, nikdy nad 100%.
0 < planning_factor ≤ 1.0 04 test_planning_capacity_formula PASS
Planning Capacity = Total Capacity × planning_factor pro každý tým.
Planning_Capacity = Σ Capacity[P] × planning_factor 05 test_different_teams_different_factors PASS
Různé týmy mohou mít různé hodnoty planning_factor.
teams[A].planning_factor ≠ teams[B].planning_factor allowed 06 test_edpa_uses_total_not_planning PASS
EDPA výpočet vždy používá Total Capacity (100%), ne Planning Capacity.
DerivedHours uses Capacity[P], not Planning_Capacity 07 test_buffer_absorbs_unplanned PASS
Buffer (výchozí 20%) absorbuje support, maintenance, incidenty a neplánovanou práci.
buffer = Total - Planning → unplanned work 08 test_unplanned_items_generate_evidence PASS
Neplánované položky v bufferu generují evidenci a jsou alokovány normálně pomocí EDPA.
unplanned items → evidence → normal EDPA allocation 09 test_capacity_confirmed_at_planning PASS
Každý člen týmu musí potvrdit dostupnost na Iteration Planning (availability: confirmed).
availability = confirmed required 10 test_planning_factor_no_affect_invariant PASS
planning_factor nesmí ovlivnit matematickou záruku Σ DerivedHours = Capacity.
planning_factor → no effect on Σ = Capacity 11 test_buffer_usage_metric PASS
Metrika Buffer_Usage sleduje, kolik rezervy bylo spotřebováno neplánovanou prací.
Buffer_Usage = unplanned / (Total - Planning) × 100% 12 test_high_buffer_usage_warning PASS
Trvale vysoký buffer usage (>90%) by měl vyvolat varování k úpravě kapacity nebo rozsahu.
Buffer_Usage > 90% → warning Auto-kalibrace (Karpathy loop)
Automatický kalibrační systém inspirovaný Karpathyho autoresearch vzorem. Jeden soubor, jedna metrika, jedna smyčka.
| Target | cw_heuristics.yaml.tmpl (signals: blok) |
| Metric | MAD (Mean Absolute Deviation) na MC korpusu |
| Direction | lower is better |
| Budget | 2000 MC samples + coordinate descent top-5 (~10s) |
| Search space | 3D signal weights, každá v [0.1, 8.0] |
| Kalibrátor | calibrate_signals.py (LOCKED) |
- Typické zlepšení: 15–30% redukce MAD
- Po 50 experimentech: heuristika odpovídá reálným vzorcům týmu
- Diminishing returns po ~30 experimentech
- Prerequisite: ≥ 20 manuálně potvrzených CW záznamů
Smyčka
- Spustit
python calibrate_signals.py --scenarios 1000 --seed 42 - Skript provede:
- Vygeneruje synthetic Monte Carlo korpus (1 000 scénářů × ~31 k záznamů) procedurálně z modelu, kde signal counts pravděpodobnostně reflektují true cw share
- Spočítá MAD baseline proti shipped defaults (commit_author=4.00, pr_reviewer=2.17, issue_comment=1.46)
- Fáze 1 — random sampling: 2000 náhodných weight vektorů ve 3D prostoru [0.1, 8.0], seřadí podle MAD
- Fáze 2 — coordinate descent: refinuje top-5 kandidátů, pro každý signal zkusí ±step, halves step na no-improvement
- Vrátí best calibrated weights + MAD improvement %
- S
--applypřepíšecw_heuristics.yaml.tmpl+ obnovícalibration:metadata
- Vytiskne souhrn: baseline MAD, calibrated MAD, % zlepšení, top weights
- (Optional)
--report report.jsondump celého běhu pro audit
Bezpečnostní omezení
calibrate_signals.py. Synthetic corpus generator + MAD cost function jsou v jednom souboru by design; separation by structure brání gaming.evaluate_mad() bere jen weight vektor a pure-reads signal_count × weight s per-item normalizací.Strategie eskalace
| Experimenty | Focus | Parametry |
|---|---|---|
| 1–30 | signal weights (Monte Carlo) | 3 parametry, random sampling |
| 31–50 | signal weights (Nelder-Mead refinement) | local descent kolem MC top-K |
CW Heuristika
Výchozí váhy pro automatické přiřazení Contribution Weight na základě GitHub signálů. Hodnoty kalibrované Monte Carlo simulací.
EDPA neukládá role per osobu — odvozuje se z dominantního signál typu pro UX (timesheets, reports). Engine math vidí jen cw hodnoty.
| Dominant signal | Display role |
|---|---|
commit_author | owner |
manual:* | key |
pr_reviewer | reviewer |
issue_comment | consulted |
| Signal | Score |
|---|---|
commit_author | 4.00 |
pr_reviewer | 2.17 |
issue_comment | 1.46 |
manual:* (/contribute) | explicit |
contribution_score per (osoba, item). Per-item normalizace dává cw = score / Σ_persons score. Žádný "highest signal wins", žádný threshold — i jeden komentář generuje proporční podíl.Validace Monte Carlo
1000 syntetických scénářů (32 210 záznamů), 5 candidates konvergovaly na MAD 0.0805 (improvement 6.5% nad inherited baseline)
EDPA addresses Git’s under-counting of BO/PM/Arch contribution purely via signal weight calibration:
- BO/PM contributions show up via
issue_comment+ manual/contributedirectives. Calibrator boostsissue_commentweight if BO/PM are under-credited in ground truth. - Arch contributions show via
pr_reviewer. Calibrator boostspr_reviewerweight similarly. - Dev/QA reference baseline — Git accurately captures their commits/reviews.
- Edge-case generator simuluje
pm_driven,pair_programmed,design_heavy,silent_reviewerpatterns aby kalibrace generalizovala.
Srovnání metod
| Kritérium | EDPA v2.11.1 | Ruční timesheets | Fixní alokace |
|---|---|---|---|
| Přesnost | Vysoká | Střední | Nízká |
| Úsilí | Minimální | Vysoké | Žádné |
| Auditovatelnost | Plná | Částečná | Žádná |
| Dual-view | Ano | Ne | Ne |
| Mat. garance | Σ = capacity | Žádná | Složitější |
| Automatizace | GitHub Actions | Manuální | Částečná |
Demo výpočet
Statická ukázka výpočtu EDPA pro 3 osoby a 5 work items. Provozní varianta (Simple mode).
Kapacita
| Osoba | FTE | Kapacita (h) |
|---|---|---|
| Alice | 0.5 | 40h |
| Bob | 1.0 | 80h |
| Carol | 0.75 | 60h |
Work items & přiřazení (CW per-item normalizované, Σ na řádku = 1.0)
| Item | JS | Alice (CW) | Bob (CW) | Carol (CW) | Σ |
|---|---|---|---|---|---|
S-101 | 5 | 0.70 | 0.30 | — | 1.00 |
S-102 | 3 | 0.55 | 0.45 | — | 1.00 |
S-103 | 8 | — | 0.65 | 0.35 | 1.00 |
S-104 | 2 | — | 0.30 | 0.70 | 1.00 |
S-105 | 5 | — | — | 1.00 | 1.00 |
Výpočet skóre (Score = JS × CW)
| Item | JS | Alice Score | Bob Score | Carol Score |
|---|---|---|---|---|
S-101 | 5 | 3.50 | 1.50 | — |
S-102 | 3 | 1.65 | 1.35 | — |
S-103 | 8 | — | 5.20 | 2.80 |
S-104 | 2 | — | 0.60 | 1.40 |
S-105 | 5 | — | — | 5.00 |
| Σ | 5.15 | 8.65 | 9.20 |
Odvozené hodiny (DH = Score / ΣScore × Capacity)
| Item | Alice (40h) | Bob (80h) | Carol (60h) |
|---|---|---|---|
S-101 | 27.18h | 13.87h | — |
S-102 | 12.82h | 12.49h | — |
S-103 | — | 48.09h | 18.26h |
S-104 | — | 5.55h | 9.13h |
S-105 | — | — | 32.61h |
| Σ | 40.00h | 80.00h | 60.00h |