- Índice
- Visão geral
- Rota e contexto
- View (empresaFormPacs.html)
- Seção 1 — Router interno (PACS externo)
- Seção 2 — PACS interno
- Seção 3 — Worklist
- Seção 4 — Command Center
- Seção 5 — Viewer externo
- Botões da aba PACS
- Validações (controller)
- Controller (empresaFormCtrl)
- Model (empresaModel) e payload
- Fluxos de uso
- Payload e API (salvar pela aba PACS)
- Componentes e arquivos
- i18n
- Âncoras
Adicionar Nova Unidade — Aba PACS
Documentação funcional detalhada da aba PACS do formulário de unidade (Adicionar Nova Unidade / Editar Unidade): view, seções (Router interno, PACS interno, Worklist, Command Center, Viewer externo), campos, validações, controller, model, fluxos e API.
Para a aba Informações, consulte Adicionar Nova Unidade — Aba Informações (detalhada).
Índice
- Visão geral
- Rota e contexto
- View (empresaFormPacs.html)
- Seção 1 — Router interno (PACS externo)
- Seção 2 — PACS interno
- Seção 3 — Worklist
- Seção 4 — Command Center
- Seção 5 — Viewer externo
- Botões da aba PACS
- Validações (controller)
- Controller (empresaFormCtrl)
- Model (empresaModel) e payload
- Fluxos de uso
- Payload e API (salvar pela aba PACS)
- Componentes e arquivos
- i18n
- Âncoras
Visão geral
A aba PACS é a segunda aba (índice 1) da tela de unidade (/empresa/:id). Ela concentra:
- Router interno (equipamento PACS externo): AE Title, IP, Porta, URL PACS (select), Descrição DICOM, Use Lossless, Congelamento intermediário/frio (GB), Tamanho de storage (GB), Observações PACS.
- PACS interno: AE Title, IP, Porta, E-mail notificação, URL PACS interno, Tempo PACS (dias + data), Beta PACS interno, Possui congelamento (checkbox).
- Worklist: AE Title, IP, Porta (objeto
empresa.worklist). - Command Center: AE Title, IP, Porta (objeto
empresa.commandCenter). - Viewer externo: Host (empresa.empresa.host_viewer_externo).
O formulário continua sendo o mesmo empresaForm; os campos estão em empresa.empresa, empresa.worklist e empresa.commandCenter. Todos os inputs da aba podem ser desabilitados com ng-disabled="!is_proprietario".

Rota e contexto
| Item | Valor |
|---|---|
| State | empresaTabs |
| URL | /empresa/:id |
| Template da tela | views/empresa/empresaTabs.html |
| Tab | Segunda aba: md-tab-label com data-translate="PACS" |
| Conteúdo da aba | ng-include="empresa.pathFile.empresaFormPacs" → views/empresa/form/empresaFormPacs.html |
| Controller | empresaFormCtrl |
Ao selecionar a tab 1, a ação selectTab(1) dispara buscarPacsExterno() (carrega lista de PACS externos para o select).
View (empresaFormPacs.html)
| Atributo | Valor |
|---|---|
| Arquivo | views/empresa/form/empresaFormPacs.html |
| Form | name="empresaForm" (compartilhado com a aba Informações) |
| Layout | panel-body > layout-padding > form > uma row com três colunas principais (col-md-4, col-md-4, col-md-4) e depois uma row com botões (col-md-12) |
Seção 1 — Router interno (PACS externo)
Título: ROUTER_INTERNO (h3), subtítulo EQUIPAMENTO_ROUTER_INTERNO (h5). Coluna esquerda (col-md-4), dentro de um fieldset.
| Ordem | Label (i18n) | ng-model | Tipo / Componente | Obrigatório | Observação |
|---|---|---|---|---|---|
| 1 | AE_TITLE | empresa.empresa.ea_title | input | Não | ng-disabled="!is_proprietario" |
| 2 | IP | empresa.empresa.ip | input | Não | — |
| 3 | PORTA | empresa.empresa.porta | input type="number" | Não | — |
| 4 | URL_PACS | empresa.empresa.pacs_externo | select-unico | Sim | select-entidade="selectPacsExterno", select-placeholder="PROCURE_PACS", ng-change="setDescricaoDicom(empresa.empresa.pacs_externo)" |
| 5 | DESCRICAO_DICOM | empresa.empresa.descricao_dicom | input | Se is_pacs_externo | ng-show="empresa.empresa.is_pacs_externo" |
| 6 | USA_LOSELESS | empresa.empresa.use_lossless | md-select | Sim | Opções SIM/NAO (true/false) |
| 7 | CONGELAMENTO_INTERMEDIARIO_GB | empresa.empresa.congelamento_intermediario_gb | input type="number" min="0" | Não | — |
| 8 | CONGELAMENTO_FRIO_GB | empresa.empresa.congelamento_frio_gb | input type="number" min="0" | Não | — |
| 9 | TAMANHO_DE_STORAGE_GB | empresa.empresa.storage_size | input type="number" min="0" | Não | — |
| 10 | OBSERVACOES_PACS | empresa.empresa.observacoes_pacs | textarea | Não | id textarea-empresa-form-pacs-observacoes, rows="8", maxlength="500" |
Layout dos campos 7–9: duas linhas; primeira linha dois col-md-6 (congelamento intermediário e frio); segunda linha um col-md-6 (storage_size), com margens reduzidas entre as linhas.

