<!--2011-04-28 ajout du controle de Luhn pour la verification de la validité des codes SIRET--><!--2013-10-23 Ajout de la règle A3.2 pour la vérification du code national des stations de mesure cours d'eau plan d'eau--><!--2014-04-28 Ajout du fichier de configuration STQ_simplifie pour le controle des stations de mesure QES--><!--2014-04-29 Ajout du fichier ODP_simplifie pour le controle des systèmes de traitement d'eaux usées--><!--2014-05-12 Mise en avertissement des codes gelés--><axsl:stylesheet xmlns:xx="http://xml.sandre.eaufrance.fr/scenario/com_labo/1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:sa_ref2="http://xml.sandre.eaufrance.fr/scenario/referentiel/2" xmlns:sa_ref31="http://xml.sandre.eaufrance.fr/scenario/referentiel/3.1" xmlns:axsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><axsl:output method="text" omit-xml-declaration="no" standalone="yes" indent="yes"/><axsl:variable name="cheminPAR">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/PAR.xml</axsl:variable><axsl:variable name="cheminMET">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/MET.xml</axsl:variable><axsl:variable name="cheminSUP">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/SUP.xml</axsl:variable><axsl:variable name="cheminFAN">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/FAN.xml</axsl:variable><axsl:variable name="cheminURF">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/URF.xml</axsl:variable><axsl:variable name="cheminSTQ">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/3.1/STQ_simplifie.xml</axsl:variable><axsl:variable name="cheminODP">http://xml.sandre.eaufrance.fr/exist/sandre/Referentiels/3.1/ODP_simplifie.xml</axsl:variable><axsl:template match="*|@*" mode="schematron-get-full-path"><axsl:apply-templates select="parent::*" mode="schematron-get-full-path"/><axsl:text>/</axsl:text><axsl:if test="count(. | ../@*) = count(../@*)">@</axsl:if><axsl:value-of select="name()"/><axsl:text>[</axsl:text><axsl:value-of select="1+count(preceding-sibling::*[name()=name(current())])"/><axsl:text>]</axsl:text></axsl:template><axsl:template match="/"><axsl:apply-templates select="/" mode="M1"/></axsl:template>
<!-- VERIFICATION DU JEU DE DONNEES DES STATIONS DE MESURE COURS D'EAU PLAN D'EAU --><axsl:template match="/xx:COM_LABO/xx:Demande/xx:Prelevement/xx:StationPrelevement/xx:CdStationPrelevement[./@schemeAgencyID='1']" priority="4000" mode="M1"><axsl:choose>
        <!--<axsl:when test="document($cheminSTQ)//xy:Referentiel/xy:StationMesureEauxSurface/xy:CdStationMesureEauxSurface/text()=./text()">
       
        </axsl:when>--><axsl:when test="document($cheminSTQ)//sa_ref31:Referentiel/sa_ref31:StationMesureEauxSurface/sa_ref31:CdStationMesureEauxSurface/text()=./text()"><axsl:if test="document($cheminSTQ)//sa_ref31:Referentiel/sa_ref31:StationMesureEauxSurface[./sa_ref31:CdStationMesureEauxSurface/text()=current()/text()]/sa_ref31:StStationMesure/text()='Gelé'">
                    A3.2/Avertissement: le code '<axsl:value-of select="./text()"/>' est gelé au regard de la liste de référence des stations de mesure QES (cours d'eau, plans d'eau)#
                </axsl:if></axsl:when><axsl:otherwise>A3.1/Avertissement: le code '<axsl:value-of select="./text()"/>' est inconnu au regard de la liste de référence des stations de mesure cours d'eau plans d'eau#
            </axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template>
    
