| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- 'use strict';
- const fs = require('fs');
- const path = require('path');
- const config = require('../build.json');
- // Change current directory to script location so that
- // the relative paths of the resources can be resolved
- process.chdir(path.dirname(process.argv[1]));
- function createDirectory(dir) {
- fs.mkdirSync(
- dir,
- { recursive: true },
- (error) => {
- if (error !== null) {
- console.error('Error while creating directory', error);
- }
- }
- );
- }
- function transformData() {
- var matrix = fs.readFileSync(path.join('../', config.path.data, 'risk-ladder.tsv'), 'utf8');
- // TSV wird geparst
- matrix = matrix.split('\n').map(l => l.split('\t'));
- var rowCount = matrix.length - 1;
- var colCount = matrix[0].length;
- var result = {reasons:[], filters:[]};
- var filters = new Map();
- var basisrisiko;
- // Die einzelnen Einträge werden ausgelesen
- for (var r = 1; r < rowCount; r++) {
- result.reasons[r-1] = {
- title: matrix[r][1],
- info: matrix[r][2],
- source: matrix[r][23],
- url: matrix[r][24],
- year: matrix[r][26],
- evidence: matrix[r][25],
- referenceGroup: matrix[r][27],
- comment: matrix[r][28],
- cat: matrix[r][0]
- };
- }
- // Data expected in tsv
- var ageGroups = ['', '1-13','14-17','18-20','21-59','60+'];
- var genders = ['', 'm', 'w'];
- var offset = 5;
- for (var c = offset; c < colCount; c++) {
- var alter = undefined, geschlecht = undefined;
- if (c < genders.length * ageGroups.length + offset) {
- // gender order: neutral | male | female
- switch ((c-offset) % genders.length) {
- case 0: geschlecht = ''; break;
- case 1: geschlecht = 'm'; break;
- case 2: geschlecht = 'w'; break;
- }
- // age group changes every genders.length column
- alter = ageGroups[Math.floor((c-offset) / genders.length)];
- }
- if (alter === undefined && geschlecht === undefined) continue;
- if (alter === undefined || geschlecht === undefined) throw Error([alter, geschlecht].join('\n'));
- var key = alter + '_' + geschlecht;
- var filter = {
- alter:alter,
- geschlecht:geschlecht,
- entries:[]
- };
- result.filters.push(filter);
- if (filters.has(key)) throw Error();
- filters.set(key, true);
- for (var r = 1; r < rowCount; r++) {
- var val = parseFloat(matrix[r][c].replace(/,/g, '.'));
- var value;
- if (isNaN(val)) {
- value = 1;
- } else {
- value = val;
- }
- filter.entries[r-1] = value;
- }
- // // Risiko wird aus Basisrisiko und Faktorisierung berechnet
- if (key === '_') {
- basisrisiko = filter.entries;
- } else {
- filter.entries = filter.entries.map(function (v,i) {
- var val = v;
- if (isNaN(v)) {
- val = 1;
- } else {
- val = Math.round(v * basisrisiko[i] * 1e10) / 1e10;
- }
- return val;
- });
- }
- }
- fs.writeFileSync(path.join('../', config.path.build, 'data_de.json'), JSON.stringify(result, null, '\t'), 'utf8');
- }
- createDirectory(path.join('../', config.path.build));
- createDirectory(path.join('../', config.path.output));
- transformData();
|