- Índice
- Visão geral
- Rota e acesso
- Tela de listagem (gruposEmpresas)
- Modal de formulário (gruposEmpresasForm)
- Controller da listagem (gruposEmpresasCtrl)
- Controller do modal (gruposEmpresasFormCtrl)
- Model (gruposEmpresasModel)
- Serviço HTTP (gruposEmpresasHttpService)
- Configuração (pathFile)
- Fluxos de uso
- Payload e API
- Componentes alterados (referência)
- i18n
- Âncoras de referência
Listagem de grupos de unidades
Documentação funcional completa da funcionalidade Listagem de grupos de unidades (Criar Grupos / Grupos de Unidades) do portal MM-PACS: listagem, cadastro, edição, exclusão, ativar/inativar unidades em massa e exportação.
Índice
- Visão geral
- Rota e acesso
- Tela de listagem (gruposEmpresas)
- Modal de formulário (gruposEmpresasForm)
- Controller da listagem (gruposEmpresasCtrl)
- Controller do modal (gruposEmpresasFormCtrl)
- Model (gruposEmpresasModel)
- Serviço HTTP (gruposEmpresasHttpService)
- Configuração (pathFile)
- Fluxos de uso
- Payload e API
- Componentes alterados (referência)
- i18n
- Âncoras de referência
Visão geral
A funcionalidade Criar Grupos permite:
| Ação | Descrição |
|---|---|
| Listar | Ver grupos de unidades com filtros e paginação. |
| Adicionar | Criar novo grupo e opcionalmente associar uma unidade ao grupo. |
| Editar | Alterar dados do grupo (descrição, PACS, storage, congelamento, links etc.). |
| Excluir | Excluir grupo (bloqueado se houver unidades vinculadas). |
| Ativar todas as unidades | Ativar em massa todas as unidades do grupo. |
| Inativar todas as unidades | Inativar em massa todas as unidades do grupo. |
| Exportar | Exportar listagem em XLSX. |
O modal de cadastro/edição é reutilizado também na tela Listar Franquias por Grupo (listarFranquiasGrupoCtrl).
Rota e acesso
| Item | Valor |
|---|---|
| State (UI-Router) | gruposEmpresas |
| URL | /gruposEmpresas |
| Arquivo de rota | app/core/config.route.js |
| Template | views/gruposEmpresas/gruposEmpresas.html |
| Controller | gruposEmpresasCtrl (definido no template via ng-controller) |
A rota não declara controller no config.route.js; o controller é atribuído na view com ng-controller="gruposEmpresasCtrl".
Tela de listagem (gruposEmpresas)
View
| Atributo | Valor |
|---|---|
| Arquivo | views/gruposEmpresas/gruposEmpresas.html |
| Controller | gruposEmpresasCtrl |
Estrutura da tela
- Cabeçalho: título "Listagem de grupos de unidades", botão Voltar (
btn-voltar), botão Adicionar, ícone Exportar. - Tabela: colunas com filtro na primeira linha e dados na segunda (ng-repeat em
frontTable).

Colunas e filtros
| Coluna | ng-model do filtro | Campo no item |
|---|---|---|
| Descrição | filtro.descricao | item.descricao |
| Tamanho de storage | filtro.storage_size | item.storage_size |
| Descrição storage | filtro.storage_description | item.storage_description |
| Congelamento intermediário (GB) | filtro.congelamento_intermediario_gb | item.congelamento_intermediario_gb |
| Congelamento frio (GB) | filtro.congelamento_frio_gb | item.congelamento_frio_gb |
| URL PACS | filtro.url_pacs_externo | item.url_pacs_externo |
| Link Android | filtro.app_entrega_android | item.app_entrega_android |
| Link iOS | filtro.app_entrega_ios | item.app_entrega_ios |
| Ações | — | Botões: Ativar todas, Inativar todas, Editar, Excluir |
Paginação
- Texto "Mostrando X a Y de Z registros".
uib-pagination: página atual emfiltro.pagina, total empaginacao.total, itens por página emfiltro.total_registros.- Select de registros por página:
registosPorPagina(enum).

