Skip to content
Snippets Groups Projects
parsing.js 4.02 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 User PDL
     * @param {string} result
     * @returns {string}
     */
    function parseUserPdl(result) {
      log('info', 'Parsing User Pdl')
      const json = JSON.stringify(result)
      return JSON.parse(json)['Envelope']['Body']['rechercherPointResponse'][
        'points'
      ]['point']['$'].id
    }
    
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    /**
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
     * @param {string} result
     * @returns {string}
     */
    
    function parseContractStartDate(result) {
      log('info', 'Parsing contract start date')
    
      const json = JSON.stringify(result)
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
      return JSON.parse(json)['Envelope']['Body'][
        'consulterDonneesTechniquesContractuellesResponse'
      ]['point']['donneesGenerales'][
        'dateDerniereModificationFormuleTarifaireAcheminement'
      ]
    }
    
    /**
     * Return User address
     * @param {string} result
     * @returns {Address}
     */
    function parseUserAddress(result) {
      log('info', 'Parsing user Address')
      const json = JSON.stringify(result)
      return JSON.parse(json)['Envelope']['Body'][
        'consulterDonneesTechniquesContractuellesResponse'
      ]['point']['donneesGenerales']['adresseInstallation']
    }
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    
    
    /**
     * Return User contract start date
     * @param {string} result
     * @returns {Contract[] | Contract}
     */
    function parseContracts(result) {
      log('info', 'Parsing contract')
      const json = JSON.stringify(result)
      return JSON.parse(json)['Envelope']['Body'][
        'rechercherServicesSouscritsMesuresResponse'
      ]['servicesSouscritsMesures']['serviceSouscritMesures']
    }
    
    /**
     * Return User contract start date
     * @param {string} result
     * @returns {number}
     */
    function parseServiceId(result) {
      log('info', 'Parsing serviceId')
      const json = JSON.stringify(result)
      return JSON.parse(json)['Envelope']['Body'][
        'commanderCollectePublicationMesuresResponse'
      ]['serviceSouscritId']
    }
    
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    /**
    
    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')
    
      const json = JSON.stringify(result)
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
      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 => {
    
        const date = moment(record.d, 'YYYY/MM/DD h:mm:ss')
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
        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')),
        }
      })
    }
    
    
    /**
     * Check if response contains contracts
     * @param {string} parsedReply
     * @return {boolean}
     */
    function checkContractExists(parsedReply) {
      const json = JSON.stringify(parsedReply)
      return JSON.parse(json)['Envelope']['Body'][
        'rechercherServicesSouscritsMesuresResponse'
      ]['servicesSouscritsMesures']
    }
    
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    /**
     * 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
    }
    
    
    /**
     * Remove SGE useless multiple white spaces
     * @param {string} str
     * @returns {string}
     */
    function removeMultipleSpaces(str) {
      return str.replace(/  +/g, ' ')
    }
    
    /**
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
     * Remove SGE address number
    
     * @param {string} str
     * @returns {string}
     */
    function removeAddressnumber(str) {
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
      return str.replace(/\d+ |b |B |T |t |\d+/g, '')
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    module.exports = {
      parseSgeXmlData,
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
      formateDataForDoctype,
      parseTags,
      parseValue,
    
      parseUserPdl,
    
      parseContracts,
      parseContractStartDate,
      parseServiceId,
    
      parseUserAddress,
    
      checkContractExists,
    
      removeMultipleSpaces,
      removeAddressnumber,
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
    }