Histórico de mensagens sobre Recebimento em sugestões

EXIBINDO CONVERSAS RECENTES:

Texto: Recebimento
Canal: sugestões
Avatar discord do usuario christianefi

christianefi

json
{
"pix": {
"receberSemChave": true,

"chaves": {
"[email protected]": {
"recebimento": {
"txidObrigatorio": true,

"qrCodeEstatico": {
"recusarTodos": true
}
}
},
"[email protected]": {...}
}
}
}

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Sim, mas eles podem implementar isso no recebimento mesmo que a configuração seja de uma forma menos otimizada.

Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

A minha preocupação foi 0% em relação ao EC. Foi 100% do lado da GN em relação ao desempenho que ela vai ganhar não precisando iterar esse array em todo recebimento. Todo array que depende de um loop que o percorra para que seus elementos internos sejam identificados (e condicionantes sejam aplicadas) é um array "burro". O identificador deve ser a chave do elemento, sempre que possível. Verificar se pix[chaves][123] existe não exige que eu leia todos os elementos em chaves (e muito menos todos os seus valores internos). Ganha-se absurdamente em velocidade e em consumo de memória - e isso mesmo quando só houver 1 elemento no array. Um teste array_key_exists() tem um processamento ínfimo perto de qualquer tipo de loop. Isso pode ser comparado à uma busca em banco de dados em diferentes colunas, uma com índice e a outra sem.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

A estrutura de dados do config e a estrutura de dados do atendedor de recebimentos não precisam ser a mesma. Eles podem fazer essa otimização em uma e não na outra... ou podem fazer nas duas. Mas a transação de config ocorre bem raramente, então dá bem na mesma...
.... porém, sua sugestão me parece mais alinhada com a estrutura da API do BACEN. Então por motivos diferentes, eu também apoio.

Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

isso no endpoint /gn/config, certo? esse endpoint já está em uso? vi ele ser comentado aqui no <#💭sugestões> mas não me recordo de alguma config que já tenha sido implantada.

se não foi (ou se foi mas ainda não existe esse índice chaves) eu iria sugerir modificar a estrutura interna dele, passando a usar as chaves como índice das configurações que são definidas por chave.

assim vocês ganhariam em desempenho: não iriam precisar iterar o array chaves e ler o valor de chave em cada um deles para encontrar qual se refere à chave 123 onde um pix tenha entrado. bastaria procurar pela existência do elemento pelo seu índice, pix[chaves][123] (assim como __eu acho__ que já é feito para o cadastramento dos webhooks, por exemplo). o ganho é marginal em 1 recebimento mas pode ser significativo em volume.

Avatar discord do usuario christianefi

christianefi

Ver Respostas

Pessoal, boa tarde.

Segue a nossa proposta (inclusive já em andamento) que contempla somente, e apenas inicialmente, as travas de recebimentos de Pix sem txid's, bem como eventual bloqueio geral de recebimento a partir de QR Codes Estáticos (esse segundo ponto veio porque vimos ser uma mudança simples e de ampla aplicabilidade).

json
{
"pix": {
"receberSemChave": true,

"chaves": [{
"chave": "[email protected]",

"recebimento": {
"txidObrigatorio": true,

"qrCodeEstatico": {
"recusarTodos": true
}
}
}]
}
}

- receberSemChave: Bloqueia Pix recebidos sem a chave, apontando diretamente para agência e conta (famoso Pix manual);

- txidObrigatorio: Bloqueia Pix recebidos com txid's inválidos:
- Sem o campo txid;
- Com o campo txid vazio;
- Campo txid preenchido somente por espaços;
- Campo txid preenchido por ;

- qrCodeEstatico.recusarTodos: Bloqueia o recebimento geral por QR Codes Estáticos.

Ainda precisamos clarear a questão de se utilizar um
pattern porque temos que resguardar o nosso lado (entendam como questões de segurança, curto tempo que temos para confirmação de pix, e outros fatores), então podem continuar nos sugerindo mas, somente por enquanto, vamos resolver a dor maior.

Avatar discord do usuario ezequielsp

ezequielsp

Ver Respostas

Não seria melhor:

