Support Questions

Find answers, ask questions, and share your expertise

Unable to fetch attribute value based condition in JOLT

avatar
Expert Contributor

Hi Team,

I would like to fetch values of tag"AltriDatiGestionali" into each line. whenever natura value is 3.5. I'm trying with the below logic but no luck can anyone help in this

INPUT:

{
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": [
{
"Natura": "N3.5",
"NumeroLinea": 1,
"Quantita": "3.00000000",
"PrezzoUnitario": "209.04000000",
"AliquotaIVA": "0.00",
"ScontoMaggiorazione": [
{
"Tipo": "SC",
"Percentuale": "42.00",
"Importo": "263.40"
}
],
"Descrizione": "A6510108918 COPERCHIO TESTATA CIL.",
"PrezzoTotale": "363.72000000"
},
{
"Natura": "N3.5",
"NumeroLinea": 2,
"Quantita": "7.00000000",
"PrezzoUnitario": "254.93000000",
"AliquotaIVA": "0.00",
"ScontoMaggiorazione": [
{
"Tipo": "SC",
"Percentuale": "42.00",
"Importo": "749.49"
}
],
"Descrizione": "A4634230112 DISCO DEL FRENO",
"PrezzoTotale": "1035.02000000"
},
{
"AltriDatiGestionali": {
"RiferimentoTesto": "22122013260655367-000180 DEL 20/12/2022",
"RiferimentoData": "22122013260655367-000180 DEL 20/12/2022",
"TipoDato": "INTENTO"
}
}
]
}
}
}

JOLT SPEC:

[
{
"operation": "shift",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"NumeroLinea": {
"*": {
"@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea"
}
},
"Descrizione": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].Descrizione",
"Quantita": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].Quantita",
"PrezzoUnitario": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].PrezzoUnitario",
"ScontoMaggiorazione": {
"*": {
"Tipo": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].ScontoMaggiorazione[&3].Tipo",
"Percentuale": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].ScontoMaggiorazione[&3].Percentuale",
"Importo": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].ScontoMaggiorazione[&3].Importo"
}
},
"PrezzoTotale": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].PrezzoTotale",
"AliquotaIVA": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].AliquotaIVA",
"Natura": {
"#3.5": {
"@(2,Natura)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
"@(3,AltriDatiGestionali)": {
"TipoDato": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&4].AltriDatiGestionali.TipoDato",
"RiferimentoTesto": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&2].AltriDatiGestionali[&2].RiferimentoTesto",
"RiferimentoData": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].AltriDatiGestionali[&3].RiferimentoData"
}
},
"*": {
"@(2,Natura)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura"
}
},
"EsigibilitaIVA": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].EsigibilitaIVA"
}
}
}
}
}
},
{ "operation": "modify-overwrite-beta", "spec": { "*": "=recursivelySquashNulls" } }

]

 

Expected Output:

{
"FatturaElettronicaBody" : {
"DatiBeniServizi" : {
"DettaglioLinee" : [ {
"NumeroLinea" : 1,
"Descrizione" : "A6510108918 COPERCHIO TESTATA CIL.",
"Quantita" : "3.00000000",
"PrezzoUnitario" : "209.04000000",
"ScontoMaggiorazione" : [ {
"Tipo" : "SC",
"Percentuale" : "42.00",
"Importo" : "263.40"
} ],
"PrezzoTotale" : "363.72000000",
"AliquotaIVA" : "0.00",
"Natura" : "N3.5",
"AltriDatiGestionali": {
"RiferimentoTesto": "22122013260655367-000180 DEL 20/12/2022",
"RiferimentoData": "22122013260655367-000180 DEL 20/12/2022",
"TipoDato": "INTENTO"
}
}, {
"NumeroLinea" : 2,
"Descrizione" : "A4634230112 DISCO DEL FRENO",
"Quantita" : "7.00000000",
"PrezzoUnitario" : "254.93000000",
"ScontoMaggiorazione" : [ {
"Tipo" : "SC",
"Percentuale" : "42.00",
"Importo" : "749.49"
} ],
"PrezzoTotale" : "1035.02000000",
"AliquotaIVA" : "0.00",
"Natura" : "N3.5",
"AltriDatiGestionali": {
"RiferimentoTesto": "22122013260655367-000180 DEL 20/12/2022",
"RiferimentoData": "22122013260655367-000180 DEL 20/12/2022",
"TipoDato": "INTENTO"
}
} ]
}
}
}

 

Anyone help please. @SAMSAL , @MattWho 

