diff --git a/___.prettierrc b/___.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..b2095be81e4e40b736dfc9b3559d0250e4becd02 --- /dev/null +++ b/___.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} diff --git a/src/services/count/create-bedrijventerreinen-export.ts b/src/services/count/create-bedrijventerreinen-export.ts index 0849341c068492e46463823a0d7300b3a070349f..b1492c4d332e9a520316f6f8c6e9bcd61df6c467 100644 --- a/src/services/count/create-bedrijventerreinen-export.ts +++ b/src/services/count/create-bedrijventerreinen-export.ts @@ -60,63 +60,78 @@ export const createHandelsRegisterInfo = async ( getKVKObjecten(geojson, false, filter), ]).then((data) => { const bagData = data[0] - const kvkRegistrations = data[1].data + const kvkRegistrations = data[1]?.data const aggregatedVerblijfsobjecten = bagData.reduce( (acc, verblijfsobject) => { // Filter KVK registrations not found on selected BAG adres - const filteredKvk = filterOnNumId(kvkRegistrations, verblijfsobject) + const kvkRegistrationsOnVerblijfsobject = filterOnNumId( + kvkRegistrations, + verblijfsobject + ) - if (!filteredKvk) { + if (!kvkRegistrationsOnVerblijfsobject.length) { return acc } - // Filter KVK activities that have duplicate dossier numbers. Just in case the dossier number is mixed up, we also check on "Handelsnaam" - const uniqueKVKdossierRegistrations = filteredKvk.filter( - (registration, index, array) => - array.findIndex( - (item) => - item.dossiernr === registration.dossiernr && - item.hn_1x45 === registration.hn_1x45 - ) === index - ) - - const combinedKVKDossiersOnAdres = filteredKvk.reduce((acc, obj) => { - const key = obj.dossiernr - acc[key] = [...(acc[key] || []), obj] - return acc - }, {}) - // as Record + // Create a list of unqiue KVK activities and filter out those that have a duplicate dossier numbers and "Handelsnaam" + const combinedKVKDossiersOnAdres = + kvkRegistrationsOnVerblijfsobject.reduce((acc, obj) => { + const key = obj.dossiernr + acc[key] = [...(acc[key] || []), obj] + return acc + }, {} as Record) const uniqueKVKdossierRegistrationsWithDescriptions = - uniqueKVKdossierRegistrations.map((registration) => ({ - ...registration, - hoofdact_description: combinedKVKDossiersOnAdres[ - registration.dossiernr - ]?.find((dossier) => dossier.sbicode === dossier.hoofdact), - nevact1_description: combinedKVKDossiersOnAdres[ - registration.dossiernr - ]?.find( - (dossier) => dossier.sbicode === dossier.nevact1_description - ), - nevact2_description: combinedKVKDossiersOnAdres[ - registration.dossiernr - ]?.find( - (dossier) => dossier.sbicode === dossier.nevact2_description - ), - })) + kvkRegistrationsOnVerblijfsobject.map((registration) => { + const nr = combinedKVKDossiersOnAdres[registration.dossiernr] + + const hoofdactDescription = nr?.find( + (dossier) => dossier.sbicode === dossier.hoofdact + ) + + const nevact1Description = nr?.find( + (dossier) => dossier.sbicode === dossier.nevact1 + ) + + const nevact2Description = nr?.find( + (dossier) => dossier.sbicode === dossier.nevact2 + ) + + return { + ...registration, + hoofdactDescription: + hoofdactDescription?.activiteit || + hoofdactDescription?.l5_title, + nevact1Description: + nevact1Description?.activiteit || nevact1Description?.l5_title, + nevact2Description: + nevact2Description?.activiteit || nevact2Description?.l5_title, + } + }) - const KvkfieldsMappedToCsvHeader = - uniqueKVKdossierRegistrationsWithDescriptions.map((registration) => [ + // Filter KVK activities that have duplicate dossier numbers. Just in case the dossier number is mixed up, we also check on "Handelsnaam" + const uniqueKVKdossierRegistrations = + uniqueKVKdossierRegistrationsWithDescriptions.filter( + (registration, index, array) => + array.findIndex( + (item) => + item.dossiernr === registration.dossiernr && + item.hn_1x45 === registration.hn_1x45 + ) === index + ) + + const KvkfieldsMappedToCsvHeader = uniqueKVKdossierRegistrations.map( + (registration) => [ registration.hn_1x45, registration.dossiernr, registration.activiteit, registration.hoofdact, - registration.hoofdact_description, + registration.hoofdactDescription, registration.nevact1, - registration.nevact1_description, + registration.nevact1Description, registration.nevact2, - registration.nevact2_description, + registration.nevact2Description, rechtsvormcodes[registration.rv_fijn], formatKvkDate(registration.dat_inschr), '', @@ -124,7 +139,8 @@ export const createHandelsRegisterInfo = async ( formatKvkDate(registration.dat_vest), '', '', - ]) + ] + ) const stichtingen = Object.values(combinedKVKDossiersOnAdres).reduce( (acc, company: any) => @@ -159,96 +175,12 @@ export const createHandelsRegisterInfo = async ( }, ] }, - [] + [] as { + base: any + kvk: string[][] + }[] ) - // const aggregatedRegistrations = kvkRegistrations.filter( - // (registration, index, array) => - // array.findIndex((item) => item.dossiernr === registration.dossiernr) === - // index - // ) - - // const aggregatedVerblijfsobjecten = bagData.map((verblijfsobject) => { - // const filteredKvk = filterOnNumId(kvkRegistrations, verblijfsobject) - - // const kvkCompaniesCombined = Object.values( - // filteredKvk.reduce((acc, obj) => { - // const key = obj.hn_1x45 - // acc[key] = acc[key] || [] - // acc[key] = [...acc[key], obj] - // return acc - // }, {}) - // ) as KVKObjectAPI[][] - - // const companyCoreData = kvkCompaniesCombined.reduce( - // (acc, company) => { - // // TODO herschrijven voor filters!! dan worden de nevenactiviteiten behandeld als hoofdactiviteiten ben ik bang.. - // company.forEach((data) => { - // const { sbicode, activiteit } = data - // if (data.hoofdact === sbicode) acc.hoofdact_description = activiteit - // if (data.nevact1 === sbicode) acc.nevact1_description = activiteit - // if (data.nevact2 === sbicode) acc.nevact2_description = activiteit - // }) - // return acc - // }, - // { - // hoofdact_description: '', - // nevact1_description: '', - // nevact2_description: '', - // } - // ) - - // const preparedKvkData: Record[] = - // filteredKvk.map((data) => ({ - // KVK_Handelsnaam: data.hn_1x45, - // KVK_Nummer: data.dossiernr, - // KVK_Bedrijfsactiviteit: data.activiteit, - // // KVK_SBI_code: data.sbicode, - // KVK_SBI_code_hoofdactiviteit: data.hoofdact, - // KVK_SBI_omschrijving_hoofdact: companyCoreData.hoofdact_description, - // KVK_SBI_code_nevenactiviteit1: data.nevact1, - // KVK_SBI_omschrijving_nevenactiviteit1: - // companyCoreData.nevact1_description, - // KVK_SBI_code_nevenactiviteit2: data.nevact2, - // KVK_SBI_omschrijving_nevenactiviteit2: - // companyCoreData.nevact2_description, - // KVK_Rechtsvorm: rechtsvormcodes[data.rv_fijn], - // KVK_Datum_inschrijving_onderneming: formatKvkDate(data.dat_inschr), - // KVK_Datum_uitschrijving_onderneming: '', - // KVK_Vestigingsnummer: data.vgnummer, - // KVK_Datum_inschrijving_vestiging: formatKvkDate(data.dat_vest), - // KVK_Datum_uitschrijving_vestiging: '', - // KVK_Indicatiehoofdvestiging: '', - // })) - - // const stichtingen = kvkCompaniesCombined.reduce( - // (acc, company) => - // acc + - // company.reduce( - // (acc, data) => acc + (data.rv_fijn === '74' ? 1 : 0), - // 0 - // ), - // 0 - // ) - - // const indicatorFields = { - // Indicatie_bedrijf_aanwezig_op_adres: kvkCompaniesCombined.length, - // Indicatie_stichting_aanwezig_op_adres: stichtingen, - // } - - // const { coordinates } = wktPointToGeoJson(verblijfsobject.point) - // const updatedVerblijfsobject = { - // ...verblijfsobject, - // latitude: coordinates[1].toFixed(2), - // longitude: coordinates[0].toFixed(2), - // } - - // return { - // base: { ...updatedVerblijfsobject, ...indicatorFields }, - // kvk: preparedKvkData, - // } - // }) - const csvHeader = [ ...baseHeaders.map((header) => `"${header}"`), ...kvkHeaders.map((header) => `"${header}"`), @@ -259,10 +191,16 @@ export const createHandelsRegisterInfo = async ( const baseRow = mapKeysToArray(baseHeaders, data.base) const kvkRows = data.kvk - .sort((a, b) => a[0].localeCompare(b[0])) - // .map((obj) => mapKeysToArray(kvkHeaders, obj)) - .join(`\n"${data.base.numid}"${',""'.repeat(baseHeaders.length)}`) - + .map((row) => + row.map((value) => + value ? `"${String(value).replace(/"/g, '')}"` : '' + ) + ) + .sort((rowA, rowB) => rowA[0].localeCompare(rowB[0])) + .join(`\n ${baseRow.join(',')},`) + // .join( + // `\n "${data.base.numid}"${',""'.repeat(baseHeaders.length - 1)}` + // ) return [baseRow, kvkRows].join(',') }) .join('\n') diff --git a/src/services/count/services/get-kvk-objecten.ts b/src/services/count/services/get-kvk-objecten.ts index 052d906c3b57251fd8f1946ca6b4ad31f7ef6c84..43b110f048ceed99037795057266e8e623634bc1 100644 --- a/src/services/count/services/get-kvk-objecten.ts +++ b/src/services/count/services/get-kvk-objecten.ts @@ -29,6 +29,8 @@ export interface KVKObjectAPI { l3_title: string l4_code: string l4_title: string + l5_code: string + l5_title: string lid: string match_score: string nevact1: string