Skip to content

Sugestão de Repertório — Casos de Borda

Gerado pelo Writer (Reversa) em 2026-05-11 doc_level: detalhado

EC-01 — Sugestão sem correspondência no calendário romcal

Descrição: Uma SugestaoRepertorio tem chave_ciclo_liturgico definida mas CalendarioLiturgicoService.getCalendariosLiturgicos() não tem essa chave no Map.

Comportamento esperado: Sugestão é silenciosamente omitida do resultado de findBy (.filter(s => calendarios.has(...))). 🟢 Funcional mas sem feedback ao usuário.

Risco: 🟡 Sugestões válidas podem sumir após atualização do banco romcal sem aviso.

Rastreabilidade: BibliotecaSugestoesRepertorioRepository.tsfindBy linha .filter(s => calendarios.has(...))


EC-02 — Banco de sugestões não vazio mas desatualizado (sem chave de atualização)

Descrição: popularSugestoesIniciais verifica apenas COUNT(*) > 0 — se o banco tiver dados desatualizados e o usuário nunca sincronizou, não há mecanismo automático de atualização.

Comportamento esperado: Usuário vê sugestões antigas até sincronizar manualmente. 🟡

Rastreabilidade: BibliotecaSugestoesRepertorioRepository.tspopularSugestoesIniciais


EC-03 — Conversão em repertório com 0 itens selecionados

Descrição: O usuário entra em modo seleção mas desmarca todos os itens antes de criar o repertório.

Comportamento esperado: Toast "Selecione ao menos um item" exibido; repertório não é criado. 🟢

Rastreabilidade: SugestaoRepertorioDetalhesScreen.tsxsugestaoAcatada.itens.length === 0


EC-04 — chave_ciclo_liturgico com formato CicloLiturgico:IdRomcal vs. apenas IdRomcal

Descrição: O tipo ChaveCicloLiturgico aceita dois formatos: "A:id_romcal" (com ciclo) ou apenas "id_romcal". O calendário romcal pode indexar sob chaves com formato diferente.

Comportamento esperado: findByDiaLiturgico(idRomcal, ano?) constrói a chave correta: se ano presente → ${ano}:${idRomcal}, senão → idRomcal. 🟢

Risco: 🟡 Sugestão armazenada com chave "A:id" mas consultada com "id" (sem ciclo) → falha de match.

Rastreabilidade: BibliotecaSugestoesRepertorioRepository.tsfindByDiaLiturgico


EC-05 — Download de sugestões durante importação de obras

Descrição: SugestoesRepertorioService.downloadEmAndamento é um mutex separado do ObraService.downloadEmAndamento. Ambos os downloads podem ocorrer em paralelo usando Banco.attachFromCache simultaneamente.

Comportamento esperado: 🟡 Dois ATTACH simultâneos com aliases diferentes (toImport e sugestoesImport) — SQLite suporta múltiplos ATTACH, mas risco de deadlock se as duas operações tentarem escrever nas mesmas tabelas.

Rastreabilidade: BibliotecaRepository.ts — alias 'toImport' + BibliotecaSugestoesRepertorioRepository.ts — alias 'sugestoesImport'