Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved performance by removing / disabling sync code #20

Merged
merged 13 commits into from
Nov 25, 2024
30 changes: 15 additions & 15 deletions Installation/Mapping/simxml.get.aanslag.aanslagregel.mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@
"title": "GetAanslagAanslagregel",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.5",
"version": "0.0.6",
"passTrough": false,
"mapping": {
"@soortEntiteit": "R",
"ASL.@soortEntiteit": "F",
"ASL.belastingJaar": "{{ value.belastingJaar }}",
"ASL.ingangsDatumAanslagRegel": "{{ value.ingangsdatum|date(\"Ymd\") }}",
"ASL.afmeldDatumAanslagRegel": "{{ value.einddatum|date(\"Ymd\") }}",
"ASL.bedragAanslagRegel": "{{ value.bedrag|replace({',' : '.'}) }}",
"ASL.belastingJaar": "{{ belastingJaar }}",
"ASL.ingangsDatumAanslagRegel": "{{ ingangsdatum|date(\"Ymd\") }}",
"ASL.afmeldDatumAanslagRegel": "{{ einddatum|date(\"Ymd\") }}",
"ASL.bedragAanslagRegel": "{{ bedrag|replace({',' : '.'}) }}",
"ASL.btwBedragAanslagRegel": "0.00",
"ASL.bedragAanslagRegelExclusiefBtw": "{{ value.bedrag|replace({',' : '.'}) }}",
"ASL.codeBelastingSoort": "{{ value.codeBelastingsoort }}",
"ASL.omschrijvingBelastingSoort": "{{ value.omschrijvingBelastingsoort }}",
"ASL.tariefSoort": "{{ value.codeBelastingtype }}",
"ASL.omschrijvingTariefSoort": "{{ value.omschrijvingBelastingtype }}",
"ASL.bedragAanslagRegelExclusiefBtw": "{{ bedrag|replace({',' : '.'}) }}",
"ASL.codeBelastingSoort": "{{ codeBelastingsoort }}",
"ASL.omschrijvingBelastingSoort": "{{ omschrijvingBelastingsoort }}",
"ASL.tariefSoort": "{{ codeBelastingtype }}",
"ASL.omschrijvingTariefSoort": "{{ omschrijvingBelastingtype }}",
"ASL.omschrijvingBelastingObject.@xsi:nil": "true",
"ASL.omschrijvingBelastingObject.@StUF:noValue": "geenWaarde",
"ASL.grondslag": "{{ value.heffingsgrondslag }}",
"ASL.grondslag": "{{ heffingsgrondslag }}",
"ASL.omschrijvingGrondslag.@xsi:nil": "true",
"ASL.omschrijvingGrondslag.@StUF:noValue": "geenWaarde",
"ASL.WOZObjectNummer": "{{ value.wozObjectnummer }}",
"ASL.indicatieBezwaar": "{% if value.bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"ASL.belastingplichtnummer": "{{ value.belastingplichtnummer }}",
"ASL.ASLADR": "{% if value.embedded.adres is defined and value.embedded.adres is not empty %}{% set aanslagregelAdressen = [] %}{% set aanslagregelAdressen = aanslagregelAdressen|merge(value.embedded.adres) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", aanslagregelAdressen, true)|json_encode }}{% else %}\"\"{% endif %}"
"ASL.WOZObjectNummer": "{{ wozObjectnummer }}",
"ASL.indicatieBezwaar": "{% if bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"ASL.belastingplichtnummer": "{{ belastingplichtnummer }}",
"ASL.ASLADR": "{% if adres is defined and adres is not empty %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", adres, true)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"ASL.ASLADR": ["jsonToArray", "unsetIfValue=="]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "GetAanslagBeschikkingsregel",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.3",
"version": "0.0.4",
"passTrough": false,
"mapping": {
"@soortEntiteit": "R",
Expand All @@ -12,21 +12,21 @@
"BSK.beginDatumWOZTijdVak": "{{ aanslag.belastingJaar ~ '0101' }}",
"BSK.eindDatumWOZTijdVak": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"+1 year\")|date(\"Ymd\") }}",
"BSK.waardePeilJaar": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"-1 year\")|date(\"Y\") }}",
"BSK.indicatieBezwaar": "{% if value.bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"BSK.indicatieBezwaar": "{% if bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"BSK.extraElementen.StUF:extraElement.0.@naam": "beschikkingSleutel",
"BSK.extraElementen.StUF:extraElement.0.#": "{{ value.sleutelBeschikkingsregel }}",
"BSK.extraElementen.StUF:extraElement.0.#": "{{ sleutelBeschikkingsregel }}",
"BSK.BSKWRD.@soortEntiteit": "R",
"BSK.BSKWRD.WRD.@soortEntiteit": "F",
"BSK.BSKWRD.WRD.heffingsmaatstafOZB": "{{ value.vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.heffingsmaatstafOZB": "{{ vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.heffingsmaatstafOZBGebruikers": "0",
"BSK.BSKWRD.WRD.vastgesteldeWaarde": "{{ value.vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.vastgesteldeWaarde": "{{ vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.waardePeilDatum": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"-1 year\")|date(\"Ymd\") }}",
"BSK.BSKWRD.WRD.WRDWOZ.@soortEntiteit": "R",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.@soortEntiteit": "F",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZObjectNummer": "{{ value.wozObjectnummer }}",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZObjectNummer": "{{ wozObjectnummer }}",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.omschrijvingWOZObject.@xsi:nil": "true",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.omschrijvingWOZObject.@StUF:noValue": "geenWaarde",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": "{% if value.embedded.adres is defined and value.embedded.adres is not empty %}{% set beschikkingsregelAdres = [] %}{% set beschikkingsregelAdres = beschikkingsregelAdres|merge(value.embedded.adres) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", beschikkingsregelAdres)|json_encode }}{% else %}\"\"{% endif %}"
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": "{% if adres is defined and adres is not empty %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", adres)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": ["jsonToArray", "unsetIfValue=="]
Expand Down
8 changes: 4 additions & 4 deletions Installation/Mapping/simxml.get.aanslagen.result.mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "GetAanslagenResult",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslagen.result.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.7",
"version": "0.0.8",
"passTrough": false,
"mapping": {
"@soortEntiteit": "F",
Expand Down Expand Up @@ -40,9 +40,9 @@
"BLJARD.0.ARD.keuzeOmschrijvingRedenBezwaar": "Placeholder, to do, make showing bezwaren abstract",
"BLJPRS.@soortEntiteit": "R",
"BLJPRS.PRS.@soortEntiteit": "F",
"BLJPRS.PRS.bsn-nummer": "{{ value.embedded.belastingplichtige.burgerservicenummer }}",
"BLJASL": "{% if value.embedded.aanslagregels is defined %}{% set aanslagregels = [] %}{% set aanslagregels = aanslagregels|merge(value.embedded.aanslagregels) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json\", aanslagregels, true)|json_encode }}{% else %}\"\"{% endif %}",
"BLJBSK": "{% if value.embedded.beschikkingsregels is defined %}{% set beschikkingsregels = [] %}{% set beschikkingsregels = beschikkingsregels|merge(value.embedded.beschikkingsregels) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json\", {'listInput': beschikkingsregels, 'aanslag': value}, true)|json_encode }}{% else %}\"\"{% endif %}"
"BLJPRS.PRS.bsn-nummer": "{{ value.belastingplichtige.burgerservicenummer }}",
"BLJASL": "{% if value.aanslagregels is defined %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json\", value.aanslagregels, true)|json_encode }}{% else %}\"\"{% endif %}",
"BLJBSK": "{% if value.beschikkingsregels is defined %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json\", {'listInput': value.beschikkingsregels, 'aanslag': value}, true)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"BLJASL": ["jsonToArray", "unsetIfValue=="],
Expand Down
113 changes: 82 additions & 31 deletions src/Service/SimTaxService.php
Original file line number Diff line number Diff line change
Expand Up @@ -217,27 +217,34 @@ public function getAanslagen(array $vraagBericht): Response

$filter = $this->getAanslagenFilter($vraagBericht);

if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
return $this->createResponse(['Error' => "No bsn given."], 501);
// Old gateway filter
// if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
if (isset($filter['bsn']) === false) {
return $this->createResponse(['Error' => "No bsn given."], 400);
}

// Sync aanslagen from openbelasting api with given bsn.
$this->syncAanslagenService->fetchAndSyncAanslagen($filter['embedded.belastingplichtige.burgerservicenummer']);

// Sync aanslagen from openbelasting api with given bsn. (The old way didn't use the return value of this function)
$aanslagen['results'] = $this->syncAanslagenService->fetchAndSyncAanslagen($filter['bsn'], $filter['belastingjaar-vanaf']);
// Old filter
// $this->syncAanslagenService->fetchAndSyncAanslagen($filter['embedded.belastingplichtige.burgerservicenummer']);
// Make sure we order correctly
$filter['_order']['belastingJaar'] = 'desc';

// Old gateway filter
// $filter['_order']['belastingJaar'] = 'desc';
// Old way of getting aanslagen from the gateway itself
// Then fetch synced aanslagen through cacheService.
$aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);

// $aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
// TODO: this is a temporary workaround at the request of SIM
// This will set the Aanslag "bezwaarMogelijk" to false if one of it's "aanslagregels" has "bezwaarMogelijk" set to false.
foreach ($aanslagen['results'] as $aanslag) {
if (isset($aanslag['embedded']['aanslagregels']) === false) {
// Old gateway/not proxy version with embedded
// if (isset($aanslag['embedded']['aanslagregels']) === false) {
if (isset($aanslag['aanslagregels']) === false) {
continue;
}

foreach ($aanslag['embedded']['aanslagregels'] as $aanslagregel) {
// Old gateway/not proxy version with embedded
// foreach ($aanslag['embedded']['aanslagregels'] as $aanslagregel) {
foreach ($aanslag['aanslagregels'] as $aanslagregel) {
if ($aanslagregel['bezwaarMogelijk'] == false) {
$aanslag['bezwaarMogelijk'] = false;
break;
Expand All @@ -264,6 +271,16 @@ public function getAanslagen(array $vraagBericht): Response
private function getAanslagenFilter(array $vraagBericht): array
{
$minYear = $maxYear = null;

// Make sure ['ns2:body']['ns2:BLJ'] is always an array of items
if (isset($vraagBericht['ns2:body']['ns2:BLJ'][1]) === false) {
$BLJ = $vraagBericht['ns2:body']['ns2:BLJ'];
unset($vraagBericht['ns2:body']['ns2:BLJ']);

$vraagBericht['ns2:body']['ns2:BLJ'][] = $BLJ;
$vraagBericht['ns2:body']['ns2:BLJ'][] = [];
}

foreach ($vraagBericht['ns2:body']['ns2:BLJ'] as $key => $blj) {
if (isset($blj['ns2:BLJPRS']['ns2:PRS']['ns2:bsn-nummer']) === false) {
continue;
Expand All @@ -282,30 +299,37 @@ private function getAanslagenFilter(array $vraagBericht): array
$minYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
}

// Old gateway filter
// Last key should be the max year
if ($key === array_key_last($vraagBericht['ns2:body']['ns2:BLJ'])) {
$maxYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
}
// if ($key === array_key_last($vraagBericht['ns2:body']['ns2:BLJ'])) {
// $maxYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
// }
}
}//end foreach

if (isset($minYear) === true) {
$filter = $this->getMinMaxYearFilter($vraagBericht, $minYear, $maxYear);
$filter['belastingjaar-vanaf'] = $minYear;
// Old gateway filter
// $filter = $this->getMinMaxYearFilter($vraagBericht, $minYear, $maxYear);
} else {
$this->logger->warning('Could not find a minimal year for bsn: '.($bsn ?? '').' Using current & last year instead for getting Aanslagen');
// Old warning log
// $this->logger->warning('Could not find a minimal year for bsn: '.($bsn ?? '').' Using current & last year instead for getting Aanslagen');
$filter = [];
}

// Old gateway filter, for now default value will be set in the OpenBelastingBundle
// If we have no (min/max) belastingJaar filter in the request use this year and the last year for filtering instead.
if (isset($filter['belastingJaar']) === false) {
$dateTime = new DateTime();
$filter['belastingJaar'][] = $dateTime->format('Y');
$dateTime->add(DateInterval::createFromDateString('-1 year'));
$filter['belastingJaar'][] = $dateTime->format('Y');
}

// if (isset($filter['belastingJaar']) === false) {
// $dateTime = new DateTime();
// $filter['belastingJaar'][] = $dateTime->format('Y');
// $dateTime->add(DateInterval::createFromDateString('-1 year'));
// $filter['belastingJaar'][] = $dateTime->format('Y');
// }
if (isset($bsn)) {
$filter['embedded.belastingplichtige.burgerservicenummer'] = $bsn;
$filter['bsn'] = $bsn;

// Old gateway filter
// $filter['embedded.belastingplichtige.burgerservicenummer'] = $bsn;
}

return $filter;
Expand Down Expand Up @@ -360,21 +384,48 @@ public function getAanslag(array $vraagBericht): Response
return $this->createResponse(['Error' => "No mapping found for {$this::MAPPING_REFS['GetAanslag']}."], 501);
}

$filter = [];
if (isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']) === true) {
$filter['aanslagbiljetnummer'] = $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer'];
// (new) Get correct filters for getting all aanslagen
$filter = $this->getAanslagenFilter($vraagBericht);

// Old gateway filter
// if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
if (isset($filter['bsn']) === false) {
// (new) We need to check if filter contains bsn
return $this->createResponse(['Error' => "No bsn given."], 400);
}

// (new) get all aanslagen from source instead of syncing
$aanslagenFromSource = $this->syncAanslagenService->fetchAndSyncAanslagen($filter['bsn'], $filter['belastingjaar-vanaf']);

// $filter = [];
if (isset($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetNummer']) === true || isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']) === true) {
$filter['aanslagbiljetnummer'] = ($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetNummer'] ?? $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']);
}

if (isset($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetVolgNummer']) === true || isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']) === true) {
$filter['aanslagbiljetvolgnummer'] = ($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetVolgNummer'] ?? $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']);
}

if (isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']) === true) {
$filter['aanslagbiljetvolgnummer'] = $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer'];
// Old way of finding a single Aanslag object in the gateway
// $aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
// (new) way of finding a single Aanslag object with aanslagbiljetnummer & aanslagbiljetvolgnummer filters
$aanslagen['count'] = 0;
foreach ($aanslagenFromSource as $aanslag) {
if (isset($filter['aanslagbiljetnummer']) === true
&& $filter['aanslagbiljetnummer'] === $aanslag['aanslagbiljetnummer']
&& isset($filter['aanslagbiljetvolgnummer']) === true
&& $filter['aanslagbiljetvolgnummer'] === $aanslag['aanslagbiljetvolgnummer']
) {
$aanslagen['results'][] = $aanslag;
$aanslagen['count'] = ($aanslagen['count'] + 1);
}
}

$aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
if ($aanslagen['count'] > 1) {
$this->logger->warning('Found more than 1 aanslag with these filters: ', $filter);
return $this->createResponse(['Error' => 'Found more than 1 aanslag with these filters', 'Filters' => $filter], 500);
} else if ($aanslagen['count'] === 1) {
$aanslagen['result'] = $aanslagen['results'][0];
$aanslagen['result'] = ($aanslagen['results'][0] ?? $aanslagen['results']);
}

$aanslagen['vraagbericht'] = $vraagBericht;
Expand Down