<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" encoding="windows-1251" indent="yes" />
        <xsl:strip-space elements="*"/>
        <xsl:variable name="accept"> !"#$%'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя</xsl:variable>
        <!-- Блок функций проверки -->
        <xsl:template name="CheckSym">
                <xsl:param name="sym"/>
                <xsl:param name="count"/>
                <xsl:param name="name"/>
                <xsl:if test="not(contains($accept,substring($sym,$count,1)))">
                        <xsl:element name="error">
                                <xsl:attribute name="must">1</xsl:attribute>
                                <xsl:text/>Поле "<xsl:value-of select="$name"/>" содержит недопустимый "<xsl:value-of select="substring($sym,$count,1)"/>"символ на позиции <xsl:value-of select="$count"/>
                        </xsl:element>
                </xsl:if>
                <xsl:if test="$count &lt; string-length($sym)">
                        <xsl:call-template name="CheckSym">
                                <xsl:with-param name="sym" select="$sym"/>
                                <xsl:with-param name="name" select="$name"/>
                                <xsl:with-param name="count" select="$count+1"/>
                        </xsl:call-template>
                </xsl:if>
        </xsl:template>
        <xsl:template name="CheckS">
                <xsl:param name="value"/>
                <xsl:param name="name"/>
                <xsl:param name="must"/>
                <xsl:param name="length"/>
                <xsl:variable name="labs">
                        <xsl:choose>
                                <xsl:when test="$length &gt; 0">
                                        <xsl:value-of select="$length"/>
                                </xsl:when>
                                <xsl:otherwise>
                                        <xsl:value-of select="-1*$length"/>
                                </xsl:otherwise>
                        </xsl:choose>
                </xsl:variable>
                <xsl:if test="string-length($value)=0 and not($must=-1) ">
                        <xsl:element name="error">
                                <xsl:attribute name="must">
                                        <xsl:value-of select="$must"/>
                                </xsl:attribute>
                                <xsl:choose>
                                        <xsl:when test="$must=1">Обязательное поле </xsl:when>
                                        <xsl:otherwise>Поле </xsl:otherwise>
                                </xsl:choose>
                                <xsl:text/>"<xsl:value-of select="$name"/>" не заполнено.</xsl:element>
                </xsl:if>
                <xsl:if test="string-length($value)&gt;0">
                        <xsl:call-template name="CheckSym">
                                <xsl:with-param name="sym" select="$value"/>
                                <xsl:with-param name="name" select="$name"/>
                                <xsl:with-param name="count" select="1"/>
                        </xsl:call-template>
                        <xsl:if test="string-length($value) &gt; $labs">
                                <xsl:element name="error">
                                        <xsl:attribute name="must">1</xsl:attribute>
                                        <xsl:text/>Поле "<xsl:value-of select="$name"/>" превышает максимальную длину (<xsl:value-of select="$labs"/>)</xsl:element>
                        </xsl:if>
                        <xsl:if test="(string-length($value) &lt; $length) and ($length &gt; 0)">
                                <xsl:element name="error">
                                        <xsl:attribute name="must">1</xsl:attribute>
                                        <xsl:text/>Поле "<xsl:value-of select="$name"/>" меньше обязательной длины (<xsl:value-of select="$length"/>)</xsl:element>
                        </xsl:if>
                </xsl:if>
        </xsl:template>
        <!-- параметры проверки конкретного документа -->
        <xsl:template name="validate" match="PP">
                <xsl:element name="errors">
                        <xsl:if test="UCH_TB=0">
                                <xsl:element name="error">
                                        <xsl:attribute name="must">1</xsl:attribute>
                                        Флаг 'Учитывать' в платежном поручении не установлен</xsl:element>
                        </xsl:if>
                        <xsl:if test="round(SUM*100)=0">
                                <xsl:element name="error"><xsl:attribute name="must">1</xsl:attribute>Не указана сумма платежного поручения</xsl:element>
                        </xsl:if>
                        <xsl:if test="DATE=''">
                                <xsl:element name="error"><xsl:attribute name="must">1</xsl:attribute>Не указана дата платежного поручения</xsl:element>
                        </xsl:if>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Номер платежного поручения</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-10</xsl:with-param>
                                <xsl:with-param name="value" select="NOM"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">ИНН Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-12</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/INN"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">КПП Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">9</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/KPP"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">КБП Плательщика</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">5</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/KOD_UBP"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Полное наименование бюджетополучателя - Плательщика</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-512</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/NAME_UBP"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование Плательщика - по требованию банка</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-160</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/CNAME"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Лицевой счет Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">11</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/LS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">КОД ТОФК</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">4</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/KOD_TOFK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">ИНН органа ФК Плательщика</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-12</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/INN_TOFK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование органа ФК Плательщика</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-250</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/NAME_TOFK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Расчетный счет органа ФК Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/BS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">БИК банка Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">9</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование банка Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-255</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/NAME_BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Местонахождение банка Плательщика</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-255</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/CITY_BIC"/>
                        </xsl:call-template>
                        <xsl:if test="string-length(concat(PAY/CITY_BIC,PAY/NAME_BIC)) &gt; 160">
                                <xsl:element name="error">
                                        <xsl:attribute name="must">1</xsl:attribute>Поле "Наименование банка Плательщика" превышает максимальную длину(160)</xsl:element>
                        </xsl:if>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование филиала банка Плательщика</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-50</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/FILIAL_BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Коррсчет банка Плательщика в РКЦ</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/BS_KS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">ИНН Получателя</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-12</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/INN"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">КПП Получателя</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">9</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/KPP"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование Получателя - по требованию банка</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-160</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/CNAME"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">ИНН органа ФК Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-12</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/INN_TOFK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование органа ФК Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-250</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/NAME_TOFK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Расчетный счет Получателя</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/BS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Лицевой счет Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">11</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/LS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">БИК банка Получателя</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">9</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Местонахождение банка Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-255</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/CITY_BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование банка Получателя</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-255</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/NAME_BIC"/>
                        </xsl:call-template>
                        <xsl:if test="string-length(concat(RCP/CITY_BIC,RCP/NAME_BIC)) &gt; 160">
                                <xsl:element name="error">
                                        <xsl:attribute name="must">1</xsl:attribute>Поле "Наименование банка Получателя" превышает максимальную длину(160)</xsl:element>
                        </xsl:if>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Наименование филиала банка Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-50</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/FILIAL_BIC"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Коррсчет банка Получателя в РКЦ</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/BS_KS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Назначение платежа</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">-210</xsl:with-param>
                                <xsl:with-param name="value" select="PURPOSE"/>
                        </xsl:call-template>
                        <xsl:variable name="ORDER_PAY0">
                                <xsl:choose>
                                        <xsl:when test="starts-with(ORDER_PAY,'0')">
                                                <xsl:value-of select="substring(ORDER_PAY,2,255)"/>
                                        </xsl:when>
                                        <xsl:otherwise>
                                                <xsl:value-of select="ORDER_PAY"/>
                                        </xsl:otherwise>
                                </xsl:choose>
                        </xsl:variable>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Очередность платежа</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">1</xsl:with-param>
                                <xsl:with-param name="value" select="$ORDER_PAY0"/>
                                <!-- (поле 21)*.  Поле может принимать значения от 0 до 6 (0 – очередность не указана).  -->
                        </xsl:call-template>
                        <xsl:if test="PRINT_KPP='1'">
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Статус юридического лица</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">2</xsl:with-param>
                                <xsl:with-param name="value" select="PAYSTATUS"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Код бюджетной классификации</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="KBK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Код ОКАТО (105)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-11</xsl:with-param>
                                <xsl:with-param name="value" select="OKATO"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель основания платежа (106)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-2</xsl:with-param>
                                <xsl:with-param name="value" select="OSNPLAT"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель налогового периода (107)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-10</xsl:with-param>
                                <xsl:with-param name="value" select="NAL_PER"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель номера документа (108)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-15</xsl:with-param>
                                <xsl:with-param name="value" select="NUM_DOK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель даты документа (109)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-10</xsl:with-param>
                                <xsl:with-param name="value" select="DATE_DOK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Тип платежа (110)</xsl:with-param>
                                <xsl:with-param name="must">0</xsl:with-param>
                                <xsl:with-param name="length">-2</xsl:with-param>
                                <xsl:with-param name="value" select="TYPE_PL"/>
                        </xsl:call-template>
                        </xsl:if>
                        <xsl:if test="PRINT_KPP='0'">
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Код бюджетной классификации</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">20</xsl:with-param>
                                <xsl:with-param name="value" select="KBK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Код ОКАТО (105)</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-11</xsl:with-param>
                                <xsl:with-param name="value" select="OKATO"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель номера документа (108)</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-15</xsl:with-param>
                                <xsl:with-param name="value" select="NUM_DOK"/>
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Показатель даты документа (109)</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">-10</xsl:with-param>
                                <xsl:with-param name="value" select="DATE_DOK"/>
                        </xsl:call-template>
                        </xsl:if>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Лицевой счет Плательщика</xsl:with-param>
                                <xsl:with-param name="must">1</xsl:with-param>
                                <xsl:with-param name="length">11</xsl:with-param>
                                <xsl:with-param name="value" select="PAY/LS"/>
                                <!-- Л/с ФО, НУБП, АУ. Не заполняется в случае представления ФО документов по отдельному счету, открытому в банке для учета средств БУ, л/с которых открыты в ФО. -->
                        </xsl:call-template>
                        <xsl:call-template name="CheckS">
                                <xsl:with-param name="name">Лицевой счет Получателя</xsl:with-param>
                                <xsl:with-param name="must">-1</xsl:with-param>
                                <xsl:with-param name="length">11</xsl:with-param>
                                <xsl:with-param name="value" select="RCP/LS"/>
                                <!-- Поле заполняется в случае оформления ПП для осуществления внебанковской операции и наличия необходимости указания ин-формации о л/с контраген-та, по которому подлежит отражение поступления.       -->
                        </xsl:call-template>
                        <xsl:for-each select="PPST">
                                        <xsl:choose>
                                        <xsl:when test="starts-with(/PP/PAY/BS, '40302')">
                                                <xsl:element name="error">
                                                        <xsl:attribute name="must">1</xsl:attribute>При расходе по балансовому счету 40302 поле "Код бюджетной классификации" не заполняется (строка <xsl:value-of select="position()"/>)</xsl:element>
                                        </xsl:when>
                                        <xsl:otherwise>
                                <xsl:call-template name="CheckS">
                                        <xsl:with-param name="name">Код бюджетной классификации (строка <xsl:value-of select="position()"/>)</xsl:with-param>
                                        <xsl:with-param name="must">1</xsl:with-param>
                                        <xsl:with-param name="length">20</xsl:with-param>
                                        <xsl:with-param name="value" select="KBK"/>
                                </xsl:call-template>
                                                <xsl:if test="typkbk='ФКР' and starts-with(/PP/PAY/BS, '40503') and not(substring(kbk,4,14)='00000000000000' )">
                                                        <xsl:element name="error">
                                                                <xsl:attribute name="must">1</xsl:attribute>Для счета 40503 код подраздела, код целевой статьи и код вида расходов заполняются нулями (строка <xsl:value-of select="position()"/>)</xsl:element>
                                                </xsl:if>
                                                </xsl:otherwise>
                                                </xsl:choose>
                                <xsl:call-template name="CheckS">
                                        <xsl:with-param name="name">Код целевой программы (строка <xsl:value-of select="position()"/>)</xsl:with-param>
                                        <xsl:with-param name="must">-1</xsl:with-param>
                                        <xsl:with-param name="length">3</xsl:with-param>
                                        <xsl:with-param name="value" select="CODECP"/>
                                </xsl:call-template>
                                <xsl:call-template name="CheckS">
                                        <xsl:with-param name="name">Код цели Плательщика (строка <xsl:value-of select="position()"/>)</xsl:with-param>
                                        <xsl:with-param name="must">-1</xsl:with-param>
                                        <xsl:with-param name="length">20</xsl:with-param>
                                        <xsl:with-param name="value" select="ADD_KLASS"/>
                                </xsl:call-template>
                                <xsl:call-template name="CheckS">
                                        <xsl:with-param name="name">Резервное поле (строка <xsl:value-of select="position()"/>)</xsl:with-param>
                                        <xsl:with-param name="must">-1</xsl:with-param>
                                        <xsl:with-param name="length">-40</xsl:with-param>
                                        <xsl:with-param name="value" select="REZERV"/>
                                </xsl:call-template>
                        </xsl:for-each>
                </xsl:element>
        </xsl:template>
</xsl:stylesheet>
