chaffjs 0.31.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1320) hide show
  1. package/README.ja.md +330 -0
  2. package/README.md +124 -255
  3. package/dist/cli-text.js +2 -2
  4. package/dist/company-kana-spelling.d.ts +31 -0
  5. package/dist/company-kana-spelling.d.ts.map +1 -0
  6. package/dist/company-kana-spelling.js +79 -0
  7. package/dist/company-kana-spelling.js.map +1 -0
  8. package/dist/company-names.d.ts +32 -1
  9. package/dist/company-names.d.ts.map +1 -1
  10. package/dist/company-names.js +129 -22
  11. package/dist/company-names.js.map +1 -1
  12. package/dist/contacts/table-rows.d.ts +7 -0
  13. package/dist/contacts/table-rows.d.ts.map +1 -0
  14. package/dist/contacts/table-rows.js +42 -0
  15. package/dist/contacts/table-rows.js.map +1 -0
  16. package/dist/cross-run.d.ts.map +1 -1
  17. package/dist/cross-run.js +1 -0
  18. package/dist/cross-run.js.map +1 -1
  19. package/dist/derived/age-on-date.d.ts +53 -0
  20. package/dist/derived/age-on-date.d.ts.map +1 -0
  21. package/dist/derived/age-on-date.js +114 -0
  22. package/dist/derived/age-on-date.js.map +1 -0
  23. package/dist/derived/durations.d.ts +17 -2
  24. package/dist/derived/durations.d.ts.map +1 -1
  25. package/dist/derived/durations.js +61 -10
  26. package/dist/derived/durations.js.map +1 -1
  27. package/dist/derived/hours-and-minutes.d.ts +26 -0
  28. package/dist/derived/hours-and-minutes.d.ts.map +1 -0
  29. package/dist/derived/hours-and-minutes.js +24 -0
  30. package/dist/derived/hours-and-minutes.js.map +1 -0
  31. package/dist/derived/hyphenated-counts.d.ts +15 -0
  32. package/dist/derived/hyphenated-counts.d.ts.map +1 -0
  33. package/dist/derived/hyphenated-counts.js +31 -0
  34. package/dist/derived/hyphenated-counts.js.map +1 -0
  35. package/dist/derived/marked-dates.d.ts +15 -0
  36. package/dist/derived/marked-dates.d.ts.map +1 -0
  37. package/dist/derived/marked-dates.js +41 -0
  38. package/dist/derived/marked-dates.js.map +1 -0
  39. package/dist/derived/money-span.d.ts +9 -0
  40. package/dist/derived/money-span.d.ts.map +1 -0
  41. package/dist/derived/money-span.js +6 -0
  42. package/dist/derived/money-span.js.map +1 -0
  43. package/dist/derived/period-parts.d.ts +55 -0
  44. package/dist/derived/period-parts.d.ts.map +1 -0
  45. package/dist/derived/period-parts.js +283 -0
  46. package/dist/derived/period-parts.js.map +1 -0
  47. package/dist/derived/readable-date.d.ts +20 -0
  48. package/dist/derived/readable-date.d.ts.map +1 -0
  49. package/dist/derived/readable-date.js +50 -0
  50. package/dist/derived/readable-date.js.map +1 -0
  51. package/dist/derived/stays.d.ts +3 -1
  52. package/dist/derived/stays.d.ts.map +1 -1
  53. package/dist/derived/stays.js +3 -0
  54. package/dist/derived/stays.js.map +1 -1
  55. package/dist/derived/timesheet-hours.d.ts +27 -0
  56. package/dist/derived/timesheet-hours.d.ts.map +1 -0
  57. package/dist/derived/timesheet-hours.js +86 -0
  58. package/dist/derived/timesheet-hours.js.map +1 -0
  59. package/dist/derived/use-maximum.d.ts +27 -0
  60. package/dist/derived/use-maximum.d.ts.map +1 -0
  61. package/dist/derived/use-maximum.js +104 -0
  62. package/dist/derived/use-maximum.js.map +1 -0
  63. package/dist/derived/working-hours.d.ts +4 -5
  64. package/dist/derived/working-hours.d.ts.map +1 -1
  65. package/dist/detectors/agreement-slip.d.ts.map +1 -1
  66. package/dist/detectors/agreement-slip.js +4 -0
  67. package/dist/detectors/agreement-slip.js.map +1 -1
  68. package/dist/detectors/annual-holidays-mismatch.d.ts +3 -0
  69. package/dist/detectors/annual-holidays-mismatch.d.ts.map +1 -0
  70. package/dist/detectors/annual-holidays-mismatch.js +29 -0
  71. package/dist/detectors/annual-holidays-mismatch.js.map +1 -0
  72. package/dist/detectors/annual-pay-mismatch.d.ts +3 -0
  73. package/dist/detectors/annual-pay-mismatch.d.ts.map +1 -0
  74. package/dist/detectors/annual-pay-mismatch.js +52 -0
  75. package/dist/detectors/annual-pay-mismatch.js.map +1 -0
  76. package/dist/detectors/blank-structure.d.ts +3 -1
  77. package/dist/detectors/blank-structure.d.ts.map +1 -1
  78. package/dist/detectors/blank-structure.js +45 -12
  79. package/dist/detectors/blank-structure.js.map +1 -1
  80. package/dist/detectors/bmi-mismatch.d.ts +3 -0
  81. package/dist/detectors/bmi-mismatch.d.ts.map +1 -0
  82. package/dist/detectors/bmi-mismatch.js +70 -0
  83. package/dist/detectors/bmi-mismatch.js.map +1 -0
  84. package/dist/detectors/change-rate.d.ts.map +1 -1
  85. package/dist/detectors/change-rate.js +24 -9
  86. package/dist/detectors/change-rate.js.map +1 -1
  87. package/dist/detectors/closing-balance-mismatch.d.ts +3 -0
  88. package/dist/detectors/closing-balance-mismatch.d.ts.map +1 -0
  89. package/dist/detectors/closing-balance-mismatch.js +42 -0
  90. package/dist/detectors/closing-balance-mismatch.js.map +1 -0
  91. package/dist/detectors/contact-variant.d.ts.map +1 -1
  92. package/dist/detectors/contact-variant.js +6 -2
  93. package/dist/detectors/contact-variant.js.map +1 -1
  94. package/dist/detectors/cumulative-below-current.d.ts +3 -0
  95. package/dist/detectors/cumulative-below-current.d.ts.map +1 -0
  96. package/dist/detectors/cumulative-below-current.js +25 -0
  97. package/dist/detectors/cumulative-below-current.js.map +1 -0
  98. package/dist/detectors/currency-column.d.ts +3 -0
  99. package/dist/detectors/currency-column.d.ts.map +1 -0
  100. package/dist/detectors/currency-column.js +32 -0
  101. package/dist/detectors/currency-column.js.map +1 -0
  102. package/dist/detectors/date-any-year.d.ts +24 -0
  103. package/dist/detectors/date-any-year.d.ts.map +1 -0
  104. package/dist/detectors/date-any-year.js +103 -0
  105. package/dist/detectors/date-any-year.js.map +1 -0
  106. package/dist/detectors/date-outside-period.d.ts.map +1 -1
  107. package/dist/detectors/date-outside-period.js +4 -10
  108. package/dist/detectors/date-outside-period.js.map +1 -1
  109. package/dist/detectors/date-stamp-order.d.ts.map +1 -1
  110. package/dist/detectors/date-stamp-order.js +2 -1
  111. package/dist/detectors/date-stamp-order.js.map +1 -1
  112. package/dist/detectors/date-year.d.ts +18 -6
  113. package/dist/detectors/date-year.d.ts.map +1 -1
  114. package/dist/detectors/date-year.js +39 -11
  115. package/dist/detectors/date-year.js.map +1 -1
  116. package/dist/detectors/deductible-exceeds-limit.d.ts +4 -0
  117. package/dist/detectors/deductible-exceeds-limit.d.ts.map +1 -0
  118. package/dist/detectors/deductible-exceeds-limit.js +46 -0
  119. package/dist/detectors/deductible-exceeds-limit.js.map +1 -0
  120. package/dist/detectors/defined-term-form.d.ts.map +1 -1
  121. package/dist/detectors/defined-term-form.js +6 -20
  122. package/dist/detectors/defined-term-form.js.map +1 -1
  123. package/dist/detectors/derived-numbers.d.ts +4 -3
  124. package/dist/detectors/derived-numbers.d.ts.map +1 -1
  125. package/dist/detectors/derived-numbers.js +43 -70
  126. package/dist/detectors/derived-numbers.js.map +1 -1
  127. package/dist/detectors/discount-rate.d.ts +3 -0
  128. package/dist/detectors/discount-rate.d.ts.map +1 -0
  129. package/dist/detectors/discount-rate.js +35 -0
  130. package/dist/detectors/discount-rate.js.map +1 -0
  131. package/dist/detectors/due-date.d.ts.map +1 -1
  132. package/dist/detectors/due-date.js +11 -4
  133. package/dist/detectors/due-date.js.map +1 -1
  134. package/dist/detectors/email-letter.d.ts +10 -2
  135. package/dist/detectors/email-letter.d.ts.map +1 -1
  136. package/dist/detectors/email-letter.js +24 -5
  137. package/dist/detectors/email-letter.js.map +1 -1
  138. package/dist/detectors/event-deadline.d.ts.map +1 -1
  139. package/dist/detectors/event-deadline.js +11 -2
  140. package/dist/detectors/event-deadline.js.map +1 -1
  141. package/dist/detectors/fact-consistency.d.ts.map +1 -1
  142. package/dist/detectors/fact-consistency.js +112 -5
  143. package/dist/detectors/fact-consistency.js.map +1 -1
  144. package/dist/detectors/formula-amount.d.ts +3 -0
  145. package/dist/detectors/formula-amount.d.ts.map +1 -0
  146. package/dist/detectors/formula-amount.js +41 -0
  147. package/dist/detectors/formula-amount.js.map +1 -0
  148. package/dist/detectors/gloss-year.d.ts +11 -0
  149. package/dist/detectors/gloss-year.d.ts.map +1 -0
  150. package/dist/detectors/gloss-year.js +14 -0
  151. package/dist/detectors/gloss-year.js.map +1 -0
  152. package/dist/detectors/gpa-mismatch.d.ts +3 -0
  153. package/dist/detectors/gpa-mismatch.d.ts.map +1 -0
  154. package/dist/detectors/gpa-mismatch.js +39 -0
  155. package/dist/detectors/gpa-mismatch.js.map +1 -0
  156. package/dist/detectors/impossible-date.d.ts.map +1 -1
  157. package/dist/detectors/impossible-date.js +22 -6
  158. package/dist/detectors/impossible-date.js.map +1 -1
  159. package/dist/detectors/installment-total-mismatch.d.ts +3 -0
  160. package/dist/detectors/installment-total-mismatch.d.ts.map +1 -0
  161. package/dist/detectors/installment-total-mismatch.js +68 -0
  162. package/dist/detectors/installment-total-mismatch.js.map +1 -0
  163. package/dist/detectors/interest.d.ts +3 -0
  164. package/dist/detectors/interest.d.ts.map +1 -0
  165. package/dist/detectors/interest.js +38 -0
  166. package/dist/detectors/interest.js.map +1 -0
  167. package/dist/detectors/lab-columns.d.ts +4 -0
  168. package/dist/detectors/lab-columns.d.ts.map +1 -0
  169. package/dist/detectors/lab-columns.js +3 -0
  170. package/dist/detectors/lab-columns.js.map +1 -0
  171. package/dist/detectors/labelled-age.d.ts +4 -0
  172. package/dist/detectors/labelled-age.d.ts.map +1 -0
  173. package/dist/detectors/labelled-age.js +110 -0
  174. package/dist/detectors/labelled-age.js.map +1 -0
  175. package/dist/detectors/line-amount.d.ts.map +1 -1
  176. package/dist/detectors/line-amount.js +45 -2
  177. package/dist/detectors/line-amount.js.map +1 -1
  178. package/dist/detectors/measured-facts.d.ts +1 -1
  179. package/dist/detectors/measured-facts.d.ts.map +1 -1
  180. package/dist/detectors/measured-facts.js.map +1 -1
  181. package/dist/detectors/meter-usage.d.ts +3 -0
  182. package/dist/detectors/meter-usage.d.ts.map +1 -0
  183. package/dist/detectors/meter-usage.js +37 -0
  184. package/dist/detectors/meter-usage.js.map +1 -0
  185. package/dist/detectors/name-field.d.ts +13 -0
  186. package/dist/detectors/name-field.d.ts.map +1 -0
  187. package/dist/detectors/name-field.js +38 -0
  188. package/dist/detectors/name-field.js.map +1 -0
  189. package/dist/detectors/name-variant.d.ts.map +1 -1
  190. package/dist/detectors/name-variant.js +128 -14
  191. package/dist/detectors/name-variant.js.map +1 -1
  192. package/dist/detectors/net-amount-mismatch.d.ts +10 -0
  193. package/dist/detectors/net-amount-mismatch.d.ts.map +1 -0
  194. package/dist/detectors/net-amount-mismatch.js +70 -0
  195. package/dist/detectors/net-amount-mismatch.js.map +1 -0
  196. package/dist/detectors/net-gross-weight.d.ts +3 -0
  197. package/dist/detectors/net-gross-weight.d.ts.map +1 -0
  198. package/dist/detectors/net-gross-weight.js +35 -0
  199. package/dist/detectors/net-gross-weight.js.map +1 -0
  200. package/dist/detectors/nominal-step.d.ts +3 -0
  201. package/dist/detectors/nominal-step.d.ts.map +1 -0
  202. package/dist/detectors/nominal-step.js +28 -0
  203. package/dist/detectors/nominal-step.js.map +1 -0
  204. package/dist/detectors/number-style.d.ts +2 -0
  205. package/dist/detectors/number-style.d.ts.map +1 -1
  206. package/dist/detectors/number-style.js +8 -2
  207. package/dist/detectors/number-style.js.map +1 -1
  208. package/dist/detectors/order-quantity.d.ts +10 -0
  209. package/dist/detectors/order-quantity.d.ts.map +1 -0
  210. package/dist/detectors/order-quantity.js +35 -0
  211. package/dist/detectors/order-quantity.js.map +1 -0
  212. package/dist/detectors/orthographic-variant.d.ts.map +1 -1
  213. package/dist/detectors/orthographic-variant.js +37 -11
  214. package/dist/detectors/orthographic-variant.js.map +1 -1
  215. package/dist/detectors/orthography.d.ts.map +1 -1
  216. package/dist/detectors/orthography.js +15 -7
  217. package/dist/detectors/orthography.js.map +1 -1
  218. package/dist/detectors/period-label-conflict.d.ts +4 -0
  219. package/dist/detectors/period-label-conflict.d.ts.map +1 -0
  220. package/dist/detectors/period-label-conflict.js +34 -0
  221. package/dist/detectors/period-label-conflict.js.map +1 -0
  222. package/dist/detectors/period-multiple-mismatch.d.ts +3 -0
  223. package/dist/detectors/period-multiple-mismatch.d.ts.map +1 -0
  224. package/dist/detectors/period-multiple-mismatch.js +36 -0
  225. package/dist/detectors/period-multiple-mismatch.js.map +1 -0
  226. package/dist/detectors/period-part.d.ts +4 -0
  227. package/dist/detectors/period-part.d.ts.map +1 -0
  228. package/dist/detectors/period-part.js +58 -0
  229. package/dist/detectors/period-part.js.map +1 -0
  230. package/dist/detectors/range-words.d.ts +5 -0
  231. package/dist/detectors/range-words.d.ts.map +1 -0
  232. package/dist/detectors/range-words.js +14 -0
  233. package/dist/detectors/range-words.js.map +1 -0
  234. package/dist/detectors/ratio-mismatch.d.ts +7 -0
  235. package/dist/detectors/ratio-mismatch.d.ts.map +1 -0
  236. package/dist/detectors/ratio-mismatch.js +89 -0
  237. package/dist/detectors/ratio-mismatch.js.map +1 -0
  238. package/dist/detectors/readable-dates.d.ts +9 -0
  239. package/dist/detectors/readable-dates.d.ts.map +1 -0
  240. package/dist/detectors/readable-dates.js +23 -0
  241. package/dist/detectors/readable-dates.js.map +1 -0
  242. package/dist/detectors/reference-flag.d.ts +3 -0
  243. package/dist/detectors/reference-flag.d.ts.map +1 -0
  244. package/dist/detectors/reference-flag.js +31 -0
  245. package/dist/detectors/reference-flag.js.map +1 -0
  246. package/dist/detectors/reference-number-repeated.d.ts +3 -0
  247. package/dist/detectors/reference-number-repeated.d.ts.map +1 -0
  248. package/dist/detectors/reference-number-repeated.js +22 -0
  249. package/dist/detectors/reference-number-repeated.js.map +1 -0
  250. package/dist/detectors/reference-number-variant.d.ts +3 -0
  251. package/dist/detectors/reference-number-variant.d.ts.map +1 -0
  252. package/dist/detectors/reference-number-variant.js +40 -0
  253. package/dist/detectors/reference-number-variant.js.map +1 -0
  254. package/dist/detectors/reference-unit.d.ts +3 -0
  255. package/dist/detectors/reference-unit.d.ts.map +1 -0
  256. package/dist/detectors/reference-unit.js +19 -0
  257. package/dist/detectors/reference-unit.js.map +1 -0
  258. package/dist/detectors/registry/annual-holidays-mismatch.d.ts +3 -0
  259. package/dist/detectors/registry/annual-holidays-mismatch.d.ts.map +1 -0
  260. package/dist/detectors/registry/annual-holidays-mismatch.js +3 -0
  261. package/dist/detectors/registry/annual-holidays-mismatch.js.map +1 -0
  262. package/dist/detectors/registry/annual-pay-mismatch.d.ts +3 -0
  263. package/dist/detectors/registry/annual-pay-mismatch.d.ts.map +1 -0
  264. package/dist/detectors/registry/annual-pay-mismatch.js +3 -0
  265. package/dist/detectors/registry/annual-pay-mismatch.js.map +1 -0
  266. package/dist/detectors/registry/backorder-mismatch.d.ts +3 -0
  267. package/dist/detectors/registry/backorder-mismatch.d.ts.map +1 -0
  268. package/dist/detectors/registry/backorder-mismatch.js +3 -0
  269. package/dist/detectors/registry/backorder-mismatch.js.map +1 -0
  270. package/dist/detectors/registry/bmi-mismatch.d.ts +3 -0
  271. package/dist/detectors/registry/bmi-mismatch.d.ts.map +1 -0
  272. package/dist/detectors/registry/bmi-mismatch.js +3 -0
  273. package/dist/detectors/registry/bmi-mismatch.js.map +1 -0
  274. package/dist/detectors/registry/closing-balance-mismatch.d.ts +3 -0
  275. package/dist/detectors/registry/closing-balance-mismatch.d.ts.map +1 -0
  276. package/dist/detectors/registry/closing-balance-mismatch.js +3 -0
  277. package/dist/detectors/registry/closing-balance-mismatch.js.map +1 -0
  278. package/dist/detectors/registry/cumulative-below-current.d.ts +3 -0
  279. package/dist/detectors/registry/cumulative-below-current.d.ts.map +1 -0
  280. package/dist/detectors/registry/cumulative-below-current.js +3 -0
  281. package/dist/detectors/registry/cumulative-below-current.js.map +1 -0
  282. package/dist/detectors/registry/currency-column-mix.d.ts +3 -0
  283. package/dist/detectors/registry/currency-column-mix.d.ts.map +1 -0
  284. package/dist/detectors/registry/currency-column-mix.js +3 -0
  285. package/dist/detectors/registry/currency-column-mix.js.map +1 -0
  286. package/dist/detectors/registry/deductible-exceeds-limit.d.ts +3 -0
  287. package/dist/detectors/registry/deductible-exceeds-limit.d.ts.map +1 -0
  288. package/dist/detectors/registry/deductible-exceeds-limit.js +3 -0
  289. package/dist/detectors/registry/deductible-exceeds-limit.js.map +1 -0
  290. package/dist/detectors/registry/delivered-over-ordered.d.ts +3 -0
  291. package/dist/detectors/registry/delivered-over-ordered.d.ts.map +1 -0
  292. package/dist/detectors/registry/delivered-over-ordered.js +3 -0
  293. package/dist/detectors/registry/delivered-over-ordered.js.map +1 -0
  294. package/dist/detectors/registry/discount-rate.d.ts +3 -0
  295. package/dist/detectors/registry/discount-rate.d.ts.map +1 -0
  296. package/dist/detectors/registry/discount-rate.js +3 -0
  297. package/dist/detectors/registry/discount-rate.js.map +1 -0
  298. package/dist/detectors/registry/elapsed-years-mismatch.js +1 -1
  299. package/dist/detectors/registry/elapsed-years-mismatch.js.map +1 -1
  300. package/dist/detectors/registry/formula-amount.d.ts +3 -0
  301. package/dist/detectors/registry/formula-amount.d.ts.map +1 -0
  302. package/dist/detectors/registry/formula-amount.js +3 -0
  303. package/dist/detectors/registry/formula-amount.js.map +1 -0
  304. package/dist/detectors/registry/gpa-mismatch.d.ts +3 -0
  305. package/dist/detectors/registry/gpa-mismatch.d.ts.map +1 -0
  306. package/dist/detectors/registry/gpa-mismatch.js +3 -0
  307. package/dist/detectors/registry/gpa-mismatch.js.map +1 -0
  308. package/dist/detectors/registry/installment-total-mismatch.d.ts +3 -0
  309. package/dist/detectors/registry/installment-total-mismatch.d.ts.map +1 -0
  310. package/dist/detectors/registry/installment-total-mismatch.js +3 -0
  311. package/dist/detectors/registry/installment-total-mismatch.js.map +1 -0
  312. package/dist/detectors/registry/interest.d.ts +3 -0
  313. package/dist/detectors/registry/interest.d.ts.map +1 -0
  314. package/dist/detectors/registry/interest.js +3 -0
  315. package/dist/detectors/registry/interest.js.map +1 -0
  316. package/dist/detectors/registry/meter-usage.d.ts +3 -0
  317. package/dist/detectors/registry/meter-usage.d.ts.map +1 -0
  318. package/dist/detectors/registry/meter-usage.js +3 -0
  319. package/dist/detectors/registry/meter-usage.js.map +1 -0
  320. package/dist/detectors/registry/net-amount-mismatch.d.ts +3 -0
  321. package/dist/detectors/registry/net-amount-mismatch.d.ts.map +1 -0
  322. package/dist/detectors/registry/net-amount-mismatch.js +3 -0
  323. package/dist/detectors/registry/net-amount-mismatch.js.map +1 -0
  324. package/dist/detectors/registry/net-over-gross.d.ts +3 -0
  325. package/dist/detectors/registry/net-over-gross.d.ts.map +1 -0
  326. package/dist/detectors/registry/net-over-gross.js +3 -0
  327. package/dist/detectors/registry/net-over-gross.js.map +1 -0
  328. package/dist/detectors/registry/period-label-conflict.d.ts +3 -0
  329. package/dist/detectors/registry/period-label-conflict.d.ts.map +1 -0
  330. package/dist/detectors/registry/period-label-conflict.js +3 -0
  331. package/dist/detectors/registry/period-label-conflict.js.map +1 -0
  332. package/dist/detectors/registry/period-multiple-mismatch.d.ts +3 -0
  333. package/dist/detectors/registry/period-multiple-mismatch.d.ts.map +1 -0
  334. package/dist/detectors/registry/period-multiple-mismatch.js +3 -0
  335. package/dist/detectors/registry/period-multiple-mismatch.js.map +1 -0
  336. package/dist/detectors/registry/period-part-exceeds-whole.d.ts +3 -0
  337. package/dist/detectors/registry/period-part-exceeds-whole.d.ts.map +1 -0
  338. package/dist/detectors/registry/period-part-exceeds-whole.js +3 -0
  339. package/dist/detectors/registry/period-part-exceeds-whole.js.map +1 -0
  340. package/dist/detectors/registry/product-exceeds-maximum.d.ts +3 -0
  341. package/dist/detectors/registry/product-exceeds-maximum.d.ts.map +1 -0
  342. package/dist/detectors/registry/product-exceeds-maximum.js +3 -0
  343. package/dist/detectors/registry/product-exceeds-maximum.js.map +1 -0
  344. package/dist/detectors/registry/ratio-mismatch.d.ts +3 -0
  345. package/dist/detectors/registry/ratio-mismatch.d.ts.map +1 -0
  346. package/dist/detectors/registry/ratio-mismatch.js +3 -0
  347. package/dist/detectors/registry/ratio-mismatch.js.map +1 -0
  348. package/dist/detectors/registry/reference-flag-mismatch.d.ts +3 -0
  349. package/dist/detectors/registry/reference-flag-mismatch.d.ts.map +1 -0
  350. package/dist/detectors/registry/reference-flag-mismatch.js +3 -0
  351. package/dist/detectors/registry/reference-flag-mismatch.js.map +1 -0
  352. package/dist/detectors/registry/reference-number-repeated.d.ts +3 -0
  353. package/dist/detectors/registry/reference-number-repeated.d.ts.map +1 -0
  354. package/dist/detectors/registry/reference-number-repeated.js +3 -0
  355. package/dist/detectors/registry/reference-number-repeated.js.map +1 -0
  356. package/dist/detectors/registry/reference-number-variant.d.ts +3 -0
  357. package/dist/detectors/registry/reference-number-variant.d.ts.map +1 -0
  358. package/dist/detectors/registry/reference-number-variant.js +3 -0
  359. package/dist/detectors/registry/reference-number-variant.js.map +1 -0
  360. package/dist/detectors/registry/reference-unit.d.ts +3 -0
  361. package/dist/detectors/registry/reference-unit.d.ts.map +1 -0
  362. package/dist/detectors/registry/reference-unit.js +3 -0
  363. package/dist/detectors/registry/reference-unit.js.map +1 -0
  364. package/dist/detectors/registry/revision-direction.d.ts +3 -0
  365. package/dist/detectors/registry/revision-direction.d.ts.map +1 -0
  366. package/dist/detectors/registry/revision-direction.js +3 -0
  367. package/dist/detectors/registry/revision-direction.js.map +1 -0
  368. package/dist/detectors/registry/running-balance.d.ts +3 -0
  369. package/dist/detectors/registry/running-balance.d.ts.map +1 -0
  370. package/dist/detectors/registry/running-balance.js +3 -0
  371. package/dist/detectors/registry/running-balance.js.map +1 -0
  372. package/dist/detectors/registry/serial-range.d.ts +3 -0
  373. package/dist/detectors/registry/serial-range.d.ts.map +1 -0
  374. package/dist/detectors/registry/serial-range.js +3 -0
  375. package/dist/detectors/registry/serial-range.js.map +1 -0
  376. package/dist/detectors/registry/share-amount.d.ts +3 -0
  377. package/dist/detectors/registry/share-amount.d.ts.map +1 -0
  378. package/dist/detectors/registry/share-amount.js +3 -0
  379. package/dist/detectors/registry/share-amount.js.map +1 -0
  380. package/dist/detectors/registry/table-unit-mix.d.ts +3 -0
  381. package/dist/detectors/registry/table-unit-mix.d.ts.map +1 -0
  382. package/dist/detectors/registry/table-unit-mix.js +3 -0
  383. package/dist/detectors/registry/table-unit-mix.js.map +1 -0
  384. package/dist/detectors/registry/tier-threshold.d.ts +3 -0
  385. package/dist/detectors/registry/tier-threshold.d.ts.map +1 -0
  386. package/dist/detectors/registry/tier-threshold.js +3 -0
  387. package/dist/detectors/registry/tier-threshold.js.map +1 -0
  388. package/dist/detectors/registry/variance-mismatch.d.ts +3 -0
  389. package/dist/detectors/registry/variance-mismatch.d.ts.map +1 -0
  390. package/dist/detectors/registry/variance-mismatch.js +3 -0
  391. package/dist/detectors/registry/variance-mismatch.js.map +1 -0
  392. package/dist/detectors/relative-dates.d.ts.map +1 -1
  393. package/dist/detectors/relative-dates.js +2 -1
  394. package/dist/detectors/relative-dates.js.map +1 -1
  395. package/dist/detectors/relative-day-words.d.ts.map +1 -1
  396. package/dist/detectors/relative-day-words.js +2 -1
  397. package/dist/detectors/relative-day-words.js.map +1 -1
  398. package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -1
  399. package/dist/detectors/rent-multiple-mismatch.js.map +1 -1
  400. package/dist/detectors/request-owner.d.ts +3 -1
  401. package/dist/detectors/request-owner.d.ts.map +1 -1
  402. package/dist/detectors/request-owner.js +5 -2
  403. package/dist/detectors/request-owner.js.map +1 -1
  404. package/dist/detectors/revision-direction.d.ts +3 -0
  405. package/dist/detectors/revision-direction.d.ts.map +1 -0
  406. package/dist/detectors/revision-direction.js +32 -0
  407. package/dist/detectors/revision-direction.js.map +1 -0
  408. package/dist/detectors/row-sentence-amounts.d.ts +5 -0
  409. package/dist/detectors/row-sentence-amounts.d.ts.map +1 -0
  410. package/dist/detectors/row-sentence-amounts.js +71 -0
  411. package/dist/detectors/row-sentence-amounts.js.map +1 -0
  412. package/dist/detectors/running-balance.d.ts +3 -0
  413. package/dist/detectors/running-balance.d.ts.map +1 -0
  414. package/dist/detectors/running-balance.js +26 -0
  415. package/dist/detectors/running-balance.js.map +1 -0
  416. package/dist/detectors/scaled-quantity.js +1 -1
  417. package/dist/detectors/scaled-quantity.js.map +1 -1
  418. package/dist/detectors/serial-range.d.ts +3 -0
  419. package/dist/detectors/serial-range.d.ts.map +1 -0
  420. package/dist/detectors/serial-range.js +29 -0
  421. package/dist/detectors/serial-range.js.map +1 -0
  422. package/dist/detectors/share-amount.d.ts +3 -0
  423. package/dist/detectors/share-amount.d.ts.map +1 -0
  424. package/dist/detectors/share-amount.js +45 -0
  425. package/dist/detectors/share-amount.js.map +1 -0
  426. package/dist/detectors/structure-tree.d.ts +1 -1
  427. package/dist/detectors/structure-tree.d.ts.map +1 -1
  428. package/dist/detectors/structure-tree.js +46 -12
  429. package/dist/detectors/structure-tree.js.map +1 -1
  430. package/dist/detectors/table-scale.d.ts +3 -0
  431. package/dist/detectors/table-scale.d.ts.map +1 -0
  432. package/dist/detectors/table-scale.js +32 -0
  433. package/dist/detectors/table-scale.js.map +1 -0
  434. package/dist/detectors/tax-amount.d.ts.map +1 -1
  435. package/dist/detectors/tax-amount.js +34 -10
  436. package/dist/detectors/tax-amount.js.map +1 -1
  437. package/dist/detectors/technical-docs.d.ts +1 -1
  438. package/dist/detectors/technical-docs.d.ts.map +1 -1
  439. package/dist/detectors/technical-docs.js +3 -2
  440. package/dist/detectors/technical-docs.js.map +1 -1
  441. package/dist/detectors/tier-threshold.d.ts +3 -0
  442. package/dist/detectors/tier-threshold.d.ts.map +1 -0
  443. package/dist/detectors/tier-threshold.js +86 -0
  444. package/dist/detectors/tier-threshold.js.map +1 -0
  445. package/dist/detectors/time-order.d.ts +1 -0
  446. package/dist/detectors/time-order.d.ts.map +1 -1
  447. package/dist/detectors/time-order.js +43 -13
  448. package/dist/detectors/time-order.js.map +1 -1
  449. package/dist/detectors/use-maximum.d.ts +3 -0
  450. package/dist/detectors/use-maximum.d.ts.map +1 -0
  451. package/dist/detectors/use-maximum.js +32 -0
  452. package/dist/detectors/use-maximum.js.map +1 -0
  453. package/dist/detectors/variance.d.ts +3 -0
  454. package/dist/detectors/variance.d.ts.map +1 -0
  455. package/dist/detectors/variance.js +28 -0
  456. package/dist/detectors/variance.js.map +1 -0
  457. package/dist/detectors/whole-count-findings.d.ts +4 -0
  458. package/dist/detectors/whole-count-findings.d.ts.map +1 -0
  459. package/dist/detectors/whole-count-findings.js +38 -0
  460. package/dist/detectors/whole-count-findings.js.map +1 -0
  461. package/dist/detectors/working-hours-findings.d.ts +9 -0
  462. package/dist/detectors/working-hours-findings.d.ts.map +1 -0
  463. package/dist/detectors/working-hours-findings.js +79 -0
  464. package/dist/detectors/working-hours-findings.js.map +1 -0
  465. package/dist/eval.js +3 -3
  466. package/dist/eval.js.map +1 -1
  467. package/dist/facts/age-values.d.ts +22 -0
  468. package/dist/facts/age-values.d.ts.map +1 -0
  469. package/dist/facts/age-values.js +76 -0
  470. package/dist/facts/age-values.js.map +1 -0
  471. package/dist/facts/cell-keys.d.ts +12 -0
  472. package/dist/facts/cell-keys.d.ts.map +1 -0
  473. package/dist/facts/cell-keys.js +19 -0
  474. package/dist/facts/cell-keys.js.map +1 -0
  475. package/dist/facts/count-labels.d.ts +15 -0
  476. package/dist/facts/count-labels.d.ts.map +1 -0
  477. package/dist/facts/count-labels.js +19 -0
  478. package/dist/facts/count-labels.js.map +1 -0
  479. package/dist/facts/document-terms.d.ts +43 -0
  480. package/dist/facts/document-terms.d.ts.map +1 -0
  481. package/dist/facts/document-terms.js +74 -0
  482. package/dist/facts/document-terms.js.map +1 -0
  483. package/dist/facts/duration-scale.d.ts +11 -0
  484. package/dist/facts/duration-scale.d.ts.map +1 -0
  485. package/dist/facts/duration-scale.js +14 -0
  486. package/dist/facts/duration-scale.js.map +1 -0
  487. package/dist/facts/duration-values.d.ts +15 -0
  488. package/dist/facts/duration-values.d.ts.map +1 -0
  489. package/dist/facts/duration-values.js +29 -0
  490. package/dist/facts/duration-values.js.map +1 -0
  491. package/dist/facts/fact-values.d.ts +9 -1
  492. package/dist/facts/fact-values.d.ts.map +1 -1
  493. package/dist/facts/fact-values.js +19 -6
  494. package/dist/facts/fact-values.js.map +1 -1
  495. package/dist/facts/labelled-facts.d.ts +15 -1
  496. package/dist/facts/labelled-facts.d.ts.map +1 -1
  497. package/dist/facts/labelled-facts.js +51 -8
  498. package/dist/facts/labelled-facts.js.map +1 -1
  499. package/dist/facts/measure-units.d.ts.map +1 -1
  500. package/dist/facts/measure-units.js +23 -8
  501. package/dist/facts/measure-units.js.map +1 -1
  502. package/dist/facts/measures.js +11 -9
  503. package/dist/facts/measures.js.map +1 -1
  504. package/dist/facts/qualified-labels.d.ts +28 -0
  505. package/dist/facts/qualified-labels.d.ts.map +1 -0
  506. package/dist/facts/qualified-labels.js +96 -0
  507. package/dist/facts/qualified-labels.js.map +1 -0
  508. package/dist/facts/rate-values.d.ts +40 -0
  509. package/dist/facts/rate-values.d.ts.map +1 -0
  510. package/dist/facts/rate-values.js +68 -0
  511. package/dist/facts/rate-values.js.map +1 -0
  512. package/dist/facts/row-sentence-amounts.d.ts +51 -0
  513. package/dist/facts/row-sentence-amounts.d.ts.map +1 -0
  514. package/dist/facts/row-sentence-amounts.js +71 -0
  515. package/dist/facts/row-sentence-amounts.js.map +1 -0
  516. package/dist/facts/superscript-power.d.ts +3 -0
  517. package/dist/facts/superscript-power.d.ts.map +1 -0
  518. package/dist/facts/superscript-power.js +5 -0
  519. package/dist/facts/superscript-power.js.map +1 -0
  520. package/dist/facts/table-facts.d.ts +18 -2
  521. package/dist/facts/table-facts.d.ts.map +1 -1
  522. package/dist/facts/table-facts.js +16 -6
  523. package/dist/facts/table-facts.js.map +1 -1
  524. package/dist/facts/term-values.d.ts +34 -0
  525. package/dist/facts/term-values.d.ts.map +1 -0
  526. package/dist/facts/term-values.js +195 -0
  527. package/dist/facts/term-values.js.map +1 -0
  528. package/dist/facts/unit-word.d.ts +5 -0
  529. package/dist/facts/unit-word.d.ts.map +1 -1
  530. package/dist/facts/unit-word.js +9 -0
  531. package/dist/facts/unit-word.js.map +1 -1
  532. package/dist/facts/verb-quantity-facts.d.ts +22 -0
  533. package/dist/facts/verb-quantity-facts.d.ts.map +1 -0
  534. package/dist/facts/verb-quantity-facts.js +58 -0
  535. package/dist/facts/verb-quantity-facts.js.map +1 -0
  536. package/dist/facts/whole-counts.d.ts +58 -0
  537. package/dist/facts/whole-counts.d.ts.map +1 -0
  538. package/dist/facts/whole-counts.js +118 -0
  539. package/dist/facts/whole-counts.js.map +1 -0
  540. package/dist/fix-plan/text.js +2 -2
  541. package/dist/fix-plan/text.js.map +1 -1
  542. package/dist/lexicon-genres.d.ts +7 -0
  543. package/dist/lexicon-genres.d.ts.map +1 -0
  544. package/dist/lexicon-genres.js +8 -0
  545. package/dist/lexicon-genres.js.map +1 -0
  546. package/dist/name-char-reading.d.ts +16 -0
  547. package/dist/name-char-reading.d.ts.map +1 -0
  548. package/dist/name-char-reading.js +18 -0
  549. package/dist/name-char-reading.js.map +1 -0
  550. package/dist/name-line-block.d.ts +6 -0
  551. package/dist/name-line-block.d.ts.map +1 -0
  552. package/dist/name-line-block.js +35 -0
  553. package/dist/name-line-block.js.map +1 -0
  554. package/dist/name-lookalike-chars.d.ts +16 -0
  555. package/dist/name-lookalike-chars.d.ts.map +1 -0
  556. package/dist/name-lookalike-chars.js +41 -0
  557. package/dist/name-lookalike-chars.js.map +1 -0
  558. package/dist/name-neighbours.d.ts +7 -0
  559. package/dist/name-neighbours.d.ts.map +1 -0
  560. package/dist/name-neighbours.js +55 -0
  561. package/dist/name-neighbours.js.map +1 -0
  562. package/dist/name-ordinary-word.d.ts +13 -0
  563. package/dist/name-ordinary-word.d.ts.map +1 -0
  564. package/dist/name-ordinary-word.js +54 -0
  565. package/dist/name-ordinary-word.js.map +1 -0
  566. package/dist/name-person.d.ts +9 -0
  567. package/dist/name-person.d.ts.map +1 -0
  568. package/dist/name-person.js +25 -0
  569. package/dist/name-person.js.map +1 -0
  570. package/dist/name-separator.d.ts +14 -0
  571. package/dist/name-separator.d.ts.map +1 -0
  572. package/dist/name-separator.js +33 -0
  573. package/dist/name-separator.js.map +1 -0
  574. package/dist/name-variants.d.ts +8 -8
  575. package/dist/name-variants.d.ts.map +1 -1
  576. package/dist/name-variants.js +28 -81
  577. package/dist/name-variants.js.map +1 -1
  578. package/dist/name-weight.d.ts +10 -0
  579. package/dist/name-weight.d.ts.map +1 -0
  580. package/dist/name-weight.js +7 -0
  581. package/dist/name-weight.js.map +1 -0
  582. package/dist/person-field.d.ts +6 -0
  583. package/dist/person-field.d.ts.map +1 -0
  584. package/dist/person-field.js +40 -0
  585. package/dist/person-field.js.map +1 -0
  586. package/dist/person-full-name.d.ts +12 -0
  587. package/dist/person-full-name.d.ts.map +1 -0
  588. package/dist/person-full-name.js +52 -0
  589. package/dist/person-full-name.js.map +1 -0
  590. package/dist/phone-numbers.d.ts +23 -3
  591. package/dist/phone-numbers.d.ts.map +1 -1
  592. package/dist/phone-numbers.js +49 -21
  593. package/dist/phone-numbers.js.map +1 -1
  594. package/dist/plugin.d.ts +8 -0
  595. package/dist/plugin.d.ts.map +1 -1
  596. package/dist/product-names.d.ts +33 -0
  597. package/dist/product-names.d.ts.map +1 -0
  598. package/dist/product-names.js +74 -0
  599. package/dist/product-names.js.map +1 -0
  600. package/dist/profile/parse.d.ts.map +1 -1
  601. package/dist/profile/parse.js +5 -0
  602. package/dist/profile/parse.js.map +1 -1
  603. package/dist/reference-numbers.d.ts +26 -0
  604. package/dist/reference-numbers.d.ts.map +1 -0
  605. package/dist/reference-numbers.js +43 -0
  606. package/dist/reference-numbers.js.map +1 -0
  607. package/dist/run.d.ts.map +1 -1
  608. package/dist/run.js +1 -0
  609. package/dist/run.js.map +1 -1
  610. package/dist/spaced-person-name.d.ts +17 -0
  611. package/dist/spaced-person-name.d.ts.map +1 -0
  612. package/dist/spaced-person-name.js +82 -0
  613. package/dist/spaced-person-name.js.map +1 -0
  614. package/dist/spacing-code.d.ts +1 -0
  615. package/dist/spacing-code.d.ts.map +1 -1
  616. package/dist/spacing-code.js +15 -1
  617. package/dist/spacing-code.js.map +1 -1
  618. package/dist/structure/annual-holidays.d.ts +56 -0
  619. package/dist/structure/annual-holidays.d.ts.map +1 -0
  620. package/dist/structure/annual-holidays.js +159 -0
  621. package/dist/structure/annual-holidays.js.map +1 -0
  622. package/dist/structure/annual-pay.d.ts +97 -0
  623. package/dist/structure/annual-pay.d.ts.map +1 -0
  624. package/dist/structure/annual-pay.js +236 -0
  625. package/dist/structure/annual-pay.js.map +1 -0
  626. package/dist/structure/bmi.d.ts +63 -0
  627. package/dist/structure/bmi.d.ts.map +1 -0
  628. package/dist/structure/bmi.js +106 -0
  629. package/dist/structure/bmi.js.map +1 -0
  630. package/dist/structure/change-rate-table.d.ts +46 -0
  631. package/dist/structure/change-rate-table.d.ts.map +1 -0
  632. package/dist/structure/change-rate-table.js +110 -0
  633. package/dist/structure/change-rate-table.js.map +1 -0
  634. package/dist/structure/change-rate.d.ts +13 -1
  635. package/dist/structure/change-rate.d.ts.map +1 -1
  636. package/dist/structure/change-rate.js +51 -19
  637. package/dist/structure/change-rate.js.map +1 -1
  638. package/dist/structure/closing-balance.d.ts +24 -0
  639. package/dist/structure/closing-balance.d.ts.map +1 -0
  640. package/dist/structure/closing-balance.js +79 -0
  641. package/dist/structure/closing-balance.js.map +1 -0
  642. package/dist/structure/column-date-order.d.ts +5 -0
  643. package/dist/structure/column-date-order.d.ts.map +1 -0
  644. package/dist/structure/column-date-order.js +57 -0
  645. package/dist/structure/column-date-order.js.map +1 -0
  646. package/dist/structure/compound-hours.d.ts +5 -0
  647. package/dist/structure/compound-hours.d.ts.map +1 -0
  648. package/dist/structure/compound-hours.js +45 -0
  649. package/dist/structure/compound-hours.js.map +1 -0
  650. package/dist/structure/cumulative-below-current.d.ts +21 -0
  651. package/dist/structure/cumulative-below-current.d.ts.map +1 -0
  652. package/dist/structure/cumulative-below-current.js +48 -0
  653. package/dist/structure/cumulative-below-current.js.map +1 -0
  654. package/dist/structure/currency-column.d.ts +21 -0
  655. package/dist/structure/currency-column.d.ts.map +1 -0
  656. package/dist/structure/currency-column.js +74 -0
  657. package/dist/structure/currency-column.js.map +1 -0
  658. package/dist/structure/date-deadline-mark.d.ts +15 -0
  659. package/dist/structure/date-deadline-mark.d.ts.map +1 -0
  660. package/dist/structure/date-deadline-mark.js +22 -0
  661. package/dist/structure/date-deadline-mark.js.map +1 -0
  662. package/dist/structure/date-outside-period.d.ts +5 -1
  663. package/dist/structure/date-outside-period.d.ts.map +1 -1
  664. package/dist/structure/date-outside-period.js +13 -9
  665. package/dist/structure/date-outside-period.js.map +1 -1
  666. package/dist/structure/date-range.d.ts +5 -3
  667. package/dist/structure/date-range.d.ts.map +1 -1
  668. package/dist/structure/date-range.js +7 -9
  669. package/dist/structure/date-range.js.map +1 -1
  670. package/dist/structure/deadline-after-event.d.ts +35 -2
  671. package/dist/structure/deadline-after-event.d.ts.map +1 -1
  672. package/dist/structure/deadline-after-event.js +77 -6
  673. package/dist/structure/deadline-after-event.js.map +1 -1
  674. package/dist/structure/deductible-limit.d.ts +69 -0
  675. package/dist/structure/deductible-limit.d.ts.map +1 -0
  676. package/dist/structure/deductible-limit.js +191 -0
  677. package/dist/structure/deductible-limit.js.map +1 -0
  678. package/dist/structure/discount-rate.d.ts +35 -0
  679. package/dist/structure/discount-rate.d.ts.map +1 -0
  680. package/dist/structure/discount-rate.js +172 -0
  681. package/dist/structure/discount-rate.js.map +1 -0
  682. package/dist/structure/formula-amount.d.ts +38 -0
  683. package/dist/structure/formula-amount.d.ts.map +1 -0
  684. package/dist/structure/formula-amount.js +187 -0
  685. package/dist/structure/formula-amount.js.map +1 -0
  686. package/dist/structure/generic-role.d.ts +2 -0
  687. package/dist/structure/generic-role.d.ts.map +1 -0
  688. package/dist/structure/generic-role.js +8 -0
  689. package/dist/structure/generic-role.js.map +1 -0
  690. package/dist/structure/gpa.d.ts +74 -0
  691. package/dist/structure/gpa.d.ts.map +1 -0
  692. package/dist/structure/gpa.js +170 -0
  693. package/dist/structure/gpa.js.map +1 -0
  694. package/dist/structure/installment-fee.d.ts +52 -0
  695. package/dist/structure/installment-fee.d.ts.map +1 -0
  696. package/dist/structure/installment-fee.js +110 -0
  697. package/dist/structure/installment-fee.js.map +1 -0
  698. package/dist/structure/installment-total.d.ts +117 -0
  699. package/dist/structure/installment-total.d.ts.map +1 -0
  700. package/dist/structure/installment-total.js +224 -0
  701. package/dist/structure/installment-total.js.map +1 -0
  702. package/dist/structure/interest.d.ts +22 -0
  703. package/dist/structure/interest.d.ts.map +1 -0
  704. package/dist/structure/interest.js +107 -0
  705. package/dist/structure/interest.js.map +1 -0
  706. package/dist/structure/key-value-row.d.ts +14 -0
  707. package/dist/structure/key-value-row.d.ts.map +1 -0
  708. package/dist/structure/key-value-row.js +38 -0
  709. package/dist/structure/key-value-row.js.map +1 -0
  710. package/dist/structure/lab-columns.d.ts +12 -0
  711. package/dist/structure/lab-columns.d.ts.map +1 -0
  712. package/dist/structure/lab-columns.js +11 -0
  713. package/dist/structure/lab-columns.js.map +1 -0
  714. package/dist/structure/labelled-date-order.d.ts +33 -16
  715. package/dist/structure/labelled-date-order.d.ts.map +1 -1
  716. package/dist/structure/labelled-date-order.js +38 -30
  717. package/dist/structure/labelled-date-order.js.map +1 -1
  718. package/dist/structure/labelled-order.d.ts +59 -0
  719. package/dist/structure/labelled-order.d.ts.map +1 -0
  720. package/dist/structure/labelled-order.js +65 -0
  721. package/dist/structure/labelled-order.js.map +1 -0
  722. package/dist/structure/labelled-time-order.d.ts +17 -0
  723. package/dist/structure/labelled-time-order.d.ts.map +1 -0
  724. package/dist/structure/labelled-time-order.js +79 -0
  725. package/dist/structure/labelled-time-order.js.map +1 -0
  726. package/dist/structure/line-amount-label.d.ts +31 -0
  727. package/dist/structure/line-amount-label.d.ts.map +1 -0
  728. package/dist/structure/line-amount-label.js +77 -0
  729. package/dist/structure/line-amount-label.js.map +1 -0
  730. package/dist/structure/line-amount-rate.d.ts +47 -0
  731. package/dist/structure/line-amount-rate.d.ts.map +1 -0
  732. package/dist/structure/line-amount-rate.js +141 -0
  733. package/dist/structure/line-amount-rate.js.map +1 -0
  734. package/dist/structure/line-amount-unit.d.ts +7 -0
  735. package/dist/structure/line-amount-unit.d.ts.map +1 -1
  736. package/dist/structure/line-amount-unit.js +11 -0
  737. package/dist/structure/line-amount-unit.js.map +1 -1
  738. package/dist/structure/line-amount.d.ts +33 -7
  739. package/dist/structure/line-amount.d.ts.map +1 -1
  740. package/dist/structure/line-amount.js +152 -42
  741. package/dist/structure/line-amount.js.map +1 -1
  742. package/dist/structure/meter-usage-read.d.ts +21 -0
  743. package/dist/structure/meter-usage-read.d.ts.map +1 -0
  744. package/dist/structure/meter-usage-read.js +116 -0
  745. package/dist/structure/meter-usage-read.js.map +1 -0
  746. package/dist/structure/meter-usage.d.ts +62 -0
  747. package/dist/structure/meter-usage.d.ts.map +1 -0
  748. package/dist/structure/meter-usage.js +157 -0
  749. package/dist/structure/meter-usage.js.map +1 -0
  750. package/dist/structure/net-amount.d.ts +81 -0
  751. package/dist/structure/net-amount.d.ts.map +1 -0
  752. package/dist/structure/net-amount.js +161 -0
  753. package/dist/structure/net-amount.js.map +1 -0
  754. package/dist/structure/net-gross-weight.d.ts +30 -0
  755. package/dist/structure/net-gross-weight.d.ts.map +1 -0
  756. package/dist/structure/net-gross-weight.js +79 -0
  757. package/dist/structure/net-gross-weight.js.map +1 -0
  758. package/dist/structure/order-quantity.d.ts +38 -0
  759. package/dist/structure/order-quantity.d.ts.map +1 -0
  760. package/dist/structure/order-quantity.js +104 -0
  761. package/dist/structure/order-quantity.js.map +1 -0
  762. package/dist/structure/party-role.d.ts.map +1 -1
  763. package/dist/structure/party-role.js +4 -1
  764. package/dist/structure/party-role.js.map +1 -1
  765. package/dist/structure/percent-sum.d.ts +2 -0
  766. package/dist/structure/percent-sum.d.ts.map +1 -1
  767. package/dist/structure/percent-sum.js +2 -0
  768. package/dist/structure/percent-sum.js.map +1 -1
  769. package/dist/structure/period-label-conflict.d.ts +52 -0
  770. package/dist/structure/period-label-conflict.d.ts.map +1 -0
  771. package/dist/structure/period-label-conflict.js +105 -0
  772. package/dist/structure/period-label-conflict.js.map +1 -0
  773. package/dist/structure/period-labels.d.ts +36 -0
  774. package/dist/structure/period-labels.d.ts.map +1 -0
  775. package/dist/structure/period-labels.js +86 -0
  776. package/dist/structure/period-labels.js.map +1 -0
  777. package/dist/structure/period-multiple.d.ts +46 -0
  778. package/dist/structure/period-multiple.d.ts.map +1 -0
  779. package/dist/structure/period-multiple.js +123 -0
  780. package/dist/structure/period-multiple.js.map +1 -0
  781. package/dist/structure/quantity-range.d.ts.map +1 -1
  782. package/dist/structure/quantity-range.js +1 -5
  783. package/dist/structure/quantity-range.js.map +1 -1
  784. package/dist/structure/range-bands.d.ts +2 -0
  785. package/dist/structure/range-bands.d.ts.map +1 -1
  786. package/dist/structure/range-bands.js +1 -1
  787. package/dist/structure/range-bands.js.map +1 -1
  788. package/dist/structure/range-years.d.ts +18 -0
  789. package/dist/structure/range-years.d.ts.map +1 -0
  790. package/dist/structure/range-years.js +60 -0
  791. package/dist/structure/range-years.js.map +1 -0
  792. package/dist/structure/ratio.d.ts +136 -0
  793. package/dist/structure/ratio.d.ts.map +1 -0
  794. package/dist/structure/ratio.js +214 -0
  795. package/dist/structure/ratio.js.map +1 -0
  796. package/dist/structure/reference-flags.d.ts +55 -0
  797. package/dist/structure/reference-flags.d.ts.map +1 -0
  798. package/dist/structure/reference-flags.js +116 -0
  799. package/dist/structure/reference-flags.js.map +1 -0
  800. package/dist/structure/reference-number-repeated.d.ts +12 -0
  801. package/dist/structure/reference-number-repeated.d.ts.map +1 -0
  802. package/dist/structure/reference-number-repeated.js +43 -0
  803. package/dist/structure/reference-number-repeated.js.map +1 -0
  804. package/dist/structure/reference-unit.d.ts +24 -0
  805. package/dist/structure/reference-unit.d.ts.map +1 -0
  806. package/dist/structure/reference-unit.js +80 -0
  807. package/dist/structure/reference-unit.js.map +1 -0
  808. package/dist/structure/rent-multiple.d.ts +2 -22
  809. package/dist/structure/rent-multiple.d.ts.map +1 -1
  810. package/dist/structure/rent-multiple.js +2 -49
  811. package/dist/structure/rent-multiple.js.map +1 -1
  812. package/dist/structure/revision-direction.d.ts +51 -0
  813. package/dist/structure/revision-direction.d.ts.map +1 -0
  814. package/dist/structure/revision-direction.js +163 -0
  815. package/dist/structure/revision-direction.js.map +1 -0
  816. package/dist/structure/running-balance.d.ts +36 -0
  817. package/dist/structure/running-balance.d.ts.map +1 -0
  818. package/dist/structure/running-balance.js +126 -0
  819. package/dist/structure/running-balance.js.map +1 -0
  820. package/dist/structure/scaled-quantities.d.ts +1 -1
  821. package/dist/structure/scaled-quantities.d.ts.map +1 -1
  822. package/dist/structure/scaled-quantities.js +23 -6
  823. package/dist/structure/scaled-quantities.js.map +1 -1
  824. package/dist/structure/serial-range.d.ts +9 -0
  825. package/dist/structure/serial-range.d.ts.map +1 -0
  826. package/dist/structure/serial-range.js +41 -0
  827. package/dist/structure/serial-range.js.map +1 -0
  828. package/dist/structure/share-amount.d.ts +55 -0
  829. package/dist/structure/share-amount.d.ts.map +1 -0
  830. package/dist/structure/share-amount.js +162 -0
  831. package/dist/structure/share-amount.js.map +1 -0
  832. package/dist/structure/shift-times.d.ts +32 -0
  833. package/dist/structure/shift-times.d.ts.map +1 -0
  834. package/dist/structure/shift-times.js +112 -0
  835. package/dist/structure/shift-times.js.map +1 -0
  836. package/dist/structure/span-label.d.ts +3 -0
  837. package/dist/structure/span-label.d.ts.map +1 -0
  838. package/dist/structure/span-label.js +27 -0
  839. package/dist/structure/span-label.js.map +1 -0
  840. package/dist/structure/start-end-range.d.ts +30 -0
  841. package/dist/structure/start-end-range.d.ts.map +1 -0
  842. package/dist/structure/start-end-range.js +79 -0
  843. package/dist/structure/start-end-range.js.map +1 -0
  844. package/dist/structure/stated-multiple.d.ts +39 -0
  845. package/dist/structure/stated-multiple.d.ts.map +1 -0
  846. package/dist/structure/stated-multiple.js +49 -0
  847. package/dist/structure/stated-multiple.js.map +1 -0
  848. package/dist/structure/stated-period.d.ts +3 -2
  849. package/dist/structure/stated-period.d.ts.map +1 -1
  850. package/dist/structure/stated-period.js +17 -11
  851. package/dist/structure/stated-period.js.map +1 -1
  852. package/dist/structure/table-scale.d.ts +45 -0
  853. package/dist/structure/table-scale.d.ts.map +1 -0
  854. package/dist/structure/table-scale.js +188 -0
  855. package/dist/structure/table-scale.js.map +1 -0
  856. package/dist/structure/tax-price.d.ts +29 -0
  857. package/dist/structure/tax-price.d.ts.map +1 -0
  858. package/dist/structure/tax-price.js +112 -0
  859. package/dist/structure/tax-price.js.map +1 -0
  860. package/dist/structure/tax.d.ts +2 -0
  861. package/dist/structure/tax.d.ts.map +1 -1
  862. package/dist/structure/tax.js +46 -23
  863. package/dist/structure/tax.js.map +1 -1
  864. package/dist/structure/tier-threshold.d.ts +65 -0
  865. package/dist/structure/tier-threshold.d.ts.map +1 -0
  866. package/dist/structure/tier-threshold.js +170 -0
  867. package/dist/structure/tier-threshold.js.map +1 -0
  868. package/dist/structure/time-range.d.ts +2 -0
  869. package/dist/structure/time-range.d.ts.map +1 -1
  870. package/dist/structure/time-range.js +7 -2
  871. package/dist/structure/time-range.js.map +1 -1
  872. package/dist/structure/total-line.d.ts +34 -2
  873. package/dist/structure/total-line.d.ts.map +1 -1
  874. package/dist/structure/total-line.js +124 -3
  875. package/dist/structure/total-line.js.map +1 -1
  876. package/dist/structure/total-row-blank.d.ts +10 -0
  877. package/dist/structure/total-row-blank.d.ts.map +1 -0
  878. package/dist/structure/total-row-blank.js +15 -0
  879. package/dist/structure/total-row-blank.js.map +1 -0
  880. package/dist/structure/total.d.ts +13 -3
  881. package/dist/structure/total.d.ts.map +1 -1
  882. package/dist/structure/total.js +80 -7
  883. package/dist/structure/total.js.map +1 -1
  884. package/dist/structure/variance-table.d.ts +34 -0
  885. package/dist/structure/variance-table.d.ts.map +1 -0
  886. package/dist/structure/variance-table.js +130 -0
  887. package/dist/structure/variance-table.js.map +1 -0
  888. package/dist/table-names.d.ts +4 -3
  889. package/dist/table-names.d.ts.map +1 -1
  890. package/dist/table-names.js +6 -6
  891. package/dist/table-names.js.map +1 -1
  892. package/dist/unlabelled-references.d.ts +16 -0
  893. package/dist/unlabelled-references.d.ts.map +1 -0
  894. package/dist/unlabelled-references.js +73 -0
  895. package/dist/unlabelled-references.js.map +1 -0
  896. package/dist/vehicle-plates.d.ts +28 -0
  897. package/dist/vehicle-plates.d.ts.map +1 -0
  898. package/dist/vehicle-plates.js +116 -0
  899. package/dist/vehicle-plates.js.map +1 -0
  900. package/dist/whole-word-runs.d.ts +24 -0
  901. package/dist/whole-word-runs.d.ts.map +1 -0
  902. package/dist/whole-word-runs.js +26 -0
  903. package/dist/whole-word-runs.js.map +1 -0
  904. package/package.json +5 -4
  905. package/profiles/property-sale.yaml +21 -0
  906. package/rules/absolute-exception.yaml +1 -1
  907. package/rules/ai-generated-composite.yaml +1 -1
  908. package/rules/ai-tell.yaml +1 -1
  909. package/rules/amount-range-reversed.yaml +1 -1
  910. package/rules/amount-scale-consistency.yaml +1 -1
  911. package/rules/announcing-opener.yaml +1 -1
  912. package/rules/annual-holidays-mismatch.yaml +65 -0
  913. package/rules/annual-pay-mismatch.yaml +64 -0
  914. package/rules/article-sound.yaml +1 -1
  915. package/rules/assistant-residue.yaml +1 -1
  916. package/rules/attachment-not-attached.yaml +1 -1
  917. package/rules/backorder-mismatch.yaml +57 -0
  918. package/rules/bmi-mismatch.yaml +63 -0
  919. package/rules/bold-label-list.yaml +1 -1
  920. package/rules/broken-link.yaml +1 -1
  921. package/rules/capacity-runtime-mismatch.yaml +1 -1
  922. package/rules/change-rate-mismatch.yaml +6 -6
  923. package/rules/chat-citation-residue.yaml +2 -2
  924. package/rules/cliche.yaml +2 -2
  925. package/rules/closing-balance-mismatch.yaml +63 -0
  926. package/rules/colon-lead-in.yaml +1 -1
  927. package/rules/comparative-without-baseline.yaml +1 -1
  928. package/rules/concrete-evidence-density.yaml +1 -1
  929. package/rules/connection-time-short.yaml +1 -1
  930. package/rules/contact-variant.yaml +4 -4
  931. package/rules/contrast-framing.yaml +2 -2
  932. package/rules/cross-doc-broken-link.yaml +1 -1
  933. package/rules/cross-doc-fact-conflict.yaml +1 -1
  934. package/rules/cross-doc-term-variant.yaml +1 -1
  935. package/rules/cumulative-below-current.yaml +59 -0
  936. package/rules/currency-column-mix.yaml +70 -0
  937. package/rules/currency-notation-consistency.yaml +2 -2
  938. package/rules/cushion-phrase-density.yaml +1 -1
  939. package/rules/dangling-participle.yaml +2 -2
  940. package/rules/dangling-reference.yaml +1 -1
  941. package/rules/date-format-consistency.yaml +1 -1
  942. package/rules/date-outside-period.yaml +5 -5
  943. package/rules/date-range-reversed.yaml +4 -4
  944. package/rules/date-stamp-order.yaml +2 -2
  945. package/rules/date-without-year.yaml +12 -12
  946. package/rules/deadline-after-event.yaml +11 -6
  947. package/rules/deductible-exceeds-limit.yaml +54 -0
  948. package/rules/defined-name-repeated.yaml +3 -3
  949. package/rules/defined-term-form.yaml +2 -2
  950. package/rules/delivered-over-ordered.yaml +57 -0
  951. package/rules/demonstrative-opener-run.yaml +1 -1
  952. package/rules/discount-rate-mismatch.yaml +66 -0
  953. package/rules/due-before-issue.yaml +33 -12
  954. package/rules/duration-mismatch.yaml +16 -7
  955. package/rules/duration-product-mismatch.yaml +11 -3
  956. package/rules/elapsed-years-mismatch.yaml +11 -6
  957. package/rules/email-greeting-closing.yaml +2 -2
  958. package/rules/empty-conclusion.yaml +1 -1
  959. package/rules/empty-intensifier.yaml +1 -1
  960. package/rules/empty-list-item.yaml +1 -1
  961. package/rules/empty-section.yaml +1 -1
  962. package/rules/empty-table-cell.yaml +2 -2
  963. package/rules/expletive-construction.yaml +1 -1
  964. package/rules/fact-conflict.yaml +16 -4
  965. package/rules/figurative-density.yaml +1 -1
  966. package/rules/figure-reference-order.yaml +1 -1
  967. package/rules/footnote-mismatch.yaml +1 -1
  968. package/rules/formula-amount-mismatch.yaml +67 -0
  969. package/rules/fullwidth-alnum-consistency.yaml +1 -1
  970. package/rules/gpa-mismatch.yaml +80 -0
  971. package/rules/heading-end-punctuation-mix.yaml +1 -1
  972. package/rules/heading-level-skip.yaml +1 -1
  973. package/rules/heading-numbering-mix.yaml +3 -3
  974. package/rules/homophone-slip.yaml +1 -1
  975. package/rules/humble-for-others.yaml +1 -1
  976. package/rules/idiom-misuse.yaml +1 -1
  977. package/rules/ime-residue.yaml +1 -1
  978. package/rules/impossible-date.yaml +10 -6
  979. package/rules/installment-total-mismatch.yaml +63 -0
  980. package/rules/interest-mismatch.yaml +50 -0
  981. package/rules/interval-count-mismatch.yaml +1 -1
  982. package/rules/invisible-character.yaml +1 -1
  983. package/rules/kana-function-word.yaml +2 -2
  984. package/rules/katakana-density.yaml +1 -1
  985. package/rules/katakana-long-vowel.yaml +2 -2
  986. package/rules/kutoten-consistency.yaml +1 -1
  987. package/rules/latin-spacing.yaml +20 -6
  988. package/rules/layout-code-mismatch.yaml +1 -1
  989. package/rules/less-for-fewer.yaml +1 -1
  990. package/rules/line-amount-mismatch.yaml +8 -7
  991. package/rules/link-text-url-mismatch.yaml +1 -1
  992. package/rules/list-item-form-mix.yaml +1 -1
  993. package/rules/lookalike-character.yaml +1 -1
  994. package/rules/max-kanji-continuous.yaml +1 -1
  995. package/rules/meter-usage-mismatch.yaml +64 -0
  996. package/rules/misconversion.yaml +1 -1
  997. package/rules/modal-conflict.yaml +1 -1
  998. package/rules/name-variant.yaml +12 -3
  999. package/rules/net-amount-mismatch.yaml +57 -0
  1000. package/rules/net-over-gross.yaml +57 -0
  1001. package/rules/no-doubled-joshi.yaml +1 -1
  1002. package/rules/no-mixed-desumasu.yaml +1 -1
  1003. package/rules/no-nakaguro-parallel.yaml +1 -1
  1004. package/rules/nominalization.yaml +1 -1
  1005. package/rules/nonstandard-word.yaml +1 -1
  1006. package/rules/number-style-consistency.yaml +3 -3
  1007. package/rules/number-without-unit.yaml +1 -1
  1008. package/rules/number-word-figure-mismatch.yaml +1 -1
  1009. package/rules/numbering-gap.yaml +1 -1
  1010. package/rules/obligation-without-deadline.yaml +1 -1
  1011. package/rules/ordinal-suffix-mismatch.yaml +1 -1
  1012. package/rules/orthographic-variant.yaml +5 -5
  1013. package/rules/outside-announced-list.yaml +1 -1
  1014. package/rules/padded-intro.yaml +1 -1
  1015. package/rules/paragraph-restatement.yaml +1 -1
  1016. package/rules/party-role-name.yaml +3 -3
  1017. package/rules/percent-sum-mismatch.yaml +2 -2
  1018. package/rules/period-label-conflict.yaml +68 -0
  1019. package/rules/period-multiple-mismatch.yaml +61 -0
  1020. package/rules/period-part-exceeds-whole.yaml +62 -0
  1021. package/rules/person-consistency.yaml +1 -1
  1022. package/rules/phone-number-variant.yaml +3 -3
  1023. package/rules/preferred-term.yaml +2 -2
  1024. package/rules/prerequisite-after-step.yaml +1 -1
  1025. package/rules/product-exceeds-maximum.yaml +49 -0
  1026. package/rules/proper-noun-density.yaml +1 -1
  1027. package/rules/quantity-range-reversed.yaml +2 -2
  1028. package/rules/range-band-mismatch.yaml +1 -1
  1029. package/rules/ratio-mismatch.yaml +64 -0
  1030. package/rules/reference-flag-mismatch.yaml +74 -0
  1031. package/rules/reference-number-repeated.yaml +63 -0
  1032. package/rules/reference-number-variant.yaml +81 -0
  1033. package/rules/reference-title-mismatch.yaml +1 -1
  1034. package/rules/reference-topic-missing.yaml +1 -1
  1035. package/rules/reference-unit-mismatch.yaml +62 -0
  1036. package/rules/relative-date-mismatch.yaml +1 -1
  1037. package/rules/request-without-deadline.yaml +3 -3
  1038. package/rules/required-listed-as-preferred.yaml +1 -1
  1039. package/rules/required-sections.yaml +2 -2
  1040. package/rules/requirement-modal.yaml +2 -2
  1041. package/rules/requirement-smell.yaml +1 -1
  1042. package/rules/revision-direction-mismatch.yaml +66 -0
  1043. package/rules/risk-disclosure.yaml +1 -1
  1044. package/rules/running-balance-mismatch.yaml +59 -0
  1045. package/rules/scaled-quantity-mismatch.yaml +1 -1
  1046. package/rules/serial-range-reversed.yaml +52 -0
  1047. package/rules/share-amount-mismatch.yaml +58 -0
  1048. package/rules/share-over-hundred.yaml +1 -1
  1049. package/rules/shell-prompt-mix.yaml +1 -1
  1050. package/rules/space-before-punctuation.yaml +1 -1
  1051. package/rules/spelling-consistency.yaml +1 -1
  1052. package/rules/step-statement-mix.yaml +3 -3
  1053. package/rules/stock-transition.yaml +1 -1
  1054. package/rules/summary-fact-mismatch.yaml +1 -1
  1055. package/rules/table-header-variant.yaml +1 -1
  1056. package/rules/table-unit-mix.yaml +82 -0
  1057. package/rules/taigen-dome-in-prose.yaml +1 -1
  1058. package/rules/tax-mismatch.yaml +13 -7
  1059. package/rules/tier-threshold-mismatch.yaml +73 -0
  1060. package/rules/time-order.yaml +7 -4
  1061. package/rules/time-range-reversed.yaml +9 -4
  1062. package/rules/toc-heading-mismatch.yaml +1 -1
  1063. package/rules/topic-predicate-distance.yaml +1 -1
  1064. package/rules/total-mismatch.yaml +5 -5
  1065. package/rules/ui-label-variant.yaml +1 -1
  1066. package/rules/unclosed-code-fence.yaml +1 -1
  1067. package/rules/uncomparable-graded.yaml +2 -2
  1068. package/rules/undefined-term.yaml +2 -2
  1069. package/rules/unfilled-placeholder.yaml +2 -2
  1070. package/rules/unit-mismatch.yaml +1 -1
  1071. package/rules/unit-spacing-consistency.yaml +1 -1
  1072. package/rules/unknown-word.yaml +1 -1
  1073. package/rules/url-run-on.yaml +1 -1
  1074. package/rules/vague-deadline.yaml +1 -1
  1075. package/rules/vague-figure-reference.yaml +1 -1
  1076. package/rules/vague-word-density.yaml +2 -2
  1077. package/rules/variance-mismatch.yaml +67 -0
  1078. package/rules/very-adjective.yaml +1 -1
  1079. package/rules/walk-time-distance-mismatch.yaml +1 -1
  1080. package/rules/warning-without-action.yaml +1 -1
  1081. package/rules/weasel-word.yaml +2 -2
  1082. package/rules/wordy-phrase.yaml +2 -2
  1083. package/rules/yori-as-from.yaml +1 -1
  1084. package/skills/chaff/SKILL.md +59 -9
  1085. package/src/cli-text.ts +2 -2
  1086. package/src/company-kana-spelling.ts +105 -0
  1087. package/src/company-names.ts +159 -26
  1088. package/src/contacts/table-rows.ts +51 -0
  1089. package/src/cross-run.ts +1 -0
  1090. package/src/derived/age-on-date.ts +161 -0
  1091. package/src/derived/durations.ts +83 -12
  1092. package/src/derived/hours-and-minutes.ts +41 -0
  1093. package/src/derived/hyphenated-counts.ts +38 -0
  1094. package/src/derived/marked-dates.ts +61 -0
  1095. package/src/derived/money-span.ts +10 -0
  1096. package/src/derived/period-parts.ts +360 -0
  1097. package/src/derived/readable-date.ts +63 -0
  1098. package/src/derived/stays.ts +7 -2
  1099. package/src/derived/timesheet-hours.ts +112 -0
  1100. package/src/derived/use-maximum.ts +158 -0
  1101. package/src/derived/working-hours.ts +2 -2
  1102. package/src/detectors/agreement-slip.ts +3 -0
  1103. package/src/detectors/annual-holidays-mismatch.ts +41 -0
  1104. package/src/detectors/annual-pay-mismatch.ts +71 -0
  1105. package/src/detectors/blank-structure.ts +54 -14
  1106. package/src/detectors/bmi-mismatch.ts +82 -0
  1107. package/src/detectors/change-rate.ts +27 -4
  1108. package/src/detectors/closing-balance-mismatch.ts +52 -0
  1109. package/src/detectors/contact-variant.ts +8 -2
  1110. package/src/detectors/cumulative-below-current.ts +30 -0
  1111. package/src/detectors/currency-column.ts +37 -0
  1112. package/src/detectors/date-any-year.ts +130 -0
  1113. package/src/detectors/date-outside-period.ts +4 -10
  1114. package/src/detectors/date-stamp-order.ts +2 -1
  1115. package/src/detectors/date-year.ts +55 -13
  1116. package/src/detectors/deductible-exceeds-limit.ts +55 -0
  1117. package/src/detectors/defined-term-form.ts +6 -23
  1118. package/src/detectors/derived-numbers.ts +50 -89
  1119. package/src/detectors/discount-rate.ts +41 -0
  1120. package/src/detectors/due-date.ts +21 -7
  1121. package/src/detectors/email-letter.ts +45 -15
  1122. package/src/detectors/event-deadline.ts +13 -3
  1123. package/src/detectors/fact-consistency.ts +145 -7
  1124. package/src/detectors/formula-amount.ts +59 -0
  1125. package/src/detectors/gloss-year.ts +21 -0
  1126. package/src/detectors/gpa-mismatch.ts +43 -0
  1127. package/src/detectors/impossible-date.ts +25 -3
  1128. package/src/detectors/installment-total-mismatch.ts +94 -0
  1129. package/src/detectors/interest.ts +43 -0
  1130. package/src/detectors/lab-columns.ts +9 -0
  1131. package/src/detectors/labelled-age.ts +154 -0
  1132. package/src/detectors/line-amount.ts +58 -3
  1133. package/src/detectors/measured-facts.ts +1 -1
  1134. package/src/detectors/meter-usage.ts +49 -0
  1135. package/src/detectors/name-field.ts +43 -0
  1136. package/src/detectors/name-variant.ts +160 -16
  1137. package/src/detectors/net-amount-mismatch.ts +86 -0
  1138. package/src/detectors/net-gross-weight.ts +39 -0
  1139. package/src/detectors/nominal-step.ts +35 -0
  1140. package/src/detectors/number-style.ts +11 -2
  1141. package/src/detectors/order-quantity.ts +46 -0
  1142. package/src/detectors/orthographic-variant.ts +43 -11
  1143. package/src/detectors/orthography.ts +27 -11
  1144. package/src/detectors/period-label-conflict.ts +43 -0
  1145. package/src/detectors/period-multiple-mismatch.ts +54 -0
  1146. package/src/detectors/period-part.ts +71 -0
  1147. package/src/detectors/range-words.ts +17 -0
  1148. package/src/detectors/ratio-mismatch.ts +116 -0
  1149. package/src/detectors/readable-dates.ts +36 -0
  1150. package/src/detectors/reference-flag.ts +36 -0
  1151. package/src/detectors/reference-number-repeated.ts +25 -0
  1152. package/src/detectors/reference-number-variant.ts +44 -0
  1153. package/src/detectors/reference-unit.ts +24 -0
  1154. package/src/detectors/registry/annual-holidays-mismatch.ts +4 -0
  1155. package/src/detectors/registry/annual-pay-mismatch.ts +4 -0
  1156. package/src/detectors/registry/backorder-mismatch.ts +4 -0
  1157. package/src/detectors/registry/bmi-mismatch.ts +4 -0
  1158. package/src/detectors/registry/closing-balance-mismatch.ts +4 -0
  1159. package/src/detectors/registry/cumulative-below-current.ts +4 -0
  1160. package/src/detectors/registry/currency-column-mix.ts +4 -0
  1161. package/src/detectors/registry/deductible-exceeds-limit.ts +4 -0
  1162. package/src/detectors/registry/delivered-over-ordered.ts +4 -0
  1163. package/src/detectors/registry/discount-rate.ts +4 -0
  1164. package/src/detectors/registry/elapsed-years-mismatch.ts +1 -1
  1165. package/src/detectors/registry/formula-amount.ts +4 -0
  1166. package/src/detectors/registry/gpa-mismatch.ts +4 -0
  1167. package/src/detectors/registry/installment-total-mismatch.ts +4 -0
  1168. package/src/detectors/registry/interest.ts +4 -0
  1169. package/src/detectors/registry/meter-usage.ts +4 -0
  1170. package/src/detectors/registry/net-amount-mismatch.ts +4 -0
  1171. package/src/detectors/registry/net-over-gross.ts +4 -0
  1172. package/src/detectors/registry/period-label-conflict.ts +4 -0
  1173. package/src/detectors/registry/period-multiple-mismatch.ts +4 -0
  1174. package/src/detectors/registry/period-part-exceeds-whole.ts +4 -0
  1175. package/src/detectors/registry/product-exceeds-maximum.ts +4 -0
  1176. package/src/detectors/registry/ratio-mismatch.ts +4 -0
  1177. package/src/detectors/registry/reference-flag-mismatch.ts +4 -0
  1178. package/src/detectors/registry/reference-number-repeated.ts +4 -0
  1179. package/src/detectors/registry/reference-number-variant.ts +4 -0
  1180. package/src/detectors/registry/reference-unit.ts +4 -0
  1181. package/src/detectors/registry/revision-direction.ts +4 -0
  1182. package/src/detectors/registry/running-balance.ts +4 -0
  1183. package/src/detectors/registry/serial-range.ts +4 -0
  1184. package/src/detectors/registry/share-amount.ts +4 -0
  1185. package/src/detectors/registry/table-unit-mix.ts +4 -0
  1186. package/src/detectors/registry/tier-threshold.ts +4 -0
  1187. package/src/detectors/registry/variance-mismatch.ts +4 -0
  1188. package/src/detectors/relative-dates.ts +2 -1
  1189. package/src/detectors/relative-day-words.ts +2 -1
  1190. package/src/detectors/rent-multiple-mismatch.ts +3 -2
  1191. package/src/detectors/request-owner.ts +5 -2
  1192. package/src/detectors/revision-direction.ts +44 -0
  1193. package/src/detectors/row-sentence-amounts.ts +96 -0
  1194. package/src/detectors/running-balance.ts +31 -0
  1195. package/src/detectors/scaled-quantity.ts +1 -1
  1196. package/src/detectors/serial-range.ts +37 -0
  1197. package/src/detectors/share-amount.ts +51 -0
  1198. package/src/detectors/structure-tree.ts +62 -12
  1199. package/src/detectors/table-scale.ts +37 -0
  1200. package/src/detectors/tax-amount.ts +45 -13
  1201. package/src/detectors/technical-docs.ts +4 -2
  1202. package/src/detectors/tier-threshold.ts +108 -0
  1203. package/src/detectors/time-order.ts +52 -18
  1204. package/src/detectors/use-maximum.ts +38 -0
  1205. package/src/detectors/variance.ts +33 -0
  1206. package/src/detectors/whole-count-findings.ts +48 -0
  1207. package/src/detectors/working-hours-findings.ts +100 -0
  1208. package/src/eval.ts +3 -3
  1209. package/src/facts/age-values.ts +124 -0
  1210. package/src/facts/cell-keys.ts +21 -0
  1211. package/src/facts/count-labels.ts +28 -0
  1212. package/src/facts/document-terms.ts +107 -0
  1213. package/src/facts/duration-scale.ts +22 -0
  1214. package/src/facts/duration-values.ts +44 -0
  1215. package/src/facts/fact-values.ts +36 -7
  1216. package/src/facts/labelled-facts.ts +66 -9
  1217. package/src/facts/measure-units.ts +28 -10
  1218. package/src/facts/measures.ts +11 -11
  1219. package/src/facts/qualified-labels.ts +126 -0
  1220. package/src/facts/rate-values.ts +117 -0
  1221. package/src/facts/row-sentence-amounts.ts +113 -0
  1222. package/src/facts/superscript-power.ts +5 -0
  1223. package/src/facts/table-facts.ts +35 -7
  1224. package/src/facts/term-values.ts +236 -0
  1225. package/src/facts/unit-word.ts +13 -0
  1226. package/src/facts/verb-quantity-facts.ts +84 -0
  1227. package/src/facts/whole-counts.ts +183 -0
  1228. package/src/fix-plan/text.ts +2 -2
  1229. package/src/lexicon-genres.ts +11 -0
  1230. package/src/name-char-reading.ts +24 -0
  1231. package/src/name-line-block.ts +40 -0
  1232. package/src/name-lookalike-chars.ts +53 -0
  1233. package/src/name-neighbours.ts +58 -0
  1234. package/src/name-ordinary-word.ts +68 -0
  1235. package/src/name-person.ts +31 -0
  1236. package/src/name-separator.ts +48 -0
  1237. package/src/name-variants.ts +42 -86
  1238. package/src/name-weight.ts +12 -0
  1239. package/src/person-field.ts +43 -0
  1240. package/src/person-full-name.ts +70 -0
  1241. package/src/phone-numbers.ts +54 -18
  1242. package/src/plugin.ts +8 -0
  1243. package/src/product-names.ts +98 -0
  1244. package/src/profile/parse.ts +8 -0
  1245. package/src/reference-numbers.ts +55 -0
  1246. package/src/run.ts +1 -0
  1247. package/src/spaced-person-name.ts +97 -0
  1248. package/src/spacing-code.ts +22 -1
  1249. package/src/structure/annual-holidays.ts +222 -0
  1250. package/src/structure/annual-pay.ts +339 -0
  1251. package/src/structure/bmi.ts +133 -0
  1252. package/src/structure/change-rate-table.ts +135 -0
  1253. package/src/structure/change-rate.ts +54 -17
  1254. package/src/structure/closing-balance.ts +104 -0
  1255. package/src/structure/column-date-order.ts +73 -0
  1256. package/src/structure/compound-hours.ts +49 -0
  1257. package/src/structure/cumulative-below-current.ts +66 -0
  1258. package/src/structure/currency-column.ts +97 -0
  1259. package/src/structure/date-deadline-mark.ts +30 -0
  1260. package/src/structure/date-outside-period.ts +17 -9
  1261. package/src/structure/date-range.ts +9 -11
  1262. package/src/structure/deadline-after-event.ts +125 -8
  1263. package/src/structure/deductible-limit.ts +255 -0
  1264. package/src/structure/discount-rate.ts +209 -0
  1265. package/src/structure/formula-amount.ts +236 -0
  1266. package/src/structure/generic-role.ts +8 -0
  1267. package/src/structure/gpa.ts +218 -0
  1268. package/src/structure/installment-fee.ts +201 -0
  1269. package/src/structure/installment-total.ts +343 -0
  1270. package/src/structure/interest.ts +133 -0
  1271. package/src/structure/key-value-row.ts +45 -0
  1272. package/src/structure/lab-columns.ts +21 -0
  1273. package/src/structure/labelled-date-order.ts +68 -52
  1274. package/src/structure/labelled-order.ts +122 -0
  1275. package/src/structure/labelled-time-order.ts +100 -0
  1276. package/src/structure/line-amount-label.ts +100 -0
  1277. package/src/structure/line-amount-rate.ts +178 -0
  1278. package/src/structure/line-amount-unit.ts +16 -0
  1279. package/src/structure/line-amount.ts +200 -48
  1280. package/src/structure/meter-usage-read.ts +139 -0
  1281. package/src/structure/meter-usage.ts +224 -0
  1282. package/src/structure/net-amount.ts +243 -0
  1283. package/src/structure/net-gross-weight.ts +97 -0
  1284. package/src/structure/order-quantity.ts +125 -0
  1285. package/src/structure/party-role.ts +4 -1
  1286. package/src/structure/percent-sum.ts +3 -0
  1287. package/src/structure/period-label-conflict.ts +174 -0
  1288. package/src/structure/period-labels.ts +147 -0
  1289. package/src/structure/period-multiple.ts +186 -0
  1290. package/src/structure/quantity-range.ts +1 -8
  1291. package/src/structure/range-bands.ts +1 -1
  1292. package/src/structure/range-years.ts +75 -0
  1293. package/src/structure/ratio.ts +296 -0
  1294. package/src/structure/reference-flags.ts +156 -0
  1295. package/src/structure/reference-number-repeated.ts +57 -0
  1296. package/src/structure/reference-unit.ts +105 -0
  1297. package/src/structure/rent-multiple.ts +12 -82
  1298. package/src/structure/revision-direction.ts +214 -0
  1299. package/src/structure/running-balance.ts +157 -0
  1300. package/src/structure/scaled-quantities.ts +20 -6
  1301. package/src/structure/serial-range.ts +52 -0
  1302. package/src/structure/share-amount.ts +206 -0
  1303. package/src/structure/shift-times.ts +136 -0
  1304. package/src/structure/span-label.ts +26 -0
  1305. package/src/structure/start-end-range.ts +120 -0
  1306. package/src/structure/stated-multiple.ts +82 -0
  1307. package/src/structure/stated-period.ts +23 -11
  1308. package/src/structure/table-scale.ts +239 -0
  1309. package/src/structure/tax-price.ts +136 -0
  1310. package/src/structure/tax.ts +55 -20
  1311. package/src/structure/tier-threshold.ts +218 -0
  1312. package/src/structure/time-range.ts +9 -3
  1313. package/src/structure/total-line.ts +174 -5
  1314. package/src/structure/total-row-blank.ts +23 -0
  1315. package/src/structure/total.ts +122 -13
  1316. package/src/structure/variance-table.ts +167 -0
  1317. package/src/table-names.ts +6 -6
  1318. package/src/unlabelled-references.ts +83 -0
  1319. package/src/vehicle-plates.ts +142 -0
  1320. package/src/whole-word-runs.ts +38 -0
