Skip to main content

Listagem PACS por unidade (/listar-pacs)

Documentação funcional do caso de uso listar PACS por unidade do portal MM-PACS: consulta paginada das unidades (empresas) com dados de router, PACS externo, grupo, storage e ações de exportação, atualização de storage atual e edição do cadastro da unidade.


Índice​


Visão geral​

A tela Listar PACS por unidade exibe uma tabela paginada das unidades vinculadas ao usuário logado, com campos relacionados a rede, URL do PACS externo, grupo de unidades, descrição DICOM, indicador de PACS externo, tamanho de storage, storage atual (com opção de atualizar via backend), uso do storage (calculado pelo frontend em MB/GB/TB) e atalho para editar a empresa.

  • O atalho no menu fica no dropdown do perfil PROPRIETÁRIO (#btn-proprietario), com o link #btn-proprietario-listar-pacs apontando para listar-pacs.
  • O state listarPacs não declara controller no UI-Router; o controller é aplicado no template via data-ng-controller="empresaTableCtrl".
  • A busca de dados usa POST /usuario/busca/empresas/:usuario_id com corpo de filtro; após receber a lista, o controller encadeia com POST config.USO_STORAGE_API_URL (via $q.all) para popular o campo uso_storage de cada linha; a exportação PACS usa POST com responseType: 'blob'; a atualização do storage atual chama PUT /pacsExterno/storage/.

Menu PROPRIETÁRIO — Listar PACS por unidade

Listar PACS por unidade — visão geral


Rota e acesso​

ItemValor
State (UI-Router)listarPacs
URL/listar-pacs
Definição do stateapp/core/config.route.js
Templateviews/modais/listagemPacs.html
Controller no stateNenhum (definido no template)
Controller efetivoempresaTableCtrl — app/controllers/empresaTableCtrl.js
Menu (PROPRIETÁRIO)views/layout/header.html — #btn-proprietario / #btn-proprietario-listar-pacs

Interface​

Cabeçalho e ações globais​

ElementoID / referênciaComportamento
Título da página—data-translate="LISTAR_PACS_POR_UNIDADE", estilo vermelho (section-header)
Voltar#btn-listagem-pacs-voltarDiretiva btn-voltar — histórico do navegador ($window.history.back())
Exportar relatório PACS#btn-listagem-pacs-exportarng-click="exportarPacs(filtro)" — ícone fa-print; gera arquivo XLSX via API e exportarRelatorioService

Colunas da tabela​

Cabeçalhos com ordenação visual (fa-angle-up / fa-angle-down e ng-click="order(...)"); ver Observações técnicas.

Coluna (i18n)Campo exibido (empresa)
NOME_FANTASIAnome_fantasia (com filtro ellipsis: 30)
AE_TITLE_ROUTERea_title
IP_ROUTERip
PORTA_ROUTERporta
URL_PACSurl_pacs_externo
GRUPOgrupoEmpresas_nome
DESCRICAOdescricao_dicom
PACS_EXpacs_externo
TAMANHO_DE_STORAGEtamanho_storage
STORAGE_ATUALBotão atualizar + texto storage_atual
USO_DO_STORAGEuso_storage — uso do storage formatado (MB/GB/TB), calculado pelo frontend via formatarBytes()
ACOESBotão editar

Filtros​

Objeto $scope.filtro. Em cada input de filtro: ng-keyup="$event.keyCode == 13 && buscar_empresas(filtro)" (Enter dispara a busca).

Campo (filtro.*)ID do controleTipo
nome_fantasia#input-listagem-pacs-empresa-filtrotext
ea_title#input-listagem-pacs-ea-filtrotext
ip#input-listagem-pacs-ip-filtrotext
porta#input-listagem-pacs-porta-filtrotext
url_pacs_externo#input-listagem-pacs-url-externo-filtrotext
grupoEmpresas_nome#input-listagem-pacs-grupo-filtrotext
descricao_dicom#input-listagem-pacs-descricao-filtrotext
is_pacs_externo#select-listagem-pacs-externo-filtroselect: null (Todos), 0 (Não), 1 (Sim)
tamanho_storage#input-listagem-pacs-tamanho-filtrotext

Botão Filtrar: #btn-listagem-pacs-buscar — ng-click="buscar_empresas(filtro)".

Linhas de dados e ações​

ng-repeat="empresa in frontTable".

AçãoIDComportamento
Atualizar storage atual#btn-listagem-pacs-atualiza-storage-{{empresa.id}}ng-click="atualizaStorageAtual(empresa)"; oculto se empresa.storage_atual == '' (ng-hide)
Texto storage atual#i-listagem-pacs-storage-atual-{{empresa.id}}{{empresa.storage_atual}}
Texto uso do storage#i-listagem-pacs-storage-atual-{{empresa.id}} (coluna USO_DO_STORAGE){{empresa.uso_storage}} — preenchido após chamada a usoStorage; sem botão
Editar unidade#btn-listagem-pacs-storage-editar-{{empresa.id}}ng-href="empresa/{{empresa.id}}" — abre cadastro da empresa

Células de dados usam IDs do tipo td-listagem-pacs-*-{{empresa.id}} (por exemplo td-listagem-pacs-empresa-{{empresa.id}}).

Paginação​

  • uib-pagination: total-items="paginacao.total", items-per-page="filtro.total_registros", ng-model="filtro.pagina", ng-change="buscar_empresas(filtro)".
  • Registros por página: #select-listagem-pacs-registros — ui-select com ng-model="filtro.total_registros", ng-init="filtro.total_registros = 10", opções de registosPorPagina (enum quantidadePorPaginasEnum: 10, 20, 30, 40, 50).
  • Texto “Mostrando de X a Y de Z registros”: #span-listagem-pacs-mostrando-de, #span-listagem-pacs-mostrando-a, #span-listagem-pacs-mostrando-total.

Fluxos de uso​

Pré-requisito​

Usuário com permissão de PROPRIETÁRIO para ver o menu; acesso direto à URL pode depender de outras regras de autenticação do portal.

Fluxo — Listar e filtrar​

  1. Acessar /listar-pacs (menu PROPRIETÁRIO → Listar PACS por unidade ou URL direta).
  2. Na carga, empresaTableCtrl chama buscar_grupoEmpresas() e buscar_empresas() sem filtro inicial.
  3. buscar_empresas executa o seguinte encadeamento:
    • 1º .then — recebe lista de empresas, popula frontTable e paginacao, extrai os token de cada empresa.
    • $q.all — chama usoStorage(token_empresas) e $q.when(empresasPorToken) em paralelo.
    • 2º .then — itera sobre responseStorage.data.data[], localiza a empresa pelo value.department (token) e atribui empresa.uso_storage = formatarBytes(value.tamanho_bytes).
    • .finally — libera a flag limitaFuncao = false (independentemente de sucesso ou erro).
  4. Preencher os campos de filtro na primeira linha da tabela e clicar em Filtrar ou pressionar Enter em um dos inputs para refazer o fluxo acima com os parâmetros selecionados.

Fluxo — Exportar relatório PACS​

  1. Ajustar filtros desejados (opcional).
  2. Clicar no ícone de impressão (#btn-listagem-pacs-exportar).
  3. O front envia exportarPacs com até 5000 registros no filtro de paginação (_filtro.paginacao.total_registros = 5000) e faz download do XLSX com nome baseado na chave RELATORIO_PACS.

Fluxo — Atualizar storage atual​

  1. Localizar a linha da unidade com storage_atual não vazio (botão visível).
  2. Clicar no botão play (#btn-listagem-pacs-atualiza-storage-{id}).
  3. Chamada PUT /pacsExterno/storage/ com o objeto da empresa como pacs_externo; em sucesso, atualiza storage_atual na linha e exibe notificação de sucesso.

Fluxo — Editar cadastro da unidade​

  1. Clicar no ícone de lápis (#btn-listagem-pacs-storage-editar-{id}).
  2. Navegação para empresa/{id} (formulário de empresa).

Models​

empresaModel​

Arquivoapp/domain/models/empresaModel.js
FunçãoUso nesta tela
filtroEmpresaListNew(filtro)Monta o payload da busca paginada em buscar_empresas.
frontEmpresaList(response.data)Mapeia a resposta para as linhas de frontTable.
filtroEmpresaList(filtro)Usada em exportarPacs (e em exportarUnidades na mesma controller, não usada neste template).

gruposEmpresasModel​

Arquivoapp/domain/models/gruposEmpresasModel.js
FunçãoUso
filtro()Corpo para listar grupos em buscar_grupoEmpresas.
frontEmpresaTable(response.data)Popula $scope.grupoEmpresas_nome (esta listagem PACS não exibe select de grupo como outras telas que usam o mesmo controller).

Serviços HTTP​

empresaHttpService​

Arquivoapp/services/http/empresaHttpService.js
MétodoHTTPCaminhoUso
buscarEmpresasMinhasFiltro(usuario_id, obj)POSTconfig.API_URL + /usuario/busca/empresas/:usuario_idLista unidades com filtro e paginação.
usoStorage(token_empresas)POSTconfig.USO_STORAGE_API_URLBody { token_empresas } — retorna data.data[] com { department, tamanho_bytes } para popular uso_storage de cada empresa. Sem Authorization header adicional (usa URL externa separada).
exportarPacs(usuario_id, obj)POSTconfig.API_URL + /usuario/busca/empresas/exportar/pacs/:usuario_idExportação XLSX (responseType: 'blob').

pacsExternoHttpService​

Arquivoapp/services/http/pacsExternoHttpService.js
MétodoHTTPCaminhoUso
atualizaStorage(pacs_externo)PUT/pacsExterno/storage/Body { pacs_externo: pacs_externo } — atualiza storage atual exibido na linha.

gruposEmpresasHttpService​

Arquivoapp/services/http/gruposEmpresasHttpService.js
MétodoHTTPCaminhoUso
buscarGruposEmpresas(_filtroGrupos)POST/gruposEmpresas/listaInicialização de buscar_grupoEmpresas no controller.

Outros serviços​

Serviço / dependênciaArquivoUso
exportarRelatorioServiceapp/services/util/exportarRelatorioService.jsPersistir o blob retornado por exportarPacs como arquivo XLSX no cliente.
storageService—getUser() para usuario_id; getToken() nos HTTP (via factory do serviço).
enumsapp/domain/enums/enums.jsquantidadePorPaginasEnum(), extensaoFileEnum() (XLSX na exportação).
$qAngularJS built-inUsado em $q.all e $q.when para encadear a busca de empresas com a chamada de usoStorage em paralelo.

i18n​

Chaves principais em assets/i18n/pt-br.json.

Template listagemPacs.html​

ChaveValor (pt-br)
LISTAR_PACS_POR_UNIDADEListar PACS por unidade
NOME_FANTASIANome Fantasia
AE_TITLE_ROUTERAE Title do Router
IP_ROUTERIP do Router
PORTA_ROUTERPorta do Router
URL_PACSUrl Pacs Externo
GRUPOGrupo
DESCRICAODescrição
PACS_EXPacs externo
TAMANHO_DE_STORAGETamanho do storage
STORAGE_ATUALStorage atual
USO_DO_STORAGEUso do storage
ACOESAções
TODOSTodos
NAONão
SIMSim
FILTRARFiltrar
MOSTRANDO_DEMostrando de
A_ACENTOa
DEde
REGISTROSRegistros

Notificações e nome de arquivo (empresaTableCtrl)​

ChaveUso
CODIGOPrefixo de código de erro nas notificações
MSG_OPERACAO_ERRORTítulo de erro
MSG_OPERACAO_SUCESSOSucesso ao atualizar storage
RELATORIO_PACSNome base do arquivo exportado

Observações técnicas​

  1. Ordenação por coluna: o template chama order(...) e usa row em ng-class, porém empresaTableCtrl não define order nem row. Os cliques nos ícones de ordenação podem não ter efeito ou gerar erro em runtime até haver implementação compartilhada ou ajuste no controller.
  2. Throttling: buscar_empresas usa a flag limitaFuncao para evitar requisições concorrentes duplicadas; liberada no .finally() (garantido mesmo em caso de erro).
  3. Grupos: buscar_grupoEmpresas é executado no init; o escopo grupoEmpresas_nome não é usado na UI deste template, mas permanece disponível no mesmo controller.
  4. Funções auxiliares internas:
    • mensagemErro(erro) — normaliza a mensagem de erro para todas as notificações do controller; substitui a construção inline anterior em todos os .catch().
    • formatarBytes(bytes) — converte um número de bytes para string legível (MB, GB ou TB, 2 casas decimais). Retorna '' para valores nulos, negativos ou não finitos.
  5. uso_storage vs storage_atual: são campos distintos. storage_atual é atualizado pontualmente via botão play (PUT /pacsExterno/storage/). uso_storage é preenchido automaticamente a cada busca via usoStorage e exibido na coluna USO_DO_STORAGE.

Âncoras de referência​

ÂncoraConteúdo
#visão-geralPropósito da tela e screenshots comentados
#rota-e-acessoState, URL, arquivos
#interfaceCabeçalho, colunas, filtros, ações, paginação
#fluxos-de-usoFiltrar, exportar, atualizar storage, editar
#modelsempresaModel, gruposEmpresasModel
#serviços-httpEndpoints utilizados
#i18nChaves de tradução
#observações-técnicasOrdenação, throttle, grupos

Written by: Lucas Côrte Galdino de Freitas

Last modified: 24/04/2026

© 2026 Mobilemed. Todos os direitos reservados.