Skip to content
Snippets Groups Projects
parsing.js 1.92 KiB
Newer Older
Hugo SUBTIL's avatar
Hugo SUBTIL committed
// @ts-check
const { log } = require('cozy-konnector-libs')
Hugo SUBTIL's avatar
Hugo SUBTIL committed
const moment = require('moment')
Hugo SUBTIL's avatar
Hugo SUBTIL committed

/**
 * Return start date
 * @param {string} result
 * @returns {string}
 */
function parseSgeXmlTechnicalData(result) {
  log('info', 'Parsing technical data')
  let json = JSON.stringify(result)
  return JSON.parse(json)['Envelope']['Body'][
    'consulterDonneesTechniquesContractuellesResponse'
  ]['point']['donneesGenerales'][
    'dateDerniereModificationFormuleTarifaireAcheminement'
  ]
}

/**
Hugo SUBTIL's avatar
Hugo SUBTIL committed
 * Parsing SGE xml reply to get only mesure data
Hugo SUBTIL's avatar
Hugo SUBTIL committed
 * @param {string} result
 * @returns {SGEData[]}
 */
function parseSgeXmlData(result) {
  log('info', 'Parsing list of documents')
  let json = JSON.stringify(result)
  return JSON.parse(json)['Envelope']['Body'][
    'consulterMesuresDetailleesResponse'
  ]['grandeur']['mesure']
}

Hugo SUBTIL's avatar
Hugo SUBTIL committed
/**
 * Format data for DB storage
 * @param {SGEData[]} data
 * @returns {Promise<EnedisKonnectorData[]>} Parsed timestamp array
 */
async function formateDataForDoctype(data) {
  log('info', 'Formating data')
  return data.map(record => {
    let date = moment(record.d, 'YYYY/MM/DD h:mm:ss')
    return {
      load: record.v,
      year: parseInt(date.format('YYYY')),
      month: parseInt(date.format('M')),
      day: parseInt(date.format('D')),
      hour: parseInt(date.format('H')),
      minute: parseInt(date.format('m')),
    }
  })
}

/**
 * Format tag in order to be manipulated easly
 * @param {string} name
 * @returns {string} name
 */
function parseTags(name) {
  if (name.split(':')[1] !== undefined) {
    return name.split(':')[1]
  }
  return name
}

/**
 *
 * @param {string} value
 * @param {string} name
 * @returns {string|number} value
 */
function parseValue(value, name) {
  // Wh => KWh
  if (name === 'v') {
    return parseFloat((parseInt(value) / 1000).toFixed(2))
  }
  return value
}

Hugo SUBTIL's avatar
Hugo SUBTIL committed
module.exports = {
  parseSgeXmlData,
  parseSgeXmlTechnicalData,
Hugo SUBTIL's avatar
Hugo SUBTIL committed
  formateDataForDoctype,
  parseTags,
  parseValue,
Hugo SUBTIL's avatar
Hugo SUBTIL committed
}