IDs relevantes (para testes/Cypress)
btn-grupo-empresas-voltar,btn-grupo-empresas-adicionar,btn-grupo-empresas-exportarbtn-grupo-empresas-filtrarinput-grupo-empresas-descricao-filtro,input-grupo-empresas-tamanho-storage-filtro, etc.btn-grupo-empresas-ativar-{{item.id}},btn-grupo-empresas-inativar-{{item.id}},btn-grupo-empresas-editar-{{item.id}},btn-grupo-empresas-excluir-{{item.id}}td-grupo-empresas-descricao-{{item.id}},td-grupo-empresas-congelamento-intermediario-gb-{{item.id}}, etc.
Modal de formulário (gruposEmpresasForm)
View
| Atributo | Valor |
|---|---|
| Arquivo | views/modais/gruposEmpresasForm.html |
| Controller | gruposEmpresasFormCtrl |
| Acesso | Via $mdDialog (templateUrl: pathFile.gruposEmpresasForm) |
Estrutura do modal
- Toolbar: título "Dados do Grupo de Unidades", botão fechar.
- Formulário (
name="grupoEmpresaForm"):- Nome (obrigatório) –
gruposEmpresas.descricao - Unidade à associar (somente ao adicionar) –
select-unicocomempresasUsuarioGrupoEmpresa,ng-model="empresa" - Link Android –
gruposEmpresas.app_entrega_android - Link iOS –
gruposEmpresas.app_entrega_ios - Congelamento intermediário (GB) –
gruposEmpresas.congelamento_intermediario_gb(number, min 0) - Congelamento frio (GB) –
gruposEmpresas.congelamento_frio_gb(number, min 0) - Tamanho de storage (GB) –
gruposEmpresas.storage_size(number, min 0) - Descrição storage –
gruposEmpresas.storage_description - URL PACS –
select-unicocomselectPacsExterno,ng-model="gruposEmpresas.pacs_externo"+ link "Limpar" (limpaPacs())
- Nome (obrigatório) –
- Ações: Cancelar, Salvar (desabilitado se
grupoEmpresaForm.$invalid).
Validação no controller
storage_sizedeve sernullou entre 0 e 999999; caso contrário exibeMSG_TAMANHO_STORAGE_INVALIDO.

