Fix: contagem inconsistente do funil de progresso de áudio
TLDR: Quem tem
completed_atdeve contar em “Na metade” também, tornando as colunas Iniciaram/Na metade/Completaram um funil cumulativo consistente.
Contexto
No admin de áudios (AudioAdmin.get_queryset) as colunas de engajamento são calculadas a partir do AudioProgress, que tem um único registro por usuário/áudio. O campo position guarda a posição atual de reprodução.
Regras atuais:
- Iniciaram: todos os registros de progresso
- Na metade:
position >= total_duration / 2 - Completaram:
completed_atpreenchido
Problema: quando o usuário termina o áudio e reescuta, o position volta para perto do início. Esse usuário continua contando em Iniciaram e Completaram, mas deixa de contar em “Na metade” porque a posição atual dele é menor que 50%. Isso quebra a lógica de funil — é possível ter Na metade < Completaram, o que é incoerente, já que quem completou obrigatoriamente passou pela metade.
Objetivos
- Tornar as colunas um funil cumulativo consistente:
Iniciaram >= Na metade >= Completaram - Quem tem
completed_atconta em todas as etapas anteriores - Não contar como “Na metade” quando o áudio não tem duração registrada (
total_duration = 0)
Fora de escopo
— (não registrado na spec original)
Mudanças
Funil cumulativo — cada etapa conta quem chegou pelo menos até ali:
- Iniciaram = todos os registros
- Chegaram na metade =
completed_at IS NOT NULLOU (total_duration > 0Eposition >= total_duration / 2) -
Completaram =
completed_at IS NOT NULL apps/audios/admin.py— emAudioAdmin.get_queryset, ajustar o subqueryhalfwaypara a regra acima; rótulo da coluna/CSV “Chegaram na metade”apps/engagements/admin.py— em_progress_qs, alinhar o bucket de metade à regra acima e renomearparou_metade→chegaram_metade(no CSV e noslambdas)tests/audios/test_admin.py— testes do funil: reescutador (completo compositionbaixo) conta em todas as etapas;total_duration = 0não conta em “Chegaram na metade”; ajuste do teste multi-usuário e do CSV para a contagem cumulativatests/engagements/test_models_admin_apps.py— atualizar o teste do export para a semântica cumulativa e o novo nome de coluna
Como verificar
make test test=tests/audios/test_admin.py— todos verdes- Cenário de reescuta (completo com
positionbaixo) passa a aparecer em “Na metade”
Documentação
— (não registrado na spec original)