@@ -0,0 +1,98 @@
1
+ import { escapeRegExp } from "./orthography.ts";
2
+
3
+ // 製品の名前を、文書の中で二通りに書いた所(ミナモール錠 と ミナモル錠)。製品の名前は、製品の形を言う語(錠、カプセル、クリーム)の
4
+ // すぐ前の、カタカナの連なり。形の語は語彙表 product-form が言い、group が同じ語は同じ形の別の書き方。作った製品の名前は解析器が
5
+ // 固有名詞と読まず、読みも名前の字のとおりにずれるので、人や会社の名前の見方では比べられない。
6
+
7
+ export type ProductForm = { readonly pattern: string; readonly group: string };
8
+
9
+ /** surface は形の語も含めた書いたまま。base はカタカナの名前の部分、form は形の語の組。 */
10
+ export type ProductMention = { readonly surface: string; readonly offset: number; readonly base: string; readonly form: string };
11
+
12
+ export type ProductVariant = { readonly mention: ProductMention; readonly usual: string; readonly kind: "near" };
13
+
14
+ const KATAKANA = /[\p{Script=Katakana}ー]/u;
15
+ /** 形の語の後ろに続くと、長い語の一部になる字(錠剤、液晶、ゲルマニウム、スプレー缶)。 */
16
+ const WORD_CONTINUES = /[\p{Script=Han}\p{Script=Katakana}ー]/u;
17
+ /** 名前の部分の字の数の下限。短いカタカナ(ケア、ハーブ)は製品の名前でなく、ふつうの語のことが多い。 */
18
+ const MIN_NAME_CHARS = 4;
19
+ /** 名前を探す、形の語の前の範囲(UTF-16 の単位)。 */
20
+ const LOOKBACK = 30;
21
+ const LONG_VOWEL = "ー";
22
+
23
+ /** at のすぐ前の、カタカナの連なり。 */
24
+ const katakanaBefore = (source: string, at: number): string => {
25
+ const chars = Array.from(source.slice(Math.max(0, at - LOOKBACK), at));
26
+ return chars.slice(chars.findLastIndex((char) => !KATAKANA.test(char)) + 1).join("");
27
+ };
28
+
29
+ const mentionAt = (source: string, form: ProductForm, at: number): ProductMention | undefined => {
30
+ const end = at + form.pattern.length;
31
+ if (WORD_CONTINUES.test(source.charAt(end))) return undefined;
32
+ const base = katakanaBefore(source, at);
33
+ if (Array.from(base).length < MIN_NAME_CHARS) return undefined;
34
+ return { surface: source.slice(at - base.length, end), offset: at - base.length, base, form: form.group };
35
+ };
36
+
37
+ /** 文書の中の製品の名前の現れ。同じ所で終わる形の語は長いほうを取る(顆粒 と 粒)。 */
38
+ export const productMentionsIn = (source: string, forms: readonly ProductForm[]): ProductMention[] => {
39
+ const ends = new Set<number>();
40
+ return forms
41
+ .toSorted((left, right) => right.pattern.length - left.pattern.length)
42
+ .flatMap((form) =>
43
+ [...source.matchAll(new RegExp(escapeRegExp(form.pattern), "gu"))].flatMap((match) => {
44
+ const end = match.index + form.pattern.length;
45
+ if (ends.has(end)) return [];
46
+ const mention = mentionAt(source, form, match.index);
47
+ if (mention !== undefined) ends.add(end);
48
+ return mention === undefined ? [] : [mention];
49
+ }),
50
+ )
51
+ .toSorted((left, right) => left.offset - right.offset);
52
+ };
53
+
54
+ /** 同じ長さで、一字だけ違う(ミナモール と ミナモオル)。 */
55
+ const isOneReplaced = (left: readonly string[], right: readonly string[]): boolean =>
56
+ left.length === right.length && left.filter((char, index) => char !== right[index]).length === 1;
57
+
58
+ /** longer から長音の記号を一つ抜くと shorter になる(ミナモール と ミナモル)。 */
59
+ const dropsOneLongVowel = (longer: readonly string[], shorter: readonly string[]): boolean =>
60
+ longer.length === shorter.length + 1 && longer.some((char, index) => char === LONG_VOWEL && longer.toSpliced(index, 1).join("") === shorter.join(""));
61
+
62
+ /** 二つのカタカナの名前が、一字の置き換えか、長音の記号一つの有る無しだけ違う。 */
63
+ export const isKanaSlip = (left: string, right: string): boolean => {
64
+ const [leftChars, rightChars] = [Array.from(left), Array.from(right)];
65
+ return isOneReplaced(leftChars, rightChars) || dropsOneLongVowel(leftChars, rightChars) || dropsOneLongVowel(rightChars, leftChars);
66
+ };
67
+
68
+ type Counted = { readonly mention: ProductMention; readonly count: number };
69
+
70
+ /**
71
+ * slip が usual の書き損じと言えるか。形の語の組が同じで、名前の部分が一字違いか長音の有る無しで、slip が一度だけ、usual が二度以上。
72
+ * 一字違いの別の製品もあるので、何度も書いた名前と一度だけの名前の組に限る。
73
+ */
74
+ export const isProductSlip = (slip: Counted, usual: Counted): boolean =>
75
+ slip.count === 1 && usual.count >= 2 && slip.mention.form === usual.mention.form && isKanaSlip(slip.mention.base, usual.mention.base);
76
+
77
+ /** 名前と形の語の組ごとに数える。同じ組の別の書き方(錠 と 錠剤)は同じ製品の現れ。 */
78
+ const talliesOf = (mentions: readonly ProductMention[]): Counted[] => {
79
+ const tallies = new Map<string, Counted>();
80
+ mentions.forEach((mention) => {
81
+ const key = `${mention.base}\u0000${mention.form}`;
82
+ const tally = tallies.get(key);
83
+ tallies.set(key, { mention: tally?.mention ?? mention, count: (tally?.count ?? 0) + 1 });
84
+ });
85
+ return [...tallies.values()];
86
+ };
87
+
88
+ /** 多いほうが先。同数なら先に書いたほう。 */
89
+ const byUsage = (left: Counted, right: Counted): number => right.count - left.count || left.mention.offset - right.mention.offset;
90
+
91
+ /** 製品の名前の、一度だけ書いた書き損じ。相手のうち一番多いものと比べる。 */
92
+ export const productVariants = (mentions: readonly ProductMention[]): ProductVariant[] => {
93
+ const tallies = talliesOf(mentions);
94
+ return tallies.flatMap((tally): ProductVariant[] => {
95
+ const [usual] = tallies.filter((other) => isProductSlip(tally, other)).toSorted(byUsage);
96
+ return usual === undefined ? [] : [{ mention: tally.mention, usual: usual.mention.surface, kind: "near" }];
97
+ });
98
+ };
@@ -61,6 +61,12 @@ const walkRateOf = (value: unknown): DocumentProfile["walkRate"] => {
61
61
  return { metresPerMinute, roundUp: value["round_up"] === true };
62
62
  };