IDs relevantes
btn-dados-grupo-unidade-fechar,btn-dados-grupo-unidade-cancelar,btn-dados-grupo-unidade-salvarbtn-modal-limpar-grupo-pacs
Controller da listagem (gruposEmpresasCtrl)
Arquivo e dependências
| Atributo | Valor |
|---|---|
| Arquivo | app/controllers/gruposEmpresasCtrl.js |
| Nome | gruposEmpresasCtrl |
| Dependências | $scope, gruposEmpresasHttpService, Notification, $filter, gruposEmpresasModel, pathFile, $mdDialog, enums, permissionUtilService, storageService, empresaHttpService, exportarRelatorioService |
Escopo principal
| Variável | Descrição |
|---|---|
frontTable | Array de itens exibidos na tabela (saída de gruposEmpresasModel.frontTable). |
pathFile | Objeto com caminhos de templates (ex.: gruposEmpresasForm). |
usuario | Usuário logado (storageService.getUser()). |
registosPorPagina | Opções de itens por página. |
filtro | Objeto de filtro e paginação (usado em buscarGruposEmpresas). |
paginacao | Dados de paginação retornados pela API. |
Funções
| Função | Descrição |
|---|---|
buscarGruposEmpresas(filtro) | Monta payload com gruposEmpresasModel.filtro(filtro), chama gruposEmpresasHttpService.buscarGruposEmpresas, atualiza frontTable e paginacao. |
adicionar(ev, gruposEmpresas) | Abre modal com gruposEmpresasFormCtrl, pathFile.gruposEmpresasForm, locals: { gruposEmpresas, usuarioId }. No then do dialog, chama empresaHttpService.atualizaGrupoEmpresa com empresa_id e gruposEmpresas_id e recarrega a listagem. |
editar(ev, gruposEmpresas) | Abre o mesmo modal em modo edição com locals: { gruposEmpresas }. Ao fechar com sucesso, recarrega a listagem. |
exportarGrupos(filtro) | Usa gruposEmpresasModel.filtro com total_registros: 5000, chama gruposEmpresasHttpService.exportarGrupos, depois exportarRelatorioService.exportarRelatorio (XLSX). |
excluir(ev, dados) | Confirma com $mdDialog.confirm. Chama gruposEmpresasHttpService.excluirGrupoEmpresa(dados.id). Em caso de grupo com empresas, exibe GRUPO_POSSUI_EMPRESAS. |
ativarTodasUnidades(ev, grupo) | Confirma e chama gruposEmpresasHttpService.ativarTodasUnidades(grupo.id). |
inativarTodasUnidades(ev, grupo) | Confirma e chama gruposEmpresasHttpService.inativarTodasUnidades(grupo.id). |
Controller do modal (gruposEmpresasFormCtrl)
Arquivo e dependências
| Atributo | Valor |
|---|---|
| Arquivo | app/controllers/modais/gruposEmpresasFormCtrl.js |
| Nome | gruposEmpresasFormCtrl |
| Dependências | $scope, $mdDialog, locals, gruposEmpresasHttpService, $filter, gruposEmpresasModel, Notification |
Locals (injetados ao abrir o modal)
| Local | Uso |
|---|---|
gruposEmpresas | Objeto do grupo ao editar; undefined ao adicionar. |
usuarioId | ID do usuário ao adicionar (para o select de unidade à associar). |
Escopo
| Variável | Descrição |
|---|---|
is_edit | true se for edição (existir locals.gruposEmpresas). |
gruposEmpresas | Objeto do formulário: ao editar, preenchido com gruposEmpresasModel.front(_gruposEmpresas); ao adicionar, não inicializado (formulário novo). |
empresa | { itemSelect: null } para o select "Unidade à associar". |
usuarioId | Repasse de locals.usuarioId ao adicionar. |
Funções
| Função | Descrição |
|---|---|
cancel() | Fecha o dialog com $mdDialog.cancel(). |
limpaPacs() | Zera gruposEmpresas.pacs_externo (array vazio, itemSelect null). |
salvar(gruposEmpresas) | Valida storage_size (0–999999 ou null). Monta payload com gruposEmpresasModel.back(gruposEmpresas). Se is_edit: alterarGruposEmpresas e $mdDialog.hide(). Se novo: adicionarGruposEmpresas, depois $mdDialog.hide({ gruposEmpresas_id, empresa_id }) para o fluxo de associar unidade. |
Inicialização ao editar
- Se existir
id_pacseurl_pacs_externo, montagruposEmpresas.pacs_externono formato do select (array+itemSelect) para exibir o PACS selecionado.
Model (gruposEmpresasModel)
Arquivo
app/domain/models/gruposEmpresasModel.js — factory gruposEmpresasModel.
Funções expostas
| Função | Uso | Descrição |
|---|---|---|
filtro(filtro) | Listagem e exportação | Retorna objeto { filtro: { ... }, paginacao: { pagina, total_registros } }. Campos do filtro: is_ativo, descricao, app_entrega_android, app_entrega_ios, id_pacs, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, url_pacs_externo. |
frontTable(dados) | Listagem | Recebe dados.lista e retorna array de itens com: id, descricao, app_entrega_android, app_entrega_ios, id_pacs, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, url_pacs_externo (de pacs_externo.url_pacs_externo quando existir). |
frontEmpresaTable(dados) | Dropdown em outras telas | Retorna lista com opções "Todos" e "Sem grupo" + itens com id e descricao. Usado em relatórios e selects de grupo. |
front(dados) | Modal (edição) | Converte um objeto grupo da API para o formato do formulário: inclui todos os campos do grupo (incl. congelamento_intermediario_gb, congelamento_frio_gb, storage_size, storage_description, url_pacs_externo, id_pacs). |
back(dados) | Modal (salvar) | Converte o objeto do formulário para o payload da API: { gruposEmpresas: { id, descricao, comentario, app_entrega_android, app_entrega_ios, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, id_pacs } }. O id_pacs vem de dados.pacs_externo.itemSelect quando existir. |
Serviço HTTP (gruposEmpresasHttpService)
Arquivo
app/services/http/gruposEmpresasHttpService.js — factory gruposEmpresasHttpService. Dependências: $http, config, storageService.
Endpoints
| Método do factory | Método HTTP | URL | Descrição |
|---|---|---|---|
adicionarGruposEmpresas(dados) | POST | /gruposEmpresas | Cria grupo. |
getGruposEmpresas(id) | GET | /gruposEmpresas/:id | Obtém um grupo. |
alterarGruposEmpresas(dados) | PUT | /gruposEmpresas | Atualiza grupo. |
buscarGruposEmpresas(filtro) | POST | /gruposEmpresas/lista | Listagem paginada/filtrada. |
excluirGrupoEmpresa(id) | DELETE | /gruposEmpresas/:id | Exclui grupo. |
exportarGrupos(filtro) | POST | /gruposEmpresas/exportar | Exportação (responseType: blob). |
ativarTodasUnidades(grupo_id) | POST | /gruposEmpresas/ativarUnidades/:grupo_id | Ativa todas as unidades do grupo. |
inativarTodasUnidades(grupo_id) | POST | /gruposEmpresas/inativarUnidades/:grupo_id | Inativa todas as unidades do grupo. |
Todas as requisições usam header token: storageService.getToken(). POST/PUT usam Content-Type: application/json.
Configuração (pathFile)
No app/config/config.js, o objeto de paths (pathFile) inclui:
| Chave | Valor |
|---|---|
gruposEmpresasForm | 'views/modais/gruposEmpresasForm.html' |
Usado em gruposEmpresasCtrl e em listarFranquiasGrupoCtrl para abrir o modal.
Fluxos de uso
Adicionar grupo (e associar unidade)
- Usuário clica em Adicionar na tela de listagem.

