> For the complete documentation index, see [llms.txt](https://manuais.farmaciadigital.saude.mg.gov.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manuais.farmaciadigital.saude.mg.gov.br/o-sigaf/modelos/modelo-caso-de-uso.md).

# Modelo Caso de Uso

CDUnnn - Caso de uso Manter Classe Mestre e Detalhes .

\
Observação: o trecho em verde a seguir é apenas informativo.\
Modelo de descrição de caso de uso para a realização padrão “Manter Agregação Mestre-Detalhe”.\
Descrição sumária\
A realização padrão “Manter Agregação Mestre-Detalhe” é uma lógica de manutenção de ciclo de vida de uma classe “mestre” (ou agregações simples - associações de classes em que a multiplicidade é “1” em ambos os lados -) e uma ou mais classes “detalhe”, isto é, classes associadas em relacionamentos de agregação “não compartilhada”, “composição” ou associação “um-para-muitos”. O padrão prevê um diálogo adicional ao formulário de manutenção, que permite ao usuário a seleção, a partir de uma lista, de um objeto da classe mestre para manutenção.\
Características

* A agregação “mestre” pode ser uma classe única ou um conjunto de classes ligadas por associações “um-para-um”, sendo estas últimas “componentes” (no conceito do JPA) ou não. Os “detalhes” são classes com associações “fortes” com essa classe mestre, de forma que pode ser conveniente incluí-los ou mantê-los junto com o mestre.
* Nas telas de manutenção, o usuário pode incluir, excluir e alterar objetos de todas as classes envolvidas simultaneamente, isto é, a manutenção de todo o conjunto de classes é realizada após o usuário informar os dados da classe “mestre” e de todas as classe “detalhe”, numa única requisição ao servidor de aplicação e numa mesma transação do SGBD.

<br>

*Descrição*

| Este caso de uso permite a consulta, inclusão, alteração e exclusão de uma classe e, opcionalmente, uma ou mais classes agregadas (em associações um-para-um com a classe “mestre”).Nota: este caso de uso é totalmente aderente à lógica padrão “Manter Agregação Mestre-Detalhe” do jCompany. |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>

*Precondições*

| Não se aplica. |
| -------------- |

<br>

*Fluxo principal*

| 1.    O SISTEMA exibe a tela *Seleção de Classe*.{Incluir nome}2.    O Ator informa pelo menos um dos argumentos de seleção e aciona o comando \[ *Pesquisar* ].3.    O SISTEMA valida os critérios de seleção informados.4.    O SISTEMA recupera todos os objetos da classe que atendem aos critérios de seleção informados.5.    O Ator seleciona um dos objetos da classe da lista.6.    O SISTEMA exibe a tela *Manutenção de Classe* preenchida com as informações do objeto selecionado (e classes agregadas, caso existam).{Clonar classe}{Incluir classe}{Alterar classe}{Excluir classe}{Pesquisar classe}7.    O caso de uso termina. |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

<br>

*Subfluxos*

Subfluxo Gravar alterações

| Passos | 1.    O SISTEMA verifica que todas as validações1 foram satisfeitas. No caso de inclusão ou clonagem, o SISTEMA gera uma identificação única para o objeto.2.    O SISTEMA grava as alterações. |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>

*Fluxos alternativos*

Fluxo alternativo Incluir classe

| Precondições | Não se aplica.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Passos       | 1.    O SISTEMA exibe a tela *Manutenção de Classe* com os campos em branco (ou no estado inicial2).2.    O Ator informa os atributos obrigatórios do objeto.3.    Para cada detalhe a ser incluído:3.1.     O Ator informa os atributos obrigatórios do objeto.3.2.     O SISTEMA exibe a tela (aba) da *classe de detalhe* com \<n> novas linhas, com os campos em branco (ou no estado inicial), destinadas à inclusão de novos objetos da classe de detalhe.3.3.     O Ator informa os atributos obrigatórios para até \<n> objetos da classe de detalhe.3.4.     O SISTEMA aciona o subfluxo Gravar alterações. |

<br>

Fluxo alternativo Alterar classe

| Precondições | Não se aplica.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Passos       | 1.    O Ator altera as informações que desejar para o objeto corrente da classe mestre.2.    Para cada detalhe a ser alterado:2.1.     Caso queira alterar um objeto da classe de detalhe,   o  Ator  aciona  o comando \[ *Detalhe* ].2.2.     O SISTEMA exibe a tela (aba) da *detalhes* com todos os objetos da classe de detalhe cadastrados para o objeto corrente da classe mestre.{Pesquisar classe}{Excluir classe}{Incluir detalhe}2.3.     O Ator faz as modificações que desejar.5.    O Ator aciona o comando \[ *Gravar* ].6.    O SISTEMA aciona o subfluxo Gravar alterações. |

<br>

Fluxo alternativo Excluir classe

| Precondições | Não se aplica.                                                                                                                                                                                                                        |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Passos       | 1.    O Ator aciona o comando \[ *Excluir* ].2.    O SISTEMA solicita a confirmação da exclusão.3.    O Ator confirma ou cancela a solicitação.4.    O SISTEMA exclui o objeto corrente da classe mestre e seus respectivos detalhes. |

<br>

Fluxo alternativo Pesquisar classe

| Precondições | Não se aplica.                              |
| ------------ | ------------------------------------------- |
| Passos       | 1.    O SISTEMA retorna ao fluxo principal. |

<br>

Fluxo alternativo Incluir nome-da-classe-detalhe

| Precondições | Não se aplica.                                                                                                                                                                          |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Passos       | 1.    O SISTEMA atualiza a tela (aba) *de detalhes* com \<n> novas linhas, com os campos em branco (ou no estado inicial), destinadas à inclusão de novos objetos da classe de detalhe. |

<br>

*Diagrama de estado / Diagrama de atividade*

| Não se aplica. |
| -------------- |

<br>

*Classes utilizadas*

| Classe principal (com, opcionalmente, uma ou mais classes agregadas) e classes de detalhe. |
| ------------------------------------------------------------------------------------------ |

<br>

*Observações*

| 1.    As validações mencionadas nesse passo são de dois tipos:·       Validações invariáveis: são restrições que devem sempre ser atendidas no momento de criação ou alteração de objetos da classe. As restrições invariáveis para esta classe estão definidas no Modelo de Análise e Desenho (MADSw), na janela “Properties”, aba “Contraints” (quando se aplicam somente a um determinado atributo) ou como métodos para a classe (quando envolvem alguma lógica ou verificações envolvendo mais de um atributo).·       Validações variáveis: são restrições que se aplicam somente a este caso de uso. As restrições variáveis desta classe para este caso de uso, caso existam, estão definidas na descrição da tela, subitem “Campos”, coluna “Valores válidos e formato”.2.    Os valores iniciais dos campos, quando aplicável, estão definidos no Dicionário de Classes, que faz parte do MADSw\.3.    As regras de negócio aplicáveis a este caso de uso, caso existam, são citadas no corpo do caso de uso e definidas no subitem “Regras de Negócio” desta especificação. |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>

Requisitos de interface externa

Interfaces de usuário

Interface de usuário Tela Seleção de Classe (exemplo)

*Leiaute sugerido*

\ <br>

*Diagrama de estados*

| Não há. |
| ------- |

<br>

*Campos*

| Número |    Nome   |         Descrição        | Valores válidos e Formato |          Restrições         |
| :----: | :-------: | :----------------------: | :-----------------------: | :-------------------------: |
|    1   | atributo1 | Nome-da-classe.atributo1 |                           | Não-obrigatório1, alterável |
|    2   | atributo1 | Nome-da-classe.atributo1 |                           |   Informado pelo sistema2   |

<br>

*Comandos*

| Número |    Nome   |                                                     Ação                                                     | Restrições |
| :----: | :-------: | :----------------------------------------------------------------------------------------------------------: | :--------: |
|    1   |   Limpar  |                              O SISTEMA limpa os campos de argumento de pesquisa.                             |            |
|    2   |    Novo   |         O SISTEMA exibe a tela *Manutenção de Classe* com os campos em branco (ou no estado inicial).        |            |
|    3   | Pesquisar | O SISTEMA recupera todos(as) os(as) objetos da classe que atendem ao(s) critério(s) de seleção informado(s). |            |

<br>

*Observações*

| Esta tela é composta por duas seções:1.    Argumentos (filtros) de pesquisa.2.    Lista de itens selecionáveis. A seleção de um determinado item leva à tela de *Manutenção de Classe*, que será preenchida com os dados do objeto da classe selecionada. |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>

Requisitos de interface externa

Interfaces de usuário

Interface de usuário Tela Manutenção de Classe (exemplo)

*Leiaute sugerido*

\ <br>

*Diagrama de estados*

| Não há. |
| ------- |

<br>

*Campos*

| Número |    Nome   |         Descrição        | Valores válidos e Formato |       Restrições       |
| :----: | :-------: | :----------------------: | :-----------------------: | :--------------------: |
|    1   | atributo1 | Nome-da-classe.atributo1 |                           | Obrigatório, alterável |

<br>

*Comandos*

| Número |   Nome  |                                 Ação                                 | Restrições |
| :----: | :-----: | :------------------------------------------------------------------: | :--------: |
|    1   |   Novo  |      O SISTEMA retorna os campos da tela ao seu estado inicial.      |            |
|    2   |  Gravar |  O SISTEMA efetiva as inclusões, atualizações e exclusões pendente.  |            |
|    3   | Excluir | O SISTEMA exclui o objeto corrente da classe mestre e seus detalhes. |            |
|    4   |  Abrir  |              O SISTEMA exibe a tela *Seleção de Classe*.             |            |
|    5   | Detalhe |                  O SISTEMA exibe a aba *de detalhe*.                 |            |

<br>

*Observações*

| No caso de aplicações construídas utilizando o framework jCompany, o seguinte se aplica:1. Este padrão de implementação disponibiliza também os comandos \[ *Assistente* ] e \[ *Ajuda* ], que podem ser utilizados para prover auxílio contextual ao usuário.2. A tela padrão também disponibiliza o comando \[ *Imprimir* ]. Esse comando exibe a tela de manutenção num formato mais amigável para impressão, sem alterar a estrutura da tela. Caso a impressão exija uma formatação diferente, isso deve ser explicitamente especificado. |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>

Interface de usuário Tela de detalhe (exemplo)

*Leiaute sugerido*

\ <br>

*Diagrama de estados*

| Não há. |
| ------- |

<br>

*Campos*

| Número |    Nome   |                  Descrição                  | Valores válidos e Formato |         Restrições         |
| :----: | :-------: | :-----------------------------------------: | :-----------------------: | :------------------------: |
|    1   |  Exclusão | Indicador de registro marcado para exclusão |                           | Não obrigatório,alterável, |
|    2   | atributo1 |       Nome-da-classe-detalhe.atributo1      |                           |   Obrigatório, alterável   |

<br>

*Comandos*

| Número |   Nome  |                                                                           Ação                                                                           | Restrições |
| :----: | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------: |
|    1   |   Novo  | O SISTEMA inclui \<n> novas linhas na tela, com os campos em branco (ou no estado inicial), destinadas à inclusão de novos objetos da classe de detalhe. |            |
|    2   |  Gravar |                                            O SISTEMA efetiva as inclusões, atualizações e exclusões pendentes.                                           |            |
|    3   | Excluir |                                           O SISTEMA exclui o objeto corrente da classe mestre e seus detalhes.                                           |            |
|    4   |  Abrir  |                                                        O SISTEMA exibe a tela *Seleção de Classe*.                                                       |            |

<br>

*Observações*

| No caso de aplicações construídas utilizando o framework jCompany, o seguinte se aplica:1. Os comandos "Gravar", "Excluir" e "Abrir", nesta aba de detalhe, executam a mesma função que na tela do mestre. O comando "Excluir", por exemplo, exclui todo o grupo de classes envolvidas (a classe mestre e todas as classes detalhe). Já o comando "Novo", atua diferentemente nesta aba, incluindo novas linhas na tela destinadas à inclusão de novos detalhes.2. Este padrão de implementação disponibiliza também os comandos \[ *Assistente* ] e \[ *Ajuda* ], que podem ser utilizados para prover auxílio contextual ao usuário.3. A tela padrão também disponibiliza o comando \[ *Imprimir* ]. Esse comando exibe a tela de manutenção num formato mais amigável para impressão, sem alterar a estrutura da tela. Caso a impressão exija uma formatação diferente, isso deve ser explicitamente especificado. |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<br>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://manuais.farmaciadigital.saude.mg.gov.br/o-sigaf/modelos/modelo-caso-de-uso.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
