# MelFitness :: Mundipagg ## Documentação de integração ### Infraestrutura ----------------- #### Banco de dados **Tabela:** *cad_cliente* > <font color=purple> Esta tabela já existia no sistema, portanto será informado somente campos novos.</font> > Campo|Tipo|Especificação| Obs -----|----|------------- | ----- id_api | varchar(100)| | Campo de referência para o cadastro do cliente na API. **Tabela:** *cad_cliente_cartao* <font color="red">Para proteger os dados do cartão no banco de dados foi desenvolvido uma dll para criptografa e descriptografar os dados na tabela. **Para teste e homologação essa dll ainda será utilizada.**</font> Campo|Tipo|Especificação | Obs -----|----|------------- | ----- id | smallint | NOT NULL | PK cod_cli | smallint | NOT NULL | FK com cad_cliente -> cod_cli numero_cartao |varchar(250) | NOT NULL | *Criptografar* bandeira | varchar(250) | NOT NULL | *Criptografar* nome_cartao | varchar(250) | NOT NULL | *Criptografar* cpf | varchar(11) | NOT NULL | *Criptografar* cvc | varchar(3) | NOT NULL | *Criptografar* val_mes | smallint | NOT NULL | *Criptografar* val_ano | smallint | NOT NULL | *Criptografar* status | char(1) | NOT NULL | id_api | varchar(100)| | Campo de referência para o cadastro do cartão na API. **Tabela:** *rec_assinatura* Campo|Tipo|Especificação | Obs -----|----|------------- | --- id | int | NOT NULL | PK dt_inicio | date | NOT NULL | Data de início da assinatura. intervalo | varchar(250) | NOT NULL | Tipo de intervalo para cobrança da assinatura. 'day', 'week', 'month', 'year' intervalo_quantidade | smallint | NOT NULL | Número de intervalos para cobrança. Ex: 1 na assinatura do tipo month = assinatura mensal; 3 na assinatura do tipo month = assinatura trimestral. Mesma lógica para os outros tipo EXCETO day. dia_cobrança | smallint | NOT NULL | Dia de vencimento da fatura quant_parcelas | smallint | NOT NULL | Aplicada a cobrança da fatura ciclo | int | NOT NULL | Se 1, então a API se encarrega de gerar os ciclos de fatura automaticamente *Assinatura vitalícia* até o pedido de cancelamento do cliente. Se for maior que um a assinatura tem ciclio de término e o controle passa a ser manual texto_fatura | varchar(250) | NULL | Texto opcional que será mostrado na fatura valor_mínimo | currency | NOT NULL | Valor mínimo da assinatura status | char(1) | NOT NULL | 'A' = ativa / 'C' - cancelada. *O C de cancelada é preenchida pelo retorno da API* id_api | varchar(100)| | Campo de referência para o cadastro da assinatura na API. id_cliente | smallint | NOT NULL | FK com cad_clientes -> cod_cli id_cartao | smallint | NOT NULL | FK com cad_clientes_cartao -> id **Tabela:** *rec_assinatura_item* Campo|Tipo|Especificação | Obs -----|----|------------- | ----- id | int | NOT NULL | PK dt_inicio | date | NOT NULL | Data de início da assinatura. descricao | varchar(250) | NOT NULL | Nome da atividade: 'natação', 'musculação', ... quant | smallint | NOT NULL | Quantidade de unidades da atividade na assinatura ciclos | smallint | NOT NULL | Ciclos de cobrança. Ex: Um ciclo representa que um item será cobrado apenas uma vez. Caso não seja informado, o item será cobrado até que seja desativado. status | char(1) | NOT NULL | 'A' = ativa / 'I' - cancelada. *O **I** de inativa é preenchida pelo retorno da API quando essa atividade é solicitada para ser **excluída** da assinatura* valor | numeric(10,2) | NOT NULL | Valor efetivo da atividade que será cobrada ao cliente id_api | varchar(100)| | Campo de referência para o cadastro do item de assinatura na API. id_assinatura | int | NOT NULL | FK com rec_assinatura -> id **Tabela:** *rec_fatura* Campo|Tipo|Especificação | Obs -----|----|------------- | ----- id | int | NOT NULL | PK url | varchar(250) | NOT NULL | url para acesso direto via browser forma_pagamento | varchar(250) | NOT NULL | tipo de forma de pagamento quant_parcelas | smallint | NOT NULL | valor | currency | NOT NULL | Valor cobrado na fatura dt_cobranca | datetime | NOT NULL | Preenchimento automático pala API. dt_vencimento | datetime | NOT NULL | Preenchimento automático pala API. dt_criacao | date | NOT NULL | Preenchimento automático pala API. dt_cancelamento | datetime | NOT NULL | Preenchido pela API no retorno do evento de cancelamento ( tabela util_eventos_mundipagg) dia_cobrança | smallint | NOT NULL | Dia de vencimento da fatura total_descontos | currency | NOT NULL | Inativo. Preenchido automaticamente total_acrescimos | currency | NOT NULL | Inativo. Preenchido automaticamente id_api | varchar(100)| | Campo de referência para o cadastro da fatura na API. cod_cli | smallint | NOT NULL | FK com cad_clientes -> cod_cli id_assinatura | smallint | NOT NULL | FK com rec_assintura -> id status | varchar(50) | NULL | Recebe o status do jeito que está na API. Caso queira mostrar diferente ao cliente, deve converter para apresentação. Valores possíveis: pending, paid, canceled, scheduled ou failed. **Tabela:** *util_eventos_mundipagg* Campo|Tipo|Especificação | Obs -----|----|------------- | ----- id_guid | varchar(60) | NOT NULL | Utilizaçãon interna e de preenchimento automático. Para fins de controlle dt_evento | datetime | NOT NULL | dia e hora que foi registrado o evento | NOT NULL | Default Date() processado | char(1) | NOT NULL | 'N' = não processado,'P' = processado pelo sincronizador,'E' = Ocorreu algum erro, verifique o log sigla | varchar(8) | NOT NULL | <font color='red'>Veja mapa de siglas em fluxo de operações</font> id_tabela | varchar(8) | NOT NULL | <font color='red'>Código de referência da tabela assiciado ao evento</font> codaux_1 | varchar(30) | NULL | Codigo auxiliar para referenciar mais de um registro em tabelas associadas.<p> <font color='red'>Veja parametros nas operações</font> codaux_2 | varchar(30) | NULL | Codigo auxiliar para referenciar mais de um registro em tabelas associadas.<p> <font color='red'>Veja parametros nas operações</font> **Script de criação da tabela** ```sql SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[util_eventos_mundipagg]( [dt_evento] [datetime] NOT NULL, [processado] [char](1) NOT NULL, [sigla] [varchar](8) NOT NULL, [id_tabela] [varchar](30) NOT NULL, [codaux_1] [varchar](30) NULL, [codaux_2] [varchar](30) NULL, [id_guid] [varchar](60) NOT NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[util_eventos_mundipagg] ADD DEFAULT (newid()) FOR [id_guid] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [dbo].[SYNC_MUNDIPAG] ON [dbo].[util_eventos_mundipagg] AFTER INSERT AS BEGIN DECLARE @Text AS VARCHAR(100) DECLARE @Cmd AS VARCHAR(100) SET @Text = 'sync' SET @Cmd = 'echo ' + @Text + ' > F:\Projetos Freela\MelFitnessAssinaturas\MelFitnessAssinaturas\bin\Debug\_sync.gat' EXECUTE Master.dbo.xp_CmdShell @Cmd END GO ALTER TABLE [dbo].[util_eventos_mundipagg] ENABLE TRIGGER [SYNC_MUNDIPAG] GO ``` **Tabela:** *rec_log_sync* > Tabela de log com todos os erros e operações realizadas pelos sincronizador. Pode ser visível pelo aplicativo. Campo|Tipo|Especificação | Obs -----|----|------------- | ---- dt_evento | datetime | NOT NULL | tipo | varchar(2) | NOT NULL | descricao | varchar(255) | NOT NULL | cliente | varchar(255) | NOT NULL | Nome do cliente que se trata o evento id_api | varchar(100)| | Campo de referência na API. valor | currency | NOT NULL | Valor monetário do registro logado. **Tabela:** *cad_funcionario* > Campo adicional utilizado para armazendar uma senha de acesso ao aplicativo de integração Campo|Tipo|Especificação | Obs -----|----|------------- | ---- senha_api | varchar(50) | | #### Fluxo de funcionamento O aplicativo funcionará em modo de background em dois tipos: 1. **Tarefas agendadas** - em um período determindado operações podem ser executadas. <font color='blue'>Atualmente essa opção está desativada, caso veja necessidade no processo podemos ativá-la.</font> 2. **"Escutando" a tabela de eventos** ( util_eventos_mundipagg ) - Toda vez que um novo registro for **inserido** nesta tabela o sincronizador irá fazer uma consulta na tabela de eventos a procura de eventos a processar e executará sequencialmente do mais antigo ao mais recente. A tabela util_eventos_mundipagg funciona com um gatilho de ações<font color="blue">( através de uma trigger no banco de dados )</font>, para identificar que ação o sincronizador deverá executar. #### Mapa de Siglas na tabela de EVENTOS A_N - Nova assinatura ------- **Parâmetros:**(id_tabela: id > rec_assinatura) - Coleta as informações da assinatura, juntamente com as atividade, o cliente e cartão associado a ela - Envia para API, crinado uma assinatura avulsa A_ECT - Alterar o cartão vinculado à assinatura ------- **Parâmetros:**(id_tabela: id > rec_assinatura | codaux1: id > cad_cliente_cartão) > Quando o cliente solicitar a troca de cartão para corbança de uma assinatura vigente. - Busca do dados da assinatura, baseado no id_tabela - Busca os dados do novo cartão, de acordo com o parâmetro codaux1 - Envia a assintatura e os dados do novo cartão para API e a troca é realizada para a próxima fatura A_EDP - Alterar o dia de cobrança da assinatura ------- **Parâmetros:**(id_tabela: id > rec_assinatura) > Quando o cliente solicitar alterar a data do vencimento que a cobrança é realizada através do faturamento. - A data de cobrança na tabela rec_assinatrua ( campo: dia_cobranca ) já deve ter sido atualizada no banco de dados - Esse evento irá buscar os dados atualizados da assinatura - Evniará para API para atualizar na plataforma da mundipagg A_C - Cancelar assinatura ------- **Parâmetros:**(id_tabela: id > rec_assinatura) > <font color='red'>Importante: As assinaturas registradas na API, assim como os outros registro não são apagados. Tudo se baseia em assinatura e a forma de remover a referência é informando seu CANCELAMENTO.</font> - Pega as informações da assinatrua no banco de dados - Envia a solicitação a API para cancelamento - Retorna atualizando o status da assinatura para 'C' no banco de dados ( caso já não tenha sido feito) CLI_E - Cliente foi editado e deseja atualizar seus dado na assinatura ------- **Parâmetros:**(id_tabela: cod_cli > cad_cliente) > Na API somente os dados de email e telefone surtirão efeito nessa edição. - Busca o cliente no banco de dados - Envia os dados atualizados a API para atualização IA_N - Incluir um novo item em uma assinatura cadastrada ------- **Parâmetros:**(id: id > rec_assinatura_item) - Busca as informações do item no banco de dados - Verifica a qual assinatura ele está associado e busca os dados da assinatura **>>** *de acordo com o campo de relacionamento com a tabela rec_assinatura* - Inclui esse item na assinatura na API IA_E - Alterar uma informação no item já cadastrado em uma assinatura vigente ------- **Parâmetros:**(id: id > rec_assinatura_item) > Caso seja necessário alterar o valor ou quantidade do item na assinatura vigente - Busca as informações do item no banco de dados - Verifica a qual assinatura ele está associado e busca os dados da assinatura **>>** *de acordo com o campo de relacionamento com a tabela rec_assinatura* - Atualiza esse item na API IA_R - Remover um item de um assinatura ------- **Parâmetros:**(id: id > rec_assinatura_item) > Caso seja necessário remover o item da assinatura vigente - Busca as informações do item no banco de dados - Verifica a qual assinatura ele está associado e busca os dados da assinatura **>>** *de acordo com o campo de relacionamento com a tabela rec_assinatura* - Inativa o item no banco de dados e na API. F_AA - Atualizar os dados de todas faturas de uma assinatura ------- **Parâmetros:**(id: id > rec_assinatura) > A fatura é gerada pela API do mundipagg, sempre que for necessário atualizar/importar esses dados para que reflitam no banco de dados, esse evento deve ser acionado. - Busca informações da assinatura - Pega a lista de todas as faturas associadas a ela geradas na API - Atualiza essas informações no banco de dados para consulta do usuário F_C - Cancelar uma fatura emitida ------- **Parâmetros:**(id: id > rec_assinatura) - Busca iformações da assinatura - Cancela a fatura de cobrança na API