====== [UC1691] Confirmar Pagamento Cartão de Crédito ======
**Projeto: GSAN **
===== Histórico de Revisões =====
^ **Data** ^ **Autor** ^ **Descrição** ^ **Proposta** ^
| 22/09/2015 | Denys Tavares | Criação do artefato. | |
| @lightgreen:02/10/2015 | Denys Tavares | Verificar existencia do aviso bancário para o arrecadador e data informada. | |
\\
===== Introdução =====
Este documento especifica os casos de uso e requisitos não-funcionais (RNFs) do projeto intitulado //GSAN - Sistema Integrado de Gestão de Serviços de Saneamento - 8.1.1.4RD//, referente à etapa de especificação do Projeto de Software (//Software Design//) do GSDP - Processo de Desenvolvimento da Fábrica de Software da Consenso. O objetivo do documento é fornecer aos desenvolvedores e Stakeholders as informações necessárias para o projeto e implementação, assim como para a realização dos testes e homologação da aplicação.
\\
===== Convenções, termos e abreviações utilizados nesse artefato =====
A correta interpretação deste documento exige o conhecimento de algumas convenções, termos específicos e abreviações, que são descritos a seguir:
a) Stakeholders - termo usado em diversas áreas como administração e arquitetura de software referente às partes interessadas que devem estar de acordo com as práticas de governança corporativa executadas pela empresa.
b) RNF (Requisitos Não Funcionais) - são os requisitos relacionados ao uso da aplicação em termos de desempenho, usabilidade, confiabilidade, segurança, disponibilidade, manutenibilidade e tecnologias envolvidas. Em geral, requisitos não-funcionais podem constituir restrições aos requisitos funcionais e não é preciso o cliente dizer sobre eles, pois eles são características mínimas de um software de qualidade, ficando a cargo do desenvolvedor optar por atender esses requisitos ou não.
c) Logado - Usuário deve ter informado suas credenciais (login e senha) para entrar no sistema GSAN de forma que o mesmo possa identificá-lo.
d) Radio Button - É um elemento de seleção de única escolha. De uma lista só é possível selecionar um item.
\\
===== Atores =====
A tabela abaixo descreve brevemente cada ator da aplicação.
| Ator | Descrição |
| Usuário da Divisão de Arrecadação (complexo [[casos_de_uso:atores|(1)]]). | Usuários com acesso ao módulo Arrecadação do GSAN.|
\\
===== Casos de Uso =====
Essa seção apresenta todos os requisitos funcionais da aplicação, especificados como casos de uso.
==== Diagrama de Caso de Uso ====
skinparam usecase {
BackgroundColor<< Main >> YellowGreen
}
([UC1691] Confirmar Pagamento \nCartão de Crédito) << Main >>
([UC1691] Confirmar Pagamento \nCartão de Crédito) -up- ([UC0107] Registrar Transação)
Usuário - ([UC1691] Confirmar Pagamento \nCartão de Crédito)
| **Prioridade:** |X| Essencial | | Importante | | Desejável |
| **Ator(es):** | Usuário da Divisão de Arrecadação (complexo [[casos_de_uso:atores|(1)]]). ||||||
\\ **Descrição:** Funcionalidade que permite gerar pagamentos recebidos através de cartão de crédito.
\\ **Pré-condições:** O usuário deverá estar logado e deverá acessar a funcionalidade //GSAN> Arrecadacao> Pagamento> Confirmar Pagamento Cartão de Crédito//.
\\ **Pós-condições:** Aviso Bancário e pagamentos incluídos na base de dados do GSAN.
\\ **Complexidade:** Médio [[casos_de_uso:regraapuc|(1)]].
\\ **Casos de uso relacionados:**
\\
===== Fluxo Principal: =====
- O usuário seleciona a opção Confirmar pagamento de cartão de crédito.
- Informa a **Data do Vencimento** no formato DD/MM/AAAA (**obrigatório**) **[FS0001 - Validar Data do Vencimento]**
- Seleciona o Arrecadador (**obrigatório**):
- O sistema apresenta uma lista dos clientes arrecadadores para cartão de crédito (CLIE_NMCLIENTE da tabela CLIENTE para CLIE_ID=CLIE_ID da tabela ARRECADADOR com ARRC_ID=ARRC_ID da tabela ARRECADADOR_CONTRATO com ARCT_ID=ARCT_ID da tabela ARRECADADOR_CONTRATO_TAR para ARFM_ID correspondente a CARTÃO DE CRÉDITO).
- Informa o Valor do Crédito **(obrigatório);**
- Caso o usuário tecle no botão **Selecionar**:
- Verificar existencia do aviso bancário **[IT0001 – Verificar existência de aviso bancário]**:
- **Caso** o aviso já exista:
- exibe dados do aviso:
- Data do lançamento (AVBC_DTLANCAMENTO);
- Valor informado (AVBC_VLARRECADACAOINFORMADO);
- Valor calculado (AVBC_VLARRECADACAOCALCULADO);
- Quantidade de guias pagas **[IT0002 – Obter quantidade de guias pagas]**;
- O sistema deverá exibir mensagem: //Já existe aviso bancário para este Arrecadador/Data// e volta para o passo 1 do fluxo principal.
- **Caso contrário** o sistema exibe uma lista das guias de pagamento do cliente arrecadador **[IT0003 – Obter guias de pagamento pendentes]**, **[FS0002 - Verificar existência de guias de pagamento]** com os seguintes dados:
- NSU (PACC_NNIDENTIFICADORTRANSACAO da tabela COBRANCA_PARCEL_PAGTO_CARTAO_CRED para PARC_ID = PARC_ID da tabela GUIA_PAGAMENTO);
- Data Parcelamento no formato DD/MM/AAAA (PARC_TMPARCELAMENTO da tabela COBRANCA_PARCELAMENTO para PARC_ID = PARC_ID da tabela GUIA_PAGAMENTO);
- Valor do Débito (GPAG_VLDEBITO);
- O sistema exibe também:
- O **percentual de tarifa** cobrado pelo cliente arrecadador (ACTF_PCTARIFA da tabela ARRECADADOR_CONTRATO_TAR),caso exista;
- O **valor da tarifa** cobrado pelo serviço (percentual da tarifa sobre o valor total das guias),caso exista;
- O **valor total das guias**;
- e a **diferença (**valor de crédito informado - (valor total das guias - valor da tarifa)**)**, caso exista.
- **Caso contrário**, retorna ao passo inicial.
- **Caso** o usuário clique no botão **Inserir pagamentos**:
- **Caso** o valor total das guias seja diferente do valor de crédito informado o sistema deverá exibir mensagem solicitando confirmação: //Valor total das guias é diferente do valor informado. Confirma Inclusão?//
- **Caso contrário,** solicita apenas confirmação: //Confirma Inclusão?//
- **Caso** o usuário confirme:
- **[SB0001 - Incluir Aviso Bancário], FS0003 - Verificar sucesso da transação];**
- **Caso** o valor da tarifa seja diferente de zero, **[SB0003 - Incluir Devolução], [FS0003 - Verificar sucesso da transação];**
- Para cada guia de pagamento da lista o sistema inclui um pagamento correspondente.**[SB0002 - Incluir Pagamentos], [FS0003 - Verificar sucesso da transação].**
- Registra a transação de confirmação de pagamento de cartão de crédito: \\ **<> [[postgres:geral:inclui:uc0107|[UC0107 – Registrar Transação]]]**.
\\
===== Subfluxos: =====
==== [SB0001] - Incluir Aviso Bancário ====
- **Inclui** o aviso bancário na tabela AVISO_BANCARIO com os seguintes valores:
| AVBC_ID | Id gerado pelo sistema |
| AVBC_DTLANCAMENTO | Data de vencimento informada |
| AVBC_NNSEQUENCIAL | 1 |
| AVBC_DTPREVISTA | Data de vencimento informada |
| AVBC_DTREALIZADA | Data de vencimento informada |
| AVBC_VLREALIZADO | Valor do Crédito informado |
| AVBC_VLARRECADACAOINFORMADO | Valor do Crédito informado |
| AVBC_VLDEVOLUCAOINFORMADO | Zero |
| AVBC_VLARRECADACAOCALCULADO | Valor total das guias |
| AVBC_VLDEVOLUCAOCALCULADO | (valor total das guias) - (valor da tarifa) |
| AVBC_VLCONTABILIZADO | Zero |
| AVBC_AMREFERENCIAARRECADACAO | Maior ano/mês entre o ano/mês da data de lançamento (AVBC_DTLANCAMENTO) e o ano/mês da arrecadação (PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS) |
| AVBC_ICCREDITODEBITO | 1 |
| AVBC_NNDOCUMENTO | Zero |
| ARRC_ID | ARRC_ID do cliente arrecadador selecionado |
| CTBC_ID | CTBC_IDDEPOSITOARRECADACAO DA TABELA ARRECADADOR_CONTRATO PARA O ARRECADADOR INFORMADO E CONVENIO INFORMADO |
| ARMV_ID | Nulo |
| AVBC _TMULTIMAALTERACAO | CURRENT TIMESTAMP |
| ARFM_ID | ARFM_ID da tabela ARRECADACAO_FORMA para ARFM_ID correspondente a CARTÃO DE CRÉDITO. |
\\
==== [SB0002] - Incluir pagamentos ====
| PGMT_ID | Id do pagamento gerado pelo sistema. |
| PGMT_AMREFERENCIAPAGAMENTO | Nulo. |
| PGMT_AMREFERENCIAARRECADACAO | **Caso** o ano/mês da data do pagamento seja maior que a PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS atribuir ano/mês da data do pagamento, **caso contrário** atribuir o PARM_AMREFERENCIAARRECADACAO. |
| PGMT_VLPAGAMENTO | GPAG_VLDEBITO |
| PGMT_DTPAGAMENTO | GPAG_DTVENCIMENTO |
| PGST_IDATUAL | Nulo. |
| PGST_IDANTERIOR | Nulo. |
| DBTP_ID | DBTP_ID da guia de pagamento |
| CNTA_ID | Nulo. |
| GPAG_ID | GPAG_ID |
| DBAC_ID | Nulo. |
| LOCA_ID | LOCA_ID da guia de pagamento |
| DOTP_ID | Valor correspondente a GUIA DE PAGAMENTO da tabela DOCUMENTO_TIPO. |
| AVBC_ID | AVBC_ID do Aviso Bancário incluído |
| IMOV_ID | Nulo. |
| AMIT_ID | Nulo. |
| ARFM_ID | ARFM_ID do Aviso Bancário incluído |
| PGMT_TMULTIMAALTERACAO | CURRENT TIMESTAMP |
| CLIE_ID | CLIE_ID do cliente arrecadador |
| PGMT_VLEXCEDENTE | Nulo. |
| PGMT_ICEXPURGADO | Nulo. |
| FATU_ID | Nulo. |
| CBDO_ID | Nulo. |
| DOTP_IDAGREGADOR | Valor correspondente a GUIA DE PAGAMENTO da tabela DOCUMENTO_TIPO. |
| PGMT_TMPROCESSAMENTO | CURRENT TIMESTAMP |
| PACD_ID | Nulo. |
| PGMT_IDANTERIOR | Nulo. |
\\
==== [SB0003] - Incluir Devolução ====
- Inclui a guia de devolução referente ao **valor da tarifa,** na tabela GUIA_DEVOLUCAO com os seguintes valores:
| GDEV_ID | Id da Guia de Devolução gerado pelo sistema |
| LOCA_ID | LOCA_ID da guia de pagamento |
| IMOV_ID | Nulo. |
| CLIE_ID | ID do Cliente Arrecadador |
| GDEV_AMREFERENCIACONTABIL | PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS |
| GDEV_AMREFERENCIAGUIADEVOLUCAO | Nulo |
| GDEV_DTEMISSAO | Data corrente |
| GDEV_DTVALIDADE | Data corrente |
| GDEV_VLDEVOLUCAO | Valor da tarifa |
| RGAT_ID | Nulo |
| ORSE_ID | Nulo |
| LICT_ID | LICT_ID da tabela CREDITO_TIPO com CRTP_ID com o valor correspondente a descontos concedidos |
| DCST_IDATUAL | DCST_ID da tabela DEBITO_CREDITO_SITUACAO com o valor correspondente a Normal. |
| DCST_IDANTERIOR | Nulo. |
| CRTI_ID | CRTI_ID com o valor correspondente a descontos concedidos na tabela CREDITO_TIPO. |
| DOTP_ID | Com o valor correspondente a **devolução de valor** da tabela DOCUMENTO_TIPO. |
| CNTA_ID | Nulo |
| GPAG_ID | Nulo |
| DBAC_ID | Nulo |
| DBTP_ID | Id do tipo de débito da tabela DEBITO_TIPO com o valor correspondente a outros |
| GDEV_TMULTIMAALTERACAO | Data e hora correntes. |
| FUNC_IDANALISTA | Nulo |
| FUNC_IDAUTORIZADOR | Nulo |
| USUR_ID | Id do usuário da sessão |
* 2. O sistema inclui na tabela DEVOLUCAO a devolução referente à guia de devolução gerada com os seguintes valores:
| DEVL_ID | Id da devolução gerado pelo sistema. |
| DEVL_AMREFERENCIADEVOLUCAO | Nulo |
| DEVL_AMREFERENCIAARRECADACAO | **Caso** o ano/mês da data da devolução seja maior que a PARM_AMREFERENCIAARRECADACAO da tabela SISTEMA_PARAMETROS atribuir ano/mês da data da devolução, **caso contrário** atribuir o PARM_AMREFERENCIAARRECADACAO. |
| DEVL_VLDEVOLUCAO | Valor da Tarifa |
| DEVL_DTDEVOLUCAO | Data do Vencimento informada |
| DVST_IDATUAL | Nulo |
| DVST_IDANTERIOR | Nulo |
| AVBC_ID | ID do Aviso Bancário gerado |
| GDEV_ID | Id da Guia de Devolução gerada |
| LOCA_ID | LOCA_ID da guia de pagamento |
| IMOV_ID | Nulo |
| CLIE_ID | ID do Cliente Arrecadador |
| DBTP_ID | Id do tipo de débito da tabela DEBITO_TIPO com o valor correspondente a outros |
| DEVL_TMULTIMAALTERACAO | Data e hora correntes |
| CRAR_ID | Nulo |
| CBDO_ID | Nulo |
| DOTP_IDAGREGADOR | Nulo |
| PGMT_TMPROCESSAMENTO | Data e hora correntes |
\\
===== Fluxo Secundário: =====
==== [FS0001] - Validar data do vencimento ====
- **Caso** a data do vencimento esteja inválida, exibir a mensagem: //Data do Vencimento inválida// e retornar para o passo correspondente no fluxo principal.
- **Caso** a data do vencimento seja posterior à data corrente, exibir mensagem: //Data do Vencimento posterior à data corrente <>// e retornar para o passo correspondente no fluxo principal.
\\
==== [FS0002] - Verificar existência de guia de pagamento ====
**Caso** não exista nenhuma guia de pagamento para o filtro informado, exibir a mensagem: //O arrecadador <> não possui nenhuma guia de pagamento pendente para o filtro informado//, e retornar para o passo correspondente no fluxo principal.
\\
==== [FS0003] - 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.
\\
==== [FS0004] – Verificar existência de aviso bancário ====
Verificar se existe AVISO_BANCARIO com **ARRC_ID =** (ARRC_ID da tabela ARRECADADOR_CONTRATO com ARCT_ID=ARCT_ID da tabela ARRECADADOR_CONTRATO_TAR para ARFM_ID correspondente a CARTÃO DE CRÉDITO) e **AVBC_DTLANCAMENTO** = data do vencimento informada e **ARFM_ID** da tabela ARRECADACAO_FORMA para ARFM_ID correspondente a CARTÃO DE CRÉDITO).
\\
===== Informações técnicas adicionais =====
==== [IT0001] – Verificar existência de aviso bancário ====
Verificar se existe AVISO_BANCARIO com **ARRC_ID =** (ARRC_ID da tabela ARRECADADOR_CONTRATO com ARCT_ID=ARCT_ID da tabela ARRECADADOR_CONTRATO_TAR para ARFM_ID correspondente a CARTÃO DE CRÉDITO) e **AVBC_DTLANCAMENTO** = data do vencimento informada e **ARFM_ID** da tabela ARRECADACAO_FORMA para ARFM_ID correspondente a CARTÃO DE CRÉDITO).
\\
==== [IT0002] – Obter quantidade de guias pagas ====
A partir da tabela GUIA_PAGAMENTO_GERAL, caso a guia esteja na tabela GUIA_PAGAMENTO ou GUIA_PAGAMENTO_HISTORICO, com CLIE_ID=CLIE_ID do cliente selecionado e DCST_IDATUAL com o valor correspondente a //normal// da tabela DEBITO_CREDITO_SITUACAO, GPAG_DTVENCIMENTO = data de vencimento informada, GPAG_ID = GPAG_ID da tabela COBRANCA.PAG_CARTAO_CRED_ITEM) e exista pagamento (Na tabela PAGAMENTO ou PGAMENTO_HISTORICO)
\\
==== [IT0003] – Obter guias de pagamento pendentes ====
A partir da tabela GUIA_PAGAMENTO com CLIE_ID=CLIE_ID do cliente selecionado e DCST_IDATUAL com o valor correspondente a normal da tabela DEBITO_CREDITO_SITUACAO e GPAG_DTVENCIMENTO = data de vencimento informada e GPAG_ID = GPAG_ID da tabela COBRANCA.PAG_CARTAO_CRED_ITEM) sem pagamento ( GPAG_ID não existA na tabela PAGAMENTO)
\\
===== Tabelas relacionadas =====
ARRECADACAO.ARRECADADOR \\
ARRECADACAO.ARRECADADOR_CONTRATO \\
ARRECADACAO.ARRECADADOR_CONTRATO_TAR \\
ARRECADACAO.AVISO_BANCARIO \\
ARRECADACAO.PAGAMENTO \\
ARRECADACAO.PAGAMENTO_HISTORICO \\
ARRECADACAO.DEVOLUCAO \\
ARRECADACAO.GUIA_DEVOLUCAO \\
FATURAMENTO.GUIA_PAGAMENTO\\
CADASTRO.CLIENTE\\
COBRANCA.PAG_CARTAO_CRED_ITEM\\
\\
===== Referências =====
Nesta seção, são apresentadas as referências utilizadas para a elaboração deste documento.
**[[=ajuda:arrecadacao:confirmar_pagamento_cartao_de_credito|Confirmar Pagamento Cartão de Crédito]]**
==== Termos Principais ====
**[[=ajuda:arrecadacao|Arrecadação]]**
**[[postgres:arrecadacao|<