Documentação — TRG Club API
Índice completo da documentação do projeto. Toda doc vive aqui, em .project/docs/.
O primeiro nível é um conjunto fechado: specs/, plans/, features/, learnings/, architecture/, guides/, reference/<scope>/ e rules/<scope>/, mais os arquivos reservados README.md, RULES.md e modules.md. Nenhuma pasta nova no nível 1.
Neste repo existem hoje: specs/, learnings/, guides/, reference/ e rules/.
Regras de negócio — rules/<scope>/
Índice dedicado, ordenado por ID: RULES.md.
| ID | Título | Scope | Certainty | Arquivo |
|---|---|---|---|---|
| R-001 | Expiração de pagamento PIX e cancelamento de sessões | payments | high | pix_payment_expiration.md |
| R-002 | Confirmação de pagamento por webhook e ativação de sessões | payments | high | webhook_confirmation_and_meeting_activation.md |
| R-003 | Expiração da assinatura PRO por inelegibilidade no CITRG | subscriptions | high | pro_expiration_on_citrg_ineligibility.md |
| R-004 | Elegibilidade PRO exige filiação válida e documentação aprovada | subscriptions | high | pro_eligibility_validity_and_documentation.md |
| R-005 | Feature flags para visitantes anônimos | feature_flags | high | anonymous_global_flags.md |
| R-006 | Anotações do cliente pertencem ao terapeuta que as escreveu | clients | high | client_annotations.md |
Como o sistema funciona — reference/<scope>/
| Doc | Scope | Certainty | Descrição |
|---|---|---|---|
| invoice_payment_flow.md | payments | high | Ciclo completo de repasse ao terapeuta: elegibilidade, cálculo, criação mensal, retry diário e ações no Avo |
| enotas_csv_layout.md | payments | high | Layout das 50 colunas do CSV de importação do eNotas e o mapeamento de cada coluna preenchida pelo export |
| pro_downgrade_on_citrg_expiry.md | subscriptions | high | Os dois gatilhos do rebaixamento de PRO (login e webhook da citrg-api), contrato e propriedades de segurança |
| room_ping_quality.md | meetings | high | Como a qualidade de rede e o navegador são derivados do payload diagnostics e exibidos no Avo |
| public_endpoints.md | api | medium | Endpoints de verificação de telefone, perfil e terapeuta, mais os parâmetros de busca via Ransack |
Guias operacionais — guides/
| Doc | Certainty | Descrição |
|---|---|---|
| getting_started.md | high | Subir o ambiente de desenvolvimento do zero com Docker e Overmind |
| pro_eligibility_audit.md | high | Varredura em duas fases no console para auditar e rebaixar PROs inelegíveis no CITRG |
Aprendizados — learnings/
| Doc | Scope | Data | Certainty | Descrição |
|---|---|---|---|---|
| payments_pix_expiration_race_condition.md | payments | 2026-03-14 | high | PIX pago dentro da janela de 30 min foi expirado e as sessões destruídas; investigação e reparo manual |
| sessions_ghost_pings_and_missing_connection_data.md | sessions | 2026-05-11 | high | Endpoint de ping sem guarda de janela produz pings fantasma, e pings sem contexto não provam qualidade de sessão |
| subscriptions_invert_where_association_conditions.md | subscriptions | 2026-07-17 | high | invert_where nega a condição user_id da associação e fez o rebaixamento atingir o usuário errado |
| subscriptions_pro_access_never_expired.md | subscriptions | 2026-07-07 | high | Elegibilidade era calculada e descartada; sem passo de reconciliação, o acesso PRO era permanente |
Mudanças — specs/
| Doc | Status | Certainty | Descrição |
|---|---|---|---|
| 20260127170116_payment_invoiceability_refactor.md | done | medium | Concerns de invoiceabilidade, wrapper Therapist e mínimo de R$ 100 (parte 1 de 4) |
| 20260127171922_simplify_invoice_creation.md | done | medium | Consolida 5 use cases em 1 e remove o model InvoiceError (parte 2 de 4) |
| 20260203095020_enhance_invoice_avo_interface.md | done | medium | Badges de status, campos de retry e actions condicionais no Avo (parte 3 de 4) |
| 20260203165036_add_monthly_metrics_to_payment_screens.md | done | medium | Cards de métricas mensais nas três telas de pagamento (parte 4 de 4) |
| 20260424111747_show_therapist_regardless_of_availabilities.md | done | high | Terapeuta aparece na busca mesmo sem disponibilidade cadastrada |
| 20260514180301_avatar_cache_ttl.md | done | high | Cache do endpoint de avatar de 1 minuto para 1 hora |
| 20260514180302_http_client_timeout.md | done | high | Timeouts de conexão e leitura em todas as chamadas HTTParty |
| 20260514180303_update_pix_async.md | done | high | Payments::UpdatePix sai do ciclo do request e vira background job |
| 20260514180304_meeting_n1_fix.md | done | high | Inclui user_profile no includes da query de meetings |
| 20260514180305_database_pool.md | proposed | high | Pool de conexões do banco de 5 para 10 |
| 20260514180306_goodjob_cron_race.md | proposed | high | Elimina erros de chave duplicada no cron do GoodJob |
| 20260522000001_datadog_replace_appsignal.md | proposed | high | Remove o AppSignal e adiciona APM e logs do Datadog |
| 20260604180000_meeting_paid_at_on_invoice_paid.md | proposed | high | Preenche paid_at/paid_total das sessões quando a invoice é paga |
| 20260605120000_stuck_created_transfers.md | done | high | Transfers travadas há mais de 24 h passam a failed, destravando o retry |
| 20260610171233_goodjob_queue_isolation_and_cron_dyno.md | proposed | high | Pools de threads por fila e process type priority dedicado a pagamentos |
| 20260611103300_refresh_job_subjobs_per_therapist.md | proposed | high | RefreshJob passa a enfileirar um sub-job por terapeuta, estabilizando a memória |
| 20260612084141_skip_update_pix_when_already_present.md | proposed | high | Não enfileira UpdatePixJob quando o pix já está preenchido |
| 20260612161956_terapeuta_signin_orphan_user.md | proposed | high | CPF inválido no CITRG cria User sem UserProfile e quebra o login para sempre |
| 20260707151623_expire_pro_when_citrg_ineligible.md | done | high | Expira o PRO e restaura o plano regular quando a filiação CITRG caduca |
| 20260709170553_downgrade_on_citrg_expiry_webhook.md | done | high | Webhook da citrg-api rebaixa o PRO mesmo sem o usuário logar |
| 20260717112846_fix_non_expired_scope_invert_where.md | done | high | Corrige o invert_where do scope non_expired e normaliza planos no login |
| 20260722135700_faixa_etaria_terapeuta.md | in_progress | high | Campo age_range no perfil, exibido na PDP do terapeuta |
| 20260727165953_admin_taxes_endpoint.md | done | high | Endpoint e tela admin de impostos retidos, com filtro e paginação |
| 20260729143000_meeting_ping_diagnostics.md | done | high | Tabela meeting_participant_pings com payload diagnostics por heartbeat |
| 20260731120000_remove_ping_diagnostics_schema_version.md | done | high | Remove schema_version, que nunca versionou nada de fato |
| 20260803140000_room_ping_network_quality_avo.md | done | high | Flag de qualidade de rede e navegador nos pings exibidos no Avo |
| 20260811153509_admin_taxes_enotas_export.md | done | high | Tela admin de impostos passa a listar sessões no layout de importação do eNotas, filtrando por período em vez de ano |
| 20261002100729_client_annotations_crud.md | in_progress | high | CRUD de anotações do cliente em /me/clients/:client_id/comments, sem depender de sessão e só do autor |
Rascunhos — specs/drafts/
Specs aprovadas mas não iniciadas.
| Doc | Status | Certainty | Descrição |
|---|---|---|---|
| 20260511112716_ping_connection_data_and_audit.md | proposed | high | Contexto de conexão e auditoria por ping; parcialmente superado, auditoria e guarda de janela seguem pendentes |
Distribuição de certainty
44 documentos indexados (fora os índices README.md e RULES.md).
| Certainty | Docs | Significado |
|---|---|---|
high |
39 | conteúdo veio do documento original ou de código verificado |
medium |
5 | parcialmente reconstruído a partir do código |
low |
0 | — |
Quatro dos medium são as partes da iniciativa de invoiceabilidade (jan–fev/2026): as specs originais descreviam o estado pretendido, e a verificação contra o código mostrou desvios entre o proposto e o entregue. Cada uma carrega uma nota “Desvio verificado em 2026-08-06” apontando o que divergiu. O quinto é public_endpoints.md, herdado do README.md da raiz — notas escritas à mão, não verificadas linha a linha contra as rotas.
Onde não fica documentação
CLAUDE.mdna raiz e.project/ai/— instruções para agentes de IA, não são documentaçãospec/— suíte RSpec.github/PULL_REQUEST_TEMPLATE.md— template do GitHub