# 07 · QA PLANTA × FOOTPRINT × 3D
### Relatório de aprovação · gate obrigatório antes da implantação 3D definitiva

**Rodado em 22.08.2026 · 18 MODEL_IDs · 18 PASS · 0 FAIL**

Este relatório não é documento de definição — é a conferência automática entre a planta paramétrica,
o footprint publicado e o modelo 3D. **Nenhum modelo com FAIL pode substituir placeholder no
masterplan.** O teste roda sobre os arquivos, não sobre memória: se um arquivo mudar, o resultado muda.

| MODEL_ID | Resultado | Testes | Falhas |
|---|---|---|---|
| `l35q` | **PASS** | 20 | 0 |
| `l35h` | **PASS** | 20 | 0 |
| `l45q` | **PASS** | 20 | 0 |
| `l45s` | **PASS** | 20 | 0 |
| `l45h` | **PASS** | 20 | 0 |
| `f35q` | **PASS** | 20 | 0 |
| `f35h` | **PASS** | 20 | 0 |
| `f45q` | **PASS** | 20 | 0 |
| `f45s` | **PASS** | 20 | 0 |
| `f45h` | **PASS** | 20 | 0 |
| `hstd` | **PASS** | 17 | 0 |
| `hmst` | **PASS** | 17 | 0 |
| `loft30` | **PASS** | 17 | 0 |
| `pav_A` | **PASS** | 20 | 0 |
| `bloco_B` | **PASS** | 20 | 0 |
| `ala_C` | **PASS** | 20 | 0 |
| `pavilhao_C` | **PASS** | 20 | 0 |
| `rest` | **PASS** | 20 | 0 |

---

