Last active
May 28, 2018 20:15
-
-
Save tiagoengel/320c1a14e28e0fdbaad6b292c8915665 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Regra de converção de moedas para o imposto de renda: | |
* | |
* Valor do dólar dos Estados Unidos da América, fixado pela autoridade monetária | |
* do país de origem dos rendimentos na data do recebimento. | |
* | |
* Em seguida convertido para reais pelo valor de compra do dólar fixado pelo Banco Central do Brasil | |
* para o último dia útil da 1a quinzena do mês anterior ao do recebimento dos rendimentos. | |
*/ | |
const https = require('https') | |
if (process.argv.length < 4) { | |
console.log('Usage:\n\tpound-to-blr.js [value] [date]') | |
process.exit(-1) | |
} | |
const USD = 61 | |
const BLR = 177 | |
const POUND = 115 | |
const value = process.argv[2] | |
const date = process.argv[3] | |
function convert(from, to, value, date) { | |
const postData = `moedaX=${from}&moedaY=${to}&valorConverter=${value}&dataCotacao=${encodeURIComponent(date)}` | |
return new Promise((resolve, reject) => { | |
const req = https.request({ | |
host: 'ptax.bcb.gov.br', | |
port: 443, | |
path: '/ptax_internet/conversaoDeMoedas.do?method=realizarConversaoMoedas', | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/x-www-form-urlencoded', | |
'Content-Length': Buffer.byteLength(postData) | |
} | |
}, (res) => { | |
res.setEncoding('latin1') | |
res.on('data', (chunk) => { | |
resolve(extractResponse(chunk)) | |
}) | |
}) | |
req.on('error', reject) | |
req.write(postData) | |
req.end() | |
}) | |
} | |
function extractResponse(data) { | |
const r = data.match(new RegExp('(Resultado da conversão:</strong>) (([0-9]|[\.]|[,])+)')) | |
if (r) { | |
return r[2].replace('.', '') | |
} | |
return null | |
} | |
convert(POUND, USD, value, date) | |
.then(usdValue => { | |
const blrDate = date.split('/') | |
blrDate[1] = `${parseInt(blrDate[1], 10) - 1}` | |
blrDate[0] = '15' | |
return convert(USD, BLR, usdValue, blrDate.join('/')) | |
}) | |
.then(console.log) | |
.catch(console.error) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment