Classes — o mapa dos schemas¶
O censo, antes dos diagramas. Esta página existe para que nenhum schema desapareça por não ter cabido, e para registrar o fato mais surpreendente deste modelo para quem chega.
O fato que muda como se lê todo diagrama desta pasta¶
O domínio quase não tem associação Ecto. São 3 em 65 schemas.
A contagem, feita em lib/ inteiro:
| Construção | Quantas |
|---|---|
belongs_to |
1 |
has_many |
2 |
has_one |
0 |
many_to_many |
0 |
| total de associações | 3 |
field :<algo>_id, :binary_id |
214 |
declarações schema "..." do |
65 |
As três associações¶
São todas fora do domínio observado — e é isso que as torna a exceção que confirma a regra:
| Onde | O quê |
|---|---|
lib/the_band/tenants/user.ex:90 |
belongs_to :tenant, TheBand.Tenants.Tenant |
lib/the_band/tenants/tenant.ex:24 |
has_many :users, TheBand.Tenants.User |
lib/the_band/sources/connected_tool.ex:38 |
has_many :credentials, TheBand.Sources.ToolCredential, foreign_key: :connected_tool_id |
Tenant ↔ conta e ferramenta ↔ credencial. Nada da EO, nada da SPO, nada da CMPO, nada da SRO, nada do trabalho coletado.
E a ligação existe — no banco¶
O ponto que engana: a ausência de associação Ecto não significa esquema frouxo. Medido nas 93 migrações reconstruídas:
| Quantas | |
|---|---|
colunas com references(...) — FK declarada no banco |
201 |
colunas :binary_id / :uuid sem references, fora das PKs |
12 |
A ligação é declarada no banco e não é modelada no Ecto. 201 chaves estrangeiras de verdade, e 3 associações. O
joiné sempre explícito, na consulta.
As 12 colunas cruas, e o porquê de cada uma, estão em
banco/declaracoes-da-organizacao.md
— quatro são polimórficas (FK é impossível) e seis não têm razão escrita, o que é achado
registrado ali.
Por que os diagramas de classes desta pasta desenham setas, então¶
Porque a seta representa a FK do banco e a intenção do domínio, não uma associação Ecto. Um diagrama que só mostrasse as 3 associações declaradas mostraria três caixas ligadas e sessenta e duas soltas — e seria fiel ao Ecto e mentiroso sobre o sistema.
Consequência prática para quem for programar: Repo.preload/2 não funciona em
praticamente nada aqui. Carregar o relacionado é escrever o join, e os módulos de consulta
(*/queries.ex) existem para isso.
Cobertura declarada¶
| Quantos | |
|---|---|
declarações schema "..." do em lib/ |
65 |
| schemas em pelo menos um diagrama de classes | 65 |
| schemas fora de todo diagrama | 0 |
| documentos de classes | 7 |
Antes de 2026-09-18 eram 61 de 65. Os quatro que faltavam —
spo_item_phase_declarations, spo_event_concept_declarations, spo_activity_end_criteria e
eo_role_structure_management_grants — entraram em
declaracoes-da-organizacao.md.
Tabela sem schema. O banco tem 66 tabelas de domínio e
lib/tem 65 schemas. A diferença éeo_organizational_units, que nasceu da ontologia e não tem origem que a alimente — a razão está embanco/mapa-das-tabelas.md.
Schemas por contexto¶
Contexto em lib/the_band/ |
Schemas |
|---|---|
ontology/seon/spo |
12 |
ontology/seon/eo |
10 |
work_items |
6 |
projects |
5 |
changes |
5 |
tenants |
4 |
sources |
3 |
profiles |
3 |
ontology/seon/cmpo |
3 |
verification |
2 |
ontology/continuum/sro |
2 |
mapping |
2 |
ingestion |
2 |
ai, communication, configuration, ontology/continuum/smpo, quality, raw_data |
1 cada |
| total | 65 |
Duas surpresas de organização, que valem para quem procura um schema:
cmpo_branchesmora emconfiguration/, e não emontology/seon/cmpo/(lib/the_band/configuration/schemas/branch.ex:24);raw_payloadsé declarado dentro deraw_data.ex, e não numa pastaschemas/(lib/the_band/raw_data.ex:26).
Nos dois casos o nome da tabela diz uma coisa e o caminho do arquivo diz outra. Registrado aqui para poupar a busca.
O censo completo¶
O método, porque a contagem depende dele: um schema conta como coberto quando o nome da
tabela ou a declaração class <Nome> aparece dentro de um bloco mermaid do documento —
menção em prosa não conta. Mais de um documento é overlap declarado: a mesma entidade vista
de dois contextos.
Cinco schemas precisaram de mapeamento manual, porque o nome da classe no diagrama não se deduz do nome do arquivo. Ficam nomeados para que a próxima contagem não os perca:
| Tabela | Arquivo | Classe no diagrama |
|---|---|---|
sync_checkpoints |
ingestion/checkpoint.ex |
SyncCheckpoint |
profile_runs |
profiles/run.ex |
ProfileRun |
profile_run_entries |
profiles/run_entry.ex |
ProfileRunEntry |
project_items |
projects/schemas/item.ex |
ProjectItem |
raw_payloads |
raw_data.ex |
RawPayload |
| Tabela | Schema | Documento(s) |
|---|---|---|
access_scope_grants |
the_band/tenants/access/scope_grant.ex:22 |
declaracoes-da-organizacao, tenants-e-acesso |
account_disablements |
the_band/tenants/account_disablement.ex:42 |
tenants-e-acesso |
ai_provider_credentials |
the_band/ai/provider_credential.ex:19 |
perfis-e-modelo |
change_request_issues |
the_band/changes/schemas/change_request_issue.ex:22 |
trabalho-e-mudanca |
cmpo_branches |
the_band/configuration/schemas/branch.ex:24 |
ingestao-e-observacao |
cmpo_source_repositories |
the_band/ontology/seon/cmpo/schemas/source_repository.ex:28 |
ingestao-e-observacao |
collected_artifact_evaluations |
the_band/quality/schemas/artifact_evaluation.ex:19 |
trabalho-e-mudanca |
collected_change_requests |
the_band/changes/schemas/collected_change_request.ex:19 |
trabalho-e-mudanca |
collected_commits |
the_band/changes/schemas/collected_commit.ex:22 |
trabalho-e-mudanca |
collected_issue_comments |
the_band/communication/schemas/collected_issue_comment.ex:22 |
trabalho-e-mudanca |
collected_issues |
the_band/work_items/schemas/collected_issue.ex:21 |
projetos-e-processo, trabalho-e-mudanca |
collected_verifications |
the_band/verification/schemas/collected_verification.ex:18 |
trabalho-e-mudanca |
commit_authors |
the_band/changes/schemas/commit_author.ex:24 |
trabalho-e-mudanca |
commit_files |
the_band/changes/schemas/commit_file.ex:22 |
trabalho-e-mudanca |
connected_tools |
the_band/sources/connected_tool.ex:23 |
ingestao-e-observacao |
decomposition_links |
the_band/work_items/schemas/decomposition_link.ex:17 |
trabalho-e-mudanca |
eo_organizational_roles |
the_band/ontology/seon/eo/schemas/organizational_role.ex:44 |
eo-estrutura-organizacional |
eo_organizations |
the_band/ontology/seon/eo/schemas/organization.ex:20 |
eo-estrutura-organizacional, ingestao-e-observacao, projetos-e-processo |
eo_people |
the_band/ontology/seon/eo/schemas/person.ex:28 |
eo-estrutura-organizacional, perfis-e-modelo, projetos-e-processo, tenants-e-acesso, trabalho-e-mudanca |
eo_person_profiles |
the_band/ontology/seon/eo/schemas/person_profile.ex:34 |
perfis-e-modelo |
eo_role_structure_management_grants |
the_band/ontology/seon/eo/schemas/role_structure_management_grant.ex:44 |
declaracoes-da-organizacao |
eo_role_visibility_grants |
the_band/ontology/seon/eo/schemas/role_visibility_grant.ex:32 |
declaracoes-da-organizacao, eo-estrutura-organizacional |
eo_team_compositions |
the_band/ontology/seon/eo/schemas/team_composition.ex:32 |
eo-estrutura-organizacional |
eo_team_membership_evidence |
the_band/ontology/seon/eo/schemas/team_membership_evidence.ex:28 |
eo-estrutura-organizacional |
eo_team_memberships |
the_band/ontology/seon/eo/schemas/team_membership.ex:52 |
eo-estrutura-organizacional |
eo_teams |
the_band/ontology/seon/eo/schemas/team.ex:29 |
eo-estrutura-organizacional, projetos-e-processo |
issue_assignees |
the_band/work_items/schemas/issue_assignee.ex:22 |
trabalho-e-mudanca |
issue_labels |
the_band/work_items/schemas/issue_label.ex:25 |
trabalho-e-mudanca |
issue_mapping_rules |
the_band/mapping/schemas/mapping_rule.ex:25 |
trabalho-e-mudanca |
issue_promotions |
the_band/work_items/schemas/issue_promotion.ex:29 |
trabalho-e-mudanca |
item_field_values |
the_band/projects/schemas/field_value.ex:19 |
projetos-e-processo |
observed_projects |
the_band/projects/schemas/observed_project.ex:19 |
projetos-e-processo |
observed_repositories |
the_band/ontology/seon/cmpo/schemas/observed_repository.ex:18 |
ingestao-e-observacao, projetos-e-processo |
profile_automation_events |
the_band/profiles/automation_event.ex:19 |
perfis-e-modelo |
profile_run_entries |
the_band/profiles/run_entry.ex:27 |
perfis-e-modelo |
profile_runs |
the_band/profiles/run.ex:21 |
perfis-e-modelo |
project_field_definitions |
the_band/projects/schemas/field_definition.ex:19 |
projetos-e-processo |
project_items |
the_band/projects/schemas/item.ex:20 |
projetos-e-processo |
project_iterations |
the_band/projects/schemas/iteration.ex:22 |
projetos-e-processo |
raw_payloads |
the_band/raw_data.ex:26 |
ingestao-e-observacao |
refused_links |
the_band/work_items/schemas/refused_link.ex:23 |
trabalho-e-mudanca |
smpo_iteration_field_roles |
the_band/ontology/continuum/smpo/schemas/iteration_field_role.ex:20 |
declaracoes-da-organizacao, projetos-e-processo |
spo_activity_deadline_criteria |
the_band/ontology/seon/spo/schemas/activity_deadline_criterion.ex:31 |
declaracoes-da-organizacao, projetos-e-processo |
spo_activity_end_criteria |
the_band/ontology/seon/spo/schemas/activity_end_criterion.ex:37 |
declaracoes-da-organizacao |
spo_activity_start_criteria |
the_band/ontology/seon/spo/schemas/activity_start_criterion.ex:43 |
declaracoes-da-organizacao, projetos-e-processo |
spo_event_concept_declarations |
the_band/ontology/seon/spo/schemas/event_concept_declaration.ex:30 |
declaracoes-da-organizacao |
spo_intended_project_processes |
the_band/ontology/seon/spo/schemas/intended_project_process.ex:20 |
projetos-e-processo |
spo_item_phase_declarations |
the_band/ontology/seon/spo/schemas/item_phase_declaration.ex:42 |
declaracoes-da-organizacao |
spo_performed_project_activities |
the_band/ontology/seon/spo/schemas/performed_project_activity.ex:35 |
projetos-e-processo |
spo_project_boards |
the_band/ontology/seon/spo/schemas/project_board.ex:38 |
projetos-e-processo |
spo_project_organizations |
the_band/ontology/seon/spo/schemas/project_organization.ex:17 |
projetos-e-processo |
spo_project_repositories |
the_band/ontology/seon/spo/schemas/project_repository.ex:21 |
projetos-e-processo |
spo_project_teams |
the_band/ontology/seon/spo/schemas/project_team.ex:17 |
projetos-e-processo |
spo_projects |
the_band/ontology/seon/spo/schemas/project.ex:29 |
projetos-e-processo |
sro_sprint_issues |
the_band/ontology/continuum/sro/schemas/sprint_issue.ex:28 |
projetos-e-processo |
sro_sprints |
the_band/ontology/continuum/sro/schemas/sprint.ex:39 |
projetos-e-processo |
sync_checkpoints |
the_band/ingestion/checkpoint.ex:19 |
ingestao-e-observacao |
syncs |
the_band/ingestion/sync.ex:15 |
ingestao-e-observacao |
sys_swo_loaded_software_system_copies |
the_band/ontology/seon/cmpo/schemas/loaded_software_system_copy.ex:20 |
ingestao-e-observacao |
tenants |
the_band/tenants/tenant.ex:19 |
tenants-e-acesso |
tool_credentials |
the_band/sources/tool_credential.ex:26 |
ingestao-e-observacao |
tool_observation_events |
the_band/sources/observation_event.ex:32 |
ingestao-e-observacao |
unmapped_pattern_decisions |
the_band/mapping/schemas/unmapped_pattern_decision.ex:21 |
trabalho-e-mudanca |
users |
the_band/tenants/user.ex:38 |
eo-estrutura-organizacional, tenants-e-acesso |
verification_components |
the_band/verification/schemas/verification_component.ex:19 |
trabalho-e-mudanca |
Os campos virtuais, que nenhum ERD mostra¶
12 schemas declaram field :outcome, Ecto.Enum, virtual: true. Não é coluna: é o desfecho
da gravação, devolvido pelo comando e usado para contar o que a coleta fez.
| Valores | Em quantos | O que significa |
|---|---|---|
[:created, :updated, :unchanged] |
11 | descreve entidade que muda |
[:created, :unchanged, :promoted, :completed] |
1 | spo_performed_project_activities — descreve ocorrência, que não muda |
A ausência de :updated no décimo segundo é a decisão de desenho mais importante da SPO, e
está em estados/atividade-executada.md.
Ordem de leitura sugerida¶
- este mapa — para saber o tamanho, e para não procurar
preload; - o diagrama de classes do contexto que interessa, pelo nulo que significa;
- o ERD do mesmo contexto, para chaves e índices parciais;
- a máquina de estados, que é onde o comportamento mora.