6 REPLIES 6

avatar
Super Guru

Hi @PradNiFi1236 ,

I would try to do this in two shift operations: The first shift will extract "AltriDatiGestionali" value and put it in higher level than the array its contained in. The second shift will go into each "DettaglioLinee" element and extract each element where Natura value is 3.5N then redirect all the values accordingly  and then redirect the "AltriDatiGestionali" from the first shift level to each element as well.

The jolt spec will be as follows:

[
  {
    "operation": "shift",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "DettaglioLinee": {
            "*": {
              "AltriDatiGestionali": "FatturaElettronicaBody.DatiBeniServizi.AltriDatiGestionali",
              "*": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].&"
            }
          }
        }
      }
    }
    },
  {
    "operation": "shift",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "DettaglioLinee": {
            "*": {
              "Natura": {
                "N3.5": {
                  "$": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
                  "@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea",
                  "@(2,PrezzoUnitario)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].PrezzoUnitario",
                  "@(2,ScontoMaggiorazione)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].ScontoMaggiorazione",
                  "@(4,AltriDatiGestionali)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].AltriDatiGestionali"
                }
              }
            }
          }
        }
      }
    }
  }

]

Note: The spec doesn't include all key\value for each array element but you can follow the what specified to add others as needed.

Hope that helps.

 

 

 

avatar
Expert Contributor

Thanks For the reply @SAMSAL , this is working for Natura 3.5, for if natura not in 3.5. we don't need block related to (AltriDatiGestionali),  but i'm getting block of 

"AltriDatiGestionali" : {
"RiferimentoData" : "--"
}

since i'm using modify-overwrite-beta operation tocompute these values. Could you please help in getting rid of this AltriDatiGestionali tag fields  for Natura other than 3.5 value.

 

Regards,

Pradeep G

avatar
Super Guru

Can you send me the spec as it seems to be different from what I provided? Also if you can simplify the input\spec and keep it isolated to the problem that will save me sometime.

avatar
Expert Contributor

Hi @SAMSAL 

Please find my input and spec below. my input currently consists natura value other than 3.5 i.e 3.1. Sometimes input won't contain natura value at all. So thats why my spec will a little different than yours. in this case i don't want AltriDatiGestionali tag , but since i'm using modify-overwrite-beta logic its getting as empty, how to get rid of this.

INPUT:

{
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": [
{
"Natura": "3.1",
"NumeroLinea": 1,
"Descrizione": "A2751500680 BOBINA DI ACCENSIONE",
"PrezzoTotale": "3718.26000000"
}
]
}
}
}

 

 

SPEC:

[
{
"operation": "shift",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"AltriDatiGestionali": "FatturaElettronicaBody.DatiBeniServizi.AltriDatiGestionali",
"*": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].&"
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"NumeroLinea": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].NumeroLinea",
"PrezzoTotale": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].PrezzoTotale",
"Descrizione": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].Descrizione",
"Natura": {
"N3.5": {
"$": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
"@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea",
"@(2,PrezzoTotale)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].PrezzoTotale",
"@(2,Descrizione)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Descrizione",
"@(4,AltriDatiGestionali)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].AltriDatiGestionali"
},
"*": {
"$": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
"@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea",
"@(2,PrezzoTotale)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].PrezzoTotale",
"@(2,Descrizione)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Descrizione"
}
}
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"AltriDatiGestionali": {
"splitRiferimentoTesto": "=split('-',@(1,RiferimentoTesto))",
"stringsize": "=size(@(1,splitRiferimentoTesto[0]))",
"RiferimentoTesto": "=substring(@(1,splitRiferimentoTesto[0]),26,@(1,stringsize))",
"stringsize1": "=size(@(1,splitRiferimentoTesto[1]))",
"RiferimentoD": "=substring(@(1,splitRiferimentoTesto[1]),11,@(1,stringsize1))",
"splitRiferimentoData": "=split('/',@(1,RiferimentoD))",
"RiferimentoData": "=concat(@(1,splitRiferimentoData[2]),'-',@(1,splitRiferimentoData[1]),'-',@(1,splitRiferimentoData[0]))"
}
}
}
}
}
}
},
{
"operation": "remove",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"AltriDatiGestionali": {
"splitRiferimentoTesto": "",
"splitRiferimentoData": "",
"stringsize": "",
"stringsize1": "",
"RiferimentoD": ""
}
}
}
}
}
}
},
{
"operation": "cardinality",
"spec": {
"FatturaElettronicaBody": {
"DatiBeniServizi": {
"DettaglioLinee": {
"*": {
"NumeroLinea": "ONE",
"Descrizione": "ONE",
"Quantita": "ONE",
"PrezzoUnitario": "ONE",
"ScontoMaggiorazione": "ONE",
"AltriDatiGestionali": "ONE",
"PrezzoTotale": "ONE",
"AliquotaIVA": "ONE"
}
}
}
}
}
},

