Benford.xsl 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  4. xmlns:Benford="https://pl.wikipedia.org/wiki/Rozkład_Benforda"
  5. xmlns:system_cache__dita="http://biuro.biall-net.pl/xmlschema_procesy5/default_db_xml_cache/dita.xsd"
  6. exclude-result-prefixes="xs"
  7. version="2.0">
  8. <!-- Template for analysis of https://pl.wikipedia.org/wiki/Rozkład_Benforda
  9. use this example to construct
  10. <Benford:table>
  11. <xsl:attribute name="Benford:year" select="."/>
  12. <xsl:attribute name="Benford:subject" select="$Osoba"/>
  13. <xsl:for-each select="$BI_audit_ENERGA_RUM_UMOWY_fix//default_db:BI_audit_ENERGA_RUM_UMOWY[ lower-case(default_db:Osoba_merytoryczna___nazwisko_i_imie) = lower-case($Osoba) and Data_zawarcia.rok = $rok_cur and not(Wartosc = '0' )]">
  14. <Benford:value><xsl:value-of select="substring( Wartosc,1,1)"/></Benford:value>
  15. </xsl:for-each>
  16. </Benford:table>
  17. than to analyze:
  18. <xsl:if test="$Benford:table//Benford:value">
  19. <xsl:apply-templates mode="Benford:table_analys" select="$Benford:table"/>
  20. </xsl:if>
  21. expect:
  22. <Benford:table_analys_exceed Benford:year="2012"
  23. Benford:subject="Jan Npwak"
  24. Benford:digit="8"
  25. Benford:true.current.dig="5"
  26. Benford:current.dig.ratio="16"
  27. Benford:current.dig.test.fault="11"
  28. Benford:table_analys.dig.all.sum="37"/>
  29. or:
  30. <Benford:table Benford:year="2011"
  31. Benford:subject="Jan Nowak"
  32. Benford:use_wider_period="#41 $Benford:table_analys not complete all numnbers used - use bigger period">
  33. <Benford:value>8</Benford:value>
  34. <Benford:value>5</Benford:value>
  35. <Benford:value>0</Benford:value>
  36. <Benford:value>0</Benford:value>
  37. <Benford:value>6</Benford:value>
  38. <Benford:value>0</Benford:value>
  39. <Benford:value>1</Benford:value>
  40. <Benford:value>1</Benford:value>
  41. <Benford:value>6</Benford:value>
  42. <Benford:value>8</Benford:value>
  43. <Benford:value>8</Benford:value>
  44. <Benford:value>8</Benford:value>
  45. <Benford:value>9</Benford:value>
  46. <Benford:value>0</Benford:value>
  47. <Benford:value>0</Benford:value>
  48. <Benford:value>6</Benford:value>
  49. <Benford:value>0</Benford:value>
  50. <Benford:value>0</Benford:value>
  51. <Benford:value>0</Benford:value>
  52. <Benford:value>0</Benford:value>
  53. <Benford:value>0</Benford:value>
  54. </Benford:table>
  55. which should be analyzed more wider - TODO example:
  56. -->
  57. <xsl:param name="Benford:true.tolerance" select="10"/>
  58. <xsl:param name="Benford:true.minimal_records" select="20"/>
  59. <xsl:variable name="Benford:true">
  60. <Benford:true>
  61. <Benford:table_analys.dig Benford:digit="1" Benford:digit.occurs="{xs:double(30.1)}"/>
  62. <Benford:table_analys.dig Benford:digit="2" Benford:digit.occurs="{xs:double(17.6)}"/>
  63. <Benford:table_analys.dig Benford:digit="3" Benford:digit.occurs="{xs:double(12.5)}"/>
  64. <Benford:table_analys.dig Benford:digit="4" Benford:digit.occurs="{xs:double(9.7)}"/>
  65. <Benford:table_analys.dig Benford:digit="5" Benford:digit.occurs="{xs:double(7.9)}"/>
  66. <Benford:table_analys.dig Benford:digit="6" Benford:digit.occurs="{xs:double(6.7)}"/>
  67. <Benford:table_analys.dig Benford:digit="7" Benford:digit.occurs="{xs:double(5.8)}"/>
  68. <Benford:table_analys.dig Benford:digit="8" Benford:digit.occurs="{xs:double(5.1)}"/>
  69. <Benford:table_analys.dig Benford:digit="9" Benford:digit.occurs="{xs:double(4.6)}"/>
  70. </Benford:true>
  71. </xsl:variable>
  72. <xsl:template mode="Benford:table_analys" match="Benford:table">
  73. <xsl:variable name="Benford:table" select="."/>
  74. <!--<xsl:copy-of select="$Benford:table"></xsl:copy-of>-->
  75. <xsl:variable name="Benford:table_analys">
  76. <Benford:table_analys>
  77. <xsl:copy-of select="@*"/>
  78. <xsl:for-each select="1 to 9">
  79. <Benford:table_analys.dig>
  80. <xsl:attribute name="Benford:digit" select="."/>
  81. <xsl:attribute name="Benford:digit.occurs" select="count($Benford:table//Benford:value[ number(text()) = current()])"/>
  82. </Benford:table_analys.dig>
  83. </xsl:for-each>
  84. </Benford:table_analys>
  85. </xsl:variable>
  86. <xsl:choose>
  87. <xsl:when test="$Benford:table_analys//Benford:table_analys.dig[@Benford:digit.occurs = 0 ] and sum($Benford:table_analys//Benford:table_analys.dig/@Benford:digit.occurs) &lt; $Benford:true.minimal_records ">
  88. <xsl:comment>#41 $Benford:table_analys not complete all numnbers used - use bigger period</xsl:comment>
  89. <Benford:table>
  90. <xsl:copy-of select="$Benford:table/@*"/>
  91. <xsl:attribute name="Benford:use_wider_period" select="'#41 $Benford:table_analys not complete all numnbers used - use bigger period'"/>
  92. <xsl:copy-of select="*"/>
  93. </Benford:table>
  94. </xsl:when>
  95. <xsl:when test="$Benford:table_analys//Benford:table_analys.dig[@Benford:digit.occurs = 0 ] ">
  96. <xsl:comment>#110 nie ma wszystkich cyfr, trzeba to zaznaczyc i inaczej analizowac - tylko zwiekszone liczby</xsl:comment>
  97. <xsl:variable name="Benford:table_analys.dig.all.sum" select="sum($Benford:table_analys//Benford:table_analys.dig/@Benford:digit.occurs)"/>
  98. <xsl:for-each select="$Benford:table_analys//Benford:table_analys.dig">
  99. <xsl:variable name="Benford:true.current.dig" select="$Benford:true//Benford:table_analys.dig[number(@Benford:digit) = current()/number(@Benford:digit)]/@Benford:digit.occurs" />
  100. <xsl:variable name="Benford:current.dig.ratio" select="number(@Benford:digit.occurs) div number($Benford:table_analys.dig.all.sum) * 100" />
  101. <xsl:variable name="Benford:current.dig.test.fault" select="number($Benford:current.dig.ratio) - number($Benford:true.current.dig)" />
  102. <xsl:choose>
  103. <xsl:when test=" number($Benford:current.dig.test.fault) &gt; number($Benford:true.tolerance) ">
  104. <Benford:table_analys_exceed>
  105. <xsl:copy-of select="$Benford:table/@*"/>
  106. <xsl:attribute name="Benford:digit" select="@Benford:digit"/>
  107. <xsl:attribute name="Benford:true.current.dig" select="round($Benford:true.current.dig)"/>
  108. <xsl:attribute name="Benford:current.dig.ratio" select="round($Benford:current.dig.ratio)"/>
  109. <xsl:attribute name="Benford:current.dig.test.fault" select="round($Benford:current.dig.test.fault)"/>
  110. <xsl:attribute name="Benford:table_analys.dig.all.sum" select="$Benford:table_analys.dig.all.sum"/>
  111. <xsl:attribute name="Benford:current.dig.test.fault.rel" select="number($Benford:current.dig.ratio) - number($Benford:true.current.dig)"/>
  112. </Benford:table_analys_exceed>
  113. </xsl:when>
  114. </xsl:choose>
  115. </xsl:for-each>
  116. </xsl:when>
  117. <xsl:otherwise>
  118. <xsl:variable name="Benford:table_analys.dig.all.sum" select="sum($Benford:table_analys//Benford:table_analys.dig/@Benford:digit.occurs)"/>
  119. <xsl:for-each select="$Benford:table_analys//Benford:table_analys.dig">
  120. <xsl:variable name="Benford:true.current.dig" select="$Benford:true//Benford:table_analys.dig[number(@Benford:digit) = current()/number(@Benford:digit)]/@Benford:digit.occurs" />
  121. <xsl:variable name="Benford:current.dig.ratio" select="number(@Benford:digit.occurs) div number($Benford:table_analys.dig.all.sum) * 100" />
  122. <xsl:variable name="Benford:current.dig.test.fault" select="abs(number($Benford:current.dig.ratio) - number($Benford:true.current.dig))" />
  123. <xsl:choose>
  124. <xsl:when test=" number($Benford:current.dig.test.fault) &gt; number($Benford:true.tolerance) ">
  125. <Benford:table_analys_exceed>
  126. <xsl:copy-of select="$Benford:table/@*"/>
  127. <xsl:attribute name="Benford:digit" select="@Benford:digit"/>
  128. <xsl:attribute name="Benford:true.current.dig" select="round($Benford:true.current.dig)"/>
  129. <xsl:attribute name="Benford:current.dig.ratio" select="round($Benford:current.dig.ratio)"/>
  130. <xsl:attribute name="Benford:current.dig.test.fault" select="round($Benford:current.dig.test.fault)"/>
  131. <xsl:attribute name="Benford:table_analys.dig.all.sum" select="$Benford:table_analys.dig.all.sum"/>
  132. <xsl:attribute name="Benford:current.dig.test.fault.rel" select="number($Benford:current.dig.ratio) - number($Benford:true.current.dig)"/>
  133. </Benford:table_analys_exceed>
  134. </xsl:when>
  135. </xsl:choose>
  136. </xsl:for-each>
  137. </xsl:otherwise>
  138. </xsl:choose>
  139. </xsl:template>
  140. <xsl:template match="*|text()|comment()" mode="system_cache__dita:topic"/>
  141. <!-- to generate dita topic based on Benford:table_analys_exceed - it will try to target data from parameter (deals etc)-->
  142. <xsl:template match="Benford:table_analys_exceed" mode="system_cache__dita:topic">
  143. <!-- input: <Benford:table_analys_exceed Benford:year="2012"
  144. Benford:subject="Jan Npwak"
  145. Benford:digit="8"
  146. Benford:true.current.dig="5"
  147. Benford:current.dig.ratio="16"
  148. Benford:current.dig.test.fault="11"
  149. Benford:table_analys.dig.all.sum="37"
  150. Benford:current.dig.test.fault.rel="-10"/>
  151. -->
  152. <xsl:param name="Benford:subject.xml" /> <!-- example "$BI_audit_ENERGA_RUM_UMOWY_fix//default_db:BI_audit_ENERGA_RUM_UMOWY" -->
  153. <xsl:param name="Benford:subject.value" /> <!-- to search against Benford:subject.xml for get value - example 'Wartosc' -->
  154. <xsl:param name="Benford:subject" /> <!-- example to search against Benford:subject.xml 'default_db:Osoba_merytoryczna___nazwisko_i_imie' -->
  155. <xsl:param name="Benford:year" /> <!-- to search against shorter period - example 'Data_zawarcia.rok' -->
  156. <xsl:param name="Benford:subject.description" /> <!-- to search against Benford:subject.xml for get description - example 'default_db:Przedmiot_umowy default_db:Kontrahenci' -->
  157. <xsl:param name="topic.id"/>
  158. <xsl:param name="simpletable.id"/>
  159. <xsl:param name="id" select="concat('topic__Benford_table_analys_exceed',generate-id())"/>
  160. <xsl:variable name="Benford:table_analys_exceed" select="."/>
  161. <topic id="{$id}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  162. Benford:digit="{@Benford:digit}"
  163. Benford:current.dig.test.fault="{@Benford:current.dig.test.fault}"
  164. Benford:current.dig.test.fault.rel="{@Benford:current.dig.test.fault.rel}"
  165. xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:topic.xsd">
  166. <xsl:message>#156 Wykryte anomalia Benford dla <xsl:value-of select="@Benford:subject"/> w <xsl:value-of select="@Benford:year"/> dla liczby <xsl:value-of select="@Benford:digit"/> przekroczone o <xsl:value-of select="@Benford:current.dig.test.fault"/>, liczone dla <xsl:value-of select="@Benford:table_analys.dig.all.sum"/> pozycji.</xsl:message>
  167. <xsl:choose>
  168. <xsl:when test="$Benford:subject.xml and $Benford:subject.value "><!--<xsl:when test="$Benford:subject.xml and $Benford:subject and $Benford:year and $Benford:subject.value and $Benford:subject.description">-->
  169. <title>Wykryte anomalia Benford dla <xsl:value-of select="@Benford:subject"/> w <xsl:value-of select="@Benford:year"/> dla liczby <xsl:value-of select="@Benford:digit"/> liczone dla <xsl:value-of select="@Benford:table_analys.dig.all.sum"/> pozycji.
  170. <!--Wartość: <xsl:value-of select="sum($Benford:subject.xml [ node()[name()=$Benford:subject] = $Benford:table_analys_exceed/@Benford:subject and substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit and node()[name()=$Benford:year]=$Benford:table_analys_exceed/@Benford:year ]/node()[name()=$Benford:subject.value])"/>-->
  171. Wartość: <xsl:value-of select="sum($Benford:subject.xml[substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit ] /node()[name()=$Benford:subject.value]) div 1000000"/> [mln]
  172. <xsl:if test="number(@Benford:current.dig.test.fault.rel) &lt; 0"> - Za mało obiektów o <xsl:value-of select="@Benford:current.dig.test.fault"/> %</xsl:if>
  173. <xsl:if test="number(@Benford:current.dig.test.fault.rel) &gt; 0"> - Przekroczenie ilości obiektów o <xsl:value-of select="@Benford:current.dig.test.fault"/> %</xsl:if>
  174. </title>
  175. <body>
  176. <p>
  177. <xsl:value-of select="@Benford:true.current.dig"/> - stała rozkładu dla liczby <xsl:value-of select="@Benford:digit"/>.
  178. </p>
  179. <p>
  180. <xsl:value-of select="@Benford:current.dig.test.fault.rel"/> % - o ile za dużo / za mało jest danych
  181. </p>
  182. <p>
  183. <xsl:value-of select="round(sum($Benford:subject.xml/node()[name()=$Benford:subject.value]) div 1000000)"/> [mln] - ogólna wartość transakcji
  184. </p>
  185. <p>
  186. <xsl:value-of select="count($Benford:subject.xml/node()[name()=$Benford:subject.value]) "/> - ogólna ilość transakcji
  187. </p>
  188. <p>
  189. <xsl:value-of select="round(sum($Benford:subject.xml[substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit ] /node()[name()=$Benford:subject.value]) div sum($Benford:subject.xml/node()[name()=$Benford:subject.value]) * 100 )"/> - % wartości trasnakcji z anomalią do ogółu (kwota)
  190. </p>
  191. <p>
  192. <xsl:value-of select="count($Benford:subject.xml[substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit ] /node()[name()=$Benford:subject.value]) div count($Benford:subject.xml/node()[name()=$Benford:subject.value]) * 100 "/> - % wartości trasnakcji z anomalią do ogółu (ilość)
  193. </p>
  194. <simpletable frame="all" relcolwidth="8* 1.0* 2*" id="topic__Benford_table_analys_exceed_simpletable_{ generate-id()}" > <!-- system_cache__dita:width_cols="auto" -->
  195. <sthead>
  196. <stentry>Dane obiektu </stentry>
  197. <stentry>Data</stentry>
  198. <stentry>Kwota</stentry>
  199. </sthead>
  200. <!--<xsl:for-each select="$Benford:subject.xml [ node()[name()=$Benford:subject] = $Benford:table_analys_exceed/@Benford:subject and substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit and node()[name()=$Benford:year]=$Benford:table_analys_exceed/@Benford:year ]">-->
  201. <xsl:for-each select="$Benford:subject.xml[substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit ]">
  202. <strow>
  203. <xsl:variable name="current" select="current()"/>
  204. <stentry>
  205. <!--<xsl:value-of select="current()/node()[name()='default_db:Numer_rejestrowy']"/>-->
  206. <xsl:for-each select=" tokenize($Benford:subject.description,' ')">
  207. <xsl:variable name="nname" select="."/>
  208. <!--<xsl:comment>#171 checking for name '<xsl:value-of select="$nname"/>'</xsl:comment>-->
  209. <p><xsl:value-of select="$nname"/>: <xsl:value-of select="$current//node()[name()=$nname]"/></p>
  210. </xsl:for-each>
  211. </stentry>
  212. <stentry><xsl:value-of select="current()/node()[name()=$Benford:year]"/></stentry>
  213. <stentry><xsl:value-of select="current()/node()[name()=$Benford:subject.value]"/></stentry>
  214. </strow>
  215. </xsl:for-each>
  216. </simpletable>
  217. </body>
  218. </xsl:when>
  219. <xsl:when test="$topic.id and $simpletable.id">
  220. <title>Wykryte anomalia Benford dla <xsl:value-of select="@Benford:subject"/> w <xsl:value-of select="@Benford:year"/> dla liczby <xsl:value-of select="@Benford:digit"/> przekroczone o <xsl:value-of select="@Benford:current.dig.test.fault"/>, liczone dla <xsl:value-of select="@Benford:table_analys.dig.all.sum"/> pozycji.</title>
  221. <body>
  222. <p><xsl:copy-of select="system_cache__dita:xref_2_topc($topic.id)"/></p>
  223. </body>
  224. </xsl:when>
  225. </xsl:choose>
  226. </topic>
  227. </xsl:template>
  228. <!-- to generate dita topic based on Benford:table - it will shows analyzed data-->
  229. <xsl:template match="Benford:table" mode="system_cache__dita:topic">
  230. <!-- input: <Benford:table_analys_exceed Benford:year="2012"
  231. Benford:subject="Jan Npwak"
  232. Benford:digit="8"
  233. Benford:true.current.dig="5"
  234. Benford:current.dig.ratio="16"
  235. Benford:current.dig.test.fault="11"
  236. Benford:table_analys.dig.all.sum="37"
  237. Benford:current.dig.test.fault.rel="-10"/>
  238. -->
  239. <xsl:param name="Benford:subject.xml" /> <!-- example "$BI_audit_ENERGA_RUM_UMOWY_fix//default_db:BI_audit_ENERGA_RUM_UMOWY" -->
  240. <xsl:param name="Benford:subject.value" /> <!-- to search against Benford:subject.xml for get value - example 'Wartosc' -->
  241. <xsl:param name="Benford:subject" /> <!-- example to search against Benford:subject.xml 'default_db:Osoba_merytoryczna___nazwisko_i_imie' -->
  242. <xsl:param name="Benford:year" /> <!-- to search against shorter period - example 'Data_zawarcia.rok' -->
  243. <xsl:param name="Benford:subject.description" /> <!-- to search against Benford:subject.xml for get description - example 'default_db:Przedmiot_umowy default_db:Kontrahenci' -->
  244. <xsl:param name="topic.id"/>
  245. <xsl:param name="simpletable.id"/>
  246. <xsl:param name="id" select="concat('topic__Benford_table_analys_not_exceed',generate-id())"/>
  247. <xsl:param name="Benford:force_raport" select="false()"/> <!-- default is to ignore when there is no anomaly - otherwise when true is to show analyzed data subject -->
  248. <xsl:variable name="Benford:table_analys_exceed" select="."/>
  249. <xsl:choose>
  250. <xsl:when test="$Benford:force_raport">
  251. <topic id="{$id}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  252. xsi:noNamespaceSchemaLocation="urn:oasis:names:tc:dita:xsd:topic.xsd">
  253. <title>Nie wykryto anomalii Benford dla <xsl:value-of select="@Benford:subject"/> w <xsl:value-of select="@Benford:year"/> dla liczby <xsl:value-of select="@Benford:digit"/> liczone dla <xsl:value-of select="count($Benford:subject.xml/node()[name()=$Benford:subject.value])"/> pozycji.
  254. <!--Wartość: <xsl:value-of select="sum($Benford:subject.xml [ node()[name()=$Benford:subject] = $Benford:table_analys_exceed/@Benford:subject and substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit and node()[name()=$Benford:year]=$Benford:table_analys_exceed/@Benford:year ]/node()[name()=$Benford:subject.value])"/>-->
  255. Wartość: <xsl:value-of select="sum($Benford:subject.xml[substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit ] /node()[name()=$Benford:subject.value]) div 1000000"/> [mln]
  256. </title>
  257. <body>
  258. <p>
  259. <xsl:value-of select="round(sum($Benford:subject.xml/node()[name()=$Benford:subject.value]) div 1000)"/> [tys] - ogólna wartość transakcji
  260. </p>
  261. <p>
  262. <xsl:value-of select="count($Benford:subject.xml/node()[name()=$Benford:subject.value]) "/> - ogólna ilość transakcji
  263. </p>
  264. <simpletable frame="all" relcolwidth="8* 2* 2*" id="topic__Benford_table_analys_not_exceed_simpletable_{ generate-id()}" > <!-- system_cache__dita:width_cols="auto" -->
  265. <sthead>
  266. <stentry>Dane obiektu </stentry>
  267. <stentry>Data</stentry>
  268. <stentry>Kwota</stentry>
  269. </sthead>
  270. <!--<debug.285.Benford.subject.xml>
  271. <xsl:copy-of select="$Benford:subject.xml"/>
  272. </debug.285.Benford.subject.xml>-->
  273. <!--<debug.285.Benford.subject.xml.count>
  274. <xsl:copy-of select="count($Benford:subject.xml//*)"/>
  275. </debug.285.Benford.subject.xml.count>
  276. <Benford:subject.value>
  277. <xsl:copy-of select="$Benford:subject.value"/>
  278. </Benford:subject.value>
  279. <Benford:year>
  280. <xsl:copy-of select="$Benford:year"/>
  281. </Benford:year>
  282. <Benford:subject.value>
  283. <xsl:copy-of select="$Benford:subject.value"/>
  284. </Benford:subject.value>
  285. <Benford:subject.description>
  286. <xsl:copy-of select="$Benford:subject.description"/>
  287. </Benford:subject.description>
  288. <Benford:force_raport>
  289. <xsl:copy-of select="$Benford:force_raport"/>
  290. </Benford:force_raport>
  291. -->
  292. <!--<xsl:for-each select="$Benford:subject.xml [ node()[name()=$Benford:subject] = $Benford:table_analys_exceed/@Benford:subject and substring(node()[name()=$Benford:subject.value],1,1)=$Benford:table_analys_exceed/@Benford:digit and node()[name()=$Benford:year]=$Benford:table_analys_exceed/@Benford:year ]">-->
  293. <xsl:for-each select="$Benford:subject.xml">
  294. <strow>
  295. <xsl:variable name="current" select="current()"/>
  296. <stentry>
  297. <!--<xsl:value-of select="current()/node()[name()='default_db:Numer_rejestrowy']"/>-->
  298. <xsl:for-each select=" tokenize($Benford:subject.description,' ')">
  299. <xsl:variable name="nname" select="."/>
  300. <!--<xsl:comment>#171 checking for name '<xsl:value-of select="$nname"/>'</xsl:comment>-->
  301. <p><xsl:value-of select="$nname"/>: <xsl:value-of select="$current//node()[name()=$nname]"/></p>
  302. </xsl:for-each>
  303. </stentry>
  304. <stentry><xsl:value-of select="current()/node()[name()=$Benford:year]"/></stentry>
  305. <stentry><xsl:value-of select="system_cache__dita:big_values_format(current()/node()[name()=$Benford:subject.value])"/></stentry>
  306. </strow>
  307. </xsl:for-each>
  308. </simpletable>
  309. </body>
  310. </topic>
  311. </xsl:when>
  312. <xsl:otherwise><xsl:comment>#348 suppressed raport by $Benford:force_raport=false()</xsl:comment></xsl:otherwise>
  313. </xsl:choose>
  314. </xsl:template>
  315. <xsl:template match="topichead" mode="Benford:ditamap_root.embedded_map">
  316. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map"/>
  317. </xsl:template>
  318. <xsl:template match="topic" mode="Benford:ditamap_root.embedded_map">
  319. <xsl:message>#197 found topic <xsl:value-of select="@id"/></xsl:message>
  320. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.topic">
  321. <xsl:with-param name="topic.id" select="@id"/>
  322. </xsl:apply-templates>
  323. </xsl:template>
  324. <xsl:template match="body|p" mode="Benford:ditamap_root.embedded_map.topic">
  325. <xsl:param name="topic.id" required="yes"/>
  326. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.topic.body">
  327. <xsl:with-param name="topic.id" select="$topic.id"/>
  328. </xsl:apply-templates>
  329. </xsl:template>
  330. <!--<xsl:template match="lq" mode="Benford:ditamap_root.embedded_map.topic.body">
  331. <xsl:param name="topic.id" required="yes"/>
  332. <p>
  333. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.topic.body">
  334. <xsl:with-param name="topic.id" select="$topic.id"/>
  335. </xsl:apply-templates>
  336. </p>
  337. </xsl:template>-->
  338. <xsl:template match="simpletable" mode="Benford:ditamap_root.embedded_map.topic.body">
  339. <xsl:param name="topic.id" required="yes"/>
  340. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.topic.body.simpletable">
  341. <xsl:with-param name="topic.id" select="$topic.id"/>
  342. <xsl:with-param name="simpletable.id" select="@id"/>
  343. </xsl:apply-templates>
  344. </xsl:template>
  345. <xsl:template match="strow|stentry" mode="Benford:ditamap_root.embedded_map.topic.body.simpletable">
  346. <xsl:param name="topic.id" required="yes"/>
  347. <xsl:param name="simpletable.id" required="yes"/>
  348. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.topic.body.simpletable">
  349. <xsl:with-param name="topic.id" select="$topic.id"/>
  350. <xsl:with-param name="simpletable.id" select="$simpletable.id"/>
  351. </xsl:apply-templates>
  352. </xsl:template>
  353. <xsl:template match="Benford:table_analys_exceed" mode="Benford:ditamap_root.embedded_map.topic.body.simpletable">
  354. <xsl:param name="topic.id" required="yes"/>
  355. <xsl:param name="simpletable.id" required="yes"/>
  356. <xsl:apply-templates mode="system_cache__dita:topic" select=".">
  357. <xsl:with-param name="topic.id" select="$topic.id"/>
  358. <xsl:with-param name="simpletable.id" select="$simpletable.id"/>
  359. </xsl:apply-templates>
  360. </xsl:template>
  361. <xsl:template match="*" mode="Benford:ditamap_root.embedded_map">
  362. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map"/>
  363. </xsl:template>
  364. <xsl:template match="text()|comment()" mode="Benford:ditamap_root.embedded_map"/>
  365. <xsl:template match="*" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup" >
  366. <xsl:element name="{name()}">
  367. <xsl:copy-of select="@*"/>
  368. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.body.topic.cleanup"/>
  369. </xsl:element>
  370. </xsl:template>
  371. <xsl:template match="@*" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup">
  372. <xsl:copy-of select="."/>
  373. </xsl:template>
  374. <xsl:template match="@system_cache__dita:bypass_rows_empty|@system_cache__dita:bypass_rows_with_zero" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup"/>
  375. <xsl:template match="simpletable" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup" >
  376. <xsl:element name="{name()}">
  377. <xsl:apply-templates select="@*" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup"/>
  378. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable"/>
  379. </xsl:element>
  380. </xsl:template>
  381. <xsl:template match="strow|stentry|sthead|xref" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable" >
  382. <xsl:element name="{name()}">
  383. <xsl:copy-of select="@*"/>
  384. <xsl:apply-templates mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable"/>
  385. </xsl:element>
  386. </xsl:template>
  387. <xsl:template match="topic" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable" >
  388. <xsl:copy-of select="system_cache__dita:xref_2_topc(@id,concat(' !(B',@Benford:digit,'/',round(@Benford:current.dig.test.fault.rel),')'))"/>
  389. </xsl:template>
  390. <xsl:template match="topic[not(@Benford:digit) or not(@Benford:current.dig.test.fault.rel)]" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable" >
  391. <xsl:copy-of select="system_cache__dita:xref_2_topc(@id,' (?)')"/>
  392. </xsl:template>
  393. <!--<xsl:template match="topic" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable"/>-->
  394. <xsl:template match="Benford:table|Benford:table_analys_exceed|Benford:value" mode="Benford:ditamap_root.embedded_map.body.topic.cleanup.simpletable" />
  395. <xsl:template match="*" mode="Benford:ditamap_root.embedded_map.body.topicref.topic">
  396. <xsl:for-each select=".//topic">
  397. <xsl:apply-templates select="." mode="system_cache__dita:xref.topic.result-document"/>
  398. </xsl:for-each>
  399. </xsl:template>
  400. <xsl:template match="*" mode="Benford:ditamap_root.embedded_map.body.topicref.topic.noref">
  401. <xsl:for-each select=".//topic">
  402. <xsl:apply-templates select="." mode="system_cache__dita:xref.topic.result-document.noref"/>
  403. </xsl:for-each>
  404. </xsl:template>
  405. <xsl:template mode="ditamap_root.embedded_map.body" match="@Benford:value"/>
  406. <xsl:template mode="system_cache__dita:xref.topic.result-document" match="@Benford:digit"/>
  407. <xsl:template mode="system_cache__dita:xref.topic.result-document" match="@Benford:current.dig.test.fault|@Benford:current.dig.test.fault.rel"/>
  408. <!--<xsl:template mode="table_cut" match="@Benford:value" />-->
  409. </xsl:stylesheet>