<!-- VERIFICATION DU JEU DE DONNEES DES SYSTEMES DE TRAITEMENT DES EAUX USEES --><axsl:template match="/xx:COM_LABO/xx:Demande/xx:Prelevement/xx:StationPrelevement/xx:CdStationPrelevement[./@schemeAgencyID='5']" priority="4000" mode="M1"><axsl:choose><axsl:when test="document($cheminODP)//sa_ref31:Referentiel/sa_ref31:OuvrageDepollution/sa_ref31:CdOuvrageDepollution/text()=./text()">
                <!--<axsl:if test="document($cheminODP)//sa_ref31:Referentiel/sa_ref31:OuvrageDepollution[./sa_ref31:CdOuvrageDepollution/text()=current()/text()]/sa_ref31:StStationMesure/text()='Gelé'">
                    A3.2/Avertissement: le code '<axsl:value-of select="./text()"/>' est gelé au regard de la liste de référence des stations de mesure QES (cours d'eau, plans d'eau)#
                </axsl:if>--></axsl:when><axsl:otherwise>A3.1/Avertissement: le code '<axsl:value-of select="./text()"/>' est inconnu au regard de la liste de référence des systèmes de traitement d'eaux usées en date du 2013-10-30#
            </axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="//*[name()='CdParametre']" priority="4000" mode="M1"><axsl:choose><axsl:when test="document($cheminPAR)//sa_ref2:Referentiel/sa_ref2:Parametre/sa_ref2:CdParametre/text()=./text()"><axsl:if test="document($cheminPAR)//sa_ref2:Referentiel/sa_ref2:Parametre[./sa_ref2:CdParametre/text()=current()/text()]/sa_ref2:StParametre/text()='Gelé'">
                    A3.2/Le code '<axsl:value-of select="text()"/>' est gelé au regard de la liste de référence des paramètres#
                </axsl:if></axsl:when><axsl:otherwise>E3.1/Le code '<axsl:value-of select="text()"/>' est inconnu au regard de la liste de référence des paramètres#
            </axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="*[local-name()='CdMethode']" priority="3999" mode="M1"><axsl:choose><axsl:when test="document($cheminMET)//sa_ref2:Referentiel/sa_ref2:Methode/sa_ref2:CdMethode/text()=./text()"><axsl:if test="document($cheminMET)//sa_ref2:Referentiel/sa_ref2:Methode[./sa_ref2:CdMethode/text()=current()/text()]/sa_ref2:StMethode/text()='Gelé'">
                A3.2/Le code '<axsl:value-of select="text()"/>' est gelé au regard de la liste de référence des méthodes#
            </axsl:if></axsl:when><axsl:otherwise>E3.1/Le code '<axsl:value-of select="text()"/>' est inconnu au regard de la liste de référence des méthodes#
            </axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="*[name()='CdSupport']" priority="3998" mode="M1"><axsl:choose><axsl:when test="document($cheminSUP)//sa_ref2:Referentiel/sa_ref2:Support/sa_ref2:CdSupport/text()=./text()"><axsl:if test="document($cheminSUP)//sa_ref2:Referentiel/sa_ref2:Support[./sa_ref2:CdSupport/text()=current()/text()]/sa_ref2:StSupport/text()='Gelé'">
                    A3.2/Le code '<axsl:value-of select="text()"/>' est gelé au regard de la liste de référence des supports#
                </axsl:if></axsl:when><axsl:otherwise>E3.1/Le code '<axsl:value-of select="text()"/>' est inconnu au regard de la liste de référence des supports#
            </axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="*[local-name()='CdUniteReference']" priority="3997" mode="M1"><axsl:choose><axsl:when test="document($cheminURF)//sa_ref2:Referentiel/sa_ref2:UniteReference/sa_ref2:CdUniteReference/text()=./text()"><axsl:if test="document($cheminURF)//sa_ref2:Referentiel/sa_ref2:UniteReference[./sa_ref2:CdUniteReference/text()=current()/text()]/sa_ref2:StUniteReference/text()='Gelé'">
                    A3.2/Le code '<axsl:value-of select="text()"/>' est gelé au regard de la liste de référence des unités de mesure#
                </axsl:if></axsl:when><axsl:otherwise>E3.1/Le code '<axsl:value-of select="text()"/>' est inconnu au regard de la liste de référence des unités de mesure#</axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template>

    <!--<axsl:template match="//com_labo:CdFractionAnalysee" priority="3996" mode="M1">--><axsl:template match="*[local-name()='CdFractionAnalysee']" priority="3996" mode="M1"><axsl:choose><axsl:when test="document($cheminFAN)//sa_ref2:Referentiel/sa_ref2:FractionAnalysee/sa_ref2:CdFractionAnalysee/text()=./text()"><axsl:if test="document($cheminFAN)//sa_ref2:Referentiel/sa_ref2:FractionAnalysee[./sa_ref2:CdFractionAnalysee/text()=current()/text()]/sa_ref2:StFractionAnalysee/text()='Gelé'">
                    A3.2/Le code '<axsl:value-of select="text()"/>' est gelé au regard de la liste de référence des fractions analysées#
                </axsl:if></axsl:when><axsl:otherwise>E3.1/Le code '<axsl:value-of select="text()"/>' est inconnu au regard de la liste de référence des fractions analysées#</axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="*[local-name()='CdIntervenant'][./@schemeAgencyID='SIRET']" priority="4000" mode="M1"><axsl:call-template name="controle-luhn"><axsl:with-param name="numero" select="text()"/><axsl:with-param name="somme" select="0"/><axsl:with-param name="indice" select="1"/></axsl:call-template><axsl:apply-templates mode="M1"/></axsl:template><axsl:template name="controle-luhn"><axsl:param name="numero" select="normalize-space(.)"/><axsl:param name="somme" select="0"/><axsl:param name="indice" select="1"/><axsl:choose><axsl:when test="string-length($numero)=0">
                <!-- Nous arrivons ici après le dernier chiffre --><axsl:choose><axsl:when test="$somme mod 10 = 0"/><axsl:otherwise>
                    E3.3/Le code SIRET '<axsl:value-of select="text()"/>' est erroné au regard du contrôle de la formule de Luhn, la somme <axsl:value-of select="$somme"/> n'est pas un multiple de 10#
                  </axsl:otherwise></axsl:choose></axsl:when><axsl:when test="$indice mod 2 = 0">
                <!-- Cas des chiffres d'indice pair --><axsl:call-template name="controle-luhn"><axsl:with-param name="numero" select="substring($numero, 2)"/><axsl:with-param name="somme" select="$somme + substring($numero, 1, 1)"/><axsl:with-param name="indice" select="$indice + 1"/></axsl:call-template></axsl:when><axsl:otherwise>
                <!-- Cas des chiffres d'indice impair --><axsl:variable name="double" select="concat(substring($numero, 1, 1) * 2, '0') "/><axsl:call-template name="controle-luhn"><axsl:with-param name="numero" select="substring($numero, 2)"/><axsl:with-param name="somme" select="$somme + substring($double, 1, 1) + substring($double, 2, 1)"/><axsl:with-param name="indice" select="$indice + 1"/></axsl:call-template></axsl:otherwise></axsl:choose><axsl:apply-templates mode="M1"/></axsl:template><axsl:template match="text()" priority="-1" mode="M1"/><axsl:template match="text()" priority="-1"/></axsl:stylesheet>