{ "operation": "modify-overwrite-beta", "spec": { "*": "=recursivelySquashNulls" } }


]

avatar
Super Guru

Hi @PradNiFi1236 ,

It seems in your spec when you do the "modify-overwrite-beta" it will create the object "AltriDatiGestionali" on each array element regardless of the Natura value and it doesnt seem that there is an easy way to remove the unwanted "AltriDatiGestionali" without over complicating the spec. However if you can change the order of how you do things in the spec you might be able to avoid this problem all together , so instead of doing the following:

 

shift-1, shift-2, modify-overwrite-beta, remove, cardinality

 

you can change the order as follows:

 

shift-1,  modify-overwrite-beta, remove, shift-2, cardinality

 

So basically after you isolate the "AltriDatiGestionali" object in the first shift , then you do the modification over there, then you remove unwanted fields and finally you shift to the element where Natura = N3.5  and finish with the cardinality.  I dont think the recursivelySquashNulls modify at the end is doing anything so you can remove it.

Here is how the spec looks like:

 

[
  {
    "operation": "shift",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "DettaglioLinee": {
            "*": {
              "AltriDatiGestionali": "FatturaElettronicaBody.DatiBeniServizi.AltriDatiGestionali",
              "*": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].&"
            }
          }
        }
      }
    }
},
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "AltriDatiGestionali": {
            "splitRiferimentoTesto": "=split('-',@(1,RiferimentoTesto))",
            "stringsize": "=size(@(1,splitRiferimentoTesto[0]))",
            "RiferimentoTesto": "=substring(@(1,splitRiferimentoTesto[0]),26,@(1,stringsize))",
            "stringsize1": "=size(@(1,splitRiferimentoTesto[1]))",
            "RiferimentoD": "=substring(@(1,splitRiferimentoTesto[1]),11,@(1,stringsize1))",
            "splitRiferimentoData": "=split('/',@(1,RiferimentoD))",
            "RiferimentoData": "=concat(@(1,splitRiferimentoData[2]),'-',@(1,splitRiferimentoData[1]),'-',@(1,splitRiferimentoData[0]))"
          }
        }
      }
    }
  }
,
  {
    "operation": "remove",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "AltriDatiGestionali": {
            "splitRiferimentoTesto": "",
            "splitRiferimentoData": "",
            "stringsize": "",
            "stringsize1": "",
            "RiferimentoD": ""
          }
        }
      }
    }
    }

  ,

  {
    "operation": "shift",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "DettaglioLinee": {
            "*": {
              "NumeroLinea": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].NumeroLinea",
              "PrezzoTotale": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].PrezzoTotale",
              "Descrizione": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&1].Descrizione",
              "Natura": {
                "N3.5": {
                  "$": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
                  "@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea",
                  "@(2,PrezzoTotale)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].PrezzoTotale",
                  "@(2,Descrizione)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Descrizione",
                  "@(4,AltriDatiGestionali)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].AltriDatiGestionali"
                },
                "*": {
                  "$": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Natura",
                  "@(2,NumeroLinea)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].NumeroLinea",
                  "@(2,PrezzoTotale)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].PrezzoTotale",
                  "@(2,Descrizione)": "FatturaElettronicaBody.DatiBeniServizi.DettaglioLinee[&3].Descrizione"
                }
              }
            }
          }
        }
      }
    }
}
   ,


  {
    "operation": "cardinality",
    "spec": {
      "FatturaElettronicaBody": {
        "DatiBeniServizi": {
          "DettaglioLinee": {
            "*": {
              "NumeroLinea": "ONE",
              "Descrizione": "ONE",
              "Quantita": "ONE",
              "PrezzoUnitario": "ONE",
              "ScontoMaggiorazione": "ONE",
              "AltriDatiGestionali": "ONE",
              "PrezzoTotale": "ONE",
              "AliquotaIVA": "ONE"
            }
          }
        }
      }
    }
      }

]

 

If that helps please accept solution.

Thanks

avatar
Expert Contributor

@SAMSAL , thanks for the quick response. As always you do.