PIX - Pagamento Eletrônico
O PIX é um novo método para pagamentos criado pelo Banco Central. No ERP é disponibilizado um cadastro para as chaves PIX dos fornecedores. Essas chaves, então, podem ser selecionadas/sugeridas na inclusão de um título de pagamento.
Importante
Os leiautes padrões do sistema não estão preparados para a utilização do Pix, somente para a integração com a VAN Bancária, com leiautes padrões LPN. Caso possua leiautes customizados, será necessário fazer a sua adaptação.
Veja também:
Processo
- cadastro das chaves no fornecedor;
- lançamento e manutenção do título;
- preparação da remessa;
- leiautes para envio.
Chave PIX de Fornecedores (F095FCP)
Esta tela permite cadastrar as chaves PIX ligadas aos fornecedores. O cadastro não é obrigatório para utilizar o PIX, porém serve para sugestão da chave na geração de títulos do Contas a Pagar.
Observação
- ao gerar um título, é carregada a Chave PIX definida como padrão para o fornecedor do título.
- ao alterar o tipo da Chave PIX, é carregada a primeira chave do tipo selecionado para o fornecedor, se houver.
Campos:
- Código da empresa;
- Código da filial;
- Código do Fornecedor;
- Sequência de chave PIX;
- Tipo de Chave PIX (pagamento instantâneo);
- Chave PIX (pagamento instantâneo):
- 1 (Telefone): deve ser no formato internacional. Exemplo: +5547988888888;
- 2 (E-mail): deve ser um formato válido de e-mail. Exemplo: fornecedor@gmail.com;
- 3 (CNPJ/CPF): deve ser um CNPJ/CPF válido;
- 4 (Chave aleatória): deve ter 36 caracteres no seguinte formato: AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA.
- Chave Padrão.
Nota
O tipo de identificação de chave PIX por dados bancários não é cadastrado no campo Chave PIX. Basta possuir, no título, a informação do banco, agência e conta corrente.
Títulos
Nos títulos do Contas a Pagar (F510PPR, F510PRM, F501TCP e F501ATL) há os campos relacionados ao PIX:
- Tipo de Chave PIX;
- Chave PIX;
- Url PIX.
Observação
- O tamanho máximo da Url PIX é de 100 caracteres, contudo é necessário observar que esse tamanho pode variar para menos dependendo do leiaute bancário específico de cada banco.
- No caso de utilização de aplicativos bancários com a função "copiar e colar", não há limitação de caracteres. No entanto, ao cadastrar a Url PIX no sistema, é necessário decodificá-la conforme as regras estabelecidas pelo Banco Central, de modo a garantir que a Url PIX seja aceita pelo arquivo definido pelo banco destinatário do pagamento.
Os campos estão disponíveis também no identificador de regra CPA-501ATLCL01 e na regra disparada pelo campo Código Regra da tela F001TPA. Essa regra é executada pelo botão Processar da tela F501ATL antes das alterações serem efetivadas no banco de dados.
Utilização da chave PIX no ERP
Para isso, há dois tipos de pagamento (tela F510PRM, campo Tipo de Pagamento):
- PX - Pix Transferência: transferência bancária utilizando a chave PIX do fornecedor;
- PQ - Pix QR Code: meio de pagamento utilizando uma URL PIX.
Importante
Os tipos de pagamentos PX e PQ não podem estar em uma remessa com outros tipos de pagamento.
Para facilitar a identificação dos tipos de pagamento PX e PQ, que precisam ser enviados separadamente quando houver outros tipos de pagamento na tela, sugerimos que você use o campo Tipo Pgt. para ordenar os registros da grade.
Há a caixa de seleção Sugerir PIX p/ Banco/Agência/Conta nas telas F510SPP e F510SPR, acessadas por meio do botão Seleção das telas F510PPR e F510PRM. Quando marcada, onde são sugeridos os tipos de pagamento CC, TE, TO, DC e DO será sugerido PX. Obs.: para ativar a sugestão é necessário marcar a caixa de seleção Sugerir Tipos de Pgto.
Campos e variáveis para customização
As variáveis a serem utilizadas nos leiautes de exportação para geração de remessa do pagamento eletrônico estão disponíveis na tela F510PRM:
- FINPETPCPIX
- FINPECHVPIX
- FINPEURLPIX
Observação
O leiaute SAEX03000 - Remessa - Pgto Eletrônico - LPN (CNAB 240), utilizado no processo de VAN Bancária, foi o único alterado para gerar os segmentos B-PIX e X-52 PIX. Para utilizá-lo, pegue o arquivo do leiaute SAEX03000 na pasta C:\Senior\Sapiens\ImpExp\Financas e coloque-o na pasta C:\Senior\Sapiens\ImpExp.
Demais leiautes devem ser customizados conforme a necessidade dos bancos do cliente.
@==============================================================================@ @ 3.4.2 Registro Detalhe – Segmento A (Obrigatório – Remessa/Retorno) @ @------------------------------------------------------------------------------@ VGlobal_NumeroSequencialLote++; @==============================================================================@ @ Definições e Atribuições das variáveis LOCAIS para geração do Registro @ @------------------------------------------------------------------------------@ Definir Alfa xSegmentoA; Definir Alfa FINPECODAGE; Definir Alfa FINPENOMFOR; Definir Alfa FINPECODBAN; Definir Alfa FINPENUMPGE; Definir Alfa FINPENUMTIT; Definir Alfa FINPECODTPT; Definir Alfa FINPEUTINPE; Definir Alfa FINPECCBFOR; Definir Alfa FINPETIPPGT; Definir Alfa xDigitoVerificadorAgencia; Definir Alfa xDigitoVerificadorConta; Definir Alfa xDigitoVerificadorDAC; Definir Alfa xVariavelAuxiliar; Definir Alfa xComplementoTipoServico; Definir Alfa xCodigoOperacaoAlfa; Definir Alfa xNumeroContaCorrenteCEFAlfa; Definir Alfa xDigitoCEFALFA; Definir Numero xCodigoCamara; Definir Numero xCodigoBancoFavorecido; Definir Numero xAgenciaMantenedora; Definir Numero xNumeroContaCorrente; Definir Numero xPosicaoHifen; Definir Numero xTamanhoAgencia; Definir Data xDataPagamento; @==============================================================================@ @ Algumas Variáveis de Sistema retornam o valor multiplicado por 100, devido a @ @ forma antiga com que era esperado o valor monetário nos leiautes com grid. @ @ Por tanto se faz necessário dividir antes de imprimir no arquivo. @ @ @ @ FINPEVLRABE, FINPEVLRMOV, FINPEVLRDSC, FINPEVLRODE, FINPEVLRJRS, FINPEVLRMUL @ @ FINPEVLRENC, FINPEVLRCOR, FINPEVLROAC e FINPEVLRTOT @ @------------------------------------------------------------------------------@ xValorPagamento = FINPEVLRTOT; Se (xValorPagamento > 0){ xValorPagamento = xValorPagamento / 100; Arredonda(xValorPagamento, 2); } @------------------------------------------------------------------------------@ xVariavelAuxiliar = FINPECODBAN; DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xCodigoBancoFavorecido); @==============================================================================@ @ P001 - Código da Câmera Centralizadora @ @------------------------------------------------------------------------------@ xVariavelAuxiliar = 000; Se ((FINPETIPPGT = DC) ou (FINPETIPPGT = DO)){ Se ((FINPETIPPGT = DC) e ((xCodigoBancoFavorecido = 237) ou (xCodigoBancoFavorecido = 341))) { xVariavelAuxiliar = 710; } Senao { xVariavelAuxiliar = 700; } } Senao Se ((FINPETIPPGT = TO) ou (FINPETIPPGT = TE)){ Se ((FINPETIPPGT = TE) e ((xCodigoBancoFavorecido = 237) ou (xCodigoBancoFavorecido = 341))) { xVariavelAuxiliar = 810; } Senao { xVariavelAuxiliar = 018; } } Senao Se ((FINPETIPPGT = PX) ou (FINPETIPPGT = PQ)){ xVariavelAuxiliar = 009; } AlfaParaInt(xVariavelAuxiliar, xCodigoCamara); @------------------------------------------------------------------------------@ @==============================================================================@ @ P005 - Complemento Tipo de Serviço @ @ Especifico para Caixa Economica Federa (104) e Bradesco (237) @ @------------------------------------------------------------------------------@ xComplementoTipoServico = ; Se ((VGlobal_CodigoBancoCompensacao = VGlobal_BRADESCO) ou (VGlobal_CodigoBancoCompensacao = VGlobal_CAIXA_ECONOMICA_FEDERAL)){ xComplementoTipoServico = 13; } @------------------------------------------------------------------------------@ @==============================================================================@ @ Agencia / Digito Agencia @ @ @ @ A T E N Ç Ã O @ @ Para utilização do leiaute de pagamento eletrônico LPN é obrigatório que o @ @ cadastro da Agência possua especificamente a separação do digito verificador @ @ com um hífem -. @ @------------------------------------------------------------------------------@ xAgenciaMantenedora = 0; xDigitoVerificadorAgencia = ; xVariavelAuxiliar = FINPECODAGE; xPosicaoHifen = 0; PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen); Se (xPosicaoHifen > 0){ @ Antes do Hífen @ CopiarAlfa(xVariavelAuxiliar, 1, xPosicaoHifen -1); DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xAgenciaMantenedora); @ Primeira Posicação Após o Hífen @ xDigitoVerificadorAgencia = FINPECODAGE; CopiarAlfa(xDigitoVerificadorAgencia, xPosicaoHifen +1, 1); } Senao { @ Sem Hífen - Pega o valor cadastrado e enviar para Agência @ DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xAgenciaMantenedora); } @------------------------------------------------------------------------------@ @==============================================================================@ @ Número da Conta Corrente / Agência / DAC @ @ @ @ A T E N Ç Ã O @ @ Para utilização do leiaute de pagamento eletrônico LPN é obrigatório que o @ @ cadastro do Número da Conta Corrente possua especificamente a separação do @ @ digito verificador com um hífem -. @ @------------------------------------------------------------------------------@ xNumeroContaCorrente = 0; xDigitoVerificadorConta = ; xDigitoVerificadorDAC = ; xVariavelAuxiliar = FINPECCBFOR; @============================================================================@ @ Especificamente o banco Caixa Economica Federal (CEF), possui uma informa- @ @ ção adicional que é o Código da Operação, e devemos enviar nos 4 primeiros @ @ digitos junto com o número da conta corrente. @ @ @ @ No ERP a orientação é que este código seja cadastrado juntamente com o nú- @ @ mero da conta corrente, separado por um ponto. @ @ @ @ Exemplo: @ @ Codigo Operação...........: 013 @ @ Número Conta Corrente.....: 00123-9 @ @ No ERP deve ser cadastrado: 013.00123-9 @ @ No arquivo deve ser gerado: 0013000001239 @ @----------------------------------------------------------------------------@ Se (VGlobal_CodigoBancoCompensacao = VGlobal_CAIXA_ECONOMICA_FEDERAL){ xPosicaoPonto = 0; PosicaoAlfa(., xVariavelAuxiliar, xPosicaoPonto); Se (xPosicaoPonto > 0){ @ Antes do Ponto @ xCodigoOperacaoAlfa = xVariavelAuxiliar; CopiarAlfa(xCodigoOperacaoAlfa, 1, xPosicaoPonto -1); DeixaNumeros(xCodigoOperacaoAlfa); TamanhoAlfa(xVariavelAuxiliar, xTamanhoConta); CopiarAlfa(xVariavelAuxiliar, xPosicaoPonto + 1, xTamanhoConta); xDigitoCEFALFA = ; PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen); Se (xPosicaoHifen > 0){ @ Antes do Hífen @ xNumeroContaCorrenteCEFAlfa = xVariavelAuxiliar; CopiarAlfa(xNumeroContaCorrenteCEFAlfa, 1, xPosicaoHifen -1); AlfaParaInt(xNumeroContaCorrenteCEFAlfa, xNumeroContaCorrenteCEF); xDigitoCEFALFA = xVariavelAuxiliar; CopiarAlfa(xDigitoCEFALFA, xPosicaoHifen, xTamanhoConta); } Senao { DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrenteCEF); } ObterValorNumericoPadraoCNAB(1, 8, xNumeroContaCorrenteCEF, 0, N, xNumeroContaCorrenteCEFAlfa); xVariavelAuxiliar = xCodigoOperacaoAlfa + xNumeroContaCorrenteCEFAlfa + xDigitoCEFALFA; } } @----------------------------------------------------------------------------@ xPosicaoHifen = 0; PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen); Se (xPosicaoHifen > 0){ @ Primeira Posicação Após o Hífen @ xDigitoVerificadorConta = xVariavelAuxiliar; CopiarAlfa(xDigitoVerificadorConta, xPosicaoHifen +1, 1); @ Verifica se existe mais de um dígito verificador @ TamanhoAlfa(xVariavelAuxiliar, xTamanhoConta); Se ((xTamanhoConta - xPosicaoHifen) > 1){ @ Segunda Posição Após o Hífen @ xDigitoVerificadorDAC = xVariavelAuxiliar; CopiarAlfa(xDigitoVerificadorDAC, xPosicaoHifen +2, 1); } @ Antes do Hífen @ CopiarAlfa(xVariavelAuxiliar, 1, xPosicaoHifen -1); DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrente); } Senao { @ Sem Hífen - Pega o valor cadastrado e enviar para Agência @ DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrente); } @------------------------------------------------------------------------------@ @==============================================================================@ @------------------------------------------------------------------------------@ xDataPagamento = FINPEDATPGT; @Se ((FINPECODTPT = AGR) ou (FINPECODTPT = TRF)){ @ @ xDataPagamento = FINPEDATPGT; @ @} Senao { @ @ xDataPagamento = FINPEVCTPRO; @ @} @ @------------------------------------------------------------------------------@ @==============================================================================@ @ Quando for Agrupamento não enviamos NUMPGE @ @------------------------------------------------------------------------------@ Definir Alfa xSeuNumero; xSeuNumero = FINPENUMPGE; Se (FINPECODTPT = AGR){ xSeuNumero = ; ObterValorNumericoPadraoCNAB(1, 6, 0, 0, S, xSeuNumero); ObterValorAlfaPadraoCNAB(7, 16, FINPENUMTIT, , S, xSeuNumero); ObterValorAlfaPadraoCNAB(17, 19, AGR, , S, xSeuNumero); ObterValorAlfaPadraoCNAB(20, 20, FINPEUTINPE, , S, xSeuNumero); } @------------------------------------------------------------------------------@ @==============================================================================@ @ INÍCIO DA GERAÇÃO DO REGISTRO @ @ @ @--------------------------------- Controle -----------------------------------@ xSegmentoA = ; ObterValorNumericoPadraoCNAB(1, 3, VGlobal_CodigoBancoCompensacao, 0, S, xSegmentoA); @ 01.3A - Código no Banco da Compensação @ ObterValorNumericoPadraoCNAB(4, 7, VGlobal_LoteServico, 0, S, xSegmentoA); @ 02.3A - Lote de Serviço @ ObterValorNumericoPadraoCNAB(8, 8, 3, 0, S, xSegmentoA); @ 03.3A - Tipo de Registro @ ObterValorNumericoPadraoCNAB(9, 13, VGlobal_NumeroSequencialLote, 0, S, xSegmentoA); @ 04.3A - Nº Seqüencial do Registro no Lote @ ObterValorAlfaPadraoCNAB(14, 14, A, , S, xSegmentoA); @ 05.3A - Código de Segmento no Reg. Detalhe @ ObterValorNumericoPadraoCNAB(15, 15, 0, 0, S, xSegmentoA); @ 06.3A - Tipo de Movimento @ ObterValorNumericoPadraoCNAB(16, 17, 0, 0, S, xSegmentoA); @ 07.3A - Código da Instrução p/ Movimento @ @--------------------------------- Favorecido ---------------------------------@ ObterValorNumericoPadraoCNAB(18, 20, xCodigoCamara, 0, S, xSegmentoA); @ 08.3A - Código da Câmara Centralizadora @ ObterValorNumericoPadraoCNAB(21, 23, xCodigoBancoFavorecido, 0, S, xSegmentoA); @ 09.3A - Código do Banco do Favorecido @ ObterValorNumericoPadraoCNAB(24, 28, xAgenciaMantenedora, 0, S, xSegmentoA); @ 10.3A - Ag. Mantenedora da Conta do Fav. @ ObterValorAlfaPadraoCNAB(29, 29, xDigitoVerificadorAgencia, , S, xSegmentoA); @ 11.3A - Dígito Verificador da Agência @ ObterValorNumericoPadraoCNAB(30, 41, xNumeroContaCorrente, 0, S, xSegmentoA); @ 12.3A - Número da Conta Corrente @ ObterValorAlfaPadraoCNAB(42, 42, xDigitoVerificadorConta, , S, xSegmentoA); @ 13.3A - Dígito Verificador da Conta @ ObterValorAlfaPadraoCNAB(43, 43, xDigitoVerificadorDAC, , S, xSegmentoA); @ 14.3A - Dígito Verificador da Ag/Conta @ ObterValorAlfaPadraoCNAB(44, 73, FINPENOMFOR, , S, xSegmentoA); @ 15.3A - Nome do Favorecido @ @---------------------------------- Crédito -----------------------------------@ ObterValorAlfaPadraoCNAB(74, 93, xSeuNumero, , S, xSegmentoA); @ 16.3A - Seu Número @ ObterValorDataPadraoCNAB(94, 101, xDataPagamento, S, xSegmentoA); @ 17.3A - Data do Pagamento @ ObterValorAlfaPadraoCNAB(102, 104, BRL, , S, xSegmentoA); @ 18.3A - Tipo de Moeda @ ObterValorDecimalPadraoCNAB(105, 119, 5, 0, 0, S, xSegmentoA); @ 19.3A - Quantidade de Moeda @ ObterValorDecimalPadraoCNAB(120, 134, 2, xValorPagamento, 0, S, xSegmentoA); @ 20.3A - Valor do Pagamento @ ObterValorAlfaPadraoCNAB(135, 154, , , S, xSegmentoA); @ 21.3A - Nosso Número @ ObterValorDataPadraoCNAB(155, 162, 0, S, xSegmentoA); @ 22.3A - Data Real da Efetivação do Pagamento @ ObterValorDecimalPadraoCNAB(163, 177, 2, 0, 0, S, xSegmentoA); @ 23.3A - Valor Real da Efetivação do Pagamento @ @---------------------------------- Arquivo -----------------------------------@ ObterValorAlfaPadraoCNAB(178, 217, , , S, xSegmentoA); @ 24.3A - Outras Informações (G031) @ ObterValorAlfaPadraoCNAB(218, 219, xComplementoTipoServico, , S, xSegmentoA); @ 25.3A - Complemento Tipo de Serviço @ ObterValorAlfaPadraoCNAB(220, 224, , , S, xSegmentoA); @ 26.3A - Código finalidade da TED/CC @ ObterValorAlfaPadraoCNAB(225, 229, , , S, xSegmentoA); @ 27.3A - Uso Exclusivo @ ObterValorNumericoPadraoCNAB(230, 230, 0, 0, S, xSegmentoA); @ 28.3A - Aviso ao Favorecido @ ObterValorAlfaPadraoCNAB(231, 240, , , S, xSegmentoA); @ 29.3A - Código das Ocorrências para Retorno @ @------------------------------------------------------------------------------@ @ FINAL DA GERAÇÃO DO REGISTRO @ @==============================================================================@ @ Atribuiçao dos totalizadores @ @------------------------------------------------------------------------------@ VGlobal_QtdeRegistrosArquivo++; VGlobal_QtdeRegistrosLote++; VGlobal_SomatoriaValoresLote = VGlobal_SomatoriaValoresLote + xValorPagamento; @------------------------------------------------------------------------------@
@==============================================================================@ @ 3.4.3 Registro Detalhe Segmento B (Obrigatório Remessa/Retorno) @ @------------------------------------------------------------------------------@ VGlobal_NumeroSequencialLote++; @==============================================================================@ @ Definições e Atribuições das variáveis LOCAIS para geração do Registro @ @------------------------------------------------------------------------------@ Definir Alfa xSegmentoB; Definir Alfa FINPENOMFOR; Definir Alfa FINPEENDFOR; Definir Alfa FINPECPLFOR; Definir Alfa FINPEBAIFOR; Definir Alfa FINPECIDFOR; Definir Data FINPEVCTPRO; Definir Alfa FINPETIPPGT; Definir Alfa FINPECHVPIX; Definir Numero FINPETPCPIX; Definir Numero FINPETIPTCC; Definir Alfa xVariavelAuxiliar; Definir Numero xTipoInscricaoFavorecido; Definir Numero xNumeroInscricaoFavorecido; Definir Alfa xNomeRua; Definir Alfa xNumeroRuaAuxiliar; Definir Numero xNumeroRua; Definir Numero xTamanhoAlfa; Definir Numero xValorJuros; Definir Alfa xCNPJValido; Definir Alfa xTipoConta; Definir Numero xSemChave; xVariavelAuxiliar = FINPENUMINS; DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xNumeroInscricaoFavorecido); CNPJValido(xVariavelAuxiliar, xCNPJValido); Se (xCNPJValido = S){ xTipoInscricaoFavorecido = 2; } Senao { xTipoInscricaoFavorecido = 1; } @------------------------------------------------------------------------------@ @ xNomeRua = FinPeEndFor; @ @ xNumeroRuaAuxiliar = xNomeRua; @ @ TamanhoAlfa(xNomeRua, xTamanhoAlfa); @ @ CopiarAlfa(xNumeroRuaAuxiliar, xTamanhoAlfa -4, 5); @ @ SubstAlfa(xNumeroRuaAuxiliar, , xNomeRua); @ @ SubstAlfa(,, , xNomeRua); @ @ DeixaNumeros(xNumeroRuaAuxiliar); @ @ AlfaParaInt(xNumeroRuaAuxiliar, xNumeroRua); @ @------------------------------------------------------------------------------@ @==============================================================================@ @ Algumas Variáveis de Sistema retornam o valor multiplicado por 100, devido a @ @ forma antiga com que era esperado o valor monetário nos leiautes com grid. @ @ Por tanto se faz necessário dividir antes de imprimir no arquivo. @ @ @ @ FINPEVLRABE, FINPEVLRMOV, FINPEVLRDSC, FINPEVLRODE, FINPEVLRJRS, FINPEVLRMUL @ @ FINPEVLRENC, FINPEVLRCOR, FINPEVLROAC e FINPEVLRTOT @ @------------------------------------------------------------------------------@ xValorDesconto = FINPEVLRDSC; Se (xValorDesconto > 0){ xValorDesconto = xValorDesconto / 100; Arredonda(xValorDesconto, 2); } xValorMulta = FINPEVLRMUL; Se (xValorMulta > 0){ xValorMulta = xValorMulta / 100; Arredonda(xValorMulta, 2); } xValorDocumento = FINPEVLRTOT; Se (xValorDocumento > 0){ xValorDocumento = xValorDocumento / 100; Arredonda(xValorDocumento, 2); } xValorJuros = FINPEVLRJRS; Se (xValorJuros > 0){ xValorJuros = xValorJuros / 100; Arredonda(xValorJuros, 2); } @------------------------------------------------------------------------------@ @==============================================================================@ @ INÍCIO DA GERAÇÃO DO REGISTRO @ @ @ @--------------------------------- Controle -----------------------------------@ @Dados utilizados para o Segmento B e o Segmento B PIX estão marcados com um ! @ xSegmentoB = ; ObterValorNumericoPadraoCNAB(1, 3, VGlobal_CodigoBancoCompensacao, 0, S, xSegmentoB); @! 01.3B - Código do Banco na Compensação @ ObterValorNumericoPadraoCNAB(4, 7, VGlobal_LoteServico, 0, S, xSegmentoB); @! 02.3B - Lote de Serviço @ ObterValorNumericoPadraoCNAB(8, 8, 3, 0, S, xSegmentoB); @! 03.3B - Tipo de Registro @ ObterValorNumericoPadraoCNAB(9, 13, VGlobal_NumeroSequencialLote, 0, S, xSegmentoB); @! 04.3B - Nº Sequencial do Registro no @ ObterValorAlfaPadraoCNAB(14, 14, B, , S, xSegmentoB); @! 05.3B - Cód. Segmento do Reg. Detalhe. @ Se (FINPETIPPGT <> PX){ ObterValorAlfaPadraoCNAB(15, 17, , , S, xSegmentoB); @ 06.3B - Uso Exclusivo @ } Senao { ObterValorAlfaPadraoCNAB(15, 15, , , S, xSegmentoB); @ 06.3B PIX - Uso Exclusivo @ ObterValorNumericoPadraoCNAB(16, 17, FINPETPCPIX, 0, S, xSegmentoB); @ 07.3B PIX - Tipo Identificação de Chave PIX @ } @-------------------------------- Favorecido ----------------------------------@ ObterValorNumericoPadraoCNAB(18, 18, xTipoInscricaoFavorecido, 0, S, xSegmentoB); @! 07.3B e 08.3B PIX - Tipo de Inscrição do Favorecido @ ObterValorNumericoPadraoCNAB(19, 32, xNumeroInscricaoFavorecido, 0, S, xSegmentoB); @! 08.3B e 09.3B PIX - Nº de Inscrição do Favorecido @ Se (FINPETIPPGT <> PX){ ObterValorAlfaPadraoCNAB(33, 62, FINPEENDFOR, , S, xSegmentoB); @ 09.3B - Nome da Rua, Av, Pça, Etc @ ObterValorNumericoPadraoCNAB(63, 67, 0, 0, S, xSegmentoB); @ 10.3B - Número do Local @ ObterValorAlfaPadraoCNAB(68, 82, FINPECPLFOR, , S, xSegmentoB); @ 11.3B - Casa, Apto, Sala, Etc @ ObterValorAlfaPadraoCNAB(83, 97, FINPEBAIFOR, , S, xSegmentoB); @ 12.3B - Bairro @ ObterValorAlfaPadraoCNAB(98, 117, FINPECIDFOR, , S, xSegmentoB); @ 13.3B - Nome da Cidade @ ObterValorNumericoPadraoCNAB(118, 125, FINPECEPFOR, 0, S, xSegmentoB); @ 14.3B - CEP / 15.3B - Complemento do CEP @ ObterValorAlfaPadraoCNAB(126, 127, FINPESIGUFS, , S, xSegmentoB); @ 16.3B - Sigla do Estado @ } @--------------------------------- Pagamento ----------------------------------@ Se (FINPETIPPGT <> PX){ ObterValorDataPadraoCNAB(128, 135, FINPEVCTPRO, S, xSegmentoB); @ 17.3B - Data do Vencimento (Nominal) @ ObterValorDecimalPadraoCNAB(136, 150, 2, xValorDocumento, 0, S, xSegmentoB); @ 18.3B - Valor do Documento (Nominal) @ ObterValorDecimalPadraoCNAB(151, 165, 2, 0, 0, S, xSegmentoB); @ 19.3B - Valor do Abatimento @ ObterValorDecimalPadraoCNAB(166, 180, 2, xValorDesconto, 0, S, xSegmentoB); @ 20.3B - Valor do Desconto @ ObterValorDecimalPadraoCNAB(181, 195, 2, xValorJuros, 0, S, xSegmentoB); @ 21.3B - Valor da Mora @ ObterValorDecimalPadraoCNAB(196, 210, 2, xValorMulta, 0, S, xSegmentoB); @ 22.3B - Valor da Multa @ } Senao { EstaNulo(FINPECHVPIX, xSemChave); @Retorna 1 = Vazio, 0 = não vazio na variável xSemChave@ Se (xSemChave = 1) { @ Definição De/Para @ Se (FINPETIPTCC = 1){ @ 1 Conta Corrente - 01 Conta corrente @ xTipoConta = 01; @ 2 Conta Poupança - 03 - Conta Poupança @ } Senao { @ Se tem chave PIX - 04 - Chave de endereçamento@ Se (FINPETIPTCC = 2){ xTipoConta = 03; } } } Senao { xTipoConta = 04; } ObterValorAlfaPadraoCNAB(33, 62, , , S, xSegmentoB); @ 10.3B PIX - Identificador Único da Transação @ ObterValorAlfaPadraoCNAB(63, 125, , , S, xSegmentoB); @ 11.3B PIX - Informações Entre Usuários @ ObterValorAlfaPadraoCNAB(126, 127, xTipoConta, , S, xSegmentoB); @ 12.3B PIX - Ident. Do Tipo de Transferência PIX @ ObterValorAlfaPadraoCNAB(128, 227, FINPECHVPIX, , S, xSegmentoB); @ 13.3B PIX - Chave de Endereçamento @ } @---------------------------------- Arquivo -----------------------------------@ Se (FINPETIPPGT <> PX){ ObterValorAlfaPadraoCNAB(211, 225, , , S, xSegmentoB); @ 23.3B - Cód/Documento do Favorecido/Conta Complementar/Beneficiário @ ObterValorAlfaPadraoCNAB(226, 228, , , S, xSegmentoB); @ 24.3B - Filial Destino @ ObterValorAlfaPadraoCNAB(229, 230, , , S, xSegmentoB); @ 25.3B - Tipo de Documento @ ObterValorAlfaPadraoCNAB(231, 240, , , S, xSegmentoB); @ 26.3B - Número NF/Fatura e Duplicata @ } Senao { ObterValorAlfaPadraoCNAB(228, 230, PIX, , S, xSegmentoB); @ 14.3B PIX - Literal PIX @ ObterValorAlfaPadraoCNAB(231, 240, , , S, xSegmentoB); @ 15.3B PIX - Filial Destino @ } @------------------------------------------------------------------------------@ @ FINAL DA GERAÇÃO DO REGISTRO @ @==============================================================================@ @ Atribuiçao dos totalizadores @ @------------------------------------------------------------------------------@ VGlobal_QtdeRegistrosArquivo++; VGlobal_QtdeRegistrosLote++; @------------------------------------------------------------------------------@
@==============================================================================@ @ 3.5.3 Registro Detalhe Segmento J 52 (Opcional Remessa) @ @------------------------------------------------------------------------------@ Definir Alfa VGlobal_NomeEmpresa; @ Determinado no Inicio da Execução - Nome da Empresa @ VGlobal_NumeroSequencialLote++; @==============================================================================@ @ Definições e Atribuições das variáveis LOCAIS para geração do Registro @ @------------------------------------------------------------------------------@ Definir Cursor Cur_Avalista; Definir Alfa xSegmentoJ52; Definir Numero xNumeroInscricaoCedente; Definir Alfa FINPENUMINS; Definir Alfa FINPENOMFOR; Definir Alfa FINPETIPINS; Definir Alfa FINPETIPPGT; Definir Alfa FINPEURLPIX; Definir Alfa xVariavelAuxiliar; Definir Numero xTipoInscricaoAvalista; Definir Numero xNumeroInscricaoSacador; Definir Alfa xNomeSacador; Definir Numero VGlobal_BancoAvalistaJ52; Definir Numero xTipoInscricaoCedente; xVariavelAuxiliar = FINPENUMINS; DeixaNumeros(xVariavelAuxiliar); AlfaParaInt(xVariavelAuxiliar, xNumeroInscricaoCedente); xTipoInscricaoCedente = 0; AlfaParaInt(FINPETIPINS, xTipoInscricaoCedente); @==============================================================================@ @ Consulta SQL para obter as informações referente ao Sacador (Avalista) @ @ @ @ Definimos comentar o trecho de código abaixo, que tem como intuito buscar o @ @ Avalista, uma vez que essa situação não está bem esclarecida dentro do ERP.@ @------------------------------------------------------------------------------@ xTipoInscricaoSacador = 0; xNumeroInscricaoSacador = 0; xNomeSacador = ; /* Cur_Avalista.SQL SELECT CGCCPF,NOMBAN FROM E030BAN WHERE E030BAN.CODBAN = :VGlobal_BancoAvalistaJ52; Cur_Avalista.AbrirCursor(); Se (Cur_Avalista.Achou){ xNumeroInscricaoSacador = Cur_Avalista.CgcCpf; xNomeSacador = Cur_Avalista.NomBan; } Cur_Avalista.FecharCursor(); Se (xNumeroInscricaoSacador > 0){ xNumeroInscricaoSacador = 2; } */ @------------------------------------------------------------------------------@ @==============================================================================@ @ INÍCIO DA GERAÇÃO DO REGISTRO @ @ @ @ Registros que estão no registro J-52 e X-52 estão marcados com ! @ @--------------------------------- Controle -----------------------------------@ xSegmentoJ52 = ; ObterValorNumericoPadraoCNAB(1, 3, VGlobal_CodigoBancoCompensacao, 0, S, xSegmentoJ52); @! 01.3J-52 - Código do Banco na Compensação @ ObterValorNumericoPadraoCNAB(4, 7, VGlobal_LoteServico, 0, S, xSegmentoJ52); @! 02.3J-52 - Lote de Serviço @ ObterValorNumericoPadraoCNAB(8, 8, 3, 0, S, xSegmentoJ52); @! 03.3J-52 - Tipo de Registro @ ObterValorNumericoPadraoCNAB(9, 13, VGlobal_NumeroSequencialLote, 0, S, xSegmentoJ52); @! 04.3J-52 - Nº Sequencial do Registro no Lote @ Se (FINPETIPPGT <> PQ){ ObterValorAlfaPadraoCNAB(14, 14, J, , S, xSegmentoJ52); @ 05.3J-52 - Código de segmento no Reg. Detalhe @ } Senao { ObterValorAlfaPadraoCNAB(14, 14, X, , S, xSegmentoJ52); @ 05.3J-52 PIX - Código de segmento no Reg. Detalhe @ } ObterValorAlfaPadraoCNAB(15, 15, , , S, xSegmentoJ52); @! 06.3J-52 - Uso Exclusivo @ ObterValorNumericoPadraoCNAB(16, 17, 0, 0, S, xSegmentoJ52); @! 07.3J-52 - Código da Instrução para Movimento @ ObterValorNumericoPadraoCNAB(18, 19, 52, 0, S, xSegmentoJ52); @! 08.3J-52 - Código de Identificação de Registro @ @---------- Dados do Sacado (Quem paga o valor / Própria Empresa) -------------@ ObterValorNumericoPadraoCNAB(20, 20, VGlobal_TipoInscricaoEmpresa, 0, S, xSegmentoJ52); @! 09.3J-52 - Tipo de Inscrição @ ObterValorNumericoPadraoCNAB(21, 35, VGlobal_NumeroInscricaoEmpresa, 0, S, xSegmentoJ52); @! 10.3J-52 - Número de Inscrição @ ObterValorAlfaPadraoCNAB(36, 75, VGlobal_NomeEmpresa, , S, xSegmentoJ52); @! 11.3J-52 - Nome do Sacado @ @-------------- Dados do Cedente (Quem recebe o valor do título) --------------@ ObterValorNumericoPadraoCNAB(76, 76, xTipoInscricaoCedente, 0, S, xSegmentoJ52); @! 12.3J-52 - Tipo de Inscrição @ ObterValorNumericoPadraoCNAB(77, 91, xNumeroInscricaoCedente, 0, S, xSegmentoJ52); @! 13.3J-52 - Número de Inscrição @ ObterValorAlfaPadraoCNAB(92, 131, FINPENOMFOR, , S, xSegmentoJ52); @! 14.3J-52 - Nome do Cedente @ @------------------------------ Dados do Sacador ------------------------------@ Se (FINPETIPPGT <> PQ){ ObterValorNumericoPadraoCNAB(132, 132, xTipoInscricaoAvalista, 0, S, xSegmentoJ52); @ 15.3J-52 - Tipo de Inscrição @ ObterValorNumericoPadraoCNAB(133, 147, xNumeroInscricaoAvalista, 0, S, xSegmentoJ52); @ 16.3J-52 - Número de Inscrição @ ObterValorAlfaPadraoCNAB(148, 187, xNomeSacador, , S, xSegmentoJ52); @ 17.3J-52 - Nome do Sacador @ ObterValorAlfaPadraoCNAB(188, 240, , , S, xSegmentoJ52); @ 18.3J-52 - Uso Exclusivo @ } Senao { ObterValorAlfaPadraoCNAB(132, 208, FINPEURLPIX, , S, xSegmentoJ52); @ 15.3J-52 PIX - URL / Chave de Endereçamento @ ObterValorAlfaPadraoCNAB(188, 240, , , S, xSegmentoJ52); @ 16.3J-52 PIX - Código de Identificação do QRCODE @ } @------------------------------------------------------------------------------@ @ FINAL DA GERAÇÃO DO REGISTRO @ @==============================================================================@ @ Atribuiçao dos totalizadores @ @------------------------------------------------------------------------------@ VGlobal_QtdeRegistrosArquivo++; VGlobal_QtdeRegistrosLote++; @------------------------------------------------------------------------------@