vbb-parse-ticket
Version:
Parse ticket information from the VBB HAFAS API.
67 lines (52 loc) • 1.34 kB
JavaScript
const variant = require('./variants')
const tariffs = {
B: 'Berlin'
, P: 'Potsdam'
, S: 'Brandenburg (Havel)'
, C: 'Cottbus'
, G: 'urban area'
, V: 'Frankfurt (Oder)'
, L: 'rural area'
, R: 'rural area'
, M: 'Szczecin'
}
const R = []
R[3] = '25-35km'; R[4] = '35-45km'; R[5] = '45-55km'; R[6] = '55-65km';
R[7] = '65-75km'; R[8] = '75-85km'; R[9] = '85-95km';
// todo: G2
// todo: RA
const coverages = {
B: ['short trip', 'AB', 'BC', 'ABC']
, S: [null, 'AB', 'BC', 'ABC']
, G: [null, 'urban area']
, L: [null, '2 zones', '3 zones', '4 zones']
, R: R
, M: ['urban area']
}
coverages.P = coverages.B
coverages.C = coverages.S
coverages.V = coverages.S
const parse = (t) => {
const ticket = {
name: t.name
, price: (t.price || t.prc) / 100
, tariff: null
, coverage: null
}
if (!t.shpCtx) return ticket
let code
try {code = JSON.parse(t.shpCtx).TLS}
catch (e) {return ticket}
if (!code) return ticket
variant(ticket, code.slice(2))
const tariff = code[0]
if (tariff in tariffs) ticket.tariff = tariffs[tariff]
const coverage = parseInt(code[1])
if (coverages[tariff] && (coverage in coverages[tariff])) {
ticket.coverage = coverages[tariff][coverage] || null
}
if (coverage === 0 && tariff !== 'M') ticket.shortTrip = true
return ticket
}
module.exports = parse