gruposEmpresasCtrl.adicionar(ev, item)abre o modal comlocals: { gruposEmpresas: item, usuarioId }.

- Modal abre em modo “novo” (
is_editfalse); usuário preenche nome e demais campos e escolhe Unidade à associar (select).

- Ao clicar Salvar,
gruposEmpresasFormCtrl.salvarchamaadicionarGruposEmpresas; nothen,$mdDialog.hide({ gruposEmpresas_id, empresa_id }).

- No
gruposEmpresasCtrl, othendo dialog chamaempresaHttpService.atualizaGrupoEmpresa({ id: empresa_id, gruposEmpresas_id })e depoisbuscarGruposEmpresas().

Editar grupo
- Usuário clica em Editar na linha do grupo.

gruposEmpresasCtrl.editar(ev, item)abre o modal comlocals: { gruposEmpresas: item }.- Controller do modal preenche
gruposEmpresascomgruposEmpresasModel.front(item)e, se houver PACS, montapacs_externopara o select.

- Usuário altera e clica Salvar;
alterarGruposEmpresasé chamado e o dialog fazhide(). - Na listagem, o
thendo dialog chamabuscarGruposEmpresas().

Excluir / Ativar / Inativar
- Excluir: botão vermelho na coluna da tabela

confirmação → excluirGrupoEmpresa(id) → em sucesso recarrega lista; se grupo tiver empresas, API pode retornar status e front exibe GRUPO_POSSUI_EMPRESAS.

- Ativar todas / Inativar todas: confirmação →
ativarTodasUnidades(grupo.id)ouinativarTodasUnidades(grupo.id)→ notificação de sucesso ou tratamento de erro (incl. 400 com mensagem).

