Skip to content

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. CalendarioLiturgicoServiceCorLiturgica 🟡

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