Domínio — canta-igreja
Gerado pelo Detective (Reversa) em 2026-05-11
doc_level: detalhado
Glossário
| Termo | Definição | Confiança |
|---|---|---|
| Música | Entidade central: letra + metadados de uma composição litúrgica. Nunca editada pelo usuário — vem do catálogo. | 🟢 |
| Catálogo | Base de dados de músicas + livros gerenciada pela equipe do canta.app. Distribuída via banco SQLite embarcado e obras baixáveis. | 🟢 |
| Obra | Pacote de hinário baixável (arquivo SQLite) que acrescenta ou atualiza músicas e livros no catálogo local. | 🟢 |
| Livro / Hinário | Publicação física de cânticos. Uma música pode aparecer em múltiplos livros com índices diferentes. | 🟢 |
| Edição de Livro | Versão específica de um livro (ex.: "Canto Eucarístico, 5ª ed., Paulus"). É a entidade de filtro na busca. | 🟢 |
| Índice | Número/código do cântico dentro de um livro. Pode ser alfanumérico (ex.: "23a"). Usado para busca por índice. | 🟢 |
| Rótulo | Classificação litúrgica de uma música (ex.: "Entrada", "Quaresma"). Organizados em 8 categorias hardcoded. | 🟢 |
| Categoria de Rótulo | Agrupamento fixo de rótulos: Momento da Missa, Tempo Litúrgico, Semana Santa, Solenidade, Festa, Sacramento, Outro, Outro Rito. | 🟢 |
| Repertório | Lista de músicas e termos livres organizada pelo usuário. Tem título, ordem explícita e metadado de data/dia litúrgico. | 🟢 |
| Item de Repertório | Entrada em um repertório: pode ser uma música do catálogo (id_musica) OU um texto livre (termo). |
🟢 |
| Momento | Campo opcional de um item de repertório indicando quando a música é cantada (ex.: "Entrada", "Ofertório"). Sugerido pelo sistema. | 🟢 |
| Tonalidade | Campo opcional de um item indicando o tom musical (ex.: "Lá menor"). Sugerido a partir do histórico de uso. | 🟢 |
| Lista | Nome anterior de "Repertório" no código e na UI — completamente renomeado via commit refactor: migrate Lista to Repertorio. |
🟢 |
| Repertório Padrão | Repertório criado pelo sistema, não pelo usuário: "Músicas favoritas" (id=1) e "Visto recentemente" (id=2). Não pode ser excluído. | 🟢 |
| Slug de Repertório | Identificador de um repertório na API: {conta}:{repertório}. Tem dois campos: referencia (original) e corrente (atual). |
🟢 |
| Sugestão de Repertório | Repertório pré-montado pela equipe do canta.app para um dia litúrgico específico. Somente-leitura; pode virar um Repertório do usuário. | 🟢 |
| Folheto | PDF de um repertório gerado em livreto.canta.app. Requer autenticação ou pode ser gerado via Base64. |
🟢 |
| Dia Litúrgico | Dia do calendário romano com nome, cor e celebrações, calculado pelo romcal (offline) ou pela API DANCRF (leituras online). | 🟢 |
| Ciclo Litúrgico | Ciclo anual de leituras: A, B ou C (Domingos e festas) — PAR/ÍMPAR (férias, ainda não suportado no app). | 🟡 |
| Tempo Litúrgico | Período do ano litúrgico: Advento, Natal, Quaresma, Páscoa, Tempo Comum. | 🟢 |
| Cor Litúrgica | Cor das vestes sacerdotais: Verde, Roxo, Vermelho, Branco, Rosa, Dourado, Preto. | 🟢 |
| Conta | Usuário autenticado via Google OAuth. Tem slug, nome, email. Necessária para compartilhar/folheto. |
🟢 |
| Biblioteca | Seção do app onde obras são listadas e baixadas. Gerenciada pela API canta.app/api/obras. |
🟢 |
| Exemplar | Registro de uma obra instalada localmente. Rastreia versão (crc32) e estado (ativo/inativo). | 🟢 |
| CRC32 | Checksum de 32 bits usado para detectar se músicas ou obras precisam ser atualizadas. Comparação local × remoto. | 🟢 |
| DANCRF | API externa que fornece as leituras litúrgicas do dia (Bíblia: 1ª leitura, salmo, 2ª leitura, evangelho). | 🟡 |
| romcal | Biblioteca JavaScript offline para cálculo do calendário litúrgico romano. Gera dados para todo o ano. | 🟢 |
| Keep Awake | Recurso que impede o dispositivo de bloquear a tela enquanto o usuário lê a letra de uma música. | 🟢 |
Regras de Negócio
Músicas
| # | Regra | Origem | Confiança |
| ----- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------- | -------------------------------- | --- |
| RN-01 | O catálogo de músicas é somente-leitura para o usuário — nunca editado diretamente no app. | Ausência de tela de edição de música | 🟢 |
| RN-02 | Uma música pode ter múltiplos vídeos YouTube (YouTubes[]). O campo singular YouTube está deprecated e mantido apenas por compatibilidade. | Musica.ts + commit feat(youtube): support to api with multiple youtube ids | 🟢 |
| RN-03 | A busca FTS5 ignora acentos (normalização NFKD) e faz match por prefixo (* no final de cada token). | MusicasRepository.getDetalhesTermoBusca | 🟢 |
| RN-04 | Busca por número inteiro é interpretada como busca por índice no livro selecionado. | BuscaStrategies.porIndice | 🟢 |
| RN-05 | A tela de letra usa "Keep Awake" — a tela do dispositivo não dorme enquanto o usuário lê. | Múltiplos commits fix: keep awake | 🟢 |
| RN-06 | Músicas de Salmo têm tratamento especial: a pré-visualização da letra é limpa/sanitizada diferentemente. | commit fix(musics): clean lyric preview for psalm | 🟡 |
| RN-07 | Letras exibem snippet com destaque (marcadores | |) do termo buscado, limitado a TOTAL_TOKENS. | MusicasRepository snippet FTS5 | 🟢 |
| RN-08 | Relatar erro de música abre formulário Airtable pré-preenchido com id, título e início da letra. | MusicaService.relatarErro | 🟢 |
| RN-09 | O campo musica.informacoes (JSON livre, v9) existe mas não é usado visivelmente na UI — campo de extensão futura. | Migration v9 + ausência de uso no código atual | 🟡 |
Repertórios
| # | Regra | Origem | Confiança |
|---|---|---|---|
| RN-10 | Título do repertório é limitado a 50 caracteres (CHECK SQL). | Migration v8 | 🟢 |
| RN-11 | termo de um item é limitado a 300 caracteres. |
Migration v8 | 🟢 |
| RN-12 | Deleção de repertório é soft-delete: data_exclusao é preenchida, o registro permanece. |
deactivateRepertorio |
🟢 |
| RN-13 | "Músicas favoritas" e "Visto recentemente" são repertórios protegidos criados na migration v8. Não podem ser excluídos. | tipo_repertorio = 1 (Padrão) |
🟢 |
| RN-14 | A ordem dos itens do repertório é armazenada como array JSON ordem_musicas no registro do repertório, não por posição na tabela item_repertorio. |
Repertorio.ordem_musicas |
🟢 |
| RN-15 | Reordenação de itens está desabilitada no momento (UI bloqueada). | commit fix(repertorio): desabilitado reordenação por enquanto |
🟢 |
| RN-16 | momento e tonalidade têm sugestões automáticas baseadas no histórico de uso do usuário. |
commit feat(tonalidade, momento): recomendar últimas utilizadas |
🟡 |
| RN-17 | Um repertório pode ter um slug.referencia diferente do slug.corrente: quando importado de outra conta e re-compartilhado. |
RepertorioSlug + CompartilharService |
🟢 |
| RN-18 | Espaços no início/fim de momento ou tonalidade são automaticamente removidos. |
commit fix: avoid momento or tonalidade with spaces at end |
🟢 |
| RN-19 | Compartilhar um repertório requer autenticação Google. A mensagem gerada é formatada em Markdown compatível com WhatsApp. | CompartilharService + commit feat(share music): improve whastsapp markdown support |
🟢 |
Liturgia & Sugestões
| # | Regra | Origem | Confiança |
|---|---|---|---|
| RN-20 | O calendário litúrgico é calculado offline via romcal com configuração brasileira. Não depende de internet para mostrar datas e nomes. | CalendarioLiturgicoService |
🟢 |
| RN-21 | As leituras bíblicas do dia são buscadas online via API DANCRF. Um 404 não é erro — significa que o dia não tem liturgia própria. | Liturgia.api.ts |
🟢 |
| RN-22 | As leituras são cacheadas localmente em SQLite (liturgia_cache) para uso offline posterior. |
Migration v15 | 🟢 |
| RN-23 | Ciclos Litúrgicos PAR/ÍMPAR (para o Ofício Ferial) não são suportados ainda. FIXME explícito no código. | CalendarioLiturgicoService.ts:120 |
🟢 |
| RN-24 | Sugestões de repertório são substituídas totalmente a cada sincronização (não incremental). | importarSugestoes |
🟢 |
| RN-25 | Na primeira instalação, sugestões são semeadas a partir do banco repertorios.db embarcado, sem necessidade de internet. |
popularSugestoesIniciais |
🟢 |
| RN-26 | A cor litúrgica das sugestões e dias é derivada do romcal offline, não do DANCRF. | CalendarioLiturgicoService → CorLiturgica |
🟡 |
Autenticação & Conta
| # | Regra | Origem | Confiança |
|---|---|---|---|
| RN-27 | O login é opcional — todas as funcionalidades de leitura funcionam sem conta. Conta é necessária apenas para compartilhar e gerar folheto. | Análise de código: auth só em CompartilharService e FolhetoService | 🟢 |
| RN-28 | O token é renovado automaticamente quando falta ≤ 1 minuto para expirar. | Auth.isAtiva |
🟢 |
| RN-29 | No web, credenciais ficam em localStorage. Se localStorage indisponível (SSR, iframe restrito), ficam em memória da sessão. |
WebCredentialsStrategy |
🟢 |
| RN-30 | A imagem de perfil é extraída do JWT (idToken.picture), não armazenada separadamente. |
UsuarioLogadoRepository.setUsuarioLogado |
🟢 |
| RN-31 | Privacidade do app foi removida do app e movida para canta.app. |
commit feat: remove privacy (moved to canta.app) |
🟢 |
Configurações & UI
| # | Regra | Origem | Confiança |
|---|---|---|---|
| RN-32 | Configurações são persistidas imediatamente ao alterar (MMKV síncrono). Não há botão "salvar". | ConfiguracoesUsuarioRepository |
🟢 |
| RN-33 | Tema do sistema (Tema.SISTEMA) foi planejado mas não implementado — está comentado no código. |
Configuracoes.types.ts |
🟢 |
| RN-34 | Em dispositivos tablet (breakpoint largo), o app exibe mais texto de letra (250 caracteres vs 100 no phone). | MusicaConfiguration |
🟢 |
| RN-35 | Breakpoints legacy (xs, sm, md etc.) estão deprecated no sistema de estilos. |
breakpoints.styles.ts |
🟢 |
| RN-36 | O player YouTube não sai da área segura da navegação bottom — há lógica explícita para evitar sobreposição. | commits fix(youtube): avoid to make player outside navigation down bar |
🟢 |
Dívidas Técnicas Identificadas
| ID | Local | Descrição | Prioridade Estimada |
|---|---|---|---|
| DT-01 | MusicasRepository.ts:222 |
Paginação/ordenação por cantico_musica.ordem não implementada — usa titulo sem considerar ordem dentro do livro |
Alta |
| DT-02 | MusicasRepository.ts:225 |
Busca por índice + livro não funciona corretamente | Alta |
| DT-03 | CalendarioLiturgicoService.ts:120 |
Ciclos PAR/ÍMPAR não suportados | Média |
| DT-04 | ItensRepertorio.action.ts:22,56 |
Itens de repertório acessados sem o repertório em memória → dispatch manual de carga não implementado | Média |
| DT-05 | Repertorios.adapter.ts:7 |
Ordenação de repertórios: apenas por título, "últimos acessados" não implementado | Baixa |
| DT-06 | Repertorios.action.ts:201 |
Auth duplicada entre CompartilharService e AcessoAction.autenticar — sem padronização |
Baixa |
| DT-07 | YoutubePlayerView.tsx:155 |
Modais do player YouTube comentados/desabilitados | Baixa |
| DT-08 | fix(repertorio): desabilitado reordenação por enquanto |
Reordenação de itens do repertório está desabilitada | Média |
| DT-09 | AutoComplete.tsx:13 |
Componente AutoComplete deprecated e não funcional | Baixa |
Eventos de Negócio Monitorados (Sentry Metrics)
| Evento | Atributos | Significado de Negócio |
|---|---|---|
musica_acessada |
musica_id, musica_titulo |
Músicas mais populares |
busca_musica_realizada |
contexto, termo_tamanho |
Padrões de busca |
busca_repertorio_realizada |
termo_tamanho |
Uso da busca de repertórios |
sessao_iniciada |
— | DAU (Daily Active Users) |
musica_favoritada |
musica_id, titulo, acao |
Engajamento com favoritos |
musica_adicionada_repertorio |
musica_id, titulo |
Adoção de repertórios |
repertorio_criado |
— | Taxa de criação de repertórios |
repertorio_criado_por_sugestao |
— | Conversão de sugestões em uso real |
repertorio_duplicado |
— | Reutilização de repertórios |
tela_acessada |
tela |
Navegação e popularidade de telas |
gerar_folheto |
— | Uso do recurso de folheto |
compartilhar_musica |
musica_id, titulo |
Compartilhamento de letras |
compartilhar_repertorio |
— | Compartilhamento de repertórios |