{
"pix": {
// configuração da conta
"receberSemChave": true, // permite ao EC recusar Pix Manual de titularidade diferente
"chaves": [{
"chave": "[email protected]",
"recebimento": {
"receberSemTxid": true, // Por padrão todas as chaves recebem, quem configurar como false, recusa Pix sem txid
}
}]
}
}

Avatar discord do usuario sady_efi

sady_efi

Ver Respostas

Pessoal, sobre a configuração de recebimentos, fizemos o alinhamento com o time e partiremos novamente da configuração mais simples, onde trazemos para vocês a previsão de disponibilidade para o dia 10/03/20201. A estrutura que iremos trabalhar nesse primeiro momento será algo semelhante ao modelo abaixo:

json
{
"pix": {
// configuração da conta
"receberSemChave": true, // permite ao EC recusar Pix Manual de titularidade diferente
"chaves": [{
"chave": "[email protected]",
"recebimento": {
"txidNulo": true, //permite ao EC recusar Pix sem txid
}
}]
}
}

Avatar discord do usuario francisco.carvalho

francisco.carvalho

{
"pix": {
// configuração da conta
"receberSemChave": true, // permite ao EC recusar Pix Manual de titularidade diferente

"chaves": [{
"chave": "[email protected]",
"recebimento": {

// se false, implica em recusar qualquer txid vazio ou com "", não importando
// qual a forma de iniciação
"txidNulo": false,

// no futuro, quando a forma de iniciação vier na PACS.008,
// será possível outras customizações
// não precisamos entrar nesse mérito agora, mas um esboço poderia ser:
"qrEstatico": {
"recusarTodos": true,
"txidTamMin": 10, // obviamente só entra em cena caso o anterior seja false
"txidNulo": true, // idem
"txidRegex" "^pix", // necessário mais estudos
}

"viaChave": {}

}
}]
}
}

Avatar discord do usuario francisco.carvalho

francisco.carvalho

{
"pix": {
// configuração da conta
"receberSemChave": true, // permite ao EC recusar Pix Manual de titularidade diferente

"chaves": [{
"chave": "[email protected]",
"recebimento": {

// se false, implica em recusar qualquer txid vazio ou com "", não importando
// qual a forma de iniciação
"txidNulo": false,

// no futuro, quando a forma de iniciação vier na PACS.008,
// será possível outras customizações
// não precisamos entrar nesse mérito agora, mas um esboço poderia ser:
"qrEstatico": {
"txidNulo": true,
"txidRegex" "^pix", // necessário mais estudos
}

"viaChave": {}

}
}]
}
}

Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

Pensando na implementação lógica, o fluxo seria mais ou menos esse:

-> se o txid é dinâmico {26,35} a GN valida com base na chave + txid se existe cobrança (talvez isso até já esteja implementado hoje).
-> elseif, txid é nulo, GN consulta a configuração da conta do EC recebedor (ou da chave) se deve acatar Pix com txid nulo.

se a GN tiver como diferenciar quando o Pix foi enviado via "manual" (informando dados bancários) ou com uso da chave DICT, o ideal seria a configuração de aceitar/não os recebimentos com txid nulo ser por chave + uma configuração extra para bloquear todos os recebimentos manuais (que nunca tem txid associado).

se não tiver como diferenciar, a configuração poderia ser global (por conta transacional), com opção de sobrescrever a escolha para chaves individuais (assim poderia bloquear recebimentos com txid nulo para toda a conta [que seria o comportamento padrão] e autorizar o txid nulo em uma chave particular).

e, futuramente:
-> else (txid é estático), valida conforme as regras de aceite do EC (por regex match ou enviando o request de validação para webhookURL/txidmatch, como sugeri acima).

e esse "futuramente" eu não consigo nem ver uma demanda relevante. o importante são as outras funções.

Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

bom dia. voltando à questão do regex para aceitar/não os recebimentos com base no txid. alguém da GN pode me esclarecer quais os cenários específicos onde vocês visualizaram uma necessidade de aceitação com base em regex? que eu me lembre, essa ideia apareceu como como uma evolução da necessidade de barrar recebimentos com txid vazio. porém:

- para recebimentos de cobranças (QR dinâmico) o txid precisa ser correspondente a uma cobrança existente na GN ou ela já poderia ser descartada (independente de qualquer crivo por parte do EC); e
- para recebimentos de QR estático, é perfeitamente compreensível que a GN não tenha ciência prévia dos txid dos recebimentos mas não vislumbro problemas maiores que exijam uma validação do txid com base em critérios definidos pelo EC (somente o problema conhecido de pagamentos entrando sem txid).