63
63
 
64
+ const WHOLE_PERCENT = 100;
65
+
66
+ /** 0 より大きく 100 未満の数でなければ読まない。 */
67
+ const taxRateOf = (value: unknown): number | undefined =>
68
+ typeof value === "number" && Number.isFinite(value) && value > 0 && value < WHOLE_PERCENT ? value : undefined;
69
+
64
70
  /** 単位が一つも無ければ読まない。何を指すのか決められない。 */
65
71
  const relativeOf = (value: unknown): RelativeVocabulary | undefined => {
66
72
  if (!isRecord(value)) return undefined;
@@ -97,6 +103,7 @@ const languagesOf = (id: string, raw: Record<string, unknown>): Record<string, D
97
103
  const relative = relativeOf(section["relative"]);
98
104
  const unnumbered = unnumberedOf(section["unnumbered"]);
99
105
  const walkRate = walkRateOf(section["walk_rate"]);
106
+ const taxRate = taxRateOf(section["tax_rate"]);
100
107
  return [
101
108
  language,
102
109
  {
@@ -109,6 +116,7 @@ const languagesOf = (id: string, raw: Record<string, unknown>): Record<string, D
109
116
  unnumbered,
110
117
  ...(section["quote_mentions_term"] === true ? { quoteMentionsTerm: true } : {}),
111
118
  ...(walkRate === undefined ? {} : { walkRate }),
119
+ ...(taxRate === undefined ? {} : { taxRate }),
112
120
  },
113
121
  ];
114
122
  }),
