Skip to content

Instantly share code, notes, and snippets.

@tiagoengel
Last active May 28, 2018 20:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiagoengel/320c1a14e28e0fdbaad6b292c8915665 to your computer and use it in GitHub Desktop.
Save tiagoengel/320c1a14e28e0fdbaad6b292c8915665 to your computer and use it in GitHub Desktop.
/**
* 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