Seção 2 — PACS interno
Título: PACS_INTERNO (h3), subtítulo EQUIPAMENTO_ROUTER_EXTERNO (h5). Coluna do meio (col-md-4), fieldset.
| Ordem | Label (i18n) | ng-model | Tipo | Observação |
|---|---|---|---|---|
| 1 | AE_TITLE | empresa.empresa.ea_title_pacs_interno | input | — |
| 2 | IP | empresa.empresa.ip_pacs_interno | input | — |
| 3 | PORTA | empresa.empresa.porta_pacs_interno | input type="number" | — |
| 4 | EMAIL_NOTI | empresa.empresa.email_notificacao | input | ng-pattern para e-mail |
| 5 | URL_PACS_INTERNO | empresa.empresa.url_pacs_interno | input | — |
| 6 | DIAS (TEMPO_PACS) | empresa.empresa.tempo_pacs | input type="number" step="1" min="0" | ng-change="limparCamposPacs(1)" |
| 7 | Data | empresa.empresa.data_pacs | input type="datetime-local" | id input-empresa-form-pacs-data, ng-change="limparCamposPacs(2)" |
| 8 | BETA_PACS_INTERNO | empresa.empresa.beta_pacs_interno | md-checkbox | id checkbox-empresa-form-pacs-beta |
| 9 | POSSUI_CONGELAMENTO | empresa.empresa.possui_congelamento | md-checkbox | id checkbox-empresa-possui-congelamento; label IMGS_CONGELADAS acima |

