medplan / schedule.ts / aulaPriority

cálculo dos pesos

como o medplan decide quantas questões cada aula recebe na semana. três sinais: incidência (quão recorrente é o tópico no banco), fraqueza (o quanto você erra) e o cap diário (não sobrecarregar um dia).

①fórmula principal

priority = baseWeight × (0.5 + weakness)

baseWeight mede incidência (em 1..~30). weakness vive em 0..1 (0 = domina, 1 = zero acerto). O +0.5 evita que aula 100% dominada zere — multiplier final vai de 0.5× a 1.5×.

②baseWeight — incidência

Três fontes, em ordem de preferência:

├
se totalQuestions > 0 → √totalQuestions (sync de incidência rodou — usa contagem real do banco)
├
senão se há tier → TIER_WEIGHT[incidenceTier] (fallback do cronograma)
└
default → 4 (sem info nenhuma)

O √ amortece tópicos gigantes: 400 questões = √400 = 20; 40 questões = √40 ≈ 6.3. Diferença vira ~3× em vez de 10×.

tierpeso
muito-alta16
alta8
media4
baixa2
muito-baixa1

③weakness — performance

Combina dois sinais. latestReviewPct é o pct da revisão mais recente feita no medplan (varre A4 → A3 → A2 → A1, pega o primeiro nível com nota registrada). accuracyPct vem dos cadernos do Estratégia, sincronizado no walk de classificações (sinal mais amplo, geralmente mais antigo).

├
se ambos existem → effective = avg(accuracyPct, latestReviewPct)
├
se só revisão → effective = latestReviewPct
├
se só caderno → effective = accuracyPct
└
nenhum → weakness = 0.5 (default neutro)
weakness = max(0, 1 − effective / 100)

④orçamento semanal

Greedy: ordena aulas pendentes por priority DESC (tiebreak dueDate ASC — overdue ganha). Inclui do topo até o bottom enquanto a parcela da próxima aula ≥ perAulaMin (default 4). Resto fica de fora (não recebe questão essa semana).

share_i = weeklyBudget × priority_i / Σpriority_incluídas

Para fechar exatamente no weeklyBudget: largest-remainder. Pisa em floor(share), depois distribui as sobras pras aulas com maior parte fracionária.

⑤cap diário

Caminha dia a dia. Pra cada dia: sort por priority desc, enche até bater perDayMax. O que sobrar vai pro próximo dia com folga; se nenhum tem, vai pro com menos carga (espalha overflow). Último dia da janela aceita o excedente.

⑥exemplo — Crescimento

cenário
totalQuestions
509
baseWeight
√509 ≈ 22.6
accuracyPct (caderno)
70%
A1 feita
30%
versãoeffectiveweaknesspriority
antes (só caderno) 70% 0.30 22.6 × 0.80 = 18.1
agora (caderno + A1) 50% 0.50 22.6 × 1.00 = 22.6
+25% de peso por incluir o sinal recente da revisão fraca. Mais slots de questões alocados pra Crescimento essa semana — sistema reage à performance atual em vez de ficar preso no histórico dos cadernos.

⑦simulação · 1 aula/dia, 1 tópico atrasado

Cenário real: 1 aula assistida por dia, cada aula com 1-3 tópicos vinculados (relação N:N). 1 tópico vem atrasado da semana anterior e cai em hoje (SEG) em vez do dia em que foi assistido originalmente.

Semana real — 1 aula/dia, 1 tópico atrasado

7 dias · budget 320 · cap 70/dia · 13/13 tópicos alocados
320/320 questões alocadas 1 tópico atrasado (cai em hoje)
SEG · hoje 61/70
aula do dia PE Aleitamento Materno
★ ATRASADA
Pneumonia adquirida na comunidade (PAC) 25q
CLI · prio 19.8 · origem QUA
Amamentação/ Aleitamento Materno 36q
PED · prio 29.2
TER 34/70
aula do dia 47 Desnutricao e Vitaminas
Vitaminas 20q
PED · prio 16.2
Desnutrição 14q
PED · prio 11.6
QUA 27/70
aula do dia 20 - Pneumonia Adquirida na Comunidade
Pneumonia 27q
CLI · prio 21.8
QUI 36/70
aula do dia 45 Bronquiolite e Coqueluche
Bronquiolite 23q
PED · prio 18.7
Coqueluche 13q
PED · prio 10.5
SEX 45/70
aula do dia 41 Crescimento e Baixa Estatura
Crescimento 28q
PED · prio 22.6
Baixa Estatura 17q
PED · prio 14.0
SAB 56/70
aula do dia 23 Antidiabeticos Orais e Subcutaneos - PARTE 1
Diabetes 56q
CLI · prio 45.1
DOM 61/70
aula do dia PE NEFRO 1 Síndrome Nefrítica Nefrótica SHU
Síndrome nefrítica 26q
CLI · prio 21.0
Síndrome nefrótica 25q
CLI · prio 20.3
Síndrome Hemolítico Urêmica (SHU) 10q
CLI · prio 8.3
tópicoaula de origemmatbancoprioq/sem
Diabetes 23 Antidiabeticos Orais e Subcutaneos - PARTE 1 CLI 2038 45.1 56
Amamentação/ Aleitamento Materno PE Aleitamento Materno PED 853 29.2 36
Crescimento 41 Crescimento e Baixa Estatura PED 509 22.6 28
Pneumonia 20 - Pneumonia Adquirida na Comunidade CLI 477 21.8 27
Síndrome nefrítica PE NEFRO 1 Síndrome Nefrítica Nefrótica SHU CLI 443 21.0 26
Síndrome nefrótica PE NEFRO 1 Síndrome Nefrítica Nefrótica SHU CLI 413 20.3 25
Pneumonia adquirida na comunidade (PAC) atrasada 20 - Pneumonia Adquirida na Comunidade CLI 391 19.8 25
Bronquiolite 45 Bronquiolite e Coqueluche PED 351 18.7 23
Vitaminas 47 Desnutricao e Vitaminas PED 262 16.2 20
Baixa Estatura 41 Crescimento e Baixa Estatura PED 197 14.0 17
Desnutrição 47 Desnutricao e Vitaminas PED 134 11.6 14
Coqueluche 45 Bronquiolite e Coqueluche PED 110 10.5 13
Síndrome Hemolítico Urêmica (SHU) PE NEFRO 1 Síndrome Nefrítica Nefrótica SHU CLI 69 8.3 10