então, eu pergunto:

1. já foi implementada a possibilidade de bloqueio de recebimentos de Pix sem txid (seja a nível de chave Pix ou de conta transacional)?
2. se não foi, a evolução dessa funcionalidade para algo baseado em regex (ou outras regras) não está atrasando desnecessariamente a implantação da função de bloqueio de recebimento sem txid?

Lembrando que esse bloqueio é essencial para os EC que precisam de 100% de assertividade na conciliação automática.

Avatar discord do usuario wesleyhp

wesleyhp

6º - Quando apenas o módulo de Pix está ativo no plugin, uma mensagem dizendo que é necessário ativar uma forma de recebimento fica aparecendo
imagem enviada na mensagem pelo usuario wesleyhp

Avatar discord do usuario anoni_mato

anoni_mato

tive uma ideia aqui. e se a GN mandar um request para webhookURL/txidmatch passando o txid recebido, com um timeout de uns 3 segundos, e o EC responde se a GN deve ou não aceitar o recebimento?

talvez o problema seja o BC encasquetar com o prazo de conclusão do recebimento (a média de tempo iria subir)

Avatar discord do usuario joelemanoel

joelemanoel

Ver Respostas

<@!793123559874494465> uma alternativa seria usar algo como o % do MySQL. Assim, poderíamos ter:

// Caso onde aceitaria: GN9268T9cac2ca53c5fe723c249d
"recebimento": {
"txid": {
"aceitarApenas": "GN%",
"aceitarVazio": true
}
}

// Caso onde aceitaria: 9268T9cac2ca53c5fe723c249dGN
"recebimento": {
"txid": {
"aceitarApenas": "%GN",
"aceitarVazio": true
}
}

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Tipo assim:

"recebimento": {
"txid": {
"comecaCom": ["gnPix", "pix", "prod"], // aplica-se OR para os arrays, entre comecaCom e terminaCom, aplica-se AND
"terminaCom": ["BACEN", "pix"],
"aceitarVazio": false
}
}

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Os comecaCom/terminaCom/contem são múltiplos ? Ou seja, poderia ser:
"recebimento": {
"txid": {
"comecaCom": "gnPix",
"comecaCom": "BACEN",
"aceitarVazio": false
}
}
?

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Ver Respostas

Eu acredito que resolveríamos com outra flag, <@!780500321994539068> , algo nesse sentido:

"recebimento": {
"txid": {
"contem": "gnPix",
"aceitarVazio": true
}
}

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Ver Respostas

Boa tarde @everyone !

Retomando o assunto endpoint de configurações (https://www.notion.so/Endpoint-de-configura-es-0a97faee68f845ab96ec21551862fe6c).

Nosso time de engenharia observou que existem possíveis situações em que o match do regex com a string do txid pode demorar muitos segundos ou até minutos. Existem situações inclusive de crash da aplicação. Em outras palavras: não é seguro recebermos via input qualquer regex.

Um exemplo que vocês podem testar no browser:

let regexp = /^(\d+)$/;
let str = "012345678901234567890123456789z";
alert( regexp.test(str) );

O alert acima levará um longo tempo até que apareça. Imaginem isso no ato de recebimento de um Pix, no qual cada milisegundo é um fator determinante para um timeout inesperado.

A conclusão é que precisamos controlar melhor quais regex serão aceitas.

A proposta é, ao invés de receber um txidRegex, receber algo mais limitado que também atenda da mesma forma:

"recebimento": {
"txid": {
"comecaCom": "gnPix"
}
}

"recebimento": {
"txid": {
"terminaCom": "gnPix"
}
}

"recebimento": {
"txid": {
"contem": "gnPix"
}
}

comecaCom/terminaCom/contem: a-zA-Z0-9{0,15} //caracteres aceitos

Gostaria de opinião de vocês em relação a essa nova proposta, bem como sugestões dentro dessa nova abordagem.

Para quem interessar, uma referência sobre o assunto regexp-catastophic-backtracking com mais detalhes.
https://javascript.info/regexp-catastrophic-backtracking