## `l35q` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 8.30 · manifest 8.30 · footprint 11.20 |
| planta × footprint · largura | ✅ PASS | cobertura 6.00 · manifest 6.00 · footprint 7.50 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 11.20 ≥ manifest 8.30 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 7.50 ≥ manifest 6.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 11.20 × 7.50 · footprint 11.20 × 7.50 |
| área privativa × envelope | ✅ PASS | privativa 34.95 m² ≤ envelope 49.80 m² × 1 pav = 49.80 m² |
| esquadrias cadastradas | ✅ PASS | 12 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 3 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena l35q |
| deck | ✅ PASS | 12.45 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `l35h` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 8.30 · manifest 8.30 · footprint 11.20 |
| planta × footprint · largura | ✅ PASS | cobertura 6.00 · manifest 6.00 · footprint 7.50 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 11.20 ≥ manifest 8.30 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 7.50 ≥ manifest 6.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 11.20 × 7.50 · footprint 11.20 × 7.50 |
| área privativa × envelope | ✅ PASS | privativa 34.93 m² ≤ envelope 49.80 m² × 1 pav = 49.80 m² |
| esquadrias cadastradas | ✅ PASS | 11 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 3 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena l35h |
| deck | ✅ PASS | 12.45 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `l45q` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 10.70 · manifest 10.70 · footprint 13.60 |
| planta × footprint · largura | ✅ PASS | cobertura 6.00 · manifest 6.00 · footprint 7.50 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 13.60 ≥ manifest 10.70 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 7.50 ≥ manifest 6.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 13.60 × 7.50 · footprint 13.60 × 7.50 |
| área privativa × envelope | ✅ PASS | privativa 44.80 m² ≤ envelope 64.20 m² × 1 pav = 64.20 m² |
| esquadrias cadastradas | ✅ PASS | 13 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 4 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena l45q |
| deck | ✅ PASS | 16.05 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `l45s` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 10.70 · manifest 10.70 · footprint 13.60 |
| planta × footprint · largura | ✅ PASS | cobertura 6.00 · manifest 6.00 · footprint 7.50 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 13.60 ≥ manifest 10.70 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 7.50 ≥ manifest 6.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 13.60 × 7.50 · footprint 13.60 × 7.50 |
| área privativa × envelope | ✅ PASS | privativa 44.46 m² ≤ envelope 64.20 m² × 1 pav = 64.20 m² |
| esquadrias cadastradas | ✅ PASS | 14 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 4 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena l45s |
| deck | ✅ PASS | 16.05 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `l45h` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 10.70 · manifest 10.70 · footprint 13.60 |
| planta × footprint · largura | ✅ PASS | cobertura 6.00 · manifest 6.00 · footprint 7.50 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 13.60 ≥ manifest 10.70 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 7.50 ≥ manifest 6.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 13.60 × 7.50 · footprint 13.60 × 7.50 |
| área privativa × envelope | ✅ PASS | privativa 44.89 m² ≤ envelope 64.20 m² × 1 pav = 64.20 m² |
| esquadrias cadastradas | ✅ PASS | 11 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 4 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena l45h |
| deck | ✅ PASS | 16.05 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `f35q` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 4.00 · manifest 4.00 · footprint 6.90 |
| planta × footprint · largura | ✅ PASS | cobertura 11.30 · manifest 11.30 · footprint 12.90 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 6.90 ≥ manifest 4.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 12.90 ≥ manifest 11.30 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 6.90 × 12.90 · footprint 6.90 × 12.90 |
| área privativa × envelope | ✅ PASS | privativa 34.95 m² ≤ envelope 45.20 m² × 1 pav = 45.20 m² |
| esquadrias cadastradas | ✅ PASS | 11 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena f35q |
| deck | ✅ PASS | 6.40 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `f35h` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 4.00 · manifest 4.00 · footprint 6.90 |
| planta × footprint · largura | ✅ PASS | cobertura 11.30 · manifest 11.30 · footprint 12.90 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 6.90 ≥ manifest 4.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 12.90 ≥ manifest 11.30 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 6.90 × 12.90 · footprint 6.90 × 12.90 |
| área privativa × envelope | ✅ PASS | privativa 34.97 m² ≤ envelope 45.20 m² × 1 pav = 45.20 m² |
| esquadrias cadastradas | ✅ PASS | 11 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena f35h |
| deck | ✅ PASS | 6.40 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `f45q` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 5.00 · manifest 5.00 · footprint 7.90 |
| planta × footprint · largura | ✅ PASS | cobertura 11.30 · manifest 11.30 · footprint 12.90 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 7.90 ≥ manifest 5.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 12.90 ≥ manifest 11.30 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 7.90 × 12.90 · footprint 7.90 × 12.90 |
| área privativa × envelope | ✅ PASS | privativa 44.10 m² ≤ envelope 56.50 m² × 1 pav = 56.50 m² |
| esquadrias cadastradas | ✅ PASS | 15 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena f45q |
| deck | ✅ PASS | 8.00 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `f45s` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 5.00 · manifest 5.00 · footprint 7.90 |
| planta × footprint · largura | ✅ PASS | cobertura 11.30 · manifest 11.30 · footprint 12.90 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 7.90 ≥ manifest 5.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 12.90 ≥ manifest 11.30 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 7.90 × 12.90 · footprint 7.90 × 12.90 |
| área privativa × envelope | ✅ PASS | privativa 44.16 m² ≤ envelope 56.50 m² × 1 pav = 56.50 m² |
| esquadrias cadastradas | ✅ PASS | 14 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena f45s |
| deck | ✅ PASS | 8.00 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `f45h` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 5.00 · manifest 5.00 · footprint 7.90 |
| planta × footprint · largura | ✅ PASS | cobertura 11.30 · manifest 11.30 · footprint 12.90 |
| planta × footprint · altura | ✅ PASS | footprint 2.85 · ROOF_TOP 2.85 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 7.90 ≥ manifest 5.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 12.90 ≥ manifest 11.30 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.00 · ROOF_TOP 2.85 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 7.90 × 12.90 · footprint 7.90 × 12.90 |
| área privativa × envelope | ✅ PASS | privativa 44.65 m² ≤ envelope 56.50 m² × 1 pav = 56.50 m² |
| esquadrias cadastradas | ✅ PASS | 11 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena f45h |
| deck | ✅ PASS | 8.00 m² no manifest |
| vaga | ✅ PASS | 13.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `hstd` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint | ✅ PASS | sem entrada em SS_FOOTPRINTS.json |
| planta × 3D · comprimento X | ✅ PASS | OBJ 3.60 ≥ manifest 3.60 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 11.65 ≥ manifest 11.65 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.35 · ROOF_TOP 3.10 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| área privativa × envelope | ✅ PASS | privativa 20.86 m² ≤ envelope 41.94 m² × 1 pav = 41.94 m² |
| esquadrias cadastradas | ✅ PASS | 4 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 1 primitivas de vidro na cena hstd |
| deck | ✅ PASS | 7.20 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `hmst` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint | ✅ PASS | sem entrada em SS_FOOTPRINTS.json |
| planta × 3D · comprimento X | ✅ PASS | OBJ 5.40 ≥ manifest 5.40 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 11.65 ≥ manifest 11.65 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.35 · ROOF_TOP 3.10 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| área privativa × envelope | ✅ PASS | privativa 27.86 m² ≤ envelope 62.91 m² × 1 pav = 62.91 m² |
| esquadrias cadastradas | ✅ PASS | 4 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 2 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 1 primitivas de vidro na cena hmst |
| deck | ✅ PASS | 15.12 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `loft30` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint | ✅ PASS | sem entrada em SS_FOOTPRINTS.json |
| planta × 3D · comprimento X | ✅ PASS | OBJ 6.30 ≥ manifest 6.30 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 10.80 ≥ manifest 10.80 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 3.44 · ROOF_TOP 3.20 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| área privativa × envelope | ✅ PASS | privativa 30.00 m² ≤ envelope 68.04 m² × 1 pav = 68.04 m² |
| esquadrias cadastradas | ✅ PASS | 6 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 3 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 1 primitivas de vidro na cena loft30 |
| deck | ✅ PASS | 15.12 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `pav_A` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 52.40 · manifest 52.40 · footprint 59.60 |
| planta × footprint · largura | ✅ PASS | cobertura 11.65 · manifest 11.65 · footprint 18.85 |
| planta × footprint · altura | ✅ PASS | footprint 6.20 · ROOF_TOP 6.20 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 52.40 ≥ manifest 52.40 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 11.65 ≥ manifest 11.65 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 6.45 · ROOF_TOP 6.20 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 52.40 × 11.65 · footprint 59.60 × 18.85 |
| área privativa × envelope | ✅ PASS | privativa 473.20 m² ≤ envelope 610.46 m² × 2 pav = 1220.92 m² |
| esquadrias cadastradas | ✅ PASS | 84 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 28 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 3 primitivas de vidro na cena pav_A |
| deck | ✅ PASS | 0.00 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `bloco_B` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 79.40 · manifest 79.40 · footprint 79.40 |
| planta × footprint · largura | ✅ PASS | cobertura 14.40 · manifest 14.40 · footprint 14.40 |
| planta × footprint · altura | ✅ PASS | footprint 17.00 · ROOF_TOP 17.00 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 79.40 ≥ manifest 79.40 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 14.40 ≥ manifest 14.40 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 17.24 · ROOF_TOP 17.00 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 79.40 × 14.40 · footprint 79.40 × 14.40 |
| área privativa × envelope | ✅ PASS | privativa 1200.00 m² ≤ envelope 1143.36 m² × 5 pav = 5716.80 m² |
| esquadrias cadastradas | ✅ PASS | 233 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 108 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 3 primitivas de vidro na cena bloco_B |
| deck | ✅ PASS | 0.00 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `ala_C` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 70.00 · manifest 70.00 · footprint 76.00 |
| planta × footprint · largura | ✅ PASS | cobertura 10.80 · manifest 10.80 · footprint 18.80 |
| planta × footprint · altura | ✅ PASS | footprint 6.40 · ROOF_TOP 6.40 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 70.00 ≥ manifest 70.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 10.80 ≥ manifest 10.80 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 6.64 · ROOF_TOP 6.40 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 70.00 × 10.80 · footprint 76.00 × 18.80 |
| área privativa × envelope | ✅ PASS | privativa 600.00 m² ≤ envelope 756.00 m² × 2 pav = 1512.00 m² |
| esquadrias cadastradas | ✅ PASS | 92 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 40 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 3 primitivas de vidro na cena ala_C |
| deck | ✅ PASS | 0.00 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `pavilhao_C` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 77.20 · manifest 77.20 · footprint 77.20 |
| planta × footprint · largura | ✅ PASS | cobertura 14.40 · manifest 14.40 · footprint 14.40 |
| planta × footprint · altura | ✅ PASS | footprint 4.75 · ROOF_TOP 4.75 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 77.20 ≥ manifest 77.20 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 14.40 ≥ manifest 14.40 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 5.00 · ROOF_TOP 4.75 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 77.20 × 14.40 · footprint 77.20 × 14.40 |
| área privativa × envelope | ✅ PASS | privativa 725.55 m² ≤ envelope 1111.68 m² × 1 pav = 1111.68 m² |
| esquadrias cadastradas | ✅ PASS | 39 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 27 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena pavilhao_C |
| deck | ✅ PASS | 0.00 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

