Vou explicar mais claramente o que é a minha questão, pois creio que o que eu escrevi ficou confuso.
Vamos supor que eu faça a leitura do código de barras de um boleto e o
Fator de Vencimento é
1001
Como devo interpretar isso?
Como sendo
23/02/2025 ou como
04/07/2000?
Claro que o mais óbvio seja escolher
23/02/2025 pois é o nosso "tempo atual", porém pode haver uma situação que estou lendo um boleto antigo, que de fato a data de vencimento era
04/07/2000, entendeu? Não consigo imaginar agora mesmo uma situação que isso seria importante, mas gosto de prever possibilidades...
De fato seria uma situação inusitada, um boleto de
25 anos atrás não seria o caso, mas só me ocorreu que poderia surgir uma situação assim, improvável, mas possível, e não haveria nenhuma maneira de saber pois na leitura do código de barras não tem a informação da emissão do boleto ou outra forma de saber.
Sei lá... considerações... na prática isso seria muito improvável, mesmo, então o negócio é sempre interpretar já pelo sistema novo ( -9000 ). Quanto a "gerar" o boleto, não há dúvida, usar o sistema novo.
Eu percebi isso quando testava o boleto de exemplo do manual do Banco do Brasil:
00190500954014481606906809350314337370000000100
Onde o
fator de vencimento é 3737, ou seja, no sistema novo interpretamos como sendo
22/08/2035, mas no manual o valor esperado é
31/12/2007 - achei curioso e me chamou a atenção. Claro que o manual precisa ser atualizado também.
Então por enquanto o que fiz para
interpretar o
Fator de Vencimento:
Código: Selecionar todos
IF nFator < 1000 .AND. nFator != 0
Msg( "Fator de Vencimento inválido" )
ELSEIF nFator > 1000 .AND. nFator < 8121 // 01/01/2020
dDataVencimento := CTOD( '29/05/2025' ) + nFator
ELSEIF nFator != 0
dDataVencimento := CTOD( '07/10/1997' ) + nFator
ELSE
dDataVencimento := CTOD( '' )
ENDIF
Com este código, que é uma solução simplificada provisória, estou dizendo que quando eu ler algum boleto com fator de vencimento acima de
8121, então vou interpretar com se referindo a
01/01/2020 e não como referindo a
22/08/2044.
Porém tem uma proposta para um processo contínuo, que resolveria permanentemente o problema, veja na imagem abaixo:
Link:
https://slideplayer.com.br/slide/3364634/
Pelo que entendi, são 3000 posições anteriores em relação à
Data Atual, e ainda tem que considerar 499 posições anteriores a isso como margem de segurança, sendo 5500 posições posteriores, meio confuso mas creio que dá para entender.
Agora vem a questão: Como implantar isso no código? Teria que pensar um pouco como fazer... seria algo que iria se ajustando e alterando automaticamente baseado na
data atual?
O que vocês acham?