planejamento
Arquivos e IA no orçamento de obras
Este texto continua o roteiro das oito etapas, mas muda o ângulo: em vez de “o que se faz em cada etapa”, é “com que arquivo, e com que cuidado”. É pensado para quem vai montar isso como pipeline — programação, ciência de dados — não para quem vai orçar na mão.
É uma v1. O objetivo é ter base para errar rápido e corrigir, não um padrão fechado.
O princípio central: IA organiza, não calcula
Vale fixar antes de entrar nos arquivos, porque muda a arquitetura inteira: quantitativo, custo direto, BDI e curva ABC são aritmética determinística. Isso é código — pandas, uma planilha, uma função de CPM —, não é prompt. A área de um IFC não é uma estimativa razoável de um modelo de linguagem; é um número que sai de uma query em IfcQuantityArea.
O lugar da IA é outro: ler texto não estruturado (memorial descritivo, edital, cotação em PDF solto), sugerir classificação (bater descrição de serviço contra código SINAPI), redigir rascunho (dicionário de EAP, relatório de visita) e fazer busca semântica sobre especificação técnica.
Onde a IA sugere algo que vira número na planilha, tem que existir validação humana antes de entrar na conta. Isso volta em cada etapa abaixo.
Quando só chega o DWG
Merece seção própria porque é o caso comum, não a exceção. Quatro níveis de maturidade do que chega do projetista:
- Nível 0 — PDF escaneado, às vezes nem o CAD original.
- Nível 1 — DWG. Geometria vetorial, sem dado semântico: uma parede é um conjunto de linhas numa camada, não um objeto com propriedade de área e material. DWG não serve para interação direta, e não é defeito — ele não foi feito para ser lido por código, foi feito para ser plotado.
- Nível 2 — IFC exportado do BIM autoral (Revit, ArchiCAD, Tekla). Dado estruturado, mas a qualidade do que vem dentro varia muito de escritório para escritório.
- Nível 3 — IFC validado contra um IDS (Information Delivery Specification, da buildingSMART) ou contra um Plano de Execução BIM acordado. Aqui dá para confiar que o Pset esperado vai estar preenchido.
A maioria do que chega de fora está no nível 1. Duas frentes, que valem rodar em paralelo:
Prevenção, na etapa 1. Havendo qualquer influência sobre o edital ou o contrato de projeto, é o momento de pedir IFC junto com o DWG. A maior parte dos escritórios que já modela em BIM exporta IFC sem custo adicional — só não faz porque ninguém pediu. Um checklist simples de LOD e LOI mínimos evita a etapa 4 inteira virar retrabalho manual.
Fallback, quando só vem DWG. Converter para DXF (ASCII, aberto) com o ODA File Converter e ler com ezdxf. Isso dá acesso a camada, bloco e polilinha — mas a leitura de quantidade dali é a convenção daquele escritório, não um padrão. Um projetista põe parede numa camada ARQ-PAREDE, outro nem separa por camada. Todo quantitativo saído de DXF é rascunho a conferir, nunca número final.
Arquivos por etapa
1. Diagnóstico e definição
Chega: projetos em DWG, IFC ou PDF; edital e memorial em PDF ou DOCX; fotos da visita em JPG.
Lê ou converte: IFC lê direto com ifcopenshell — dá para puxar um resumo (site, edificação, pavimentos, contagem de elementos) e ter noção de escopo antes da leitura manual. DWG, aqui, serve só como visualização: não vale extrair dado ainda, só confirmar o que existe. PDF digital extrai texto com pdfplumber; PDF escaneado precisa de OCR antes de qualquer análise.
Cuidados: cláusula contratual e prazo penal se conferem no texto original, não em resumo de IA — erro aqui tem consequência jurídica, não só técnica. OCR erra número com facilidade: troca 8 por 3, vírgula por ponto. Tabela de quantidade vinda de PDF escaneado se reconfere linha a linha.
Sai: relatório de visita e um resumo estruturado do escopo, que alimenta a etapa 2.
2. Estruturação do escopo
Chega: o mesmo da etapa 1, mais a hierarquia espacial do IFC quando existir.
Lê ou converte: havendo IFC, a árvore IfcProject → IfcSite → IfcBuilding → IfcBuildingStorey → IfcSpace → IfcElement já dá um esqueleto de decomposição. Mas ela não bate 1:1 com a sua EAP: um pacote de trabalho seu pode agrupar vários tipos de elemento IFC, e vice-versa. Isso exige uma tabela de correspondência mantida à parte, com a IA sugerindo o de-para e um humano aprovando cada linha antes de ela virar padrão.
Cuidados: guarde a EAP como dado estruturado desde o início — JSON ou CSV com id, código, descrição, unidade, pacote_pai —, versionado em git, não como planilha solta. Esse arquivo é a chave que costura todas as etapas seguintes; nascendo inconsistente, o erro se propaga até a etapa 8.
Sai: EAP estruturada e o dicionário da EAP em texto, para leitura humana.
3. Planejamento e cronograma
Chega: MS Project (.mpp) ou Primavera P6 (.xer, .xml).
Lê ou converte: .mpp é binário proprietário, não se lê direto em Python — use mpxj para converter para Project XML antes de processar. .xer já é texto delimitado e tem parser Python dedicado, então é mais tranquilo. O caminho crítico é grafo determinístico: implemente com networkx ou algoritmo próprio, não peça para a IA estimar.
Cuidados: a versão do software de origem muda o formato interno do .mpp; campo customizado e calendário de recurso costumam se perder na conversão. Depois de converter, confira se a duração total bate com o original.
Sai: tabela de tarefas com id, duração, predecessoras e marcação de crítico. É essa duração que alimenta o custo indireto da etapa 6 — o elo que sustenta o resto.
4. Levantamento de quantitativos
A etapa onde o nível de maturidade do BIM recebido mais pesa.
Com IFC e quantidade preenchida: leia IfcQuantityArea e IfcQuantityVolume via ifcopenshell, vinculando pelo GlobalId do elemento à EAP pela tabela da etapa 2. Confira se a convenção é área líquida ou bruta — softwares de autoria divergem nisso, e a diferença muda o custo direto inteiro.
Com IFC sem quantidade, que é comum em modelo exportado sem Qto calculado: dá para calcular a geometria do mesh com ifcopenshell.geom mais trimesh ou numpy, mas como cálculo auxiliar a conferir contra o projeto, não como fonte única.
Só com DWG: o fallback da seção anterior — contagem por camada com ezdxf, que só funciona se a convenção for consistente, ou levantamento manual, com a IA organizando o resultado numa planilha e nunca medindo. Sendo o PDF a única fonte, um modelo de visão dá estimativa de sanidade, não medição.
Cuidados: confira unidade (m² contra m³), elemento duplicado entre pavimentos, e divergência entre arquitetônico e estrutural quando os modelos não são federados.
Sai: memória de cálculo e planilha de quantidades com os códigos da EAP.
5. Composição de custos diretos
Chega: base SINAPI ou TCPO em XLSX, publicação mensal; cotações em PDF, e-mail, às vezes foto de orçamento impresso.
Lê ou converte: o XLSX do SINAPI tem várias abas — por estado e por regime, desonerado ou não. Leia com openpyxl atento a qual aba e qual mês. Cotação em PDF ou imagem é texto não estruturado clássico: a IA extrai para um schema fixo (item, unidade, preço, validade), e cada extração se confere antes de virar CPU.
Cuidados: registre a data e a versão do SINAPI usada em cada CPU — é rastreabilidade que auditoria de obra pública cobra depois. O regime tributário muda o encargo social embutido, e misturar linhas dos dois regimes na mesma planilha passa despercebido.
Sai: CPUs, relatório de cotação e planilha de custos diretos.
6. Custos indiretos e acessórios
Chega: o cronograma da etapa 3, a planilha de custos diretos, a estrutura administrativa interna e as exigências contratuais do edital.
Lê ou converte: a etapa mais tranquila em formato — na prática é pandas lendo a duração do cronograma e multiplicando por custo mensal de canteiro e equipe. O ponto de atenção não é formato, é dependência: sem a etapa 3, ou com ela chutada, o cálculo inteiro vira estimativa sem base.
Cuidados: dado salarial e de estrutura interna é informação sensível. Não mande para API de IA pública sem checar a política de dados da empresa; sendo possível, mantenha esta etapa em processamento local.
Sai: planilha de custos indiretos e memória de cálculo do rateio.
7. BDI e impostos
Chega: os totais de custo direto e indireto, a legislação tributária vigente e a política interna de lucratividade.
Lê ou converte: a fórmula do BDI é padronizada, no modelo do Acórdão TCU 2622/2013 — implemente como função determinística, com as alíquotas como parâmetro. O texto de legislação pode ser lido por IA para localizar a alíquota vigente, mas o valor final se confirma na fonte oficial. Não deixe o modelo lembrar um percentual do treinamento: isso fica desatualizado sem aviso.
Cuidados: ISS varia por município, então não existe valor nacional padrão. Regime tributário — lucro real ou presumido — muda o tratamento de PIS e COFINS. Documente a base legal de cada alíquota.
Sai: demonstrativo de cálculo do BDI e quadro de encargos sociais.
8. Fechamento, análise e curva ABC
Chega: todas as saídas anteriores.
Lê ou converte: aqui aparece o ganho de ter mantido um id de EAP consistente desde a etapa 2 — a consolidação vira um merge de tabelas em pandas, ou uma base SQLite pequena se o projeto for grande. Curva ABC é ordenação e percentual acumulado; cronograma físico-financeiro é distribuir custo ao longo da linha do tempo. As duas são cálculo puro, sem IA no meio.
Cuidados: desbalanceamento de planilha é decisão de negócio com implicação contratual. Não é coisa para IA sugerir ou automatizar em silêncio — tem que ser decisão humana explícita e documentada.
Sai: orçamento final sintético e analítico, curva ABC e cronograma físico-financeiro.
Um modelo de dados canônico
O fio que amarra as oito etapas é uma chave comum — o id da EAP — atravessando todo arquivo intermediário, em vez de cada etapa guardar sua planilha isolada.
{
"id": "01.02.03",
"descricao": "Alvenaria de vedação — bloco cerâmico 14x19x29",
"unidade": "m2",
"pacote_pai": "01.02",
"fonte_ifc_guid": ["3xR2k9...", "8pL0z1..."],
"quantidade": 342.5,
"quantidade_fonte": "ifc_qto",
"cpu_codigo": "SINAPI-87879",
"custo_unitario": 68.40,
"tarefa_cronograma_id": "T-114"
}
quantidade_fonte vale o esforço de manter: registrar se o número veio de ifc_qto, de contagem por camada em DXF ou de levantamento manual muda o nível de confiança que se dá àquele número lá na frente.
A arquitetura do pipeline
Arquivos brutos (DWG · IFC · PDF · XLSX)
│
Camada de extração por formato
│
Modelo canônico (EAP com id único)
│
┌─────────────┴─────────────┐
│ │
Cálculo determinístico IA assistiva
(pandas, networkx) (classificação, RAG,
quantitativo, BDI, rascunho de texto)
curva ABC
│ │
└─────────────┬─────────────┘
│
Validação humana obrigatória
(quantitativo, BDI, alíquota legal)
│
Saída (orçamento, cronograma físico-financeiro)
Formatos, em resumo
| Formato | Etapa | Lê direto? | Conversão | Risco principal |
|---|---|---|---|---|
| IFC | 2, 4 | Sim, ifcopenshell |
— | Pset incompleto; área líquida ou bruta divergindo entre softwares |
| DWG | 1, 4 | Não | DXF via ODA, depois ezdxf |
Sem dado semântico; convenção de camada não padronizada |
| PDF digital | 1, 5 | Sim, pdfplumber |
— | Tabela quebra na extração |
| PDF escaneado | 1 | Não | OCR | Erro de leitura em número |
| DOCX | 1, 2 | Sim, python-docx |
— | Formatação e comentários se perdem |
| XLSX SINAPI | 5 | Sim, openpyxl |
— | Aba, mês ou regime errado |
| MPP | 3 | Não | Project XML via mpxj |
Campo customizado se perde |
| XER | 3 | Sim, parser dedicado | — | Menos comum fora do Primavera |
| CSV | todas | Sim | — | Separador decimal e encoding |
Cuidados transversais
- Confidencialidade. Dado salarial, estrutura interna e cotação de fornecedor não deveriam ir para API pública de IA sem checar a política de dados da empresa.
- Rastreabilidade. Todo número que depende de fonte externa — SINAPI, alíquota, cotação — guarda data e origem, não só o valor final.
- Versão de schema. IFC2x3 e IFC4 diferem em propriedade; fixe a versão que o parser espera e valide antes de processar em lote.
- Separador decimal. CSV brasileiro usa vírgula, muita biblioteca assume ponto. Isso quebra em silêncio: sem erro, só com número errado.
- Nada de IA decidindo sozinha o de-para EAP↔SINAPI, EAP↔classe IFC ou alíquota tributária. Sugestão automática, aprovação humana, sempre.
Sobre este texto
Primeira versão, ponto de partida e não prática de mercado fechada. Onde a experiência mostrar que o fallback de DWG não basta, ou que a correspondência EAP↔IFC precisa de mais uma camada, vale voltar aqui e revisar.