Tabelas das empresas representadas
A empresa representada é uma linha normal em companies, com o seu NIF, a apontar para a representante. O acesso faz-se por memberships marcadas como vindas da representação. O retrato completo está em database.sql.
Pais
Empresas
Acesso e transferência
Contratos e documentos
1. Criação da Serralharia Ave (26/10/2026)
A Carla cria a empresa no Novo Subcontrato. Numa transação: a linha da empresa, a subscrição da representante e uma membership de company_manager para cada gestor da Horizonte Azul, marcada com via_representation.
companies
| name | tax_number | represented_by_company_id | represented_since |
|---|---|---|---|
| Horizonte Azul | 509876544 | NULL | NULL |
| Serralharia Ave | 515234870 | Horizonte Azul | 2026-10-26 |
users_companies
| user | company | papel (user_company_roles) | via_representation |
|---|---|---|---|
| Carla Pinto | Horizonte Azul | company_manager | false |
| Paulo Rocha | Horizonte Azul | company_manager | false |
| Carla Pinto | Serralharia Ave | company_manager | true |
| Paulo Rocha | Serralharia Ave | company_manager | true |
O subcontrato nasce in_progress, com o convite registado como aceite e a Carla nomeada gestora de contrato do lado da Serralharia Ave. Os documentos guardam uploaded_by (Carla) e, na submissão, submitted_by_company_id (Serralharia Ave). A representante não é coluna nova: deriva-se da membership via_representation de quem carregou.
2. Cadeia para baixo
No tenant da Serralharia Ave, a Pinturas Ribeira é criada com a mesma representante. A Cofragens do Minho é autónoma e é recusada: abaixo de uma representada só entram empresas representadas pela mesma empresa.
contracts e a representante de cada contratada
| title | parent_contract_id | contracting_company_id | contracted_company_id | contracted.represented_by | status |
|---|---|---|---|---|---|
| Estrutura metálica e coberturas | NULL | Obras Atlântico | Horizonte Azul | NULL | in_progress |
| Serralharia e caixilharia | Estrutura metálica… | Horizonte Azul | Serralharia Ave | Horizonte Azul | in_progress |
| Pintura de estruturas metálicas | Serralharia e caixilharia | Serralharia Ave | Pinturas Ribeira | Horizonte Azul | in_progress |
| Cofragem (recusado) | Serralharia e caixilharia | Serralharia Ave | Cofragens do Minho | NULL | não se cria |
3. Transferência para o António Ave
Antes (pedido pendente)
| tabela | linha |
|---|---|
| companies | Serralharia Ave · represented_by = Horizonte Azul |
| companies | Pinturas Ribeira · represented_by = Horizonte Azul |
| users_companies | Carla, Paulo · Serralharia Ave · via_representation = true |
| users_companies | Carla, Paulo · Pinturas Ribeira · via_representation = true |
| company_representation_transfers | Serralharia Ave · pedido por António · pending |
Depois de a Carla aprovar
| tabela | linha |
|---|---|
| companies | Serralharia Ave · represented_by = NULL |
| companies | Pinturas Ribeira · represented_by = Serralharia Ave |
| users_companies | Carla, Paulo · Serralharia Ave · via_representation |
| users_companies | Carla, Paulo · Pinturas Ribeira · via_representation |
| users_companies | António · Serralharia Ave · company_manager · false |
| users_companies | António · Pinturas Ribeira · company_manager · true |
| company_representation_transfers | approved · decided_by Carla · 2026-10-26 |
Os contratos, os documentos e o histórico ficam onde estão, porque pertencem à Serralharia Ave e não à Horizonte Azul. As nomeações de gestor de contrato da Horizonte Azul nos contratos da Serralharia Ave passam para o António. A passagem da Pinturas Ribeira é o pressuposto da questão Q1.
4. Quem não valida o que carregou
Em cada nível da cadeia, valida a contratante do subcontrato. Saltam-se os níveis cuja contratante é a representante ou uma empresa representada por ela. A raiz nunca é nível. O que sobra é a validação de projeto (Rui Matos, Obras Atlântico).
| Documentos de | Nível 1 (contratante do subcontrato) | Nível 2 | Raiz | Vai para |
|---|---|---|---|---|
| Serralharia Ave | Horizonte Azul: é a representante | não há | nunca é nível | Validação de projeto |
| Pinturas Ribeira | Serralharia Ave: representada pela mesma | Horizonte Azul: é a representante | nunca é nível | Validação de projeto |
| Cofragens do Minho (hipótese: subcontratada pela Horizonte Azul) | Horizonte Azul valida | não há | nunca é nível | Validação de projeto, como hoje |
Não se guarda nada novo para isto: o salto é calculado nos ponteiros de validação a partir de contracts.contracting_company_id e de companies.represented_by_company_id. Na submissão dos documentos da Serralharia Ave e da Pinturas Ribeira, pending_validator_company_id e pending_contract_id ficam vazios e pending_project_id aponta logo para o projeto. Se a representante for o empreiteiro geral, contradiz a regra de ele validar por último (questão Q2).