From abd1bf13590f23084204d23c53ae6636c04830d1 Mon Sep 17 00:00:00 2001 From: MarekBodingerBA <104828482+MarekBodingerBA@users.noreply.github.com> Date: Tue, 12 Nov 2024 13:14:50 +0100 Subject: [PATCH] New government forms migration (#1640) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump form definition versions and set all Slovensko.sk forms to `newGovernmentXml` * Handle special case of tax form in ConvertService * Add JsonVersion to new Slovensko.sk XMLs * Bump also "Žiadosť o nájom bytu" pospVersion as it needs to be regenerated too to include JsonVersion --------- Co-authored-by: Marek Bodinger --- .../src/definitions/formDefinitions.ts | 15 ++++-- forms-shared/src/slovensko-sk/extractJson.ts | 11 ++++- .../slovensko-sk/file-templates/schemaXsd.ts | 1 + forms-shared/src/slovensko-sk/generateXml.ts | 4 ++ .../__snapshots__/slovenskoSkForm.ts.snap | 46 +++++++++++++------ .../tests/slovensko-sk/extractJson.ts | 11 +++++ .../src/convert/convert.helper.ts | 19 ++++++++ .../src/convert/convert.service.ts | 9 +++- 8 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 nest-forms-backend/src/convert/convert.helper.ts diff --git a/forms-shared/src/definitions/formDefinitions.ts b/forms-shared/src/definitions/formDefinitions.ts index 15c729c1f..77f7e35bc 100644 --- a/forms-shared/src/definitions/formDefinitions.ts +++ b/forms-shared/src/definitions/formDefinitions.ts @@ -58,7 +58,7 @@ export const formDefinitions: FormDefinition[] = [ title: 'Žiadosť o stanovisko k investičnému zámeru', schemas: stanoviskoKInvesticnemuZameru, pospID: '00603481.stanoviskoKInvesticnemuZameru', - pospVersion: '0.8', + pospVersion: '0.9', publisher: 'ico://sk/00603481', gestor: 'Pinter Martin', termsAndConditions: generalTermsAndConditions, @@ -70,6 +70,7 @@ export const formDefinitions: FormDefinition[] = [ ginisPersonName: 'Simeunovičová Ľudmila', }, isSigned: false, + newGovernmentXml: true, }, { type: FormDefinitionType.SlovenskoSkGeneric, @@ -77,7 +78,7 @@ export const formDefinitions: FormDefinition[] = [ title: 'Žiadosť o záväzné stanovisko k investičnej činnosti', schemas: zavazneStanoviskoKInvesticnejCinnosti, pospID: '00603481.zavazneStanoviskoKInvesticnejCinnosti', - pospVersion: '0.7', + pospVersion: '0.8', publisher: 'ico://sk/00603481', gestor: 'Pinter Martin', termsAndConditions: generalTermsAndConditions, @@ -89,6 +90,7 @@ export const formDefinitions: FormDefinition[] = [ ginisPersonName: 'Simeunovičová Ľudmila', }, isSigned: false, + newGovernmentXml: true, }, { type: FormDefinitionType.SlovenskoSkGeneric, @@ -96,7 +98,7 @@ export const formDefinitions: FormDefinition[] = [ title: 'Predzáhradky', schemas: predzahradky, pospID: '00603481.predzahradky', - pospVersion: '1.0', + pospVersion: '1.1', publisher: 'ico://sk/00603481', gestor: 'Pinter Martin', termsAndConditions: generalTermsAndConditions, @@ -107,6 +109,7 @@ export const formDefinitions: FormDefinition[] = [ ginisOrganizationName: 'OUIC', ginisPersonName: 'Simeunovičová Ľudmila', }, + newGovernmentXml: true, }, { type: FormDefinitionType.SlovenskoSkGeneric, @@ -114,7 +117,7 @@ export const formDefinitions: FormDefinition[] = [ title: 'Komunitné záhrady', schemas: komunitneZahrady, pospID: '00603481.komunitneZahrady', - pospVersion: '1.0', + pospVersion: '1.1', publisher: 'ico://sk/00603481', gestor: 'Pinter Martin', termsAndConditions: generalTermsAndConditions, @@ -125,6 +128,7 @@ export const formDefinitions: FormDefinition[] = [ ginisOrganizationName: 'OUIC', ginisPersonName: 'Simeunovičová Ľudmila', }, + newGovernmentXml: true, }, { type: FormDefinitionType.SlovenskoSkTax, @@ -138,6 +142,7 @@ export const formDefinitions: FormDefinition[] = [ termsAndConditions: taxTermsAndConditions, messageSubjectDefault: 'Priznanie k dani z nehnuteľností', isSigned: true, + newGovernmentXml: true, }, // testing integration of new posID against GINIS&NORIS, will be removed afterwards { @@ -160,7 +165,7 @@ export const formDefinitions: FormDefinition[] = [ schemas: ziadostONajomBytu, // pospID contains different wording because the original form was created with a different name pospID: '00603481.ziadostONajomnyByt', - pospVersion: '1.1', + pospVersion: '1.2', publisher: 'ico://sk/00603481', gestor: 'Pinter Martin', termsAndConditions: generalTermsAndConditions, diff --git a/forms-shared/src/slovensko-sk/extractJson.ts b/forms-shared/src/slovensko-sk/extractJson.ts index ecdf6f45f..b8ae5e27a 100644 --- a/forms-shared/src/slovensko-sk/extractJson.ts +++ b/forms-shared/src/slovensko-sk/extractJson.ts @@ -19,6 +19,14 @@ const baseFormXmlSchema = { }, required: ['xmlns'], }, + JsonVersion: { + type: 'array', + items: { + type: 'string', + }, + minItems: 1, + maxItems: 1, + }, Json: { type: 'array', items: { @@ -39,6 +47,7 @@ type BaseFormXml = { $: { xmlns: string } + JsonVersion: [string] Json: [string] } } @@ -66,8 +75,6 @@ export enum ExtractJsonFromSlovenskoSkXmlErrorType { /** * Extracts JSON data from Slovensko.sk XML string - * - * TODO: Consider adding `omitExtraData` */ export async function extractJsonFromSlovenskoSkXml( formDefinition: FormDefinitionSlovenskoSk, diff --git a/forms-shared/src/slovensko-sk/file-templates/schemaXsd.ts b/forms-shared/src/slovensko-sk/file-templates/schemaXsd.ts index 625014e75..8b146fbab 100644 --- a/forms-shared/src/slovensko-sk/file-templates/schemaXsd.ts +++ b/forms-shared/src/slovensko-sk/file-templates/schemaXsd.ts @@ -13,6 +13,7 @@ export const getSchemaXsd = ( + diff --git a/forms-shared/src/slovensko-sk/generateXml.ts b/forms-shared/src/slovensko-sk/generateXml.ts index 4afb5887a..30e82644f 100644 --- a/forms-shared/src/slovensko-sk/generateXml.ts +++ b/forms-shared/src/slovensko-sk/generateXml.ts @@ -25,6 +25,7 @@ function getSlovenskoSkXmlObjectBase( */ export function getEmptySlovenskoSkXmlObject(formDefinition: FormDefinitionSlovenskoSk) { return getSlovenskoSkXmlObjectBase(formDefinition, { + JsonVersion: '', Json: JSON.stringify({}), Summary: { Form: { @@ -46,6 +47,9 @@ export async function generateSlovenskoSkXmlObject( serverFiles?: FormsBackendFile[], ) { return getSlovenskoSkXmlObjectBase(formDefinition, { + // Before versioning for JSON is implemented, we will hardcode the version to 1.0 as we want to have the version + // in Slovensko.sk XMLs beforehand to accommodate for future changes. + JsonVersion: '1.0', Json: JSON.stringify(formData), Summary: await renderSlovenskoXmlSummary(formDefinition, formData, serverFiles), TermsAndConditions: removeMarkdown(formDefinition.termsAndConditions), diff --git a/forms-shared/tests/slovensko-sk/__snapshots__/slovenskoSkForm.ts.snap b/forms-shared/tests/slovensko-sk/__snapshots__/slovenskoSkForm.ts.snap index 695014ab0..eabc1d3a9 100644 --- a/forms-shared/tests/slovensko-sk/__snapshots__/slovenskoSkForm.ts.snap +++ b/forms-shared/tests/slovensko-sk/__snapshots__/slovenskoSkForm.ts.snap @@ -2,15 +2,16 @@ exports[`slovenskoSkForm komunitne-zahrady schema XSD should match snapshot 1`] = ` " - + @@ -85,7 +86,8 @@ exports[`slovenskoSkForm komunitne-zahrady schema XSD should match snapshot 1`] exports[`slovenskoSkForm komunitneZahradyExample XML should match snapshot 1`] = ` " - + + 1.0 {"ziadatel":{"menoPriezvisko":{"meno":"Ján","priezvisko":"Kováč"},"adresa":{"ulicaACislo":"Mierová 12","mestoPsc":{"mesto":"Bratislava","psc":"82108"}},"email":"jan.kovac@priklad.sk","telefon":"+421905987654"},"obcianskeZdruzenie":{"nazovObcianskehoZdruzenia":"Zelená Bratislava","ico":"12345678","adresaSidla":{"ulicaACislo":"Šancová 56","mestoPsc":{"mesto":"Bratislava","psc":"83104"}},"statutar":{"menoStatutara":"Marta","priezviskoStatutara":"Nováková"}},"pozemok":{"typPozemku":"predschvalenyPozemok","predschvalenyPozemokVyber":"Azalková"},"zahrada":{"dovodyZalozenia":"Priestor je v súčasnosti nevyužívaný a zanedbaný. Komunitná záhrada by poskytla miesto pre miestnych obyvateľov na pestovanie rastlín a stretávanie sa.","suhlasKomunity":"Získali sme podporu od miestnych obyvateľov prostredníctvom petície a verejných stretnutí.","organizacnyTim":"Tím bude pozostávať z miestnych dobrovoľníkov, ktorí sa budú starať o záhradu a organizovať komunitné aktivity.","prevadzka":"Údržbu zelene budú zabezpečovať dobrovoľníci. Odpad bude separovaný a recyklovaný, pričom sa budeme snažiť o zero-waste režim.","inkluzivnost":"Projekt bude otvorený pre všetkých miestnych obyvateľov. Záujemcovia o záhradkárčenie budú vybraní na základe transparentného procesu.","financovanie":"Plánujeme využiť granty a členské poplatky. Predbežný rozpočet už máme a plánujeme ho doplniť o ďalšie zdroje."},"prilohyPredschvalenyPozemok":{"umiestnenie":"ace1a8c2-f96e-4583-bdf9-64233b582572","dizajn":"27766841-1f8f-4daa-b6e9-df826b294ae0","fotografie":"7510f8c5-c777-4426-8166-90f253eb0738","ine":"1f174bf8-328c-4d1e-8dbb-2afe98e1a0f0"}}
@@ -185,15 +187,16 @@ exports[`slovenskoSkForm komunitneZahradyExample XML should match snapshot 1`] = exports[`slovenskoSkForm predzahradky schema XSD should match snapshot 1`] = ` " - + @@ -268,7 +271,8 @@ exports[`slovenskoSkForm predzahradky schema XSD should match snapshot 1`] = ` exports[`slovenskoSkForm predzahradkyExample XML should match snapshot 1`] = ` " - + + 1.0 {"ziadatel":{"menoPriezvisko":{"meno":"Ján","priezvisko":"Kováč"},"adresa":{"ulicaACislo":"Mierová 12","mestoPsc":{"mesto":"Bratislava","psc":"82108"}},"email":"jan.kovac@priklad.sk","telefon":"+421905987654"},"predzahradka":{"typRegistracie":"nova","adresa":"Dunajská 34","mestskaCast":"Devín","parcelneCislo":"46549/435413","ine":"Predzáhradka bude obsahovať rôzne druhy kvetov a kríkov, ktoré budú starostlivo vybrané tak, aby kvitli počas celého roka. Plánujeme tiež inštalovať malé fontány a lavičky pre oddych.","rozlozenieNova":"Predzáhradka bude rozdelená na tri sekcie: kvetinovú, kríkovú a relaxačnú zónu s lavičkami. Kvetinová sekcia bude umiestnená pri vstupe, kríková pozdĺž plotu a relaxačná zóna v strede."},"prilohy":{"mapa":"4f01b72e-f5d6-429e-a4b4-ecb6432f05f7","fotografie":"6f306cec-29c4-45dd-97b8-f9bedcb7d72d","projekt":"88b55eff-ebb4-4d17-bc5a-cdbe6d8eb923","inePrilohy":"7f3e5eeb-215d-4e55-ac78-44f7d60a699c"}} @@ -346,6 +350,7 @@ exports[`slovenskoSkForm priznanie-k-dani-z-nehnutelnosti schema XSD should matc + @@ -504,6 +509,7 @@ exports[`slovenskoSkForm priznanie-k-dani-z-nehnutelnosti-test schema XSD should exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample1 XML should match snapshot 1`] = ` " + 1.0 {"danZPozemkov":{"priznania":[{"pozemky":[{"kataster":"Nové Mesto","druhPozemku":"E","celkovaVymeraPozemku":215,"cisloListuVlastnictva":"0000","spoluvlastnickyPodiel":"1/1","parcelneCisloSposobVyuzitiaPozemku":{"cisloParcely":"2567/0"},"podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"2569/15897"}],"pravnyVztah":"vlastnik","spoluvlastnictvo":"somJedinyVlastnik"}],"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true}},"druhPriznania":{"rok":2024,"druh":"priznanie"},"udajeODanovnikovi":{"stat":"703","email":"meno@gmail.com","obecPsc":{"psc":"83103","obec":"Bratislava"},"telefon":"+421948111111","menoTitul":{"meno":"Peter"},"priezvisko":"AAA Skúšobné s r .o","rodneCislo":"920314/6326","priznanieAko":"fyzickaOsoba","voSvojomMene":true,"korespondencnaAdresa":{"korespondencnaAdresaRovnaka":true},"ulicaCisloFyzickaOsoba":{"cislo":"6","ulica":"Robotnícka"}},"danZoStaviebJedenUcel":{"vyplnitObject":{"vyplnit":false}},"danZoStaviebViacereUcely":{"vyplnitObject":{"vyplnit":false}},"danZBytovANebytovychPriestorov":{"vyplnitObject":{"vyplnit":false}},"znizenieAleboOslobodenieOdDane":{"byty":[],"stavby":[],"pozemky":["option2","option4"]}} @@ -653,6 +659,7 @@ exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample1 XML should match s exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample2 XML should match snapshot 1`] = ` " + 1.0 {"druhPriznania":{"rok":2024,"druh":"ciastkovePriznanie"},"udajeODanovnikovi":{"stat":"703","email":"test@test.ts","obecPsc":{"psc":"84106","obec":"Bratislava"},"telefon":"+42191111111","priznanieAko":"fyzickaOsoba","voSvojomMene":true,"menoTitul":{"meno":"Test"},"priezvisko":"Test","rodneCislo":"1.1.1993","ulicaCisloFyzickaOsoba":{"cislo":"15A","ulica":"Ulica "},"korespondencnaAdresa":{"korespondencnaAdresaRovnaka":true}},"danZPozemkov":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"pozemky":[{"kataster":"Záhorská Bystrica","druhPozemku":"F","celkovaVymeraPozemku":2,"cisloListuVlastnictva":"1111","spoluvlastnickyPodiel":"1/1","parcelneCisloSposobVyuzitiaPozemku":{"cisloParcely":"730/2"},"podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"1/1"}],"pravnyVztah":"vlastnik","spoluvlastnictvo":"bezpodieloveSpoluvlastnictvoManzelov"},{"pozemky":[{"kataster":"Záhorská Bystrica","druhPozemku":"C","celkovaVymeraPozemku":24,"cisloListuVlastnictva":"1111","spoluvlastnickyPodiel":"1/1","parcelneCisloSposobVyuzitiaPozemku":{"cisloParcely":"755/4"},"podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"1/1"}],"pravnyVztah":"vlastnik","spoluvlastnictvo":"bezpodieloveSpoluvlastnictvoManzelov"}]},"danZoStaviebJedenUcel":{"vyplnitObject":{"vyplnit":false}},"danZoStaviebViacereUcely":{"vyplnitObject":{"vyplnit":false}},"danZBytovANebytovychPriestorov":{"vyplnitObject":{"vyplnit":false}},"bezpodieloveSpoluvlastnictvoManzelov":{"email":"test@test.ts","telefon":"+42191111111","menoTitul":{"meno":"Test","titul":"Ing"},"priezvisko":"Test","rodneCislo":"123232/1234","rovnakaAdresa":true},"znizenieAleboOslobodenieOdDane":{"byty":[],"stavby":[],"pozemky":[]}} @@ -869,6 +876,7 @@ exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample2 XML should match s exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample3 XML should match snapshot 1`] = ` " + 1.0 {"druhPriznania":{"rok":2024,"druh":"priznanie"},"udajeODanovnikovi":{"stat":"703","email":"test@mail.com","obecPsc":{"psc":"85103","obec":"Bratislava"},"telefon":"+421901111111","priznanieAko":"fyzickaOsoba","voSvojomMene":true,"menoTitul":{"meno":"Test","titul":"Ing."},"priezvisko":"Test","rodneCislo":"910101/1111","ulicaCisloFyzickaOsoba":{"cislo":"1","ulica":"Test"},"korespondencnaAdresa":{"korespondencnaAdresaRovnaka":true}},"danZPozemkov":{"vyplnitObject":{"vyplnit":false}},"danZoStaviebJedenUcel":{"vyplnitObject":{"vyplnit":false}},"danZoStaviebViacereUcely":{"vyplnitObject":{"vyplnit":false}},"danZBytovANebytovychPriestorov":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"riadok1":{"supisneCislo":1,"ulicaACisloDomu":"Jána Smreka 1"},"riadok2":{"kataster":"Devínska Nová Ves","cisloParcely":"1234/10"},"pravnyVztah":"vlastnik","priznanieZaByt":{"priznanieZaByt":true,"cisloBytu":"23","spoluvlastnickyPodiel":"1/2","podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"3468/246230"},"spoluvlastnictvo":"podieloveSpoluvlastnictvo","cisloListuVlastnictva":"3385","priznanieZaNebytovyPriestor":{"priznanieZaNebytovyPriestor":false},"naZakladeDohody":true,"pocetSpoluvlastnikov":2,"splnomocnenie":[]}]},"znizenieAleboOslobodenieOdDane":{"byty":[],"stavby":[],"pozemky":[]}} @@ -1034,6 +1042,7 @@ exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample3 XML should match s exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample4 XML should match snapshot 1`] = ` " + 1.0 {"druhPriznania":{"rok":2024,"druh":"ciastkovePriznanieNaZanikDanovejPovinnosti"},"danZPozemkov":{"vyplnitObject":{"vyplnit":false}},"udajeODanovnikovi":{"stat":"703","email":"test@test.sk","obecPsc":{"psc":"91701","obec":"Trnava"},"telefon":"+421911111111","menoTitul":{"meno":"Test"},"priezvisko":"Test ","rodneCislo":"93823741111","priznanieAko":"fyzickaOsoba","voSvojomMene":true,"korespondencnaAdresa":{"korespondencnaAdresaRovnaka":true},"ulicaCisloFyzickaOsoba":{"cislo":"1111/61","ulica":"Test"}},"danZoStaviebJedenUcel":{"vyplnitObject":{"vyplnit":false}},"danZoStaviebViacereUcely":{"vyplnitObject":{"vyplnit":false}},"danZBytovANebytovychPriestorov":{"vyplnitObject":{"vyplnit":false}},"znizenieAleboOslobodenieOdDane":{"byty":[],"stavby":[],"pozemky":[]}} @@ -1132,6 +1141,7 @@ exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample4 XML should match s exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample5 XML should match snapshot 1`] = ` " + 1.0 {"druhPriznania":{"rok":2024,"druh":"opravnePriznanie"},"udajeODanovnikovi":{"stat":"686","email":"test@test.com","obecPsc":{"psc":"83103","obec":"Bratislava"},"telefon":"+421948417711","priznanieAko":"fyzickaOsoba","voSvojomMene":true,"menoTitul":{"meno":"Lincoln","titul":"Mgr."},"priezvisko":"Abraham","rodneCislo":"9203146326","ulicaCisloFyzickaOsoba":{"cislo":"6","ulica":"Robotnícka"},"korespondencnaAdresa":{"korespondencnaAdresaRovnaka":false,"stat":"703","obecPsc":{"psc":"83106","obec":"Bratislava"},"ulicaCisloKorespondencnaAdresa":{"cislo":"7","ulica":"Prašivá"}}},"danZPozemkov":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"pozemky":[{"datumy":{"datumVznikuDanovejPovinnosti":"2024-01-13","datumZanikuDanovejPovinnosti":"2024-01-04"},"kataster":"Devínska Nová Ves","druhPozemku":"B","celkovaVymeraPozemku":218,"cisloListuVlastnictva":"4589","spoluvlastnickyPodiel":"1/1","parcelneCisloSposobVyuzitiaPozemku":{"cisloParcely":"7986/1","sposobVyuzitiaPozemku":"Ložisko"},"podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"4587/53994"}],"pravnyVztah":"vlastnik","spoluvlastnictvo":"somJedinyVlastnik"}]},"danZoStaviebJedenUcel":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"datumy":{"datumVznikuDanovejPovinnosti":"2024-01-04","datumZanikuDanovejPovinnosti":"2024-01-06"},"riadok1":{"supisneCislo":2526,"ulicaACisloDomu":"Príkladná 35"},"riadok2":{"kataster":"Jarovce","cisloParcely":"7859/1"},"pravnyVztah":"vlastnik","predmetDane":"a","spoluvlastnictvo":"podieloveSpoluvlastnictvo","cisloListuVlastnictva":"4597","spoluvlastnickyPodiel":"1/2","celkovaZastavanaPlocha":2659,"castStavbyOslobodenaOdDane":true,"pocetNadzemnychAPodzemnychPodlaziStavbyOkremPrvehoNadzemnehoPodlazia":5,"naZakladeDohody":true,"pocetSpoluvlastnikov":2,"splnomocnenie":[],"castStavbyOslobodenaOdDaneDetaily":{"celkovaVymeraPodlahovychPlochVsetkychPodlaziStavby":26,"vymeraPodlahovychPlochCastiStavbyOslobodenejOdDaneZoStavieb":89}}]},"danZoStaviebViacereUcely":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"datumy":{"datumVznikuDanovejPovinnosti":"2024-01-05","datumZanikuDanovejPovinnosti":"2024-01-04"},"riadok1":{"supisneCislo":35,"ulicaACisloDomu":"Príkladná 35"},"riadok2":{"kataster":"Devín","cisloParcely":"5697/1"},"poznamka":"Príkladná 35","popisStavby":"Príkladná stavba","pravnyVztah":"najomca","celkovaVymera":25648,"nehnutelnosti":{"nehnutelnosti":[{"ucelVyuzitiaStavby":"b","spoluvlastnickyPodiel":"1/1","podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"4598/26594"}]},"spoluvlastnictvo":"bezpodieloveSpoluvlastnictvoManzelov","cisloListuVlastnictva":"4597","castStavbyOslobodenaOdDane":true,"pocetNadzemnychAPodzemnychPodlaziStavbyOkremPrvehoNadzemnehoPodlazia":4,"vymeraPodlahovychPlochCastiStavbyOslobodenejOdDaneZoStavieb":26}]},"danZBytovANebytovychPriestorov":{"vyplnitObject":{"vyplnit":true},"kalkulackaWrapper":{"pouzitKalkulacku":true},"priznania":[{"riadok1":{"supisneCislo":3694,"ulicaACisloDomu":"Príkladná 35"},"riadok2":{"kataster":"Karlova Ves","cisloParcely":"6975/2"},"poznamka":"Príkladná 35","pravnyVztah":"spravca","priznanieZaByt":{"priznanieZaByt":true,"datumy":{"datumVznikuDanovejPovinnosti":"2024-01-16","datumZanikuDanovejPovinnosti":"2024-01-07"},"cisloBytu":"3","popisBytu":"Dvojizbak","spoluvlastnickyPodiel":"1/1","vymeraPodlahovejPlochyNaIneUcely":18,"podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"2654/36594"},"spoluvlastnictvo":"podieloveSpoluvlastnictvo","cisloListuVlastnictva":"2648","priznanieZaNebytovyPriestor":{"priznanieZaNebytovyPriestor":true,"nebytovePriestory":[{"datumy":{"datumVznikuDanovejPovinnosti":"2024-01-05","datumZanikuDanovejPovinnosti":"2024-01-12"},"riadok":{"cisloNebytovehoPriestoruVBytovomDome":"G05","ucelVyuzitiaNebytovehoPriestoruVBytovomDome":"Garáž"},"spoluvlastnickyPodiel":"1/5","podielPriestoruNaSpolocnychCastiachAZariadeniachDomu":"2659/86569"}]},"naZakladeDohody":false,"pocetSpoluvlastnikov":3}]},"bezpodieloveSpoluvlastnictvoManzelov":{"email":"test@test.com","telefon":"+421948417711","menoTitul":{"meno":"Petra","titul":"Bsc"},"priezvisko":"Príkladná","rodneCislo":"920314/2634","rovnakaAdresa":false,"stat":"703","obecPsc":{"psc":"83106","obec":"Abelova"},"ulicaCisloBezpodieloveSpoluvlastnictvoManzelov":{"cislo":"25","ulica":"Príkladná 35"}},"znizenieAleboOslobodenieOdDane":{"byty":["option1","option2"],"stavby":["option1","option2","option3"],"pozemky":["option1","option2","option3","option4"],"poznamka":"Príkladná 35"}} @@ -1556,15 +1566,16 @@ exports[`slovenskoSkForm priznanieKDaniZNehnutelnostiExample5 XML should match s exports[`slovenskoSkForm stanovisko-k-investicnemu-zameru schema XSD should match snapshot 1`] = ` " - + @@ -1639,7 +1650,8 @@ exports[`slovenskoSkForm stanovisko-k-investicnemu-zameru schema XSD should matc exports[`slovenskoSkForm stanoviskoKInvesticnemuZameruExample XML should match snapshot 1`] = ` " - + + 1.0 {"ziadatel":{"typ":"Fyzická osoba","email":"jan.kovac@priklad.sk","telefon":"+421905987654","menoPriezvisko":"Ján Kováč","adresa":{"ulicaACislo":"Mierová 12","mestoPsc":{"mesto":"Bratislava","psc":"82108"}}},"investor":{"investorZiadatelom":false,"splnomocnenie":"c6bd9718-97ea-4601-b79f-c70e7064943d","typ":"Fyzická osoba","email":"marta.novakova@priklad.sk","telefon":"+421902123456","menoPriezvisko":"Marta Nováková","adresa":{"ulicaACislo":"Šancová 56","mestoPsc":{"mesto":"Bratislava","psc":"83104"}}},"zodpovednyProjektant":{"menoPriezvisko":"Peter Horváth","email":"peter.horvath@priklad.sk","projektantTelefon":"+421911654321","autorizacneOsvedcenie":"123456789","datumSpracovania":"2024-07-03"},"stavba":{"nazov":"Nový Bytový Dom","druhStavby":"Bytový dom","ulica":"Dunajská","supisneCislo":"464","parcelneCislo":"56789","kataster":["Dúbravka","Karlova Ves"]},"prilohy":{"architektonickaStudia":["cb1e3a95-f9d2-4e55-b482-8e7919f2b43f"]}} @@ -1746,15 +1758,16 @@ exports[`slovenskoSkForm stanoviskoKInvesticnemuZameruExample XML should match s exports[`slovenskoSkForm zavazne-stanovisko-k-investicnej-cinnosti schema XSD should match snapshot 1`] = ` " - + @@ -1829,7 +1842,8 @@ exports[`slovenskoSkForm zavazne-stanovisko-k-investicnej-cinnosti schema XSD sh exports[`slovenskoSkForm zavazneStanoviskoKInvesticnejCinnostiExample XML should match snapshot 1`] = ` " - + + 1.0 {"ziadatel":{"typ":"Fyzická osoba","email":"jan.kovac@priklad.sk","telefon":"+421905987654","menoPriezvisko":"Ján Kováč","adresa":{"ulicaACislo":"Mierová 12","mestoPsc":{"mesto":"Bratislava","psc":"82108"}}},"investor":{"investorZiadatelom":false,"splnomocnenie":"b9050ef5-0d98-41c4-aba1-b0fc5a65a442","typ":"Fyzická osoba","email":"marta.novakova@priklad.sk","telefon":"+421902123456","menoPriezvisko":"Marta Nováková","adresa":{"ulicaACislo":"Šancová 56","mestoPsc":{"mesto":"Bratislava","psc":"83104"}}},"zodpovednyProjektant":{"menoPriezvisko":"Peter Horváth","email":"peter.horvath@priklad.sk","projektantTelefon":"+421911654321","autorizacneOsvedcenie":"123456789","datumSpracovania":"2024-07-04"},"stavba":{"nazov":"Nový Bytový Dom","druhStavby":"Bytový dom","ulica":"Dunajská","supisneCislo":"1234","parcelneCislo":"56789","kataster":["Karlova Ves","Dúbravka"]},"konanieTyp":{"typ":"Konanie o dodatočnom povolení stavby","ziadostOdovodnenie":"Dodatočné povolenie zmeny stavby pred dokončením","stavbaPisomnosti":["4110b6da-0dd7-4007-8c13-896134f1eaa0"],"stavbaFotodokumentacia":["8bfd16c6-49d5-45d2-987e-cba0ff0ebdd9"]},"prilohy":{"projektovaDokumentacia":["1cdcb500-7f11-45d1-a31b-0ab614482e27","01d3bd64-270e-4a04-83da-f72cdd8717c4"]}} @@ -1951,15 +1965,16 @@ exports[`slovenskoSkForm zavazneStanoviskoKInvesticnejCinnostiExample XML should exports[`slovenskoSkForm ziadost-o-najom-bytu schema XSD should match snapshot 1`] = ` " - + @@ -2034,7 +2049,8 @@ exports[`slovenskoSkForm ziadost-o-najom-bytu schema XSD should match snapshot 1 exports[`slovenskoSkForm ziadostONajomBytuExample XML should match snapshot 1`] = ` " - + + 1.0 {"ziadatelZiadatelka":{"osobneUdaje":{"adresaTrvalehoPobytu":{"adresaSkutocnehoPobytuRovnaka":true,"byvanieVMestskomNajomnomByte":false,"mestoPsc":{"mesto":"Bratislava","psc":"81101"},"pobytVBratislaveViacAkoRok":true,"ulicaACislo":"Hlavná 123","vlastnikNehnutelnosti":false},"datumNarodenia":"1985-03-15","email":"jana.novakova@email.com","kontaktovanyEmailom":true,"menoPriezvisko":{"meno":"Jana","priezvisko":"Nováková"},"rodinnyStav":"rozvedeny","rodnePriezvisko":"Kováčová","statnaPrislusnost":"slovenska","telefonneCislo":"+421901234567"},"prijem":{"davkaVNezamestnanosti":false,"dochodok":false,"inePrijmy":true,"inePrijmyVyska":150,"samostatnaZarobkovaCinnost":false,"vyzivne":true,"vyzivneVyska":200,"zamestnanie":true,"zamestnaniePrijem":1200},"rizikoveFaktory":{"rizikoveFaktoryPritomne":true,"vekNajstarsiehoClena":"menejAko63","zoznamRizikovychFaktorov":["osamelyRodic"]},"sucasneByvanie":{"bytovaNudza":false},"zdravotnyStav":{"bezbarierovyByt":false,"chronickeOchorenie":true,"existujuceDiagnozy":["astma","chronickaParadentoza"],"tzpPreukaz":false}},"manzelManzelka":{"manzelManzelkaSucastouDomacnosti":false},"druhDruzka":{"druhDruzkaSucastouDomacnosti":true,"osobneUdaje":{"adresaSkutocnehoPobytu":{"mestoPsc":{"mesto":"Bratislava","psc":"82105"},"ulicaACislo":"Nová 456","vlastnikNehnutelnosti":false},"datumNarodenia":"1982-07-22","menoPriezvisko":{"meno":"Peter","priezvisko":"Horváth"},"rodinnyStav":"slobodny","rodnePriezvisko":"Horváth","statnaPrislusnost":"slovenska"},"prijem":{"davkaVNezamestnanosti":false,"dochodok":false,"inePrijmy":false,"samostatnaZarobkovaCinnost":true,"samostatnaZarobkovaCinnostPrijem":300,"vyzivne":false,"zamestnanie":true,"zamestnaniePrijem":1500},"sucasneByvanie":{"situaciaRovnakaAkoVasa":true},"zdravotnyStav":{"mieraFunkcnejPoruchy":"50az74","tzpPreukaz":true}},"deti":{"detiSucastouDomacnosti":true,"zoznamDeti":[{"osobneUdaje":{"menoPriezvisko":{"meno":"Lucia","priezvisko":"Nováková"},"statnaPrislusnost":"slovenska","vlastnikNehnutelnosti":false,"datumNarodenia":"2010-11-30"},"sucasneByvanie":{"situaciaRovnakaAkoVasa":true},"prijem":{"student":true,"maPrijem":false},"zdravotnyStav":{"tzpPreukaz":false,"chronickeOchorenie":false}},{"osobneUdaje":{"menoPriezvisko":{"meno":"Michal","priezvisko":"Novák"},"statnaPrislusnost":"slovenska","vlastnikNehnutelnosti":false,"datumNarodenia":"2005-04-18"},"sucasneByvanie":{"situaciaRovnakaAkoVasa":true},"prijem":{"student":true,"maPrijem":true,"prijemVyska":200},"zdravotnyStav":{"tzpPreukaz":true,"mieraFunkcnejPoruchy":"75az100"}}]},"inyClenoviaClenkyDomacnosti":{"inyClenoviaClenkySucastouDomacnosti":true,"zoznamInychClenov":[{"osobneUdaje":{"menoPriezvisko":{"meno":"Mária","priezvisko":"Kováčová"},"statnaPrislusnost":"slovenska","datumNarodenia":"1960-09-05","rodinnyStav":"vdovec","rodnePriezvisko":"Hrušková","vlastnikNehnutelnosti":false},"sucasneByvanie":{"situaciaRovnakaAkoVasa":true},"prijem":{"zamestnanie":false,"samostatnaZarobkovaCinnost":false,"dochodok":true,"vyzivne":false,"davkaVNezamestnanosti":false,"inePrijmy":false,"dochodokVyska":550},"zdravotnyStav":{"tzpPreukaz":true,"mieraFunkcnejPoruchy":"50az74"}}]},"ineOkolnosti":{"dovodyPodaniaZiadosti":"Potrebujeme väčší byt pre našu rastúcu rodinu a lepšie podmienky pre dieťa so zdravotným postihnutím.","maximalnaVyskaNajomneho":700,"preferovanaLokalita":["ruzinov","noveMesto"],"preferovanaVelkost":"3izbovy"},"sucetPrijmovCestneVyhlasenie":{"cestneVyhlasenie":true}} diff --git a/forms-shared/tests/slovensko-sk/extractJson.ts b/forms-shared/tests/slovensko-sk/extractJson.ts index 5c3708442..c794b1b96 100644 --- a/forms-shared/tests/slovensko-sk/extractJson.ts +++ b/forms-shared/tests/slovensko-sk/extractJson.ts @@ -8,6 +8,7 @@ describe('extractJsonFromSlovenskoSkXml', () => { const validXmlString = ` + 1.0 {"key":"value"} ` @@ -24,6 +25,15 @@ describe('extractJsonFromSlovenskoSkXml', () => { expect(result).toEqual({ key: 'value' }) }) + it('should successfully extract JSON from valid XML without version (backwards compatibility)', async () => { + const xmlWithoutVersion = validXmlString + .split('\n') + .filter((line) => !line.includes('1.0')) + .join('\n') + const result = await extractJsonFromSlovenskoSkXml(formDefinition, xmlWithoutVersion) + expect(result).toEqual({ key: 'value' }) + }) + it('should throw InvalidXml error for malformed XML', async () => { const invalidXml = '' await expect(extractJsonFromSlovenskoSkXml(formDefinition, invalidXml)).rejects.toThrow( @@ -38,6 +48,7 @@ describe('extractJsonFromSlovenskoSkXml', () => { const incorrectXmlStructure = ` + 1.0 {"key":"value"} ` diff --git a/nest-forms-backend/src/convert/convert.helper.ts b/nest-forms-backend/src/convert/convert.helper.ts new file mode 100644 index 000000000..ddc769366 --- /dev/null +++ b/nest-forms-backend/src/convert/convert.helper.ts @@ -0,0 +1,19 @@ +import { FormDefinitionSlovenskoSkTax } from 'forms-shared/definitions/formDefinitionTypes' + +/** + * Tax form is a special case, as the only usage of ConvertService in its case is when user imports/exports the XML via + * user interface. Currently, the form that is sent to NASES has different posp* (than this new one). The tax form will + * be migrated to the new posp* in the future. In order to provide users the possibility to import the form, the exported + * XML will already contain the new posp* (after the migration this patch will be removed, but the forms will be importable). + * + * Before this patch, the generated XML had the old posp*, but contained the "importable" data shape, not the one that + * is sent to NASES. + */ +// eslint-disable-next-line import/prefer-default-export +export const patchConvertServiceTaxFormDefinition = ( + formDefinition: FormDefinitionSlovenskoSkTax, +): FormDefinitionSlovenskoSkTax => ({ + ...formDefinition, + pospID: '00603481.priznanieKDaniZNehnutelnosti', + pospVersion: '1.0', +}) diff --git a/nest-forms-backend/src/convert/convert.service.ts b/nest-forms-backend/src/convert/convert.service.ts index 484994070..f02b40fc8 100644 --- a/nest-forms-backend/src/convert/convert.service.ts +++ b/nest-forms-backend/src/convert/convert.service.ts @@ -37,6 +37,7 @@ import ThrowerErrorGuard from '../utils/guards/thrower-error.guard' import MinioClientSubservice from '../utils/subservices/minio-client.subservice' import { JsonSchema } from '../utils/types/global' import { FormWithFiles } from '../utils/types/prisma' +import { patchConvertServiceTaxFormDefinition } from './convert.helper' import { ConvertToPdfRequestDto, JsonToXmlV2RequestDto, @@ -85,7 +86,9 @@ export default class ConvertService { })) as FormWithFiles return generateSlovenskoSkXmlObject( - formDefinition, + isSlovenskoSkTaxFormDefinition(formDefinition) + ? patchConvertServiceTaxFormDefinition(formDefinition) + : formDefinition, formDataJson as GenericObjectType, formWithFiles.files, ) @@ -219,7 +222,9 @@ export default class ConvertService { if (formDefinition.newGovernmentXml) { try { const jsonForm = await extractJsonFromSlovenskoSkXml( - formDefinition, + isSlovenskoSkTaxFormDefinition(formDefinition) + ? patchConvertServiceTaxFormDefinition(formDefinition) + : formDefinition, data.xmlForm, ) return { jsonForm }