====== [UC1678] - Registrar Movimento Cartão de Débito EEVD ====== Este caso de uso permite o registro do movimento de cartão de crédito/débito. \\ **Ator:** Usuário da Divisão de Arrecadação (complexo [[casos_de_uso:atores|(1)]]). \\ **Prioridade:** Essencial. \\ **Pré-condição:** Existência do arquivo de movimento de arrecadador. \\ **Pós-condição:** Movimento de Arrecadador Registrado. \\ **Complexidade:** Complexo [[casos_de_uso:regraapuc|(1)]]. \\ **Histórico de Alterações:** ^ **Data** ^ **Analista** ^ **Descrição da Alteração** ^ | 27/03/2015 | Vivianne Sousa | Versão Inicial | ===== Diagrama do caso de uso ===== skinparam usecase { BackgroundColor<< Main >> YellowGreen } ([UC1678] - Registrar Movimento Cartão de Débito EEVD) << Main >> Usuário - ([UC1678] - Registrar Movimento Cartão de Débito EEVD) \\ ===== Fluxo Principal: ===== - O sistema recebe os seguintes parâmetros do caso de uso que chamou esta funcionalidade: - Arrecadador - Arquivo de movimento de arrecadador - O sistema distribui e valida o header e trailer do arquivo de movimento de arrecadador. \\ **[SB0001 - Distribuir e Validar o Header e Trailer do arquivo]**; - O sistema insere o movimento do arrecadador. \\ **[SB0002 - Inserir o movimento do arrecadador]**; - A partir do segundo e para cada registro guardado na coleção, o sistema: - Atribui o valor OK ao campo Descrição da Ocorrência do Movimento; - Atribui o valor 1 (SIM) ao Indicador de Aceitação do Registro do Movimento; - **Caso** o tipo de registro = 05 (D01 = 05), o sistema distribui os dados do conteúdo do registro de movimento do arrecadador, \\ **[SB0004 - Distribuir Dados do Registro de Movimento de Cartão]**; - Insere a sequência do cartão \\ **[SB0007 - Inserir sequencia do cartão]**; - Confirma as operações efetuadas no banco de dados \\ **[FS0002 - Verificar sucesso da transação]**. \\ ===== Subfluxo: ===== ==== [SB0001] - Distribuir e Validar o Header e Trailer do arquivo ==== O sistema distribui os dados do conteúdo do registro código **00** do movimento do arrecadador: | **Coluna** | **Tam.** | **Tipo** | **Descrição do campo** | | A01 | 2 | Num. | Tipo de registro | | A02 | 9 | Num. | Nº de filiação da matriz ou grupo comercial | | A03 | 8 | Num. | Data de emissão | | A04 | 8 | Num. | Data de movimento | | A05 | 39 | Alfa | Movimentação Diária - Cartões de Débito | | A06 | 8 | Alfa | Rede | | A07 | 26 | Alfa | Nome comercial do estabelecimento | | A08 | 6 | Num. | Sequência de movimento | | A09 | 15 | Alfa | Tipo de processamento (Diário/Reprocessamento) | | A10 | 20 | Alfa | Versão do arquivo (V1.04 -- 07/10 -- EEVD) | * 2. **Caso** o código do registro (campo A01) não corresponda a **00**, exibir a mensagem: //Arquivo de Movimento de Arrecadador sem Header// e encerrar o caso de uso. * 3. O sistema seleciona o estabelecimento matriz que corresponda ao da empresa que está recebendo o arquivo (ARCT_NNCONTRATO da tabela ARRECADACAO.ARRECADADOR_CONTRATO com ARRC_ID = ARRC_ID do arrecadador selecionado e com ARFM_ID = id correspondente a //Cartão de Débito//) * 3.1. **Caso** não exista ARCT_NNCONTRATO, exibir a mensagem: //Arrecadador informado não possui contrato de Cartão de Débito// e encerrar o caso de uso. * 3.2. **Caso** (campo A02) diferente do ARCT_NNCONTRATO, exibir a mensagem: //Número do contrato inválido// e encerrar o caso de uso. * 4. O sistema verifica se o arquivo já foi processado, verificando se a sequência do arquivo já está na tabela de registros (SEQUENCIA (A08) existe na tabela ARRECADACAO.SEQUENCIA_CARTAO com SEQU_NNNSA = SEQUENCIA (A08) e com ARFM_ID = id correspondente a //Cartão de Débito//). * 4.1. **Caso** exista o sistema exibe a mensagem: //Arquivo já processado// e encerrar o caso de uso. * 5. O sistema lê o arquivo de movimento de arrecadador sequencialmente até encontrar o registro código **04**, contando a quantidade total registros e guardando os registros código **05** lidos em uma coleção. \\ **[FS0001 - Verificar a existência do registro código 04]**. * 6. O sistema distribui os dados do conteúdo do registro 04 do movimento do arrecadador: | **Coluna** | **Tam.** | **Tipo** | **Descrição do campo** | | Z01 | 2 | Num. | Tipo de registro | | Z02 | 9 | Num. | Nº de filiação da matriz ou grupo comercial | | Z03 | 6 | Num. | Quantidade de Resumos de Vendas | | Z04 | 6 | Num. | Quantidade de Comprovantes de Vendas | | Z05 | 15 | 9(13)V99 | Total bruto | | Z06 | 15 | 9(13)V99 | Total desconto | | Z07 | 15 | 9(13)V99 | Total líquido | | Z08 | 15 | 9(13)V99 | Valor bruto pré-datado | | Z09 | 15 | 9(13)V99 | Desconto pré-datado | | Z10 | 15 | 9(13)V99 | Líquido pré-datado | | Z11 | 6 | Num. | Total de registros no arquivo | * 7. **Caso** a quantidade total de registros não seja igual ao total de registros do arquivo (campo Z(11)) exibir a mensagem: //Total de registros do arquivo de movimento inválido// e encerrar o caso de uso. \\ ==== [SB0002] - Inserir Movimento do Arrecadador ==== O sistema insere os dados dos registros códigos **00** e **04** na tabela ARRECADACAO.ARRECADADOR_MOVIMENTO com os seguintes valores: | ARMV_ID | Id do movimento gerado pelo sistema | | ARMV_DTGERACAO | Data corrente | | ARMV_NNNSA | Sequencia do movimento (Campo A08) | | ARMV_CDCONVENIO | Campo A02 | | ARMV_NMEMPRESA | Campo A07 | | ARMV_CDBANCO | Código agente do arrecadador (ARRC_CDAGENTE da tabela ARRECADACAO. ARRECADADOR com ARRC_ID = ARRC_ID selecionado/informado) | | ARMV_NNVERSAOLAYOUT | 1 | |@yellow: ARMV_CDREMESSA |@yellow: 1 | | ARMV_NMBANCO | CLIE_NMCLIENTE da tabela CADASTRO.CLIENTE com CLIE_ID = CLIE_ID da tabela ARRECADACAO.ARRECADADOR com ARRC_ID = ARRC_ID selecionado/informado | | ARMV_DSIDENTIFICACAOSERVICO | Campo A05 | |@yellow: ARMV_NNREGISTROSMOVIMENTO |@yellow: Campo Z11 Número total de registros, não inclui header e trailler | |@yellow: ARMV_VLTOTALMOVIMENTO |@yellow: Somatório dos valores contidos nos campos D05 - Valor bruto dos registros tipo 05 | | ARMV_TMULTIMAALTERACAO | Data e hora correntes | \\ ==== [SB0003] - Inserir o item de movimento do arrecadador ==== - Insere o item de movimento do arrecadador na tabela ARRECADACAO.ARRECADADOR_MOVIMENTO_ITEM com os seguintes valores: | AMIT_ID | Id do item de movimento do arrecadador, gerado pelo sistema. | | RGCD_ID | RGCD_ID da tabela ARRECADACAO.REGISTRO_CODIGO com RGCD_CDREGISTROCODIGO igual ao código do registro | | AMIT_CNREGISTRO | Conteúdo do movimento com 200 posições | | ARMV_ID | Id do movimento | | AMIT_DSOCORRENCIA | Descrição da Ocorrência do Movimento | | AMIT_ICACEITACAO | Indicador de Aceitação do Registro do Movimento | | AMIT_TMULTIMAALTERACAO | Data e hora correntes | | IMOV_ID | Nulo | * 1.1. **Caso** a descrição da ocorrência do movimento seja igual a //Número do cartão de débito não localizado//, \\ **[SB0006 - Inserir o movimento do cartão rejeitado]**. \\ ==== [SB0004] - Distribuir Dados do Registro de Movimento de Cartão. ==== - O sistema distribui os dados do conteúdo do registro 05 do movimento do arrecadador: | **Coluna** | **Tam.** | **Tipo** | **Descrição do campo** | | D01 | 2 | Num. | Tipo de registro | | D02 | 9 | Num. | N.º de filiação do Ponto de Venda | | D03 | 9 | Num. | N.º do Resumo de Vendas | | D04 | 8 | Num. | Data do CV (DDMMAAAA) | | D05 | 15 | 9(13)V99 | Valor bruto (para o Compre e Saque, este campo será composto pelo //Valor da Compra// + //Valor do Saque//) | | D06 | 15 | 9(13)V99 | Valor desconto | | D07 | 15 | 9(13)V99 | Valor líquido | | D08 | 19 | Alfa | Número do cartão | | D09 | 1 | Alfa | Tipo de transação | | D10 | 12 | Num. | Número do CV | | D11 | 8 | Num. | Data do crédito | | D12 | 2 | Num. | Status da transação (01 -- acatada) | | D13 | 6 | Num. | Hora da transação (HHMMSS) | | D14 | 8 | Alfa | Número do terminal | | D15 | 2 | Num. | Tipo de captura | | D16 | 5 | Num. | Reservado | | D17 | 15 | 9(13)V99 | Valor da compra (para o Compre e Saque) | | D18 | 15 | 9(13)V99 | Valor do saque (para o Compre e Saque) | | D19 | 1 | Alfa | Bandeira | | D20 | 7 | Num. | Código da autorização | * 2. O sistema verifica se o registro informado é válido para o movimento corrente. * 2.1. **Caso** o número do cartão não esteja informado (Campo D(08) com valor igual a zeros ou espaços), o sistema deverá desprezar o registro atribuindo à descrição da ocorrência a informação: (//Número do cartão não informado//). * //2.2.// **Caso** a data da transação de cartão de crédito não seja válida para o sistema de arrecadação atual (Campo D(04) menor que constante de data de implantação do sistema GSAN (PARM_DTIMPLANTACAOSISTEM da tabela CADASTRO.SISTEMA_PARAMETROS)), o sistema não deverá registrar o registro e atribuir à descrição da ocorrência a informação: (//Transação efetuada no sistema anterior//). * //2.3.// **Caso** o status da transação seja diferente de acatada (Campo D(12) com valor diferente 01), o sistema deverá desprezar o registro e atribuir à descrição da ocorrência o valor do conteúdo do campo. * 2.4. **Caso Contrário,** o sistema deverá validar as informações do registro no cartão de débito. * 2.4.1. O sistema deverá comparar o campo com a numeração do cartão de débito (Campo D(08)), após a criptografia do mesmo, com o valor do cartão informado na confirmação do pagamento por cartão de débito (a partir da tabela ARRECADACAO.PAGAMENTO_CARTAO_DEBITO onde PACC_NNNUMEROCARTAOCREDITO = numeração do cartão de débito, PACD_ICCONFIRMADOOPERADORA = 2 , PACD_VLPAGAMENTOS >= (Valor informado pela operadora (Campo D(05)) -- 0,03)) e PACD_VLPAGAMENTOS <= (Valor informado pela operadora (Campo D(05)) + 0,03)). * 2.4.2. **Caso** o número tenha sido encontrado, o sistema deverá atualizar a confirmação do recebimento da operadora de cartão de débito (ARRECADACAO.PAGAMENTO_CARTAO_DEBITO): | PACD_ID | Id do cartão confirmado | | PACD_ICCONFIRMADOOPERADORA | Indicador de Confirmação (atualizar com valor 1 (Sim)). | | PACD_DTCONFIRMADOOPERADORA | Data da Confirmação (Campo D(04)) | | PACD_VLCONFIRMADOOPERADORA | Valor informado pela operadora (Campo D(05)) | | PACD_TMULTIMAALTERACAO | Data e Hora correntes | * * * 2.4.3. **Caso Contrário**, o número não tenha sido encontrado e atribuir à descrição da ocorrência a informação:"Número do cartão de débito não localizado" e não aceitar o registro. * 2.5. Atribuir a Descrição da Ocorrência do Movimento à Descrição da Ocorrência do Movimento deste caso de uso; * 2.6. Atribuir o Indicador de Aceitação do Registro do Movimento ao Indicador de Aceitação do Registro do Movimento deste caso de uso; * 2.7. O sistema insere o item de movimento do arrecadador \\ **[SB0003 - Inserir o item de movimento do arrecadador]**. * 2.8. O sistema deverá atualizar as informações de recebimento no aviso bancário correspondente \\ **[SB0005 - Processar Pagamento Cartão de Débito]**. \\ ==== [SB0005] - Processar Pagamento Cartão de Débito ==== - Atribuir //Cartão de Débito// à Descrição da Ocorrência do Movimento deste caso de uso; - Atribuir //Sim// ao Indicador de Aceitação do Registro do Movimento; - **Caso** o Indicador de Aceitação do Registro do Movimento corresponda a 1 (SIM), o sistema: - Seleciona o aviso bancário e atualiza o valor da arrecadação e valor realizado conforme descrito abaixo: (a partir da tabela ARRECADACAO.AVISO_BANCARIO onde AVBC_DTLANCAMENTO = Campo D11 (Data do crédito), ARFM_ID que tenha o ARFM_CDARRECADACAOFORMA= //Cartão de Débito//, (AVBC_DTPREVISTA = Campo D11 (Data do crédito) ou AVBC_DTREALIZADA = Campo D11 (Data do crédito)) , (AVBC_VLARRECADACAOCALCULADO com o valor zero ou com ARMV_ID com o id do movimento que está sendo processado) e ARRC_ID = ARRC_ID da tabela ARRECADACAO.ARRECADADOR onde ARRC_CDAGENTE = código agente do arrecadador inserido. | AVBC_VLARRECADACAOINFORMADO | Adiciona o valor bruto do pagamento | | AVBC_VLREALIZADO | Adiciona o valor bruto do pagamento | \\ ==== [SB0006] - Inserir o movimento do cartão rejeitado ==== O sistema insere o movimento do cartão rejeitado na tabela ARRECADACAO.MOVIMENTO_CARTAO_REJEITA com os seguintes valores: | MCRE_ID | Id gerado pelo sistema | | MCRE_NNCARTAO | Numero do cartão | | MCRE_DTCOMPRA | Data em que o cliente realizou a compra | | MCRE_VLVENDA | Valor da venda | | MCRE_NNPARCELA | 1 | | MCRE_NNPARCELADEBITO | 1 | | AMIT_ID | Id do item do movimento do arrecadador | | MCRE_TMULTIMAALTERACAO | Data e hora correntes | \\ ==== [SB0007] - Inserir sequencia do cartão ==== O sistema insere a sequência do cartão na tabela ARRECADACAO.SEQUENCIA_CARTAO com os seguintes valores: | SEQU_ID | Id gerado pelo sistema | | SEQU_NNNSA | Sequencia do movimento (Campo A08) | | ARRC_ID | Arrecadador | | SEQU_TMULTIMAALRERACAO | Data e hora correntes | |@yellow: SEQU_CDOPCAOEXTRATO |@yellow: 1 | | ARFM_ID | Id correspondente a //Cartão de Débito// | \\ ===== Fluxo Secundário: ===== ==== [FS0001] - Verificar a existência do registro 04 ==== **Caso** até o final do arquivo não seja encontrado o registro código **04** ou, antes do fim do arquivo seja encontrado outro registro código **00** exibir a mensagem: //Arquivo de Movimento Não Possui o registro código **04** (Total do Arquivo)// e encerrar o caso de uso. \\ ==== [FS0002] - Verificar sucesso da transação ==== * **Caso** o código de retorno da operação efetuada no banco de dados seja diferente de zero, exibir a mensagem conforme o código de retorno e encerrar o caso de uso. \\ ===== Referências ===== **Registrar Movimento Cartão de Débito EEVD** ==== Termos Principais ==== **[[=ajuda:arrecadacao|Arrecadação]]** **[[postgres:arrecadacao|<