Preciso que uma flag numa tabela permaneça com o seu status inicial inalterado mas que também o novo status também seja registrado

3 respostas
spring-boot
R

Olá pessoal, eu gostaria muito de entender como fazer com que uma flag no banco de dados, ao sofrer uma alteração manual no sistema, ela sofra a mudança claro, mas o status da mudança inicial permaneça no banco de dados.
Por exemplo: Imaginem que o rh da empresa cadastrou o Josá num convênico médico chamado de plano A. Ao fazer isso, na tabela plano_alterado_status uma flag é adicionada como 0. Contudo, aparece uma oportunidade de outro convênio médico B. Daí o José solicita ao rh, que o muda para o outro convênio médico chamado de plano B. Ao mudar o José para o plano B, na tabela plano_alterado_status uma flag é adicionada como 1. Ou seja, houve mudança de flag de 0 para 1. Indicando que houve a migração. Contudo, eu queria saber como fazer com que a flag 0 inicial permaneça como um status inicial inalterável, mas também quero que no banco a nova flag indique que sofreu alteração para flag 1.
Observação: Eu já identifiquei o service que faz isso. Por isso gostaria apenas de entender duas coisas: como você pensaria sobre isso, tipo, voce criaria uma nova tabela no banco? E a segunda vou colocar parte do código de uma service para ver se você pode me ajudar a mudar a validação por favor.
Trecho do código:

public StatusConvenioMud getStatusNovoConvenio(Integer folhaBase, Integer folhaParcelaOrigem, Integer folhaInicialSituacaoMatricula, Integer folhaFinalSituacaoMatricula, TipoGeraDescontoFolha tipoCondicaoMatriculaDestino, Integer folhaCorrenteAtual, StatusParcelaFolha novoStatusIniciadoNaConvenioMigrada, StatusConvenioFolha statusAntesConvenioMigrada) {

    StatusConvenioFolha statusConvenioResult = null;

    if (nonNull(tipoSituacaoConvenioDestino)) {
        log.info("Verificando tipo de situação de convenio para atribuir o status ao convenio que está sendo criada");
        statusConvenioResult = verificaSituacaoConvenioMatriculaParaAtualizarParcela(folhaParcelaOrigem, folhaInicialSituacaoMatricula, folhaFinalConvenioMatricula, tipoSituacaoConvenioDestino, novoStatusIniciadoNaConvenioMigrada, statusAntesFolhaMigrada);
    }
    if (isNull(statusConvenioResult)) {
        if (folhaCorrenteAtual.equals(folhaBase) || (folhaCorrenteAtual > folhaBase)) {
            log.info("Migrando a partir do mês atual ou retroativo a convenio atual");
            if (folhaConvenioOrigem < folhaConvenioAtual) {
                if (folhaConvenioOrigem.equals(folhaBase)) {
                    return novoStatusIniciadoNaConvenioMigrada;
                }
                return statusAntesConvenioMigrada;
            } else {
                return novoStatusIniciadoNaConvenioMigrada;
            }
        } else {
            log.info("Migrando convenio futura à folha corrente");
            if (folhaConvenioOrigem < folhaBase) {
                return statusAntesConvenioMigrada;
            } else {
                return novoStatusIniciadoNaConvenioMigrada;
            }
        }
    }
    return statusConvenioResult;
}

3 Respostas

wldomiciano

Vc poderia explicar melhor? É porque o que vc quer não faz muito sentido.

O status inicial é sempre 0, correto?

Se sua aplicação encontra alguém com status 1, ela já pode assumir com total certeza que o plano daquela pessoa foi alterado. Não há a menor necessidade de guardar um valor que é fixo, no caso o 0.

O status é 0? Aquela pessoa está com o primeiro plano desde sempre, ela nunca mudou.

O status é 1? Aquela pessoa, em algum momento, fez a alteração do plano.

Faria mais sentido para mim se vc tivesse um cenário assim:

Vc tem 3 tabelas: pessoa, convenio, pessoa_convenio.

As tabelas pessoa e convenio seriam normais. A tabela pessoa_convenio seria algo assim:

CREATE TABLE pessoa_convenio (
  id_pessoa INT,
  id_convenio INT,
  entrada TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  saida TIMESTAMP DEFAULT NULL
);

Se uma pessoa deseja alterar o plano, vc faria algo assim:

START TRANSACTION;
UPDATE pessoa_convenio
SET saida = CURRENT_TIMESTAMP
WHERE id_pessoa = 1 AND saida IS NULL;

INSERT INTO pessoa_convenio (id_pessoa, id_convenio) VALUES (1, 2);
COMMIT;

Ou seja, adicionaria a data de saída do convênio anterior e adicionaria o novo convênio logo em seguida. Desta forma vc teria o histórico inteiro de mudanças da pessoa e para saber em qual convênio ela está atualmente bastaria fazer um SELECT com WHERE saida IS NULL.

R

Você está certo :smile:. Vou reformular. Obrigado por responder. Sua resposta não é bem o que preciso, mas a culpa foi minha. Está mal formulada a pergunta. Assim que modificar te comunico. Obrigado.

Lucas_Camara

@Rept Faça como indicado pelo @wldomiciano que assim vc ainda terá o histórico de mudanças do convênio.

Criado 17 de setembro de 2021
Ultima resposta 18 de set. de 2021
Respostas 3
Participantes 3