Base de dados As tabelas que esta fase cria, altera e lê, e os casos difíceis em linhas ao longo do tempo. Anterior Índice

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.

Tabela nova Tabela alterada Tabela sem alterações Coluna nova

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

nametax_numberrepresented_by_company_idrepresented_since
Horizonte Azul509876544NULLNULL
Serralharia Ave515234870Horizonte Azul2026-10-26

users_companies

usercompanypapel (user_company_roles)via_representation
Carla PintoHorizonte Azulcompany_managerfalse
Paulo RochaHorizonte Azulcompany_managerfalse
Carla PintoSerralharia Avecompany_managertrue
Paulo RochaSerralharia Avecompany_managertrue

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

titleparent_contract_idcontracting_company_idcontracted_company_idcontracted.represented_bystatus
Estrutura metálica e coberturasNULLObras AtlânticoHorizonte AzulNULLin_progress
Serralharia e caixilhariaEstrutura metálica…Horizonte AzulSerralharia AveHorizonte Azulin_progress
Pintura de estruturas metálicasSerralharia e caixilhariaSerralharia AvePinturas RibeiraHorizonte Azulin_progress
Cofragem (recusado)Serralharia e caixilhariaSerralharia AveCofragens do MinhoNULLnão se cria

3. Transferência para o António Ave

Antes (pedido pendente)

tabelalinha
companiesSerralharia Ave · represented_by = Horizonte Azul
companiesPinturas Ribeira · represented_by = Horizonte Azul
users_companiesCarla, Paulo · Serralharia Ave · via_representation = true
users_companiesCarla, Paulo · Pinturas Ribeira · via_representation = true
company_representation_transfersSerralharia Ave · pedido por António · pending

Depois de a Carla aprovar

tabelalinha
companiesSerralharia Ave · represented_by = NULL
companiesPinturas Ribeira · represented_by = Serralharia Ave
users_companiesCarla, Paulo · Serralharia Ave · via_representation
users_companiesCarla, Paulo · Pinturas Ribeira · via_representation
users_companiesAntónio · Serralharia Ave · company_manager · false
users_companiesAntónio · Pinturas Ribeira · company_manager · true
company_representation_transfersapproved · 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 deNível 1 (contratante do subcontrato)Nível 2RaizVai para
Serralharia AveHorizonte Azul: é a representantenão hánunca é nívelValidação de projeto
Pinturas RibeiraSerralharia Ave: representada pela mesmaHorizonte Azul: é a representantenunca é nívelValidação de projeto
Cofragens do Minho (hipótese: subcontratada pela Horizonte Azul)Horizonte Azul validanão hánunca é nívelValidaçã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).