Payload e API
Listagem (POST /gruposEmpresas/lista)
- Envio: objeto retornado por
gruposEmpresasModel.filtro(filtro)(contémfiltroepaginacao). - Resposta esperada: estrutura com
lista(array de grupos) epaginacao(ex.:from,to,total). Cada item da lista pode terpacs_externo.url_pacs_externopara exibição.
Criar (POST /gruposEmpresas)
- Envio:
{ gruposEmpresas: { descricao, comentario, app_entrega_android, app_entrega_ios, storage_size, storage_description, congelamento_intermediario_gb, congelamento_frio_gb, id_pacs } }. - Resposta esperada: corpo com
grupoEmpresa.id(usado no fluxo de associar unidade).
Alterar (PUT /gruposEmpresas)
- Envio: mesmo formato, com
gruposEmpresas.idpreenchido.
Exportar (POST /gruposEmpresas/exportar)
- Envio: mesmo formato de filtro da listagem (geralmente com
paginacao.total_registrosalto). - Resposta: blob (arquivo XLSX).
Componentes alterados (referência)
| Tipo | Caminho | Descrição |
|---|---|---|
| View | views/gruposEmpresas/gruposEmpresas.html | Tela de listagem, filtros, tabela, ações e paginação. |
| View | views/modais/gruposEmpresasForm.html | Modal de dados do grupo (cadastro/edição). |
| Controller | app/controllers/gruposEmpresasCtrl.js | Listagem, abrir modal, exportar, excluir, ativar/inativar. |
| Controller | app/controllers/modais/gruposEmpresasFormCtrl.js | Formulário do modal, salvar (criar/editar), validar storage. |
| Model | app/domain/models/gruposEmpresasModel.js | filtro, frontTable, frontEmpresaTable, front, back. |
| Service | app/services/http/gruposEmpresasHttpService.js | Chamadas HTTP à API de grupos. |
| Config | app/config/config.js | pathFile.gruposEmpresasForm. |
| Route | app/core/config.route.js | State gruposEmpresas, URL /gruposEmpresas. |
Uso do modal em outros contextos
- listarFranquiasGrupoCtrl (
app/controllers/viewer/listarFranquiasGrupoCtrl.js): usa o mesmogruposEmpresasFormCtrlepathFile.gruposEmpresasFormpara adicionar e editar grupos na tela de franquias por grupo.
i18n
Chaves utilizadas nas views e controllers desta funcionalidade (ex.: pt-br.json):
| Chave | Uso |
|---|---|
LISTAGEM_GRUPOS_UNIDADES | Título da página. |
DADOS_GRUPOS_UNIDADES | Título do modal. |
ADD | Botão adicionar. |
EXPORTAR_GRUPOS_UNIDADES | Tooltip exportar. |
DESCRICAO | Coluna/filtro descrição. |
TAMANHO_DE_STORAGE | Coluna tamanho storage. |
DESCRICAO_STORAGE | Coluna e label descrição storage. |
CONGELAMENTO_INTERMEDIARIO_GB | Coluna e label congelamento intermediário. |
CONGELAMENTO_FRIO_GB | Coluna e label congelamento frio. |
URL_PACS | Coluna e label URL PACS. |
LINK_ANDROID / LINK_IOS | Colunas e labels. |
ACOES | Cabeçalho coluna ações. |
FILTRAR | Botão filtrar. |
NOME | Label nome no modal. |
UNIDADE_ASSOCIAR | Label unidade à associar. |
TAMANHO_DE_STORAGE_GB | Label tamanho storage (GB) no modal. |
CANCELAR / SALVAR | Botões do modal. |
LIMPAR | Link limpar PACS. |
EDITAR_GRUPO | Tooltip editar. |
EXCLUIR_GRUPO_UNIDADE | Botão e título do confirm excluir. |
ALERT_EXCLUIR_GRUPO_UNIDADE | Mensagem do confirm excluir. |
GRUPO_POSSUI_EMPRESAS | Erro ao excluir grupo com empresas. |
ATIVAR_TODAS_EMPRESAS / INATIVAR_TODAS_EMPRESAS | Botões e títulos dos confirms. |
ALERT_ATIVAR_GRUPO_UNIDADE / ALERT_INATIVAR_GRUPO_UNIDADE | Mensagens dos confirms. |
MSG_ATIVAR_UNIDADES_SUCESSO / MSG_INATIVAR_UNIDADES_SUCESSO | Notificações de sucesso. |
RELATORIO_GRUPOS | Nome do arquivo de exportação. |
MSG_TAMANHO_STORAGE_INVALIDO | Validação storage no modal. |
MOSTRANDO_DE, A_ACENTO, DE, REGISTROS | Textos de paginação. |
Âncoras de referência
| Âncora | Conteúdo |
|---|---|
#visão-geral | Resumo da funcionalidade e ações. |
#rota-e-acesso | State, URL e template. |
#tela-de-listagem-gruposempresas | View da listagem, colunas, filtros, IDs. |
#modal-de-formulário-gruposempresasform | View do modal e campos. |
#controller-da-listagem-gruposempresasctrl | Funções e escopo do controller da listagem. |
#controller-do-modal-gruposempresasformctrl | Funções e escopo do controller do modal. |
#model-gruposempresasmodel | Funções do model (filtro, front, back, etc.). |
#serviço-http-gruposempresashttpservice | Endpoints da API. |
#configuração-pathfile | pathFile.gruposEmpresasForm. |
#fluxos-de-uso | Adicionar, editar, excluir, ativar/inativar. |
#payload-e-api | Formato de requisições e respostas. |
#componentes-alterados-referência | Tabela de arquivos. |
#i18n | Chaves de tradução. |
Written by: Fabiane Heckmann
Last modified:
© 2026 Mobilemed. Todos os direitos reservados.