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.ts — findBy 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.ts — popularSugestoesIniciais
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.tsx — sugestaoAcatada.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.ts — findByDiaLiturgico
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'