## `rest` · PASS

| Teste | Resultado | Detalhe |
|---|---|---|
| planta × footprint · comprimento | ✅ PASS | cobertura 37.00 · manifest 37.00 · footprint 37.00 |
| planta × footprint · largura | ✅ PASS | cobertura 27.00 · manifest 27.00 · footprint 27.00 |
| planta × footprint · altura | ✅ PASS | footprint 4.75 · ROOF_TOP 4.75 |
| planta × 3D · comprimento X | ✅ PASS | OBJ 37.00 ≥ manifest 37.00 |
| planta × 3D · profundidade Y | ✅ PASS | OBJ 27.00 ≥ manifest 27.00 |
| planta × 3D · altura Z | ✅ PASS | edificação no OBJ 5.00 · ROOF_TOP 4.75 |
| 3D · unidade e escala | ✅ PASS | 1 unidade OBJ = 1,00 m · scale [1,1,1] · Z para cima |
| footprint × 3D · cabe no footprint | ✅ PASS | edificação no OBJ 37.00 × 27.00 · footprint 37.00 × 27.00 |
| área privativa × envelope | ✅ PASS | privativa 625.25 m² ≤ envelope 999.00 m² × 1 pav = 999.00 m² |
| esquadrias cadastradas | ✅ PASS | 25 esquadrias no quadro |
| esquadrias dentro do envelope | ✅ PASS | todas dentro |
| pano de vidro cadastrado | ✅ PASS | 17 pano(s) de vidro |
| vidro presente no 3D | ✅ PASS | 2 primitivas de vidro na cena rest |
| deck | ✅ PASS | 0.00 m² no manifest |
| vaga | ✅ PASS | 0.00 m² |
| bounding box coerente | ✅ PASS | bbox = width × length × altura |
| scale = [1,1,1] | ✅ PASS | [1, 1, 1] |
| mirror_allowed = false | ✅ PASS | False |
| up_axis = Z | ✅ PASS | Z |
| units = meters | ✅ PASS | meters |

---

## O que este QA **não** testa

- **Posição das esquadrias dentro do modelo 3D.** O quadro de esquadrias e o 3D vêm do mesmo
  script, mas o OBJ não carrega identificador por abertura — o teste confere que há vidro na cena
  e que toda esquadria do quadro cai dentro do envelope, não que cada furo do 3D tem linha no quadro
  por correspondência um a um. Para isso seria preciso nomear grupos no OBJ; está na fila.
- **Cota absoluta de implantação.** É responsabilidade do masterplan e não existe aqui.
- **Estrutura, instalações e desempenho.** Fora do escopo de anteprojeto.
- **Materiais.** O caderno de materiais é preliminar; nada nele é especificação executiva.

## Como reprovar um modelo

Qualquer divergência acima da tolerância de 2 cm entre planta, footprint e 3D reprova o modelo.
Modelo reprovado volta para a sessão de ARQUITETURA, que corrige o script — nunca o arquivo de saída —
e roda este QA de novo.