Skip to content

Commit

Permalink
[WIP] ondersteuning voor HR dataservice v3
Browse files Browse the repository at this point in the history
  • Loading branch information
mprins committed Aug 6, 2018
1 parent 5c5d01a commit 48d7454
Show file tree
Hide file tree
Showing 5 changed files with 586 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class BrmoFramework {

public static final String XSL_BRK = "/xsl/brk-snapshot-to-rsgb-xml.xsl";
public static final String XSL_BAG = "/xsl/bag-mutatie-to-rsgb-xml.xsl";
public static final String XSL_NHR = "/xsl/nhr-to-rsgb-xml-2.5.xsl";
public static final String XSL_NHR = "/xsl/nhr-to-rsgb-xml-3.0.xsl";
public static final String XSL_BRP = "/xsl/brp-to-rsgb-xml.xsl";
public static final String XSL_GBAV = "/xsl/gbav-to-rsgb-xml.xsl";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public NhrXMLReader(InputStream in) throws Exception {
private synchronized void initTemplates() throws Exception {
if(splitTemplates == null) {
log.info("Initializing NHR split XSL templates...");
Source xsl = new StreamSource(this.getClass().getResourceAsStream("/xsl/nhr-split-2.5.xsl"));
Source xsl = new StreamSource(this.getClass().getResourceAsStream("/xsl/nhr-split-3.0.xsl"));
TransformerFactory tf = TransformerFactory.newInstance();
tf.setURIResolver(new URIResolver() {
@Override
Expand Down
48 changes: 48 additions & 0 deletions brmo-loader/src/main/resources/xsl/nhr-object-ref-3.0.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cat="http://schemas.kvk.nl/schemas/hrip/catalogus/2015/02">

<xsl:template name="get-name-abbr">
<xsl:variable name="n" select="local-name(.)"/>
<xsl:choose>
<!--persoon-->
<!--<xsl:when test="$n ='naamPersoon'">pers</xsl:when>-->
<xsl:when test="$n ='natuurlijkPersoon'">natPers</xsl:when>
<xsl:when test="$n ='buitenlandseVennootschap'">buitenlVenn</xsl:when>
<xsl:when test="$n ='eenmanszaakMetMeerdereEigenaren'">eenmZMeerEig</xsl:when>
<xsl:when test="$n ='rechtspersoon'">rechtspersoon</xsl:when>
<xsl:when test="$n ='rechtspersoonInOprichting'">rechtspersOpr</xsl:when>
<xsl:when test="$n ='samenwerkingsverband'">samenwvb</xsl:when>
<xsl:when test="$n ='maatschappelijkeActiviteit'">maatschAct</xsl:when>
<xsl:when test="$n ='onderneming'">onderneming</xsl:when>
<xsl:when test="$n ='commercieleVestiging'">comVestg</xsl:when>
<xsl:when test="$n ='nietCommercieleVestiging'">nietComVestg</xsl:when>
<!--<xsl:when test="$n ='binnenlandsAdres'">bnnldsAdres</xsl:when>-->
<!--<xsl:when test="$n ='deponeringen'">deponering</xsl:when>-->
<xsl:otherwise><xsl:value-of select="$n"/></xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="*[cat:kvkNummer]" mode="object_ref">
<xsl:text>nhr.</xsl:text><xsl:call-template name="get-name-abbr"/><xsl:text>.kvk.</xsl:text>
<xsl:value-of select="cat:kvkNummer"/>
</xsl:template>

<xsl:template match="*[cat:vestigingsnummer]" mode="object_ref">
<xsl:text>nhr.</xsl:text><xsl:call-template name="get-name-abbr"/><xsl:text>.</xsl:text>
<xsl:value-of select="cat:vestigingsnummer"/></xsl:template>

<xsl:template match="*[cat:bsn or cat:rsin]" mode="object_ref">
<xsl:text>nhr.</xsl:text><xsl:call-template name="get-name-abbr"/><xsl:text>.</xsl:text>
<xsl:if test="cat:bsn">
<xsl:text>bsn.</xsl:text><xsl:value-of select="cat:bsn"/>
</xsl:if>
<xsl:if test="cat:rsin">
<xsl:text>rsin.</xsl:text><xsl:value-of select="cat:rsin"/>
</xsl:if>
</xsl:template>

<!-- lege template voor gevallen zonder kvkNummer, vestigingsnummer, bsn of rsin bij heeftAlsEigenaar -->
<xsl:template match="*" mode="object_ref" />
</xsl:stylesheet>
111 changes: 111 additions & 0 deletions brmo-loader/src/main/resources/xsl/nhr-split-3.0.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cat="http://schemas.kvk.nl/schemas/hrip/catalogus/2015/02"
xmlns:tns="http://schemas.kvk.nl/schemas/hrip/dataservice/2015/02"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:brmo="http://www.b3partners.nl/brmo/bericht">

<xsl:import href="nhr-object-ref-3.0.xsl"/>

<!-- Dit stylesheet splitst een NHR Dataservice respons in meerdere berichten over
authentieke gegevens van de basisregistratie.
-->
<xsl:template match="/">
<brmo:berichten>
<!-- Bij het parsen wordt bij berichten de volgorde van de bericht elementen aangehouden in
de volgordenummer kolom -->
<xsl:apply-templates select="//tns:product"/>
</brmo:berichten>
</xsl:template>

<xsl:template match="cat:maatschappelijkeActiviteit">
<xsl:variable name="datum">
<brmo:datum><xsl:value-of select="../../@peilmoment"/></brmo:datum>
</xsl:variable>

<xsl:for-each select="cat:heeftAlsEigenaar/*[cat:bsn or cat:rsin]">
<!-- TODO: afsplitsen door/voor Persoon -->
<brmo:bericht>
<brmo:object_ref><xsl:apply-templates select="." mode="object_ref"/></brmo:object_ref>
<xsl:copy-of select="$datum"/>
<brmo:br_xml>
<xsl:copy>
<xsl:attribute name="peilmoment"><xsl:value-of select="$datum"/></xsl:attribute>
<xsl:copy-of select="node()"/>
<cat:isEigenaarVan>
<xsl:for-each select="../..">
<xsl:copy>
<xsl:copy-of select="cat:kvkNummer"/>
</xsl:copy>
</xsl:for-each>
</cat:isEigenaarVan>
</xsl:copy>
</brmo:br_xml>
</brmo:bericht>
</xsl:for-each>

<brmo:bericht>
<brmo:object_ref><xsl:apply-templates select="." mode="object_ref"/></brmo:object_ref>
<xsl:copy-of select="$datum"/>
<brmo:br_xml>
<xsl:copy>
<xsl:attribute name="peilmoment"><xsl:value-of select="$datum"/></xsl:attribute>
<xsl:copy-of select="node()"/>
</xsl:copy>
</brmo:br_xml>
</brmo:bericht>

<!-- Completere vestiging in wordtGeleidVanuit dan wordtUitgeoefendIn -->
<xsl:variable name="leidendeVestiging" select="cat:wordtGeleidVanuit/cat:vestigingsnummer"/>
<xsl:for-each select="cat:wordtGeleidVanuit/*">
<brmo:bericht>
<brmo:object_ref><xsl:apply-templates select="." mode="object_ref"/></brmo:object_ref>
<xsl:copy-of select="$datum"/>
<brmo:br_xml>
<!-- Voeg element wordtUitgeoefendDoor toe. Deze is niet aanwezig bij opvragen van
maatschappelijkeActiviteit, maar in RSGB een foreign key dus deze informatie bij
splitsen wel overbrengen via toevoegen van dit element -->
<xsl:copy>
<xsl:attribute name="peilmoment"><xsl:value-of select="$datum"/></xsl:attribute>
<xsl:copy-of select="node()"/>
<cat:wordtUitgeoefendDoor>
<!-- Voor een commercieleVestiging komt hier een onderneming, met alleen het kvkNummer -->
<xsl:if test="local-name(.) = 'commercieleVestiging'">
<xsl:variable name="vestigingsnr" select="cat:vestigingsnummer"/>
<xsl:for-each select="//cat:onderneming[cat:wordtUitgeoefendIn/cat:commercieleVestiging/cat:vestigingsnummer = $vestigingsnr]">
<xsl:copy>
<xsl:copy-of select="cat:kvkNummer"/>
</xsl:copy>
</xsl:for-each>
</xsl:if>

<!-- Voor een nietCommercieleVestiging komt hier een maatschappelijkeActiviteit -->
<xsl:if test="local-name(.) = 'nietCommercieleVestiging'">
<hier_komt_de_ma/>
</xsl:if>
</cat:wordtUitgeoefendDoor>
</xsl:copy>
</brmo:br_xml>
</brmo:bericht>
</xsl:for-each>
<!-- Incompletere commerciele vestigingen waaruit de maatschappelijkeActiviteit niet wordt geleid, maar toch worden
meegeleverd (testcases nodig!) -->
<xsl:for-each select="//cat:commercieleVestiging[cat:vestigingsnummer != $leidendeVestiging]">
<!-- child van onderneming, manifesteertZichAls en maatschappelijkeActiviteit -->
<brmo:message fatal="true">
Onbekende case: commercieleVestiging van maatschappelijkeActiviteit waaruit deze niet wordt geleid, aub testcase aanmelden bij ontwikkelaars!
</brmo:message>
</xsl:for-each>
<!-- Incompletere niet commerciele vestigingen waaruit de maatschappelijkeActiviteit niet wordt geleid, maar toch worden
meegeleverd (testcases nodig) -->
<xsl:for-each select="//cat:nietCommercieleVestiging[cat:vestigingsnummer != $leidendeVestiging]">
<!-- child van wordtUitgeoefendIn en maatschappelijkeActiviteit -->
<brmo:message fatal="true">
Onbekende case: nietCommercieleVestiging van maatschappelijkeActiviteit waaruit deze niet wordt geleid, aub testcase aanmelden bij ontwikkelaars!
</brmo:message>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Loading

0 comments on commit 48d7454

Please sign in to comment.