@@ -0,0 +1,55 @@
1
+ // A document's own reference number (a booking or confirmation number) written two ways: the same letters and digits with
2
+ // two neighbours swapped (MN-48215 and MN-48251), both right after a label of the same kind. Pure: reads the document's text;
3
+ // the labels (予約番号, Booking number) come from the language's reference-label lexicon, grouped by what they label.
4
+ import type { LexiconEntry } from "./plugin.ts";
5
+ import { labelBefore, swappedVariants, withoutUrls } from "./phone-numbers.ts";
6
+
7
+ /** A reference number as written, where it is, its letters and digits without separators, and its label's group. */
8
+ export type ReferenceNumber = { readonly offset: number; readonly written: string; readonly characters: string; readonly label: string };
9
+
10
+ /** A reference number that is another of the same label with two neighbours swapped, and that other number. */
11
+ export type ReferenceVariant = { readonly number: ReferenceNumber; readonly other: ReferenceNumber };
12
+
13
+ /** Letters and digits, half or full width, joined by hyphens (MN-48215, AR730514, MN-48215). */
14
+ export const REFERENCE_SHAPE = /(?<![A-Za-z0-9A-Za-z0-9\-‐−-])[A-Za-z0-9A-Za-z0-9]+(?:[-‐−-][A-Za-z0-9A-Za-z0-9]+)*/gu;
15
+ /** Digits enough that a swap is a slip in one number, not two short codes (A-12, B-21). */
16
+ export const MIN_DIGITS = 4;
17
+ export const MAX_CHARACTERS = 24;
18
+ const DIGIT = /\d/gu;
19
+ const SEPARATOR = /[-‐−-]/gu;
20
+ /** Only spaces and a colon, comma or opening bracket between the label and its number (「予約番号:」, "booking number, "); not a sentence's end. */
21
+ const LABEL_TO_NUMBER = /^[\s::,,、##((「『[[]{0,4}$/u;
22
+
23
+ export const charactersOf = (written: string): string => written.normalize("NFKC").replaceAll(SEPARATOR, "").replaceAll(" ", "").toUpperCase();
24
+
25
+ /** A first group a number in groups may open with: capitals and digits only (HM, 5520), not a word (No, Member). */
26
+ const OPENING_GROUP = /^[0-9A-Z0-9A-Z]+$/u;
27
+ /** One space, then four or more capitals and digits holding a digit, not run on into a word (8137 の; not 100 copies, 080, 2名, 2nd). */
28
+ const FOLLOWING_GROUP = /^ (?=[0-9A-Z0-9A-Z]*[0-90-9])[0-9A-Z0-9A-Z]{4,}(?![\p{L}\p{N}\-‐−-](?<!\p{Script=Hiragana}))/u;
29
+
30
+ /** The groups after a number's first, written one space apart on its line (HM 5520 8137); none when the first is not a group. Reading stops once past the longest number, so a run-on is still too long. */
31
+ export const followingGroups = (text: string, end: number, first: string): string => {
32
+ if (!OPENING_GROUP.test(first)) return "";
33
+ const read = (at: number, sofar: string): string => {
34
+ const tooLong = charactersOf(first + sofar).length > MAX_CHARACTERS;
35
+ const group = tooLong ? undefined : FOLLOWING_GROUP.exec(text.slice(at, at + MAX_CHARACTERS + 1))?.[0];
36
+ return group === undefined ? sofar : read(at + group.length, sofar + group);
37
+ };
38
+ return read(end, "");
39
+ };
40
+
41
+ /** The reference numbers of a text written right after a label on their line; unlabelled codes and URLs are not read. */
42
+ export const labelledReferenceNumbers = (source: string, labels: readonly LexiconEntry[]): ReferenceNumber[] => {
43
+ const text = withoutUrls(source);
44
+ return [...text.matchAll(REFERENCE_SHAPE)].flatMap((match) => {
45
+ const written = match[0] + followingGroups(text, match.index + match[0].length, match[0]);
46
+ const characters = charactersOf(written);
47
+ if ((characters.match(DIGIT)?.length ?? 0) < MIN_DIGITS || characters.length > MAX_CHARACTERS) return [];
48
+ const label = labelBefore(text, match.index, labels);
49
+ if (label === undefined || !LABEL_TO_NUMBER.test(label.between)) return [];
50
+ return [{ offset: match.index, written, characters, label: label.group }];
51
+ });
52
+ };
53
+
54
+ /** Every writing of a reference number that is another of the same label with two neighbours swapped (swappedVariants). */
55
+ export const referenceVariants = (numbers: readonly ReferenceNumber[]): ReferenceVariant[] => swappedVariants(numbers, (number) => number.characters);
package/src/run.ts CHANGED
@@ -307,6 +307,7 @@ export const runRulesWith = (doc: ProseDocument, rules: readonly RuleDefinition[
307
307
  embeddedLimits: embeddedLimitsFor(rule, level, genre, embedded),
308
308
  ...(rule.options === undefined ? {} : { settings: optionValues(settleOptions(rule.id, rule.options, optionLayers)) }),
309
309
  ...(rule.custom === undefined ? {} : { custom: rule.custom }),
310
+ genre,
310
311
  };
311
312
  const ran = runDetector(detector, doc, options);
312
313
  if ("notRun" in ran) return { findings: acc.findings, skipped: [...acc.skipped, { rule: rule.id, why: ran.notRun }] };
@@ -0,0 +1,97 @@
1
+ import type { Span } from "./plugin.ts";
2
+ import { isInPersonField as isFieldValue } from "./person-field.ts";
3
+
4
+ // 空白を挟んで書いた姓と名(高瀬 誠、佐伯 未咲)を、解析器の品詞に頼らず、前後の語で人の名前と読む。解析器は姓を地名やふつうの
5
+ // 名詞と読み、名を二語に切ることがあるので、姓と名を一つの名前にできない。後ろに敬称か肩書き(様、部長)が付くか、人を書く欄
6
+ // (氏名:、承認者:)の行の終わりにあれば、人の名前と読む。欄に書いた名と同じ名を空白の後ろに書いたもの(受託者:西村 亮 の
7
+ // 文書の 西邑 亮が)も、人の名前と読む。
8
+
9
+ /** suffixes は敬称(様、さん)、titles は名前のすぐ後ろの肩書き(部長)、labels は人を書く欄の語(氏名、承認者)。語彙表から。 */
10
+ export type SpacedNameCues = { readonly suffixes: readonly string[]; readonly titles: readonly string[]; readonly labels: readonly string[] };
11
+
12
+ export type SpacedName = { readonly surname: Span; readonly given: Span };
13
+
14
+ /** 姓と名それぞれの字数の上限。長い漢字の連なり(営業部長)は姓でない。 */
15
+ const MAX_PART = 3;
16
+ /** 姓の前を読む範囲(UTF-16 の単位)。姓より長い漢字の連なりを、長いまま見るため。 */
17
+ const LOOKBACK = 12;
18
+ const NAME_SPACE = /[\u0020\u3000]/gu;
19
+ const HAN = /^\p{Script=Han}$/u;
20
+ const LEADING_HAN = /^\p{Script=Han}+/u;
21
+ /** 文字列の頭と終わりの一字(𠮷 は UTF-16 の二つで一字)。 */
22
+ const FIRST_LETTER = /^./u;
23
+ const LAST_LETTER = /.$/u;
24
+ const ONE_SPACE = /^[\u0020\u3000]/u;
25
+ /** 欄の語と名前のあいだに置かない記号。文の中の「:」の後ろは欄ではない。 */
26
+ const NOT_IN_FIELD = /[。、,,::]/u;
27
+ const FIELD_COLON = /[::]/u;
28
+ /** 欄の行の頭の、Markdown の印(箇条書き、引用、見出し)。 */
29
+ const LINE_MARKS = /^[\s>*#+-]*/u;
30
+ /** 欄の名前の後ろ: 行の終わり。日付などの括弧一つで行が終わってもよい(髙瀬 誠(2026年4月1日))。 */
31
+ const FIELD_END = /^[\u0020\u3000]*(?:[((][^(())\n]*[))][\u0020\u3000]*)?(?:\r?\n|$)/u;
32
+
33
+ const isHan = (letter: string | undefined): boolean => letter !== undefined && HAN.test(letter);
34
+
35
+ /** 人を書く欄の行(承認者:営業部長 高瀬 誠)で、姓が欄の語の後ろにあるか。 */
36
+ const isInPersonField = (source: string, surnameStart: number, labels: readonly string[]): boolean => {
37
+ const head = source.slice(source.lastIndexOf("\n", surnameStart - 1) + 1, surnameStart);
38
+ const colon = head.search(FIELD_COLON);
39
+ if (colon < 0 || NOT_IN_FIELD.test(head.slice(colon + 1))) return false;
40
+ const label = head.slice(0, colon).replace(LINE_MARKS, "").trimEnd();
41
+ return labels.some((word) => label.endsWith(word));
42
+ };
43
+
44
+ /** 空白の後ろの漢字の連なりの頭から、敬称か肩書きの前までを名と読む(誠部長 の 誠、健太 様 の 健太)。 */
45
+ const givenBeforeSuffix = (run: string, after: string, words: readonly string[]): string | undefined => {
46
+ const letters = [...run];
47
+ return letters
48
+ .slice(0, MAX_PART)
49
+ .map((_letter, index) => letters.slice(0, index + 1).join(""))
50
+ .find((given) => {
51
+ const rest = given.length === run.length ? after.replace(ONE_SPACE, "") : run.slice(given.length) + after;
52
+ return words.some((word) => rest.startsWith(word));
53
+ });
54
+ };
55
+
56
+ /** fieldGivens は、文書が人を書く欄に書いた名(亮)。その名と同じ漢字の連なりは、敬称が無くても名と読む。 */
57
+ const givenAt = (source: string, start: number, cues: SpacedNameCues, inField: boolean, fieldGivens: ReadonlySet<string>): string | undefined => {
58
+ const run = LEADING_HAN.exec(source.slice(start, start + LOOKBACK))?.[0];
59
+ if (run === undefined) return undefined;
60
+ const after = source.slice(start + run.length, start + run.length + LOOKBACK);
61
+ const suffixed = givenBeforeSuffix(run, after, [...cues.suffixes, ...cues.titles]);
62
+ if (suffixed !== undefined) return suffixed;
63
+ if (fieldGivens.has(run)) return run;
64
+ return inField && [...run].length <= MAX_PART && FIELD_END.test(after) ? run : undefined;
65
+ };
66
+
67
+ /** 空白の前の漢字の連なり。字数が姓の形で、肩書きや敬称で終わらない(部長 高瀬様 の 部長 は姓でない)。 */
68
+ const surnameBefore = (source: string, space: number, cues: SpacedNameCues): string | undefined => {
69
+ const window = source.slice(Math.max(0, space - LOOKBACK), space);
70
+ const letters = [...window];
71
+ const run = letters.slice(letters.findLastIndex((letter) => !isHan(letter)) + 1).join("");
72
+ if (run === "" || [...run].length > MAX_PART) return undefined;
73
+ return [...cues.titles, ...cues.suffixes].some((word) => run.endsWith(word)) ? undefined : run;
74
+ };
75
+
76
+ const namesIn = (source: string, cues: SpacedNameCues, fieldGivens: ReadonlySet<string>): SpacedName[] =>
77
+ [...source.matchAll(NAME_SPACE)].flatMap((match) => {
78
+ const space = match.index;
79
+ if (!isHan(LAST_LETTER.exec(source.slice(Math.max(0, space - 2), space))?.[0]) || !isHan(FIRST_LETTER.exec(source.slice(space + 1, space + 3))?.[0]))
80
+ return [];
81
+ const surname = surnameBefore(source, space, cues);
82
+ if (surname === undefined) return [];
83
+ const surnameStart = space - surname.length;
84
+ const given = givenAt(source, space + 1, cues, isInPersonField(source, surnameStart, cues.labels), fieldGivens);
85
+ return given === undefined ? [] : [{ surname: { start: surnameStart, end: space }, given: { start: space + 1, end: space + 1 + given.length } }];
86
+ });
87
+
88
+ /**
89
+ * 空白を挟んだ姓と名で、後ろに敬称か肩書きが付くか、人を書く欄の行の終わりにあるもの。欄に書いた名と同じ名を書いたもの
90
+ * (受託者:西村 亮 と 西邑 亮が)も。
91
+ */
92
+ export const spacedPersonNamesIn = (source: string, cues: SpacedNameCues): SpacedName[] => {
93
+ const fields = namesIn(source, cues, new Set()).filter(({ surname, given }) =>
94
+ isFieldValue(source, surname.start, given.end - surname.start, cues.labels, cues.suffixes),
95
+ );
96
+ return namesIn(source, cues, new Set(fields.map(({ given }) => source.slice(given.start, given.end))));
97
+ };
@@ -1,7 +1,9 @@
1
1
  import type { Span } from "./plugin.ts";
2
+ import { HYPHEN_CHARS } from "./orthography.ts";
2
3
 
3
4
  // Text beside which a space is not a spacing choice: a clock time (13:30), which like 3時 names a time rather than a
4
- // quantity, and an e-mail address or a URL, whose end a reader and an auto-linker find by the space after it. Pure.
5
+ // quantity, an e-mail address or a URL, whose end a reader and an auto-linker find by the space after it, and an
6
+ // identifier such as a booking or model number (MN-48215, SB-210), which a space sets off from the sentence. Pure.
5
7
 
6
8
  /** A clock time: hours, a colon, minutes, and seconds optionally (9:05, 13:30, 08:00:15). */
7
9
  const CLOCK_TIME = /(?<![\d::.])\d{1,2}[::][0-5]\d(?:[::][0-5]\d)?(?![\d::])/gu;
@@ -15,6 +17,20 @@ const URL_START = /^(?:https?:\/\/|www\.)/u;
15
17
 
16
18
  const isAddress = (word: string): boolean => EMAIL.test(word) || URL_START.test(word);
17
19
 
20
+ /**
21
+ * An identifier: letters and digits joined by hyphens with three digits or more in a row (MN-48215, SB-210, KM-SP300), or
22
+ * capitals followed by four digits or more (A1234567). A shorter name with a digit (EC2, H30, UTF-8, COVID-19) is a word
23
+ * the writer spaces like any other.
24
+ */
25
+ // The hyphen may be full-width or Japanese (KM-SP300), as in the hyphenated numbers orthography.ts reads.
26
+ const HYPHENATED = new RegExp(
27
+ `(?<![A-Za-z0-9.${HYPHEN_CHARS}])[A-Za-z0-9]+(?:[${HYPHEN_CHARS}][A-Za-z0-9]+)+(?![A-Za-z0-9${HYPHEN_CHARS}]|\\.[A-Za-z0-9])`,
28
+ "gu",
29
+ );
30
+ const CAPITALS_SERIAL = new RegExp(`(?<![A-Za-z0-9.${HYPHEN_CHARS}])[A-Z]+\\d{4,}(?![A-Za-z0-9${HYPHEN_CHARS}]|\\.[A-Za-z0-9])`, "gu");
31
+ const HAS_LETTER = /[A-Za-z]/u;
32
+ const SERIAL_DIGITS = /\d{3}/u;
33
+
18
34
  const spansOf = (text: string, pattern: RegExp): Span[] =>
19
35
  [...text.matchAll(pattern)].map((match) => ({ start: match.index, end: match.index + match[0].length }));
20
36
 
@@ -22,5 +38,10 @@ export const clockTimeSpans = (text: string): Span[] => spansOf(text, CLOCK_TIME
22
38
 
23
39
  export const addressSpans = (text: string): Span[] => spansOf(text, ASCII_RUN).filter((span) => isAddress(text.slice(span.start, span.end)));
24
40
 
41
+ const isIdentifier = (word: string): boolean => HAS_LETTER.test(word) && SERIAL_DIGITS.test(word);
42
+
43
+ export const identifierSpans = (text: string): Span[] =>
44
+ [...spansOf(text, HYPHENATED), ...spansOf(text, CAPITALS_SERIAL)].filter((span) => isIdentifier(text.slice(span.start, span.end)));
45
+
25
46
  /** Whether the character at `at` is inside one of the spans. */
26
47
  export const isInsideSpan = (spans: readonly Span[], at: number): boolean => spans.some((span) => span.start <= at && at < span.end);
@@ -0,0 +1,222 @@
1
+ import { escapeRegExp } from "../orthography.ts";
2
+ import type { StructureIssue } from "./issues.ts";
3
+
4
+ /**
5
+ * annual-holidays-mismatch: a job posting's annual days off (年間休日 90日) fewer than its weekly days off give over a year
6
+ * (完全週休2日制 is two days off every week, at least 104 a year). Only a lower bound: public holidays, summer and the
7
+ * new year add to it. A weekly phrase that is not every week (週休2日制 is two days off in at least one week a month), a
8
+ * negated one, one with an exception beside it, an approximate or open count, two different counts and two weekly phrases
9
+ * with different minimums leave the posting unchecked. The words come from the lexicons. Pure.
10
+ */
11
+
12
+ export type PositionedWord = { readonly word: string; readonly position: "before" | "after" };
13
+
14
+ /** A weekly phrase and the fewest days off a year it gives; undefined for a phrase that is not every week (週休2日制). */
15
+ export type WeeklyWord = { readonly word: string; readonly minimum: number | undefined };
16
+
17
+ export type AnnualHolidaysWords = {
18
+ /** Labels of the annual days off: before the count (年間休日 125日) or after it, with the word of a day in it (125 days off a year). */
19
+ readonly labels: readonly PositionedWord[];
20
+ /** The word of a day after a count (日, days). */
21
+ readonly days: readonly string[];
22
+ /** Words that may stand between a label and its count (は, is). */
23
+ readonly links: readonly string[];
24
+ readonly weekly: readonly WeeklyWord[];
25
+ /** Words that negate a weekly phrase: right after it (ではない) or earlier in its sentence (not). */
26
+ readonly negations: readonly PositionedWord[];
27
+ /** Words after a weekly phrase on its line that make an exception to it (除く, 出勤, except). */
28
+ readonly exceptions: readonly string[];
29
+ /** Words that make a count approximate or open (約, 以上, about, at least). */
30
+ readonly markers: readonly PositionedWord[];
31
+ /** Marks and words that join the two ends of a range (〜, to). */
32
+ readonly connectors: readonly string[];
33
+ };
34
+
35
+ type Span = { readonly start: number; readonly end: number };
36
+ type DayCount = Span & { readonly days: number; readonly clear: boolean };
37
+ type Weekly = Span & { readonly minimum: number | undefined; readonly clear: boolean };
38
+
39
+ /** How far from a count a marker (約, 以上) or the start of a range is looked for. */
40
+ const MARKER_REACH = 12;
41
+ const LATIN = /[A-Za-z]/u;
42
+ const SEPARATORS = /[\s||::==、,,・//()()[\][]-]/gu;
43
+ const PARENTHETICAL_WITHOUT_DIGITS = /[((][^()()0-90-9]*[))]/gu;
44
+ const SENTENCE_END = /[。!?;;]|[.!?](?=\s|$)/u;
45
+ const SENTENCE_SPLIT = /[。!?;;]|[.!?](?=\s)/u;
46
+ const RANGE_START = /[0-90-9]\s*$/u;
47
+ const COUNT = "(?<![0-90-9.,,.])([0-90-9]+)";
48
+
49
+ const DIGIT = /[0-90-9]/u;
50
+
51
+ /** The edge a word needs on one side: a Latin word stands apart from letters, a number from digits (4-day is not in 14-day). */
52
+ const edgeOf = (char: string): string => {
53
+ if (LATIN.test(char)) return "[A-Za-z]";
54
+ return DIGIT.test(char) ? "[0-90-9]" : "";
55
+ };
56
+
57
+ const wordPattern = (word: string): string => {
58
+ const start = edgeOf(word.charAt(0));
59
+ const end = edgeOf(word.charAt(word.length - 1));
60
+ return [start === "" ? "" : `(?<!${start})`, escapeRegExp(word), end === "" ? "" : `(?!${end})`].join("");
61
+ };
62
+
63
+ /** One alternation of the words, longest first so 完全週休2日制 wins over 週休2日制. Undefined when there are none. */
64
+ const alternation = (words: readonly string[]): string | undefined =>
65
+ words.length === 0
66
+ ? undefined
67
+ : words
68
+ .toSorted((left, right) => right.length - left.length)
69
+ .map(wordPattern)
70
+ .join("|");
71
+
72
+ const occurrences = (text: string, words: readonly string[]): Span[] => {
73
+ const pattern = alternation(words);
74
+ if (pattern === undefined) return [];
75
+ return [...text.matchAll(new RegExp(pattern, "giu"))].map((match) => ({ start: match.index, end: match.index + match[0].length }));
76
+ };
77
+
78
+ const contains = (text: string, words: readonly string[]): boolean => occurrences(text, words).length > 0;
79
+
80
+ const wordsAt = (words: readonly PositionedWord[], position: "before" | "after"): string[] =>
81
+ words.filter((word) => word.position === position).map((word) => word.word.toLowerCase());
82
+
83
+ const lineEnd = (text: string, offset: number): number => {
84
+ const end = text.indexOf("\n", offset);
85
+ return end === -1 ? text.length : end;
86
+ };
87
+
88
+ const lineStart = (text: string, offset: number): number => text.lastIndexOf("\n", offset - 1) + 1;
89
+
90
+ /** Where a statement that starts at offset ends: at the end of its sentence or line. */
91
+ const statementEnd = (text: string, offset: number): number => {
92
+ const end = lineEnd(text, offset);
93
+ const sentence = SENTENCE_END.exec(text.slice(offset, end));
94
+ return sentence === null ? end : offset + sentence.index;
95
+ };
96
+
97
+ /** The sentence before offset, from its start: where a negation of a phrase is looked for (does not have …). */
98
+ const sentenceBefore = (text: string, offset: number): string => text.slice(lineStart(text, offset), offset).split(SENTENCE_SPLIT).at(-1) ?? "";
99
+
100
+ /** Whether only separators, bracketed words without digits and the given words stand in the gap (「:」, " is "). */
101
+ export const isPlainGap = (gap: string, words: readonly string[]): boolean => {
102
+ const pattern = alternation(words);
103
+ const bare = gap.replace(PARENTHETICAL_WITHOUT_DIGITS, "");
104
+ return (pattern === undefined ? bare : bare.replace(new RegExp(pattern, "giu"), "")).replace(SEPARATORS, "") === "";
105
+ };
106
+
107
+ /** Whether text starts with the word, a Latin word ending there ("to" is not the start of "total"). */
108
+ const startsWithWord = (text: string, word: string): boolean =>
109
+ text.startsWith(word) && !(LATIN.test(word.charAt(word.length - 1)) && LATIN.test(text.charAt(word.length)));
110
+
111
+ /** Whether text ends with the word, a Latin word starting there ("over" is not the end of "moreover"). */
112
+ const endsWithWord = (text: string, word: string): boolean =>
113
+ text.endsWith(word) && !(LATIN.test(word.charAt(0)) && LATIN.test(text.charAt(text.length - word.length - 1)));
114
+
115
+ /** Whether a count is approximate (約90日, 90日以上), open (90日〜) or the end of a range (80〜90日). */
116
+ const isMarked = (text: string, span: Span, words: AnnualHolidaysWords): boolean => {
117
+ const before = text
118
+ .slice(Math.max(0, span.start - MARKER_REACH), span.start)
119
+ .trimEnd()
120
+ .toLowerCase();
121
+ const after = text
122
+ .slice(span.end, span.end + MARKER_REACH)
123
+ .trimStart()
124
+ .toLowerCase();
125
+ const connectors = words.connectors.map((connector) => connector.toLowerCase());
126
+ const ranged = connectors.some((connector) => endsWithWord(before, connector) && RANGE_START.test(before.slice(0, -connector.length)));
127
+ const markedBefore = wordsAt(words.markers, "before").some((marker) => endsWithWord(before, marker));
128
+ const markedAfter = [...wordsAt(words.markers, "after"), ...connectors].some((marker) => startsWithWord(after, marker));
129
+ return ranged || markedBefore || markedAfter;
130
+ };
131
+
132
+ const countOf = (written: string): number => Number(written.normalize("NFKC"));
133
+
134
+ const gapWords = (words: AnnualHolidaysWords): string[] => [...words.links, ...wordsAt(words.markers, "before")];
135
+
136
+ /** The gap without the start of a range at its end (年間休日 100〜|120日), so the range is read and found not plain. */
137
+ const withoutRangeStart = (gap: string, days: string, words: AnnualHolidaysWords): string => {
138
+ const connectors = alternation(words.connectors);
139
+ return connectors === undefined ? gap : gap.replace(new RegExp(`[0-90-9]+\\s*(?:${days})?\\s*(?:${connectors})\\s*$`, "iu"), "");
140
+ };
141
+
142
+ /**
143
+ * The count a label before it states (年間休日:125日): the first count of days in its statement, joined to it by a plain
144
+ * gap. A marker (年間休日は約120日) or a range's start in the gap is read, so the count is found not plain rather than missed.
145
+ */
146
+ const countAfterLabel = (text: string, label: Span, words: AnnualHolidaysWords): DayCount | undefined => {
147
+ const days = alternation(words.days);
148
+ if (days === undefined) return undefined;
149
+ const end = statementEnd(text, label.end);
150
+ const match = new RegExp(`${COUNT}\\s*(?:${days})`, "iu").exec(text.slice(label.end, end));
151
+ if (match === null || !isPlainGap(withoutRangeStart(text.slice(label.end, label.end + match.index), days, words), gapWords(words))) return undefined;
152
+ const span = { start: label.end + match.index, end: label.end + match.index + match[0].length };
153
+ return { ...span, days: countOf(match[1] ?? ""), clear: !isMarked(text, span, words) };
154
+ };
155
+
156
+ /** The counts a label after them states (125 days off a year). */
157
+ const countsBeforeLabels = (text: string, words: AnnualHolidaysWords): DayCount[] => {
158
+ const labels = alternation(wordsAt(words.labels, "after"));
159
+ if (labels === undefined) return [];
160
+ return [...text.matchAll(new RegExp(`${COUNT}\\s*(?:${labels})`, "giu"))].map((match) => {
161
+ const span = { start: match.index, end: match.index + match[0].length };
162
+ return { ...span, days: countOf(match[1] ?? ""), clear: !isMarked(text, span, words) };
163
+ });
164
+ };
165
+
166
+ /** Every annual count of days off the document states, in document order. */
167
+ export const annualCountsIn = (text: string, words: AnnualHolidaysWords): DayCount[] => {
168
+ const after = occurrences(text, wordsAt(words.labels, "before")).flatMap((label) => countAfterLabel(text, label, words) ?? []);
169
+ return [...after, ...countsBeforeLabels(text, words)].toSorted((left, right) => left.start - right.start);
170
+ };
171
+
172
+ /** Whether a weekly phrase is negated (完全週休2日制ではない, does not offer two days off every week). */
173
+ const isNegated = (text: string, span: Span, words: AnnualHolidaysWords): boolean => {
174
+ const after = text
175
+ .slice(span.end, span.end + MARKER_REACH)
176
+ .trimStart()
177
+ .toLowerCase();
178
+ return (
179
+ wordsAt(words.negations, "after").some((word) => startsWithWord(after, word)) ||
180
+ contains(sentenceBefore(text, span.start), wordsAt(words.negations, "before"))
181
+ );
182
+ };
183
+
184
+ /** Every weekly phrase in the document, each with the fewest days off a year it gives and whether it can be read plainly. */
185
+ export const weeklyIn = (text: string, words: AnnualHolidaysWords): Weekly[] => {
186
+ const minimums = new Map(words.weekly.map((entry): [string, number | undefined] => [entry.word.toLowerCase(), entry.minimum]));
187
+ return occurrences(
188
+ text,
189
+ words.weekly.map((entry) => entry.word),
190
+ ).map((span) => {
191
+ const minimum = minimums.get(text.slice(span.start, span.end).toLowerCase());
192
+ const excepted = contains(text.slice(span.end, lineEnd(text, span.end)), words.exceptions);
193
+ return { ...span, minimum, clear: minimum !== undefined && !excepted && !isNegated(text, span, words) };
194
+ });
195
+ };
196
+
197
+ /**
198
+ * The weekly phrase whose minimum all the document's weekly phrases agree on; undefined when there is none, one is not
199
+ * plain, or two give different minimums (完全週休2日制 for one role and 完全週休3日制 for another).
200
+ */
201
+ const agreedWeekly = (weekly: readonly Weekly[]): Weekly | undefined => {
202
+ const [first] = weekly;
203
+ if (first === undefined) return undefined;
204
+ return weekly.every((entry) => entry.clear && entry.minimum === first.minimum) ? first : undefined;
205
+ };
206
+
207
+ /** The one count all the document's counts agree on; undefined when there is none, one is not plain, or two differ. */
208
+ const agreedCount = (counts: readonly DayCount[]): DayCount | undefined => {
209
+ const [first] = counts;
210
+ if (first === undefined) return undefined;
211
+ return counts.every((count) => count.clear && count.days === first.days) ? first : undefined;
212
+ };
213
+
214
+ /** Every annual count of days off below the fewest the posting's weekly days off give. */
215
+ export const annualHolidaysMismatches = (text: string, words: AnnualHolidaysWords): StructureIssue[] => {
216
+ const counts = annualCountsIn(text, words);
217
+ const count = agreedCount(counts);
218
+ const weekly = agreedWeekly(weeklyIn(text, words));
219
+ if (count === undefined || weekly?.minimum === undefined || count.days >= weekly.minimum) return [];
220
+ const values = { days: count.days, weekly: text.slice(weekly.start, weekly.end), minimum: weekly.minimum };
221
+ return counts.map((each) => ({ offset: each.start, values: { ...values, written: text.slice(each.start, each.end) } }));
222
+ };