--- name: cadastrar-obra description: Cadastrar, alterar ou excluir clientes e obras no LegalizaObra. Use quando o usuário quiser criar uma obra nova, cadastrar o dono da obra (cliente), informar o CNO, mudar áreas ou datas de uma obra que ainda não foi enviada ao eSocial. --- # Cadastrar cliente e obra Toda obra precisa de um cliente (o dono da obra). Crie ou ache o cliente primeiro. ## 1. Cliente 1. Procure com `list_clients(name=…)`. 2. Se não existir, crie com `create_client(client={…})`: - `full_name` (obrigatório). - `type`: `individual` para pessoa física (CPF) ou `company` para empresa (CNPJ). - `email` e `phone` (10 ou 11 dígitos). - `is_construtora`: só para empresa. Marque `true` se a empresa é uma construtora. 3. O CPF/CNPJ do cliente não passa por aqui: nunca peça ao usuário. Ele cadastra o documento no app (https://legalizaobra.com), na tela do cliente. 4. **Para criar uma obra, o cliente precisa ter documento, e-mail e telefone.** Sem eles, `create_obra` falha com "Complete as informações do cliente antes de criar uma obra". Peça o e-mail e o telefone ao usuário logo no começo, e avise que o documento é cadastrado no app. 5. Para corrigir um cliente, use `update_client(client_id, changes={…})` com só os campos que mudam. 6. "Já existe um cliente com este documento cadastrado" (no app): o cliente já existe. Procure com `list_clients(name=…)` e use esse. ## 2. Obra Pré-requisitos: assinatura ativa e limite do plano. Se o plano já tem o máximo de obras em andamento, a criação falha ("maximum number of buildings in progress reached"). Explique ao usuário e ofereça finalizar uma obra concluída ou mudar de plano. Chame `create_obra(obra={…})`: | Campo | Regra | |---|---| | `name` | Obrigatório. | | `client_id` | Obrigatório. Cliente da mesma conta, com perfil completo. | | `start_date` | Obrigatório (AAAA-MM-DD). | | `state` | Obrigatório. Sigla do estado em maiúsculas (ex.: `SP`). Uma sigla errada só falha depois ("Vau not found"). | | `end_date` | Opcional. Sem ela, o sistema calcula: início + (área total ÷ 18) meses. Tem que ser depois do início. | | `cno` | Opcional agora, 12 dígitos. **Obrigatório antes de enviar ao eSocial.** | | `used_concreto_usinado` | Opcional. Gera crédito. Avise: guardar as notas fiscais por 5 anos, com o CNO da obra. | | `automatic_esocial_transmission` | Opcional. Deixe `false` na criação. Só pode ser ligada depois do envio ao eSocial. | | `main_areas` | Lista de áreas principais. Use `size_in_square_meters` (> 0). | | `complementary_areas` | Opcional. Use `complementary_covered_built_area_in_square_meters` e/ou `complementary_uncovered_built_area_in_square_meters`. Pelo menos um > 0. | Cada área também tem: - `building_type`: `unifamiliar` (padrão), `multifamiliar`, `comercial`, `galpao`, `casa_popular`, `conjunto_habitacional`, `edificio_garagem`. - `category`: `new_construction` (padrão), `expansion` (ampliação), `renovation` (reforma), `demolition`. - `material`: `alvenaria` (padrão), `madeira`, `mista`. Numa área principal, só `size_in_square_meters` conta. Numa complementar, só os campos coberta/descoberta contam. Inclua sempre pelo menos uma área principal. O app não aceita obra sem área, e o INSS é calculado a partir dela. Depois de criar, mostre ao usuário o resumo com `get_obra_inss_costs(obra_id)`: RMT otimizado, INSS original, INSS otimizado. ### Caminho alternativo: a partir de um orçamento Se já existe um orçamento (veja a skill `simular-inss-e-orcamento`), use `create_obra_from_quote(quote_id, obra={name, cno?, automatic_esocial_transmission?})`. Datas, estado, áreas e concreto vêm da simulação. O orçamento precisa ter cliente. ## 3. Alterar ou excluir - `update_obra(obra_id, changes={…})`: mande só o que muda. Se você não mandar `main_areas` ou `complementary_areas`, elas ficam como estão. Se mandar uma lista, ela **substitui** a atual inteira: mande a lista completa. - `delete_obra(obra_id)`: confirme antes. - As duas **não funcionam** depois que a obra foi enviada ao eSocial ou finalizada ("Esta obra já foi enviada ao eSocial ou finalizada…"). Depois do envio, só a data de fim pode mudar (veja a skill `encerrar-obra`). - `list_obras(client_id?, status?)` lista obras; `status` é `in_progress` ou `finalized`. `get_obra(obra_id)` mostra a obra com os vínculos dos pedreiros e o `esocial_status` (`pendente` = ainda não enviada; `finalizado` = já está no eSocial). ## Próximo passo Cadastrar os pedreiros (skill `gerenciar-pedreiros`). Todos os meses da obra precisam ter pelo menos um pedreiro ativo para o envio ao eSocial.