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