From e8e7858093c8d808dc02b9ba7a8faebedde332ab Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Wed, 1 Jul 2026 13:04:05 +0200 Subject: [PATCH 1/5] elixForms API v2 - update EFTL for table of amounts with year --- .../elixPro - Template Delibera ONLYTABLE.yml | 78 +++++-------------- 1 file changed, 20 insertions(+), 58 deletions(-) diff --git a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml index 1817c60..6eda357 100644 --- a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml +++ b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml @@ -40,29 +40,10 @@ runtime: prepareEftlDocument(String.raw` [EFTL] - [!-- - Codice Fiscale Anno Importo Modalità - RSSNDR76L16I153I 2026 171,46 In orario di lavoro - RSSNDR76L16I153I 2025 514,37 In orario di lavoro - RSSNDR76L16I153I 2024 220,45 In orario di lavoro - RSSNDR76L16I153I 2025 73,48 Fuori orario di lavoro - RSSNDR76L16I153I 2024 122,47 Fuori orario di lavoro - RSSNDR76L16I153I 2023 318,42 Fuori orario di lavoro - LNGSDR63M23L074R 7500 In orario di lavoro - TLTFRC83R30G337R 9.000 Fuori orario di lavoro - LNGSDR63M23L074R 4500 Fuori orario di lavoro - CRSDNL85E53G337Q 870,74 Fuori orario di lavoro - TLTFRC83R30G337R 800 In orario di lavoro - --] - - [VAR name="insertCodiciFiscali" type="string"][TAG]SCHEMAID,862,COL0001,IUQOID, ,##[/TAG][/VAR] - [VAR name="insertImporti" type="string"][TAG]SCHEMAID,862,COL0002,IUQOID, ,##[/TAG][/VAR] - [VAR name="insertAnni" type="string"][TAG]SCHEMAID,862,COL0005,IUQOID, ,##[/TAG][/VAR] - [VAR name="insertModalita" type="string"][TAG]SCHEMAID,862,COL0003,IUQOID, ,##[/TAG][/VAR] - [VAR name="codiciFiscaliIterable" type="iterable"][SPLIT regex="##"][VALUE_OF varname="insertCodiciFiscali" /][/SPLIT][/VAR] - [VAR name="importiIterable" type="iterable"][SPLIT regex="##"][VALUE_OF varname="insertImporti" /][/SPLIT][/VAR] - [VAR name="anniIterable" type="iterable"][SPLIT regex="##"][VALUE_OF varname="insertAnni" /][/SPLIT][/VAR] - [VAR name="modalitaIterable" type="iterable"][SPLIT regex="##"][VALUE_OF varname="insertModalita" /][/SPLIT][/VAR] + [VAR name="codiciFiscaliIterable" type="iterable"][SPLIT regex="##"][TAG]SCHEMAID,862,COL0001,IUQOID, ,##[/TAG][/SPLIT][/VAR] + [VAR name="importiIterable" type="iterable"][SPLIT regex="##"][TAG]SCHEMAID,862,COL0002,IUQOID, ,##[/TAG][/SPLIT][/VAR] + [VAR name="anniIterable" type="iterable"][SPLIT regex="##"][TAG]SCHEMAID,862,COL0005,IUQOID, ,##[/TAG][/SPLIT][/VAR] + [VAR name="modalitaIterable" type="iterable"][SPLIT regex="##"][TAG]SCHEMAID,862,COL0003,IUQOID, ,##[/TAG][/SPLIT][/VAR] [VAR name="insertCount" type="number"][SIZE_OF varname="codiciFiscaliIterable" /][/VAR] [VAR name="datiRipartizioneIterable" type="iterable"][SPLIT regex="##" emptyIfBlank="true"][TAG]GETVALUEBYTAG,RIPARTIZIONE_DATI_COMPLETI,REQUEST,IUQOID,CONCAT,##[/TAG][/SPLIT][/VAR] @@ -72,65 +53,49 @@ runtime: [VAR name="item4" type="number"][% item4 = 3; %][/VAR] [VAR name="item5" type="number"][% item5 = 4; %][/VAR] - - - - - - -

C: [%= insertCodiciFiscali %]

-

I: [%= insertImporti %]

-

A: [%= insertAnni %]

-

M: [%= insertModalita %]

- + [FOR varName="ripartizione" iterable="datiRipartizioneIterable"] [VAR name="datiIterable" type="iterable"][SPLIT regex=";;" emptyIfBlank="true"][VALUE_OF varname="ripartizione" /][/SPLIT][/VAR] - [VAR name="importoDentro" type="number"][% importoDentro = 0; %][/VAR] - [VAR name="importoFuori" type="number"][% importoFuori = 0; %][/VAR] - + [VAR name="codiceFiscaleCorrente"][VALUE_OF varname="datiIterable" index="item2" /][/VAR] + - ! - [% insertIdx = 0; %] + + [% insertIdx = 0; firstCfMatch = true; %] [WHILE threshold="99"] [CONDITION][% insertIdx < insertCount %][/CONDITION] [DO] - [VAR name="codiceFiscaleCorrente"][VALUE_OF varname="datiIterable" index="item2" /][/VAR] [VAR name="codiceFiscale"][VALUE_OF varname="codiciFiscaliIterable" index="insertIdx" /][/VAR] [VAR name="anno"][VALUE_OF varname="anniIterable" index="insertIdx" /][/VAR] [VAR name="modalita"][VALUE_OF varname="modalitaIterable" index="insertIdx" /][/VAR] [VAR name="importo"][VALUE_OF varname="importiIterable" index="insertIdx" /][/VAR] [IF] - [CONDITION][% codiceFiscale == codiceFiscaleCorrente && modalita == "In orario di lavoro" %][/CONDITION] + [CONDITION][% codiceFiscale == codiceFiscaleCorrente && importo != "" && importo != 0 %][/CONDITION] [THEN] - [VAR name="importoDentro" type="number"][VALUE_OF varname="importiIterable" index="insertIdx" /][/VAR] - ![%= anno %]; [VALUE_OF varname="importo" /] + [% modalitaOut = ""; annoOut = ""; suddivisoOut = ""; %] + [IF][CONDITION][% modalita != "" %][/CONDITION][THEN][% modalitaOut = modalita + " "; %][/THEN][/IF] + [IF][CONDITION][% anno != "" %][/CONDITION][THEN][% annoOut = "nel " + anno; %][/THEN][/IF] + [IF][CONDITION][% firstCfMatch == true %][/CONDITION][THEN][% suddivisoOut = "suddiviso come "; %][/THEN][/IF] + + + + + + [IF][CONDITION][% firstCfMatch == true %][/CONDITION][THEN][% firstCfMatch = false; %][/THEN][/IF] [/THEN] [/IF] - [IF] - [CONDITION][% codiceFiscale == codiceFiscaleCorrente && modalita == "Fuori orario di lavoro" %][/CONDITION] - [THEN] - [VAR name="importoFuori" type="number"][VALUE_OF varname="importiIterable" index="insertIdx" /][/VAR] - ![%= anno %]; [VALUE_OF varname="importo" /] - [/THEN] - [/IF] - [% insertIdx = insertIdx + 1; %] [/DO] [/WHILE] @@ -138,9 +103,6 @@ runtime: [/FOR]
Nominativo Codice fiscale Qualifica Struttura Importo (€)
[VALUE_OF varname="datiIterable" index="item1" /] [VALUE_OF varname="datiIterable" index="item2" /] [VALUE_OF varname="datiIterable" index="item3" /] [VALUE_OF varname="datiIterable" index="item4" /] [FORMAT type="number" pattern="#,##0.00"][VALUE_OF varname="datiIterable" index="item5" /][/FORMAT]
[%= suddivisoOut %][%= modalitaOut %][%= annoOut %][FORMAT type="number" pattern="#,##0.00"][VALUE_OF varname="importo" /][/FORMAT]
[%= codiceFiscaleCorrente %] = [%= codiceFiscale %] and [%= modalita %] per [%= anno %] => [%= importoDentro %]; [%= importoFuori %]
- - - [/EFTL] `); - type: after-response From f87f5758254529c5ad5160b29235d5b37fffc434 Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Mon, 6 Jul 2026 16:23:45 +0200 Subject: [PATCH 2/5] fix EFTL output for delibera tempate --- .../Proposta/elixPro - Template Delibera ONLYTABLE.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml index 6eda357..a824ec8 100644 --- a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml +++ b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/elixPro - Template Delibera ONLYTABLE.yml @@ -118,8 +118,12 @@ runtime: var response = res.getBody(); if (response.value.code === "ERROR") { - decodedDocument = "ERRORE EFTL!\n"; - decodedDocument += response.value.description.split("\n").slice(0, 3).join("\n"); + decodedDocument = "

ERRORE EFTL!

"; + decodedDocument += "" + response.value.description.split("\n").slice(0, 3).join("\n") + ""; + } + else if (response.value.processedDocument === "") { + decodedDocument = "

EMPTY OUTPUT!

"; + decodedDocument += "" + response.value.description.split("\n").slice(0, 3).join("\n") + ""; } else { decodedDocument = atob(response.value.processedDocument); From 5a0fcea79e33df0dc45508a16c45bf2af5b47842 Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Thu, 9 Jul 2026 16:53:58 +0200 Subject: [PATCH 3/5] add EFTL scripts to create CSV list for protocollo --- .../Elenco Contraenti in formato CSV DSAN.yml | 71 +++++++++++++++++++ .../DSAN/Elenco RS in formato CSV DSAN.yml | 71 +++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco Contraenti in formato CSV DSAN.yml create mode 100644 collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco RS in formato CSV DSAN.yml diff --git a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco Contraenti in formato CSV DSAN.yml b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco Contraenti in formato CSV DSAN.yml new file mode 100644 index 0000000..73eb969 --- /dev/null +++ b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco Contraenti in formato CSV DSAN.yml @@ -0,0 +1,71 @@ +info: + name: Elenco Contraenti in formato CSV DSAN + type: http + seq: 30 + +http: + method: POST + url: "{{elixFormsApiUrl}}/eftl/process/v1" + headers: + - name: x-requested-with + value: XMLHttpRequest + - name: x-api-key + value: "{{elixFormsWsAuthenticationToken}}" + - name: x-ef-request-id + value: "34398" + body: + type: json + data: |- + { + "userDocument": "{{elixBase64EftlDocument}}", // see the pre-request script + "userContext": { + "lang": "IT", + "crlf": "\r\n" + } + } + auth: inherit + +runtime: + scripts: + - type: before-request + code: |- + const { prepareEftlDocument } = require("./elixFormsJs.js") + // Copy-pasta your EFTL document below inside the template literals (`) + prepareEftlDocument(String.raw` + [EFTL][HEADER name="trimDocument" value="true" type="boolean" /] + + [VAR name="firstItem" type="number"][% firstItem = 0; %][/VAR] + [VAR name="secondItem" type="number"][% secondItem = 1; %][/VAR] + [VAR name="elencoContraentiCsv" type="string"][% elencoContraentiCsv = ""; %][/VAR] + + [VAR name="elencoContraenti" type="string"][TRIM][TAG]GETVALUEBYTAG,CONTRATTO_CONTRAENTI,REQUEST,ID_OBJECT[/TAG][/TRIM][/VAR] + [VAR name="elencoContraentiIterable" type="iterable"][SPLIT regex="\n" emptyIfBlank="true"][VALUE_OF varname="elencoContraenti" /][/SPLIT][/VAR] + [VAR name="elencoContraentiCount" type="number"][SIZE_OF varname="elencoContraentiIterable" /][/VAR] + + [VAR name="contraenteIdx" type="number"][% contraenteIdx = 0; %][/VAR] + [WHILE threshold="99"] + [CONDITION][% contraenteIdx < elencoContraentiCount %][/CONDITION] + [DO] + [VAR name="contraenteIterable" type="iterable"][SPLIT regex=", CF/PIVA: " emptyIfBlank="true"][TRIM][VALUE_OF varname="elencoContraentiIterable" index="contraenteIdx" /][/TRIM][/SPLIT][/VAR] + [VAR name="contraenteDenominazione" type="string"][VALUE_OF varname="contraenteIterable" index="firstItem" /][/VAR] + + [% elencoContraentiCsv = elencoContraentiCsv + contraenteDenominazione; %] + [% contraenteIdx = contraenteIdx + 1; %] + + [IF] + [CONDITION][% contraenteIdx < elencoContraentiCount %][/CONDITION] + [THEN] + [% elencoContraentiCsv = elencoContraentiCsv + ", "; %] + [/THEN] + [/IF] + [/DO][/WHILE] + + [%= elencoContraentiCsv %] + [/EFTL] + `); + +settings: + encodeUrl: true + timeout: 0 + followRedirects: true + maxRedirects: 5 diff --git a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco RS in formato CSV DSAN.yml b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco RS in formato CSV DSAN.yml new file mode 100644 index 0000000..42b1ae8 --- /dev/null +++ b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/DSAN/Elenco RS in formato CSV DSAN.yml @@ -0,0 +1,71 @@ +info: + name: Elenco RS in formato CSV DSAN + type: http + seq: 30 + +http: + method: POST + url: "{{elixFormsApiUrl}}/eftl/process/v1" + headers: + - name: x-requested-with + value: XMLHttpRequest + - name: x-api-key + value: "{{elixFormsWsAuthenticationToken}}" + - name: x-ef-request-id + value: "34398" + body: + type: json + data: |- + { + "userDocument": "{{elixBase64EftlDocument}}", // see the pre-request script + "userContext": { + "lang": "IT", + "crlf": "\r\n" + } + } + auth: inherit + +runtime: + scripts: + - type: before-request + code: |- + const { prepareEftlDocument } = require("./elixFormsJs.js") + // Copy-pasta your EFTL document below inside the template literals (`) + prepareEftlDocument(String.raw` + [EFTL][HEADER name="trimDocument" value="true" type="boolean" /] + + [VAR name="firstItem" type="number"][% firstItem = 0; %][/VAR] + [VAR name="secondItem" type="number"][% secondItem = 1; %][/VAR] + [VAR name="elencoResponsabiliCsv" type="string"][% elencoResponsabiliCsv = ""; %][/VAR] + + [VAR name="elencoResponsabili" type="string"][TRIM][TAG]GETVALUEBYTAG,CONTRATTO_RESPONSABILI,REQUEST,ID_OBJECT[/TAG][/TRIM][/VAR] + [VAR name="elencoResponsabiliIterable" type="iterable"][SPLIT regex="\n" emptyIfBlank="true"][VALUE_OF varname="elencoResponsabili" /][/SPLIT][/VAR] + [VAR name="elencoResponsabiliCount" type="number"][SIZE_OF varname="elencoResponsabiliIterable" /][/VAR] + + [VAR name="responsabileIdx" type="number"][% responsabileIdx = 0; %][/VAR] + [WHILE threshold="99"] + [CONDITION][% responsabileIdx < elencoResponsabiliCount %][/CONDITION] + [DO] + [VAR name="responsabileIterable" type="iterable"][SPLIT regex=", CF: " emptyIfBlank="true"][TRIM][VALUE_OF varname="elencoResponsabiliIterable" index="responsabileIdx" /][/TRIM][/SPLIT][/VAR] + [VAR name="responsabileNominativo" type="string"][VALUE_OF varname="responsabileIterable" index="firstItem" /][/VAR] + + [% elencoResponsabiliCsv = elencoResponsabiliCsv + responsabileNominativo; %] + [% responsabileIdx = responsabileIdx + 1; %] + + [IF] + [CONDITION][% responsabileIdx < elencoResponsabiliCount %][/CONDITION] + [THEN] + [% elencoResponsabiliCsv = elencoResponsabiliCsv + ", "; %] + [/THEN] + [/IF] + [/DO][/WHILE] + + [%= elencoResponsabiliCsv %] + [/EFTL] + `); + +settings: + encodeUrl: true + timeout: 0 + followRedirects: true + maxRedirects: 5 From b48de55aad71a9f652afb52e612623310f5f3098 Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Thu, 9 Jul 2026 16:54:42 +0200 Subject: [PATCH 4/5] update custom notification message on Liquidazione submission --- .../Partecipanti - Body NO fancy HTML.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/Partecipanti - Body NO fancy HTML.yml b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/Partecipanti - Body NO fancy HTML.yml index cccef2f..4be93c0 100644 --- a/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/Partecipanti - Body NO fancy HTML.yml +++ b/collections/elixForms API v2/EFTL processing/CCT - Liquidazione Compensi/Proposta/Partecipanti - Body NO fancy HTML.yml @@ -12,7 +12,7 @@ http: - name: x-api-key value: "{{elixFormsWsAuthenticationToken}}" - name: x-ef-request-id - value: "32873" + value: "34396" body: type: json data: |- @@ -39,9 +39,12 @@ runtime: [VAR name="rsp_nome" type="string"][TAG]GETVALUEBYTAG,RSP_NOME,REQUEST,ID_OBJECT[/TAG][/VAR] [% responsabileScientificoProponente = rsp_titolo + " " + rsp_cognome + " " + rsp_nome; %] -

È necessario compilare la DSAN collegata all'istanza del modulo "Ripartizione Utili / Compensi - Presentazione Proposta" i cui dati sono riportati nel seguito!

+ [% secondItem = 1; %] + [VAR name="partecipanteIterable" type="iterable"][SPLIT regex="\] "][TAG]GETVALUEBYTAG,PARTECIPANTE,REQUEST,ID_OBJECT[/TAG][/SPLIT][/VAR] + [VAR name="partecipante" type="string"][VALUE_OF varname="partecipanteIterable" index="secondItem" /][/VAR] + [VAR name="importo" type="string"][TAG]GETVALUEBYTAG,IMPORTO_RIPARTIZIONE,REQUEST,ID_OBJECT[/TAG][/VAR] -
+

È necessario compilare la DSAN collegata all'istanza del modulo "Ripartizione Utili / Compensi - Presentazione Proposta" i cui dati sono riportati nel seguito!

Riepilogo dei dati della Proposta

Responsabile Scientifico proponente:  [%= responsabileScientificoProponente %]

@@ -49,9 +52,14 @@ runtime:

Titolo contratto:  [TAG]GETVALUEBYTAG,TITOLO_CONTRATTO,REQUEST,ID_OBJECT[/TAG]

Contraente/i:  [TAG]GETVALUEBYTAG,CONTRATTO_CONTRAENTI,REQUEST,ID_OBJECT[/TAG]

-
+

Ripartizione

+

Partecipante:  [%= partecipante %]

+

Importo (€):  [FORMAT type="number" pattern="#,##0.00"][VALUE_OF varname="importo" /][/FORMAT]

-

Il link al modulo di presentazione della DSAN è: [%= href %]

+

Modulo DSAN

+ +

Link al modulo:  [%= href %]

+

(se il link non fosse cliccabile, copiarlo e incollarlo in una nuova finestra del browser)

[/EFTL] `); From 25d8d3132528d26d05d015d2c78fd7ecf0b886e1 Mon Sep 17 00:00:00 2001 From: Pier-Paolo Mammi Date: Thu, 9 Jul 2026 16:55:41 +0200 Subject: [PATCH 5/5] update request values (no changes) --- .../Anagrafiche/Autorizzatori Struttura.yml | 6 +-- .../Dipendente (Codice fiscale).yml | 54 +------------------ 2 files changed, 5 insertions(+), 55 deletions(-) diff --git a/collections/IDEM WebServices/Anagrafiche/Autorizzatori Struttura.yml b/collections/IDEM WebServices/Anagrafiche/Autorizzatori Struttura.yml index 8da4b83..6d40f06 100644 --- a/collections/IDEM WebServices/Anagrafiche/Autorizzatori Struttura.yml +++ b/collections/IDEM WebServices/Anagrafiche/Autorizzatori Struttura.yml @@ -5,7 +5,7 @@ info: http: method: GET - url: "{{IdemApiUrl}}/strutt_dip_centri_resp.php?id_ab=105846" + url: "{{IdemApiUrl}}/strutt_dip_centri_resp.php?cd_csa=106154" params: - name: id_ab value: "199930" @@ -36,9 +36,8 @@ http: type: query disabled: true - name: cd_csa - value: "106284" + value: "106154" type: query - disabled: true - name: id_ab value: "186475" type: query @@ -46,6 +45,7 @@ http: - name: id_ab value: "105846" type: query + disabled: true auth: inherit settings: diff --git a/collections/IDEM WebServices/Anagrafiche/Dipendente (Codice fiscale).yml b/collections/IDEM WebServices/Anagrafiche/Dipendente (Codice fiscale).yml index 1c9ed91..12bec5a 100644 --- a/collections/IDEM WebServices/Anagrafiche/Dipendente (Codice fiscale).yml +++ b/collections/IDEM WebServices/Anagrafiche/Dipendente (Codice fiscale).yml @@ -5,61 +5,11 @@ info: http: method: GET - url: "{{IdemApiUrl}}/dipendente.php?cod_fis=SPRGRL67B15F611N" + url: "{{IdemApiUrl}}/dipendente.php?cod_fis=SAIFNC69H24Z604D" params: - name: cod_fis - value: MMMPPL74T17E463A + value: SAIFNC69H24Z604D type: query - disabled: true - - name: cod_fis - value: BLLCDL60C28H224V - type: query - description: Codice fislcale del dipendente - disabled: true - - name: cod_fis - value: RCRVCN92S06D284C - type: query - disabled: true - - name: cod_fis - value: NCLMHL73P02I862C - type: query - disabled: true - - name: cod_fis - value: CRRRRT63T31H223A - type: query - disabled: true - - name: cod_fis - value: BRTSMN69B65G337A - type: query - disabled: true - - name: cod_fis - value: XXXXXXXXXXXXXXXX - type: query - description: 404 Not Found - Testing - disabled: true - - name: cod_fis - value: BFFSFN68R19H501F - type: query - disabled: true - - name: cod_fis - value: TLTFRC83R30G337R - type: query - disabled: true - - name: cod_fis - value: GNTLDN64A67D643P - type: query - disabled: true - - name: cod_fis - value: DNFGTN65H09I441P - type: query - disabled: true - - name: cod_fis - value: SPRGRL67B15F611N - type: query - - name: cod_fis - value: RMGGNN82S16I496I - type: query - disabled: true auth: inherit settings: