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

# Network Ops

`POST /api/v1/network/ops`

## 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/ops`
- Auth: none declared

Acrescentar, renomear e remover pelo diagrama — servido pelo NÚCLEO.

É a mesma lei do `network/element` (G126) do outro lado da edição: o
navegador manda o `data-elem` e o que quer fazer; quem sabe herdar a tensão
da origem, carregar as referências ao renomear e declarar a cascata ao
remover é o `unifilar_ops`. Erro de domínio sai 422 com a razão do núcleo,
nunca 500, e nada é aplicado pela metade.

## Request body

- OpsIn: Montar a rede PELO DIAGRAMA: acrescentar, renomear e remover. Quem sabe montar é o núcleo (`unifilar_ops`) — cabo e barramento herdam a tensão da origem porque o motor recusa passivo entre tensões diferentes; renomear carrega TODAS as referências (aresta, motor, posição da proteção), senão o motor recusaria a rede no run seguinte; e remover declara a cascata. Copiar isso no navegador seria a segunda cópia da mesma regra, que é o que cria defeito. O `alvo` é o MESMO `data-elem` do clique, resolvido pelo mesmo gate: id que não existe na rede de agora não opera em nada.
  - `rede` NetworkRequest, required: 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
  - `protecoes` Protecao[]: as proteções de agora; voltam atualizadas (a remoção e a renomeação as acompanham)
    - `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)
  - `op` 'derivacao' | 'motor' | 'gerador' | 'protecao' | 'renomear' | 'remover' | 'sugerir_id', required
  - `alvo` string, nullable: `bus:<id>` · `edge:<de>→<para>` · `mot:<barra>` · `ger:<barra>` — a barra de onde sai (derivacao/motor/gerador/renomear) ou o elemento que sai (remover)
  - `novo_id` string, nullable: id da barra nova (derivacao) ou o nome novo (renomear)
  - `tipo` 'cable' | 'transformer' | 'busbar' | 'reactor', nullable
  - `Vn_kV` number, nullable: tensão da barra nova — só no transformador, que é quem muda o nível; no resto ela é herdada
  - `motor` object, nullable: campos do grupo de motores (n_motores, P_kW, cos_phi, rendimento, Xd_sub_pu); ausentes caem no padrão do núcleo
  - `gerador` object, nullable: op `gerador` (G334): os campos do gerador (label, Sn_kVA, xd2_pu, cos_phi, U_rG_kV, x0_pu, aterramento, Rn_ohm); ausentes caem no padrão do núcleo
  - `cabo` object, nullable: op `motor` COM `novo_id`: os campos do cabo que alimenta o motor (secao_mm2, comprimento_m, material, T_op, num_conductors). O motor ganha uma barra nos TERMINAIS dele, e é ela que dá endereço ao estudo: sem barra não há onde pendurar o cabo nem a proteção, e o coordenograma do motor pede as três coisas juntas. Sem `novo_id` o motor entra como grupo NA barra, que é o modelo da contribuição dele para o curto e continua valendo
  - `protecao` Protecao
    - `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)
  - `base` string: prefixo do id sugerido (op `sugerir_id`)
  - `simular` boolean: só a PRÉVIA: devolve o resumo da cascata sem aplicar, para a tela escrever a consequência no botão antes do clique
  - `lang` string

## Response `200`

Successful Response

- OpsOut: A rede DEPOIS da operação — inteira, para a tela não remontar nada.
  - `barras` object[]
  - `elementos` object[]
  - `motores` object[]
  - `geradores` object[]
  - `cenarios` object[]
  - `protecoes` Protecao[]
    - `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)
  - `resumo` object: o que a operação mexeu: barras, elementos, motores, geradores, protecoes
  - `avisos` string[]
  - `id_sugerido` string, nullable
  - `aplicado` boolean: false na simulação

## 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)
