Reduce JavaScript

Pessoal, estou usando o reduce para agrupar e somar alguns dados.

Array usado:

     let resultMap =  [
  {
    VISCODOPERREC: '0323 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 15,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 7,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 6,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 6,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 10,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 7,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 18,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 1,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 28,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 2,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 30,
    DTMSEQDIA: '20150208',
    VISQTDTOTBPAGE: 6,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  },
  {
    VISCODOPERREC: '0341 ',
    VISCODOPERBDO: '0321 ',
    VISJANELA: '18        ',
    VISSEQCN: 59,
    DTMSEQDIA: '20150207',
    VISQTDTOTBPAGE: 1,
    VISQTDBPFALHAAGE: 0,
    YEARMONTH: '02/2015'
  }
]

A parit desse array, estou agrupando o dados pelo atributos “DTMSEQDIA”, usando o seguinte função:

let dayGroup = resultMap.reduce((acumulador, valor) => {

            let groupingExp;

            if (filters.typeOffender == 'reg') {

                groupingExp = (obj) => obj.DTMSEQDIA + ':' + obj.VISCODOPERREC + ':' + obj.VISCODOPERBDO + ':' + obj.VISSEQCN;

            } else {

                groupingExp = (obj) => obj.DTMSEQDIA + ':' + obj.VISCODOPERREC + ':' + obj.VISCODOPERBDO + ':' + obj.VISJANELA

            }

            let indice = acumulador.map(groupingExp).indexOf(groupingExp(valor));

            if (indice == -1) {

                acumulador.push(valor);

            } else {

                acumulador[indice].VISQTDTOTBPAGE += valor.VISQTDTOTBPAGE;

            }

            return acumulador

        }, [])

Após fazer o agrupamento por datas estou tentando usar granulariade, para dividir as datas por: mês -> quinzena -> dia.

Estou usando a função a seguir para isso:

let monthMapping = dayGroup.reduce((mappedValues, item) => {

            let year = item.DTMSEQDIA.substr(0, 4);

            let month = item.DTMSEQDIA.substr(4, 2);

            let fortnight = Number(item.DTMSEQDIA.substr(6, 2)) <= 15 ? 1 : 2;

            if (mappedValues[item.YEARMONTH]) {

                mappedValues[item.YEARMONTH] = {

                    ...mappedValues[item.YEARMONTH],

                    VISQTDTOTBPAGE: mappedValues[item.YEARMONTH].VISQTDTOTBPAGE + item.VISQTDTOTBPAGE,

                };

                mappedValues[item.YEARMONTH].rows[fortnight - 1].VISQTDTOTBPAGE += item.VISQTDTOTBPAGE;

            } else {

                mappedValues[item.YEARMONTH] = {

                    YEARMONTH: `${year} - Mês ${month}`,

                    VISQTDTOTBPAGE: item.VISQTDTOTBPAGE,

                    rows: [

                        {

                            YEARMONTH: `${year} - Mês ${month} - Quinzena 1`,

                            VISQTDTOTBPAGE: fortnight == 1 ? item.VISQTDTOTBPAGE : 0,

                            fortnight: 1,

                        },

                        {

                            YEARMONTH: `${year} - Mês ${month} - Quinzena 2`,

                            VISQTDTOTBPAGE: fortnight == 2 ? item.VISQTDTOTBPAGE : 0,

                            fortnight: 2

                        },

                    ]

                };

            }

            return mappedValues;

        }, {});

Porém só estou conseguindo agrupar os dados por datas, e preciso de mais dois atributos do meu array de retorno para fazer o agrupamento. Que seriam, “VISCODOPERBDO”, “VISCODOPERREC”.

Resultado utilizando as funções acima:

   { 
   "02/2015":{ 
      "YEARMONTH":"2015 - Mês 02",
      "VISQTDTOTBPAGE":30,
      "rows":[ 
         { 
            "YEARMONTH":"2015 - Mês 02 - Quinzena 1",
            "VISQTDTOTBPAGE":30,
            "fortnight":1
         },
         { 
            "YEARMONTH":"2015 - Mês 02 - Quinzena 2",
            "VISQTDTOTBPAGE":0,
            "fortnight":2
         }
      ]
   }
}

Preciso acrescentar mais atributos do array no meu group.

Obrigado