---
title: "Network Solve"
method: POST
path: "/api/v1/network/solve"
tags: ["rede"]
---

# Network Solve

`POST /api/v1/network/solve`

## Request

- Base URL: `https://app.estudoseletricos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.estudoseletricos.com/api/v1/network/solve`
- Auth: none declared

## Request body

- NetworkRequest: Os registros dos data_editors (o mesmo contrato da tool `montar_rede`).
  - `unifilar_interativo` boolean: marca cada símbolo com `data-elem` para o clique (G126). É OPT-IN: o SVG default continua byte a byte o do laudo
  - `protecoes` Protecao[]: as proteções posicionadas, só para o DESENHO — elas não entram no cálculo de curto-circuito. Sem elas o diagrama sai sem os símbolos de proteção, e quem acabou de pôr um disjuntor pelo desenho não o veria aparecer. Lista vazia = o SVG de sempre.
    - `kind` 'bus' | 'edge', required
    - `ref` union, required: id da barra ('bus') ou [from_id, to_id] ('edge')
      - string
      - string[]
    - `label` string
    - `model_id` string, nullable: id no devices_db; None = ajuste manual
    - `color` string
    - `ajustes` object, nullable: ajustes DESTA proteção (curve, in, ir, tms, isden, isd, tsd, iien, ii, tinst, tab) e a tolerância DIGITADA de quem o banco não declara banda: toli (± % nos pickups), tolt (± % no tempo das curvas L e S) e tolii (± % só na instantânea — vence o toli no Ii). A identidade (placement_key) é resolvida no servidor, onde ela é definida — o cliente não a calcula. Fusível e MCB são de BANDA: aqui não há ajuste a fazer e o que vier é ignorado pelo núcleo. A curva TÉRMICA tabelada (G325), para o modelo cujo banco não a declara: `pts` (pontos [múltiplo, t_s] da borda lenta), `pts_rapida` (a rápida, opcional), `pts_base` ('Ir' ou 'In', obrigatória) e `pts_fonte` (de onde vieram)
  - `datablock` 'curto' | 'arco' | 'adequacao' | 'protecao': O QUE cabe no bloco de dados de cada barra, decidido no SERVIDOR — não é filtro de tela. `curto` traz as quatro correntes; `arco` traz só a Ik3φ, porque a energia e o tempo entram pelo estudo e quatro correntes ao lado deles tornam o bloco ilegível; `adequacao` traz Ik3φ e ip, que são as duas que o duty compara; `protecao` traz a máxima e a MÍNIMA, que são os limites entre os quais o pickup vive
  - `unifilar_subrede` string, nullable: id de barra: desenha só a ÁREA dela (a barra e o que está a jusante). As áreas da rede vêm em `areas`; None = a folha da rede inteira
  - `barras` object[], required: as barras (id, label, Vn_kV) — até 500 por rede (G342)
  - `elementos` object[], required: transformadores, cabos, barramentos e reatores — até 1000 por rede (G342)
  - `fonte` object, nullable: a concessionária no ponto de conexão. Ausente (ou nula) só na rede alimentada por gerador — sem nenhum dos dois é recusa de forma
  - `motores` object[], nullable
  - `geradores` object[], nullable: geradores síncronos por barra (G334, IEC 60909-0 §6.6.1): bus_id, label, Sn_kVA, xd2_pu, cos_phi e os opcionais U_rG_kV, x0_pu, aterramento, Rn_ohm
  - `cenarios` object[], nullable: os cenários de OPERAÇÃO (G336): nome, `fontes` em serviço ('concessionaria' e as barras com gerador; ausente = todas) e `abertas` (os elementos abertos, [DE, PARA] ou 'DE→PARA'). Com eles o estudo de arco de cada barra é o do cenário de MAIS energia
  - `lang` string
  - `unifilar` boolean
  - `folha` Folha: Carimbo do unifilar (sheet_meta): o que a UI sabe do estudo.
    - `local` string
    - `equip` string
    - `resp` string
    - `crea` string: registro do responsável no CREA
    - `art` string: nº da ART do estudo
    - `rev` string: identificação da revisão (ex.: 'rev 3')
    - `rev_data` string: data da revisão, como o emissor a escreve
    - `wl_name` string

## Response `200`

Successful Response

- NetworkResponse
  - `duty` DutyDispositivo[]: a adequação de CADA proteção posicionada — o modo Curto não precisa do estudo da planta para julgar o equipamento, e a lista é a mesma que alimenta a Alert View
    - `idx` integer, required
    - `label` string, required
    - `kind` string
    - `barra` string: a barra onde a proteção OPERA
    - `I_ref_kA` number, nullable: max(Ik3″, Ik1″) — o §7.5 aponta a fase-terra quando Z0 < Z1
    - `Icu_kA` number, nullable
    - `status` 'ok' | 'inadequado' | 'nao_avaliavel'
    - `margem_pct` number, nullable: (Icu − I_ref)/Icu × 100 — negativa = inadequada
    - `motivo` string
  - `estudos_realizados` string[]: as análises da planta (`ESTUDOS_DA_PLANTA`) que ESTA chamada produziu — é com elas que o índice é carimbado. Quem sabe que análise cada rota faz é o domínio; deduzir isso na tela seria recriar o catálogo do lado de lá
  - `n_barras` integer, required
  - `barras` BarraOut[], required
    - `id` string, required
    - `label` string, required
    - `Vn_kV` number, required
    - `Icc_3ph_kA` number, required
    - `Icc_2ph_kA` number, required
    - `Icc_1ph_kA` number, required
    - `ip_kA` number, required
    - `XR_total` number, required
    - `kappa` number, required
    - `Icc_3ph_min_kA` number, nullable
    - `contribuicao_motores_kA` number, nullable
  - `maior_Icc_3ph` object, required
  - `menor_Icc_3ph` object, required
  - `barras_com_motores` string[], required
  - `barras_z0_por_elemento` string[], required
  - `barras_multicaminho` string[], required
  - `concessionaria` boolean: a rede tem concessionária (G334: falso = só gerador)
  - `geradores` object[]: cada gerador com a impedância do §6.6.1 que o motor usou na máxima (K_G, R_GK e X_GK em mΩ, X/R) — para conferir à mão
  - `operacoes` object[]: G336: o curto de cada cenário de OPERAÇÃO declarado — as barras energizadas (máxima e mínima) e as desenergizadas. Vazio sem cenários; `barras` é a rede como desenhada, com todas as fontes e elementos
  - `projeto` object, required: projeto .json schema v5 — o app abre
  - `unifilar_svg` string, nullable
  - `areas` AreaOut[]: ramos com sub-rede própria, para uma folha cada. VAZIA = a rede cabe numa folha só — não é falha de divisão
    - `id` string, required
    - `label` string, required
    - `n_barras` integer, required
  - `fonte_derivada` string[]: o que a plataforma CONVERTEU do que a concessionária declarou (impedância em pu virando corrente, potência fase-terra virando corrente), com a identidade usada. VAZIA = a carta entrou na forma em que o motor trabalha e não houve conversão nenhuma — número derivado sem dizer de onde veio é o começo de um laudo que ninguém consegue conferir
  - `engine` string, required
  - `tier` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/estudoseletricos/apis/arc-flash-platform-api.md) · [All operations](https://skmtc.dev/estudoseletricos/apis/arc-flash-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/estudoseletricos/apis/arc-flash-platform-api/revisions/5877d717cb1b?raw)
