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