Seção 3 — Worklist
Título: WORKLIST (h3), subtítulo INFORMACOES_CADASTRO_NODICOM_LOCAL (h5). Coluna direita (col-md-4), primeiro bloco. Objeto: empresa.worklist.
| Label (i18n) | ng-model |
|---|---|
| AE_TITLE | empresa.worklist.ae_title |
| IP | empresa.worklist.ip |
| PORTA | empresa.worklist.porta (type="number") |
Seção 4 — Command Center
Título: COMMAND_CENTER (h3), subtítulo INFORMACOES_CADASTRO_NODICOM_LOCAL (h5). Mesma coluna direita. Objeto: empresa.commandCenter.
| Label (i18n) | ng-model |
|---|---|
| AE_TITLE | empresa.commandCenter.ae_title |
| IP | empresa.commandCenter.ip |
| PORTA | empresa.commandCenter.porta (type="number") |
Seção 5 — Viewer externo
Título: VIEWER_EXTERNO (h3), subtítulo VIEWER_EXTERNO_INTEGRADO (h5). Mesma coluna. Campo em empresa.empresa.
| Label (i18n) | ng-model |
|---|---|
| HOST | empresa.empresa.host_viewer_externo |
Botões da aba PACS
| ID | Condição | Ação | Label (i18n) |
|---|---|---|---|
btn-empresa-form-criar-unidade | empresa.selectID == 0 | ng-click="criarEmpresa(empresa)", desabilitado se !empresa.empresa.pacs_externo.itemSelect | CRIAR_UNIDADE |
btn-empresa-form-pacs-salvar | empresa.selectID != 0 | ng-click="atualizarEmpresa(empresa)" (sem segundo parâmetro), desabilitado se empresaForm.$invalid || !is_proprietario | SALVAR |
Na aba PACS, ao salvar em edição chama-se atualizarEmpresa(empresa) sem o parâmetro true; assim o payload não remove campos de outras abas e envia worklist, commandCenter, e todos os campos de PACS.
Validações (controller)
- validaPacsInterno(dados.empresa): exige preenchimento consistente do PACS interno. Se o usuário preencher apenas parte dos campos (AE Title, URL, tempo/dias ou data), exibe
CAMPO_PACS_INTERNO_OBRIGATORIOe retorna false. Chamada antes decriarEmpresaeatualizarEmpresa. - storage_size: em
atualizarEmpresa, sestorage_size !== nulle (storage_size < 0 ou > 999999), exibeMSG_TAMANHO_STORAGE_INVALIDOe interrompe. - tempo_impressao / tempo_edicao: validação de tempo (tempoValido) é checada em
atualizarEmpresa; se inválida, exibeTEMPO_EDICAO_MAIOR_QUE_IMPRESSAO.
Controller (empresaFormCtrl)
Arquivo: app/controllers/empresaFormCtrl.js
Inicialização ao abrir a aba (tab 1)
tabActions[1]: chama$scope.buscarPacsExterno()(carrega lista de PACS externos para o select da URL PACS).
Funções usadas na aba PACS
| Função | Uso |
|---|---|
setDescricaoDicom(pacs_externo) | Chamada no ng-change do select URL PACS; atualiza descrição DICOM conforme o PACS selecionado. |
limparCamposPacs(1) | ng-change do campo Dias (tempo_pacs). |
limparCamposPacs(2) | ng-change do campo Data (data_pacs). |
criarEmpresa(empresa) | Usado pelo botão Criar Unidade nesta aba; valida PACS interno, CNPJ, país; monta id_pacs/url_pacs_externo a partir de empresa.empresa.pacs_externo; chama backEmpresa e criarEmpresa (HTTP). |
atualizarEmpresa(empresa) | Chamado pelo botão Salvar (sem true); monta payload com todos os dados (incl. worklist, commandCenter); valida storage_size e tempo; chama backEmpresa e atualizarEmpresa (HTTP). |
Montagem de id_pacs / url_pacs_externo
Antes de chamar backEmpresa, o controller define:
dados.empresa.id_pacs = dados.empresa.pacs_externo.itemSelectdados.empresa.url_pacs_externo = _pacsSelecionado[0].nome(nome do item selecionado no array do select)dados.empresa.is_pacs_externo = true
Worklist e commandCenter são enviados em dados.empresa.worklist e dados.empresa.commandCenter quando preenchidos (objetos com tipo_noDicom e os campos ae_title, ip, porta).
Model (empresaModel) e payload
Arquivo: app/domain/models/empresaModel.js
frontEmpresa(dadosBack)
Ao carregar a unidade, preenche, entre outros:
- ea_title, ip, porta, pacs_externo (formato select), descricao_dicom, use_lossless, congelamento_intermediario_gb, congelamento_frio_gb, storage_size, observacoes_pacs (quando existem; congelamento só quando storage_size != null).
- ea_title_pacs_interno, ip_pacs_interno, porta_pacs_interno, email_notificacao, url_pacs_interno, tempo_pacs, data_pacs, beta_pacs_interno, possui_congelamento.
- host_viewer_externo.
- worklist e commandCenter vêm em response.data.empresa e são atribuídos a empresa.worklist e empresa.commandCenter no controller.
backEmpresa(dados)
Inclui no payload da empresa todos os campos de PACS (id_pacs, url_pacs_externo, storage_size, congelamento_intermediario_gb, congelamento_frio_gb apenas quando dados.storage_size != null, observacoes_pacs, ea_title, ip, porta, ea_title_pacs_interno, ip_pacs_interno, porta_pacs_interno, email_notificacao, url_pacs_interno, tempo_pacs, data_pacs, beta_pacs_interno, possui_congelamento, host_viewer_externo). Inclui também worklist e commandCenter quando presentes no objeto enviado ao back.
Fluxos de uso
Nova unidade
- Usuário preenche a aba PACS: seleciona URL PACS (obrigatório para habilitar Criar Unidade), descrição DICOM, use lossless, storage, congelamento, PACS interno (se aplicável), worklist, command center, viewer.
- Clica Criar Unidade na aba PACS (ou na aba Informações).
criarEmpresa(empresa)valida PACS interno, CNPJ e país; monta id_pacs/url_pacs_externo; chama API de criação.
Editar unidade
- Ao abrir a aba PACS,
buscarPacsExterno()é chamado; os dados da unidade já foram carregados emgetEmpresa()(aba Informações), então empresa.empresa, empresa.worklist e empresa.commandCenter já estão preenchidos. - Usuário altera campos e clica Salvar.
atualizarEmpresa(empresa)valida PACS interno, tempo e storage_size; monta payload com worklist e commandCenter; chama PUT/empresa/.
Payload e API (salvar pela aba PACS)
Criar (POST /empresa/)
- O payload inclui todos os dados de empresa montados por
backEmpresa(empresa.empresa), incluindo id_pacs, url_pacs_externo, storage_size, congelamento (quando storage_size != null), observacoes_pacs, dados de PACS interno, worklist e commandCenter (se o controller tiver atribuído a empresa.empresa antes do back).
Atualizar (PUT /empresa/)
- Ao salvar pela aba PACS,
atualizarEmpresa(empresa)é chamado sem o parâmetrotrue. O controller não remove campos de outras abas; o payload contém worklist, commandCenter e todos os campos de PACS. O backend recebe o objeto completo da empresa (conforme montado por backEmpresa).
Obter unidade (GET /empresa/:id)
- A resposta é usada em
getEmpresa(); worklist e commandCenter vêm emresponse.data.empresae são atribuídos aempresa.worklisteempresa.commandCenterno controller. Os campos de PACS em empresa.empresa vêm defrontEmpresa.
Componentes e arquivos
| Tipo | Caminho |
|---|---|
| View (aba) | views/empresa/form/empresaFormPacs.html |
| Controller | app/controllers/empresaFormCtrl.js |
| Model | app/domain/models/empresaModel.js |
| Service HTTP | app/services/http/empresaHttpService.js |
| Config pathFile | app/config/config.js → empresaFormPacs: 'views/empresa/form/empresaFormPacs.html' |
| Tela (tabs) | views/empresa/empresaTabs.html |
| Controller tabs | app/controllers/empresaTabsCtrl.js |
| Rota | app/core/config.route.js → state empresaTabs, url /empresa/:id |
i18n
Chaves usadas na aba PACS (labels, títulos, placeholders):
- ROUTER_INTERNO, EQUIPAMENTO_ROUTER_INTERNO, AE_TITLE, IP, PORTA, URL_PACS, PROCURE_PACS, DESCRICAO_DICOM, USA_LOSELESS, SIM, NAO, CONGELAMENTO_INTERMEDIARIO_GB, CONGELAMENTO_FRIO_GB, TAMANHO_DE_STORAGE_GB, OBSERVACOES_PACS, PACS_INTERNO, EQUIPAMENTO_ROUTER_EXTERNO, EMAIL_NOTI, URL_PACS_INTERNO, TEMPO_PACS, DIAS, BETA_PACS_INTERNO, IMGS_CONGELADAS, POSSUI_CONGELAMENTO, WORKLIST, COMMAND_CENTER, VIEWER_EXTERNO, VIEWER_EXTERNO_INTEGRADO, INFORMACOES_CADASTRO_NODICOM_LOCAL, HOST, CRIAR_UNIDADE, SALVAR.
Mensagens: CAMPO_PACS_INTERNO_OBRIGATORIO, MSG_TAMANHO_STORAGE_INVALIDO, TEMPO_EDICAO_MAIOR_QUE_IMPRESSAO, MSG_IS_PACSEXTERNO, EMPRESA_CRIADA_SUCESSO, MSG_ALTERAR_UNIDADE_SUCESSO, MSG_OPERACAO_ERROR.
Âncoras
| Âncora | Conteúdo |
|---|---|
#visão-geral | Objetivo da aba PACS e seções |
#rota-e-contexto | State, URL, tab index |
#view-empresaformpacshtml | Arquivo e form |
#seção-1--router-interno-pacs-externo | Campos router interno e storage/congelamento |
#seção-2--pacs-interno | Campos PACS interno |
#seção-3--worklist | Campos worklist |
#seção-4--command-center | Campos command center |
#seção-5--viewer-externo | Campo host viewer |
#botões-da-aba-pacs | Criar Unidade e Salvar |
#validações-controller | validaPacsInterno, storage_size, tempo |
#controller-empresaformctrl | Funções e montagem de payload |
#model-empresamodel-e-payload | frontEmpresa e backEmpresa para PACS |
#fluxos-de-uso | Nova unidade e editar |
#payload-e-api-salvar-pela-aba-pacs | POST/PUT |
#componentes-e-arquivos | Lista de arquivos |
#i18n | Chaves de tradução |
Written by: Fabiane Heckmann
Last modified:
© 2026 Mobilemed. Todos os direitos reservados.