chaffjs 0.31.0 → 0.32.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.
- package/README.ja.md +330 -0
- package/README.md +119 -257
- package/dist/company-kana-spelling.d.ts +31 -0
- package/dist/company-kana-spelling.d.ts.map +1 -0
- package/dist/company-kana-spelling.js +79 -0
- package/dist/company-kana-spelling.js.map +1 -0
- package/dist/company-names.d.ts +32 -1
- package/dist/company-names.d.ts.map +1 -1
- package/dist/company-names.js +129 -22
- package/dist/company-names.js.map +1 -1
- package/dist/contacts/table-rows.d.ts +7 -0
- package/dist/contacts/table-rows.d.ts.map +1 -0
- package/dist/contacts/table-rows.js +42 -0
- package/dist/contacts/table-rows.js.map +1 -0
- package/dist/derived/age-on-date.d.ts +53 -0
- package/dist/derived/age-on-date.d.ts.map +1 -0
- package/dist/derived/age-on-date.js +114 -0
- package/dist/derived/age-on-date.js.map +1 -0
- package/dist/derived/durations.d.ts +17 -2
- package/dist/derived/durations.d.ts.map +1 -1
- package/dist/derived/durations.js +61 -10
- package/dist/derived/durations.js.map +1 -1
- package/dist/derived/hours-and-minutes.d.ts +26 -0
- package/dist/derived/hours-and-minutes.d.ts.map +1 -0
- package/dist/derived/hours-and-minutes.js +24 -0
- package/dist/derived/hours-and-minutes.js.map +1 -0
- package/dist/derived/hyphenated-counts.d.ts +15 -0
- package/dist/derived/hyphenated-counts.d.ts.map +1 -0
- package/dist/derived/hyphenated-counts.js +31 -0
- package/dist/derived/hyphenated-counts.js.map +1 -0
- package/dist/derived/marked-dates.d.ts +15 -0
- package/dist/derived/marked-dates.d.ts.map +1 -0
- package/dist/derived/marked-dates.js +41 -0
- package/dist/derived/marked-dates.js.map +1 -0
- package/dist/derived/money-span.d.ts +9 -0
- package/dist/derived/money-span.d.ts.map +1 -0
- package/dist/derived/money-span.js +6 -0
- package/dist/derived/money-span.js.map +1 -0
- package/dist/derived/period-parts.d.ts +55 -0
- package/dist/derived/period-parts.d.ts.map +1 -0
- package/dist/derived/period-parts.js +283 -0
- package/dist/derived/period-parts.js.map +1 -0
- package/dist/derived/readable-date.d.ts +20 -0
- package/dist/derived/readable-date.d.ts.map +1 -0
- package/dist/derived/readable-date.js +50 -0
- package/dist/derived/readable-date.js.map +1 -0
- package/dist/derived/stays.d.ts +3 -1
- package/dist/derived/stays.d.ts.map +1 -1
- package/dist/derived/stays.js +3 -0
- package/dist/derived/stays.js.map +1 -1
- package/dist/derived/timesheet-hours.d.ts +27 -0
- package/dist/derived/timesheet-hours.d.ts.map +1 -0
- package/dist/derived/timesheet-hours.js +86 -0
- package/dist/derived/timesheet-hours.js.map +1 -0
- package/dist/derived/use-maximum.d.ts +27 -0
- package/dist/derived/use-maximum.d.ts.map +1 -0
- package/dist/derived/use-maximum.js +104 -0
- package/dist/derived/use-maximum.js.map +1 -0
- package/dist/derived/working-hours.d.ts +4 -5
- package/dist/derived/working-hours.d.ts.map +1 -1
- package/dist/detectors/annual-holidays-mismatch.d.ts +3 -0
- package/dist/detectors/annual-holidays-mismatch.d.ts.map +1 -0
- package/dist/detectors/annual-holidays-mismatch.js +29 -0
- package/dist/detectors/annual-holidays-mismatch.js.map +1 -0
- package/dist/detectors/annual-pay-mismatch.d.ts +3 -0
- package/dist/detectors/annual-pay-mismatch.d.ts.map +1 -0
- package/dist/detectors/annual-pay-mismatch.js +52 -0
- package/dist/detectors/annual-pay-mismatch.js.map +1 -0
- package/dist/detectors/blank-structure.d.ts +3 -1
- package/dist/detectors/blank-structure.d.ts.map +1 -1
- package/dist/detectors/blank-structure.js +45 -12
- package/dist/detectors/blank-structure.js.map +1 -1
- package/dist/detectors/bmi-mismatch.d.ts +3 -0
- package/dist/detectors/bmi-mismatch.d.ts.map +1 -0
- package/dist/detectors/bmi-mismatch.js +70 -0
- package/dist/detectors/bmi-mismatch.js.map +1 -0
- package/dist/detectors/change-rate.d.ts.map +1 -1
- package/dist/detectors/change-rate.js +24 -9
- package/dist/detectors/change-rate.js.map +1 -1
- package/dist/detectors/closing-balance-mismatch.d.ts +3 -0
- package/dist/detectors/closing-balance-mismatch.d.ts.map +1 -0
- package/dist/detectors/closing-balance-mismatch.js +42 -0
- package/dist/detectors/closing-balance-mismatch.js.map +1 -0
- package/dist/detectors/contact-variant.d.ts.map +1 -1
- package/dist/detectors/contact-variant.js +6 -2
- package/dist/detectors/contact-variant.js.map +1 -1
- package/dist/detectors/cumulative-below-current.d.ts +3 -0
- package/dist/detectors/cumulative-below-current.d.ts.map +1 -0
- package/dist/detectors/cumulative-below-current.js +25 -0
- package/dist/detectors/cumulative-below-current.js.map +1 -0
- package/dist/detectors/currency-column.d.ts +3 -0
- package/dist/detectors/currency-column.d.ts.map +1 -0
- package/dist/detectors/currency-column.js +32 -0
- package/dist/detectors/currency-column.js.map +1 -0
- package/dist/detectors/date-any-year.d.ts +24 -0
- package/dist/detectors/date-any-year.d.ts.map +1 -0
- package/dist/detectors/date-any-year.js +103 -0
- package/dist/detectors/date-any-year.js.map +1 -0
- package/dist/detectors/date-outside-period.d.ts.map +1 -1
- package/dist/detectors/date-outside-period.js +4 -10
- package/dist/detectors/date-outside-period.js.map +1 -1
- package/dist/detectors/date-stamp-order.d.ts.map +1 -1
- package/dist/detectors/date-stamp-order.js +2 -1
- package/dist/detectors/date-stamp-order.js.map +1 -1
- package/dist/detectors/date-year.d.ts +18 -6
- package/dist/detectors/date-year.d.ts.map +1 -1
- package/dist/detectors/date-year.js +39 -11
- package/dist/detectors/date-year.js.map +1 -1
- package/dist/detectors/deductible-exceeds-limit.d.ts +4 -0
- package/dist/detectors/deductible-exceeds-limit.d.ts.map +1 -0
- package/dist/detectors/deductible-exceeds-limit.js +46 -0
- package/dist/detectors/deductible-exceeds-limit.js.map +1 -0
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +6 -20
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/derived-numbers.d.ts +4 -3
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +43 -70
- package/dist/detectors/derived-numbers.js.map +1 -1
- package/dist/detectors/discount-rate.d.ts +3 -0
- package/dist/detectors/discount-rate.d.ts.map +1 -0
- package/dist/detectors/discount-rate.js +35 -0
- package/dist/detectors/discount-rate.js.map +1 -0
- package/dist/detectors/due-date.d.ts.map +1 -1
- package/dist/detectors/due-date.js +11 -4
- package/dist/detectors/due-date.js.map +1 -1
- package/dist/detectors/email-letter.d.ts +10 -2
- package/dist/detectors/email-letter.d.ts.map +1 -1
- package/dist/detectors/email-letter.js +24 -5
- package/dist/detectors/email-letter.js.map +1 -1
- package/dist/detectors/event-deadline.d.ts.map +1 -1
- package/dist/detectors/event-deadline.js +11 -2
- package/dist/detectors/event-deadline.js.map +1 -1
- package/dist/detectors/fact-consistency.d.ts.map +1 -1
- package/dist/detectors/fact-consistency.js +112 -5
- package/dist/detectors/fact-consistency.js.map +1 -1
- package/dist/detectors/gloss-year.d.ts +11 -0
- package/dist/detectors/gloss-year.d.ts.map +1 -0
- package/dist/detectors/gloss-year.js +14 -0
- package/dist/detectors/gloss-year.js.map +1 -0
- package/dist/detectors/gpa-mismatch.d.ts +3 -0
- package/dist/detectors/gpa-mismatch.d.ts.map +1 -0
- package/dist/detectors/gpa-mismatch.js +39 -0
- package/dist/detectors/gpa-mismatch.js.map +1 -0
- package/dist/detectors/impossible-date.d.ts.map +1 -1
- package/dist/detectors/impossible-date.js +22 -6
- package/dist/detectors/impossible-date.js.map +1 -1
- package/dist/detectors/installment-total-mismatch.d.ts +3 -0
- package/dist/detectors/installment-total-mismatch.d.ts.map +1 -0
- package/dist/detectors/installment-total-mismatch.js +49 -0
- package/dist/detectors/installment-total-mismatch.js.map +1 -0
- package/dist/detectors/interest.d.ts +3 -0
- package/dist/detectors/interest.d.ts.map +1 -0
- package/dist/detectors/interest.js +38 -0
- package/dist/detectors/interest.js.map +1 -0
- package/dist/detectors/lab-columns.d.ts +4 -0
- package/dist/detectors/lab-columns.d.ts.map +1 -0
- package/dist/detectors/lab-columns.js +3 -0
- package/dist/detectors/lab-columns.js.map +1 -0
- package/dist/detectors/labelled-age.d.ts +4 -0
- package/dist/detectors/labelled-age.d.ts.map +1 -0
- package/dist/detectors/labelled-age.js +110 -0
- package/dist/detectors/labelled-age.js.map +1 -0
- package/dist/detectors/line-amount.d.ts.map +1 -1
- package/dist/detectors/line-amount.js +45 -2
- package/dist/detectors/line-amount.js.map +1 -1
- package/dist/detectors/measured-facts.d.ts +1 -1
- package/dist/detectors/measured-facts.d.ts.map +1 -1
- package/dist/detectors/measured-facts.js.map +1 -1
- package/dist/detectors/meter-usage.d.ts +3 -0
- package/dist/detectors/meter-usage.d.ts.map +1 -0
- package/dist/detectors/meter-usage.js +37 -0
- package/dist/detectors/meter-usage.js.map +1 -0
- package/dist/detectors/name-field.d.ts +13 -0
- package/dist/detectors/name-field.d.ts.map +1 -0
- package/dist/detectors/name-field.js +38 -0
- package/dist/detectors/name-field.js.map +1 -0
- package/dist/detectors/name-variant.d.ts.map +1 -1
- package/dist/detectors/name-variant.js +128 -14
- package/dist/detectors/name-variant.js.map +1 -1
- package/dist/detectors/net-amount-mismatch.d.ts +10 -0
- package/dist/detectors/net-amount-mismatch.d.ts.map +1 -0
- package/dist/detectors/net-amount-mismatch.js +70 -0
- package/dist/detectors/net-amount-mismatch.js.map +1 -0
- package/dist/detectors/net-gross-weight.d.ts +3 -0
- package/dist/detectors/net-gross-weight.d.ts.map +1 -0
- package/dist/detectors/net-gross-weight.js +35 -0
- package/dist/detectors/net-gross-weight.js.map +1 -0
- package/dist/detectors/nominal-step.d.ts +3 -0
- package/dist/detectors/nominal-step.d.ts.map +1 -0
- package/dist/detectors/nominal-step.js +28 -0
- package/dist/detectors/nominal-step.js.map +1 -0
- package/dist/detectors/number-style.d.ts +2 -0
- package/dist/detectors/number-style.d.ts.map +1 -1
- package/dist/detectors/number-style.js +8 -2
- package/dist/detectors/number-style.js.map +1 -1
- package/dist/detectors/order-quantity.d.ts +10 -0
- package/dist/detectors/order-quantity.d.ts.map +1 -0
- package/dist/detectors/order-quantity.js +35 -0
- package/dist/detectors/order-quantity.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +35 -10
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +15 -7
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/period-label-conflict.d.ts +4 -0
- package/dist/detectors/period-label-conflict.d.ts.map +1 -0
- package/dist/detectors/period-label-conflict.js +34 -0
- package/dist/detectors/period-label-conflict.js.map +1 -0
- package/dist/detectors/period-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/period-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/period-multiple-mismatch.js +36 -0
- package/dist/detectors/period-multiple-mismatch.js.map +1 -0
- package/dist/detectors/period-part.d.ts +4 -0
- package/dist/detectors/period-part.d.ts.map +1 -0
- package/dist/detectors/period-part.js +58 -0
- package/dist/detectors/period-part.js.map +1 -0
- package/dist/detectors/range-words.d.ts +5 -0
- package/dist/detectors/range-words.d.ts.map +1 -0
- package/dist/detectors/range-words.js +14 -0
- package/dist/detectors/range-words.js.map +1 -0
- package/dist/detectors/ratio-mismatch.d.ts +7 -0
- package/dist/detectors/ratio-mismatch.d.ts.map +1 -0
- package/dist/detectors/ratio-mismatch.js +89 -0
- package/dist/detectors/ratio-mismatch.js.map +1 -0
- package/dist/detectors/readable-dates.d.ts +9 -0
- package/dist/detectors/readable-dates.d.ts.map +1 -0
- package/dist/detectors/readable-dates.js +23 -0
- package/dist/detectors/readable-dates.js.map +1 -0
- package/dist/detectors/reference-flag.d.ts +3 -0
- package/dist/detectors/reference-flag.d.ts.map +1 -0
- package/dist/detectors/reference-flag.js +31 -0
- package/dist/detectors/reference-flag.js.map +1 -0
- package/dist/detectors/reference-number-repeated.d.ts +3 -0
- package/dist/detectors/reference-number-repeated.d.ts.map +1 -0
- package/dist/detectors/reference-number-repeated.js +22 -0
- package/dist/detectors/reference-number-repeated.js.map +1 -0
- package/dist/detectors/reference-number-variant.d.ts +3 -0
- package/dist/detectors/reference-number-variant.d.ts.map +1 -0
- package/dist/detectors/reference-number-variant.js +40 -0
- package/dist/detectors/reference-number-variant.js.map +1 -0
- package/dist/detectors/reference-unit.d.ts +3 -0
- package/dist/detectors/reference-unit.d.ts.map +1 -0
- package/dist/detectors/reference-unit.js +19 -0
- package/dist/detectors/reference-unit.js.map +1 -0
- package/dist/detectors/registry/annual-holidays-mismatch.d.ts +3 -0
- package/dist/detectors/registry/annual-holidays-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/annual-holidays-mismatch.js +3 -0
- package/dist/detectors/registry/annual-holidays-mismatch.js.map +1 -0
- package/dist/detectors/registry/annual-pay-mismatch.d.ts +3 -0
- package/dist/detectors/registry/annual-pay-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/annual-pay-mismatch.js +3 -0
- package/dist/detectors/registry/annual-pay-mismatch.js.map +1 -0
- package/dist/detectors/registry/backorder-mismatch.d.ts +3 -0
- package/dist/detectors/registry/backorder-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/backorder-mismatch.js +3 -0
- package/dist/detectors/registry/backorder-mismatch.js.map +1 -0
- package/dist/detectors/registry/bmi-mismatch.d.ts +3 -0
- package/dist/detectors/registry/bmi-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/bmi-mismatch.js +3 -0
- package/dist/detectors/registry/bmi-mismatch.js.map +1 -0
- package/dist/detectors/registry/closing-balance-mismatch.d.ts +3 -0
- package/dist/detectors/registry/closing-balance-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/closing-balance-mismatch.js +3 -0
- package/dist/detectors/registry/closing-balance-mismatch.js.map +1 -0
- package/dist/detectors/registry/cumulative-below-current.d.ts +3 -0
- package/dist/detectors/registry/cumulative-below-current.d.ts.map +1 -0
- package/dist/detectors/registry/cumulative-below-current.js +3 -0
- package/dist/detectors/registry/cumulative-below-current.js.map +1 -0
- package/dist/detectors/registry/currency-column-mix.d.ts +3 -0
- package/dist/detectors/registry/currency-column-mix.d.ts.map +1 -0
- package/dist/detectors/registry/currency-column-mix.js +3 -0
- package/dist/detectors/registry/currency-column-mix.js.map +1 -0
- package/dist/detectors/registry/deductible-exceeds-limit.d.ts +3 -0
- package/dist/detectors/registry/deductible-exceeds-limit.d.ts.map +1 -0
- package/dist/detectors/registry/deductible-exceeds-limit.js +3 -0
- package/dist/detectors/registry/deductible-exceeds-limit.js.map +1 -0
- package/dist/detectors/registry/delivered-over-ordered.d.ts +3 -0
- package/dist/detectors/registry/delivered-over-ordered.d.ts.map +1 -0
- package/dist/detectors/registry/delivered-over-ordered.js +3 -0
- package/dist/detectors/registry/delivered-over-ordered.js.map +1 -0
- package/dist/detectors/registry/discount-rate.d.ts +3 -0
- package/dist/detectors/registry/discount-rate.d.ts.map +1 -0
- package/dist/detectors/registry/discount-rate.js +3 -0
- package/dist/detectors/registry/discount-rate.js.map +1 -0
- package/dist/detectors/registry/elapsed-years-mismatch.js +1 -1
- package/dist/detectors/registry/elapsed-years-mismatch.js.map +1 -1
- package/dist/detectors/registry/gpa-mismatch.d.ts +3 -0
- package/dist/detectors/registry/gpa-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/gpa-mismatch.js +3 -0
- package/dist/detectors/registry/gpa-mismatch.js.map +1 -0
- package/dist/detectors/registry/installment-total-mismatch.d.ts +3 -0
- package/dist/detectors/registry/installment-total-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/installment-total-mismatch.js +3 -0
- package/dist/detectors/registry/installment-total-mismatch.js.map +1 -0
- package/dist/detectors/registry/interest.d.ts +3 -0
- package/dist/detectors/registry/interest.d.ts.map +1 -0
- package/dist/detectors/registry/interest.js +3 -0
- package/dist/detectors/registry/interest.js.map +1 -0
- package/dist/detectors/registry/meter-usage.d.ts +3 -0
- package/dist/detectors/registry/meter-usage.d.ts.map +1 -0
- package/dist/detectors/registry/meter-usage.js +3 -0
- package/dist/detectors/registry/meter-usage.js.map +1 -0
- package/dist/detectors/registry/net-amount-mismatch.d.ts +3 -0
- package/dist/detectors/registry/net-amount-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/net-amount-mismatch.js +3 -0
- package/dist/detectors/registry/net-amount-mismatch.js.map +1 -0
- package/dist/detectors/registry/net-over-gross.d.ts +3 -0
- package/dist/detectors/registry/net-over-gross.d.ts.map +1 -0
- package/dist/detectors/registry/net-over-gross.js +3 -0
- package/dist/detectors/registry/net-over-gross.js.map +1 -0
- package/dist/detectors/registry/period-label-conflict.d.ts +3 -0
- package/dist/detectors/registry/period-label-conflict.d.ts.map +1 -0
- package/dist/detectors/registry/period-label-conflict.js +3 -0
- package/dist/detectors/registry/period-label-conflict.js.map +1 -0
- package/dist/detectors/registry/period-multiple-mismatch.d.ts +3 -0
- package/dist/detectors/registry/period-multiple-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/period-multiple-mismatch.js +3 -0
- package/dist/detectors/registry/period-multiple-mismatch.js.map +1 -0
- package/dist/detectors/registry/period-part-exceeds-whole.d.ts +3 -0
- package/dist/detectors/registry/period-part-exceeds-whole.d.ts.map +1 -0
- package/dist/detectors/registry/period-part-exceeds-whole.js +3 -0
- package/dist/detectors/registry/period-part-exceeds-whole.js.map +1 -0
- package/dist/detectors/registry/product-exceeds-maximum.d.ts +3 -0
- package/dist/detectors/registry/product-exceeds-maximum.d.ts.map +1 -0
- package/dist/detectors/registry/product-exceeds-maximum.js +3 -0
- package/dist/detectors/registry/product-exceeds-maximum.js.map +1 -0
- package/dist/detectors/registry/ratio-mismatch.d.ts +3 -0
- package/dist/detectors/registry/ratio-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/ratio-mismatch.js +3 -0
- package/dist/detectors/registry/ratio-mismatch.js.map +1 -0
- package/dist/detectors/registry/reference-flag-mismatch.d.ts +3 -0
- package/dist/detectors/registry/reference-flag-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/reference-flag-mismatch.js +3 -0
- package/dist/detectors/registry/reference-flag-mismatch.js.map +1 -0
- package/dist/detectors/registry/reference-number-repeated.d.ts +3 -0
- package/dist/detectors/registry/reference-number-repeated.d.ts.map +1 -0
- package/dist/detectors/registry/reference-number-repeated.js +3 -0
- package/dist/detectors/registry/reference-number-repeated.js.map +1 -0
- package/dist/detectors/registry/reference-number-variant.d.ts +3 -0
- package/dist/detectors/registry/reference-number-variant.d.ts.map +1 -0
- package/dist/detectors/registry/reference-number-variant.js +3 -0
- package/dist/detectors/registry/reference-number-variant.js.map +1 -0
- package/dist/detectors/registry/reference-unit.d.ts +3 -0
- package/dist/detectors/registry/reference-unit.d.ts.map +1 -0
- package/dist/detectors/registry/reference-unit.js +3 -0
- package/dist/detectors/registry/reference-unit.js.map +1 -0
- package/dist/detectors/registry/revision-direction.d.ts +3 -0
- package/dist/detectors/registry/revision-direction.d.ts.map +1 -0
- package/dist/detectors/registry/revision-direction.js +3 -0
- package/dist/detectors/registry/revision-direction.js.map +1 -0
- package/dist/detectors/registry/running-balance.d.ts +3 -0
- package/dist/detectors/registry/running-balance.d.ts.map +1 -0
- package/dist/detectors/registry/running-balance.js +3 -0
- package/dist/detectors/registry/running-balance.js.map +1 -0
- package/dist/detectors/registry/serial-range.d.ts +3 -0
- package/dist/detectors/registry/serial-range.d.ts.map +1 -0
- package/dist/detectors/registry/serial-range.js +3 -0
- package/dist/detectors/registry/serial-range.js.map +1 -0
- package/dist/detectors/registry/share-amount.d.ts +3 -0
- package/dist/detectors/registry/share-amount.d.ts.map +1 -0
- package/dist/detectors/registry/share-amount.js +3 -0
- package/dist/detectors/registry/share-amount.js.map +1 -0
- package/dist/detectors/registry/table-unit-mix.d.ts +3 -0
- package/dist/detectors/registry/table-unit-mix.d.ts.map +1 -0
- package/dist/detectors/registry/table-unit-mix.js +3 -0
- package/dist/detectors/registry/table-unit-mix.js.map +1 -0
- package/dist/detectors/registry/tier-threshold.d.ts +3 -0
- package/dist/detectors/registry/tier-threshold.d.ts.map +1 -0
- package/dist/detectors/registry/tier-threshold.js +3 -0
- package/dist/detectors/registry/tier-threshold.js.map +1 -0
- package/dist/detectors/registry/variance-mismatch.d.ts +3 -0
- package/dist/detectors/registry/variance-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/variance-mismatch.js +3 -0
- package/dist/detectors/registry/variance-mismatch.js.map +1 -0
- package/dist/detectors/relative-dates.d.ts.map +1 -1
- package/dist/detectors/relative-dates.js +2 -1
- package/dist/detectors/relative-dates.js.map +1 -1
- package/dist/detectors/relative-day-words.d.ts.map +1 -1
- package/dist/detectors/relative-day-words.js +2 -1
- package/dist/detectors/relative-day-words.js.map +1 -1
- package/dist/detectors/rent-multiple-mismatch.d.ts.map +1 -1
- package/dist/detectors/rent-multiple-mismatch.js.map +1 -1
- package/dist/detectors/request-owner.d.ts +3 -1
- package/dist/detectors/request-owner.d.ts.map +1 -1
- package/dist/detectors/request-owner.js +5 -2
- package/dist/detectors/request-owner.js.map +1 -1
- package/dist/detectors/revision-direction.d.ts +3 -0
- package/dist/detectors/revision-direction.d.ts.map +1 -0
- package/dist/detectors/revision-direction.js +32 -0
- package/dist/detectors/revision-direction.js.map +1 -0
- package/dist/detectors/row-sentence-amounts.d.ts +5 -0
- package/dist/detectors/row-sentence-amounts.d.ts.map +1 -0
- package/dist/detectors/row-sentence-amounts.js +71 -0
- package/dist/detectors/row-sentence-amounts.js.map +1 -0
- package/dist/detectors/running-balance.d.ts +3 -0
- package/dist/detectors/running-balance.d.ts.map +1 -0
- package/dist/detectors/running-balance.js +26 -0
- package/dist/detectors/running-balance.js.map +1 -0
- package/dist/detectors/scaled-quantity.js +1 -1
- package/dist/detectors/scaled-quantity.js.map +1 -1
- package/dist/detectors/serial-range.d.ts +3 -0
- package/dist/detectors/serial-range.d.ts.map +1 -0
- package/dist/detectors/serial-range.js +29 -0
- package/dist/detectors/serial-range.js.map +1 -0
- package/dist/detectors/share-amount.d.ts +3 -0
- package/dist/detectors/share-amount.d.ts.map +1 -0
- package/dist/detectors/share-amount.js +45 -0
- package/dist/detectors/share-amount.js.map +1 -0
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +42 -10
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/table-scale.d.ts +3 -0
- package/dist/detectors/table-scale.d.ts.map +1 -0
- package/dist/detectors/table-scale.js +32 -0
- package/dist/detectors/table-scale.js.map +1 -0
- package/dist/detectors/tax-amount.d.ts.map +1 -1
- package/dist/detectors/tax-amount.js +34 -10
- package/dist/detectors/tax-amount.js.map +1 -1
- package/dist/detectors/technical-docs.d.ts +1 -1
- package/dist/detectors/technical-docs.d.ts.map +1 -1
- package/dist/detectors/technical-docs.js +3 -2
- package/dist/detectors/technical-docs.js.map +1 -1
- package/dist/detectors/tier-threshold.d.ts +3 -0
- package/dist/detectors/tier-threshold.d.ts.map +1 -0
- package/dist/detectors/tier-threshold.js +86 -0
- package/dist/detectors/tier-threshold.js.map +1 -0
- package/dist/detectors/time-order.d.ts +1 -0
- package/dist/detectors/time-order.d.ts.map +1 -1
- package/dist/detectors/time-order.js +43 -13
- package/dist/detectors/time-order.js.map +1 -1
- package/dist/detectors/use-maximum.d.ts +3 -0
- package/dist/detectors/use-maximum.d.ts.map +1 -0
- package/dist/detectors/use-maximum.js +32 -0
- package/dist/detectors/use-maximum.js.map +1 -0
- package/dist/detectors/variance.d.ts +3 -0
- package/dist/detectors/variance.d.ts.map +1 -0
- package/dist/detectors/variance.js +28 -0
- package/dist/detectors/variance.js.map +1 -0
- package/dist/detectors/whole-count-findings.d.ts +4 -0
- package/dist/detectors/whole-count-findings.d.ts.map +1 -0
- package/dist/detectors/whole-count-findings.js +38 -0
- package/dist/detectors/whole-count-findings.js.map +1 -0
- package/dist/detectors/working-hours-findings.d.ts +9 -0
- package/dist/detectors/working-hours-findings.d.ts.map +1 -0
- package/dist/detectors/working-hours-findings.js +79 -0
- package/dist/detectors/working-hours-findings.js.map +1 -0
- package/dist/facts/age-values.d.ts +22 -0
- package/dist/facts/age-values.d.ts.map +1 -0
- package/dist/facts/age-values.js +76 -0
- package/dist/facts/age-values.js.map +1 -0
- package/dist/facts/cell-keys.d.ts +12 -0
- package/dist/facts/cell-keys.d.ts.map +1 -0
- package/dist/facts/cell-keys.js +19 -0
- package/dist/facts/cell-keys.js.map +1 -0
- package/dist/facts/count-labels.d.ts +15 -0
- package/dist/facts/count-labels.d.ts.map +1 -0
- package/dist/facts/count-labels.js +19 -0
- package/dist/facts/count-labels.js.map +1 -0
- package/dist/facts/document-terms.d.ts +43 -0
- package/dist/facts/document-terms.d.ts.map +1 -0
- package/dist/facts/document-terms.js +74 -0
- package/dist/facts/document-terms.js.map +1 -0
- package/dist/facts/duration-scale.d.ts +11 -0
- package/dist/facts/duration-scale.d.ts.map +1 -0
- package/dist/facts/duration-scale.js +14 -0
- package/dist/facts/duration-scale.js.map +1 -0
- package/dist/facts/duration-values.d.ts +15 -0
- package/dist/facts/duration-values.d.ts.map +1 -0
- package/dist/facts/duration-values.js +29 -0
- package/dist/facts/duration-values.js.map +1 -0
- package/dist/facts/fact-values.d.ts +9 -1
- package/dist/facts/fact-values.d.ts.map +1 -1
- package/dist/facts/fact-values.js +19 -6
- package/dist/facts/fact-values.js.map +1 -1
- package/dist/facts/labelled-facts.d.ts +15 -1
- package/dist/facts/labelled-facts.d.ts.map +1 -1
- package/dist/facts/labelled-facts.js +51 -8
- package/dist/facts/labelled-facts.js.map +1 -1
- package/dist/facts/measure-units.d.ts.map +1 -1
- package/dist/facts/measure-units.js +23 -8
- package/dist/facts/measure-units.js.map +1 -1
- package/dist/facts/measures.js +11 -9
- package/dist/facts/measures.js.map +1 -1
- package/dist/facts/qualified-labels.d.ts +28 -0
- package/dist/facts/qualified-labels.d.ts.map +1 -0
- package/dist/facts/qualified-labels.js +96 -0
- package/dist/facts/qualified-labels.js.map +1 -0
- package/dist/facts/rate-values.d.ts +40 -0
- package/dist/facts/rate-values.d.ts.map +1 -0
- package/dist/facts/rate-values.js +68 -0
- package/dist/facts/rate-values.js.map +1 -0
- package/dist/facts/row-sentence-amounts.d.ts +51 -0
- package/dist/facts/row-sentence-amounts.d.ts.map +1 -0
- package/dist/facts/row-sentence-amounts.js +71 -0
- package/dist/facts/row-sentence-amounts.js.map +1 -0
- package/dist/facts/superscript-power.d.ts +3 -0
- package/dist/facts/superscript-power.d.ts.map +1 -0
- package/dist/facts/superscript-power.js +5 -0
- package/dist/facts/superscript-power.js.map +1 -0
- package/dist/facts/table-facts.d.ts +18 -2
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +16 -6
- package/dist/facts/table-facts.js.map +1 -1
- package/dist/facts/term-values.d.ts +34 -0
- package/dist/facts/term-values.d.ts.map +1 -0
- package/dist/facts/term-values.js +195 -0
- package/dist/facts/term-values.js.map +1 -0
- package/dist/facts/unit-word.d.ts +5 -0
- package/dist/facts/unit-word.d.ts.map +1 -1
- package/dist/facts/unit-word.js +9 -0
- package/dist/facts/unit-word.js.map +1 -1
- package/dist/facts/verb-quantity-facts.d.ts +22 -0
- package/dist/facts/verb-quantity-facts.d.ts.map +1 -0
- package/dist/facts/verb-quantity-facts.js +58 -0
- package/dist/facts/verb-quantity-facts.js.map +1 -0
- package/dist/facts/whole-counts.d.ts +58 -0
- package/dist/facts/whole-counts.d.ts.map +1 -0
- package/dist/facts/whole-counts.js +118 -0
- package/dist/facts/whole-counts.js.map +1 -0
- package/dist/name-char-reading.d.ts +16 -0
- package/dist/name-char-reading.d.ts.map +1 -0
- package/dist/name-char-reading.js +18 -0
- package/dist/name-char-reading.js.map +1 -0
- package/dist/name-line-block.d.ts +6 -0
- package/dist/name-line-block.d.ts.map +1 -0
- package/dist/name-line-block.js +35 -0
- package/dist/name-line-block.js.map +1 -0
- package/dist/name-lookalike-chars.d.ts +16 -0
- package/dist/name-lookalike-chars.d.ts.map +1 -0
- package/dist/name-lookalike-chars.js +41 -0
- package/dist/name-lookalike-chars.js.map +1 -0
- package/dist/name-neighbours.d.ts +7 -0
- package/dist/name-neighbours.d.ts.map +1 -0
- package/dist/name-neighbours.js +55 -0
- package/dist/name-neighbours.js.map +1 -0
- package/dist/name-ordinary-word.d.ts +13 -0
- package/dist/name-ordinary-word.d.ts.map +1 -0
- package/dist/name-ordinary-word.js +54 -0
- package/dist/name-ordinary-word.js.map +1 -0
- package/dist/name-person.d.ts +9 -0
- package/dist/name-person.d.ts.map +1 -0
- package/dist/name-person.js +25 -0
- package/dist/name-person.js.map +1 -0
- package/dist/name-separator.d.ts +14 -0
- package/dist/name-separator.d.ts.map +1 -0
- package/dist/name-separator.js +33 -0
- package/dist/name-separator.js.map +1 -0
- package/dist/name-variants.d.ts +8 -8
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +28 -81
- package/dist/name-variants.js.map +1 -1
- package/dist/name-weight.d.ts +10 -0
- package/dist/name-weight.d.ts.map +1 -0
- package/dist/name-weight.js +7 -0
- package/dist/name-weight.js.map +1 -0
- package/dist/person-field.d.ts +6 -0
- package/dist/person-field.d.ts.map +1 -0
- package/dist/person-field.js +40 -0
- package/dist/person-field.js.map +1 -0
- package/dist/person-full-name.d.ts +12 -0
- package/dist/person-full-name.d.ts.map +1 -0
- package/dist/person-full-name.js +52 -0
- package/dist/person-full-name.js.map +1 -0
- package/dist/phone-numbers.d.ts +23 -3
- package/dist/phone-numbers.d.ts.map +1 -1
- package/dist/phone-numbers.js +49 -21
- package/dist/phone-numbers.js.map +1 -1
- package/dist/plugin.d.ts +2 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/product-names.d.ts +33 -0
- package/dist/product-names.d.ts.map +1 -0
- package/dist/product-names.js +74 -0
- package/dist/product-names.js.map +1 -0
- package/dist/reference-numbers.d.ts +26 -0
- package/dist/reference-numbers.d.ts.map +1 -0
- package/dist/reference-numbers.js +43 -0
- package/dist/reference-numbers.js.map +1 -0
- package/dist/spaced-person-name.d.ts +17 -0
- package/dist/spaced-person-name.d.ts.map +1 -0
- package/dist/spaced-person-name.js +82 -0
- package/dist/spaced-person-name.js.map +1 -0
- package/dist/spacing-code.d.ts +1 -0
- package/dist/spacing-code.d.ts.map +1 -1
- package/dist/spacing-code.js +15 -1
- package/dist/spacing-code.js.map +1 -1
- package/dist/structure/annual-holidays.d.ts +56 -0
- package/dist/structure/annual-holidays.d.ts.map +1 -0
- package/dist/structure/annual-holidays.js +159 -0
- package/dist/structure/annual-holidays.js.map +1 -0
- package/dist/structure/annual-pay.d.ts +97 -0
- package/dist/structure/annual-pay.d.ts.map +1 -0
- package/dist/structure/annual-pay.js +236 -0
- package/dist/structure/annual-pay.js.map +1 -0
- package/dist/structure/bmi.d.ts +63 -0
- package/dist/structure/bmi.d.ts.map +1 -0
- package/dist/structure/bmi.js +106 -0
- package/dist/structure/bmi.js.map +1 -0
- package/dist/structure/change-rate-table.d.ts +46 -0
- package/dist/structure/change-rate-table.d.ts.map +1 -0
- package/dist/structure/change-rate-table.js +110 -0
- package/dist/structure/change-rate-table.js.map +1 -0
- package/dist/structure/change-rate.d.ts +13 -1
- package/dist/structure/change-rate.d.ts.map +1 -1
- package/dist/structure/change-rate.js +51 -19
- package/dist/structure/change-rate.js.map +1 -1
- package/dist/structure/closing-balance.d.ts +24 -0
- package/dist/structure/closing-balance.d.ts.map +1 -0
- package/dist/structure/closing-balance.js +79 -0
- package/dist/structure/closing-balance.js.map +1 -0
- package/dist/structure/column-date-order.d.ts +5 -0
- package/dist/structure/column-date-order.d.ts.map +1 -0
- package/dist/structure/column-date-order.js +57 -0
- package/dist/structure/column-date-order.js.map +1 -0
- package/dist/structure/compound-hours.d.ts +5 -0
- package/dist/structure/compound-hours.d.ts.map +1 -0
- package/dist/structure/compound-hours.js +45 -0
- package/dist/structure/compound-hours.js.map +1 -0
- package/dist/structure/cumulative-below-current.d.ts +21 -0
- package/dist/structure/cumulative-below-current.d.ts.map +1 -0
- package/dist/structure/cumulative-below-current.js +48 -0
- package/dist/structure/cumulative-below-current.js.map +1 -0
- package/dist/structure/currency-column.d.ts +21 -0
- package/dist/structure/currency-column.d.ts.map +1 -0
- package/dist/structure/currency-column.js +74 -0
- package/dist/structure/currency-column.js.map +1 -0
- package/dist/structure/date-deadline-mark.d.ts +15 -0
- package/dist/structure/date-deadline-mark.d.ts.map +1 -0
- package/dist/structure/date-deadline-mark.js +22 -0
- package/dist/structure/date-deadline-mark.js.map +1 -0
- package/dist/structure/date-outside-period.d.ts +5 -1
- package/dist/structure/date-outside-period.d.ts.map +1 -1
- package/dist/structure/date-outside-period.js +13 -9
- package/dist/structure/date-outside-period.js.map +1 -1
- package/dist/structure/date-range.d.ts +2 -1
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +4 -6
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/deadline-after-event.d.ts +35 -2
- package/dist/structure/deadline-after-event.d.ts.map +1 -1
- package/dist/structure/deadline-after-event.js +77 -6
- package/dist/structure/deadline-after-event.js.map +1 -1
- package/dist/structure/deductible-limit.d.ts +69 -0
- package/dist/structure/deductible-limit.d.ts.map +1 -0
- package/dist/structure/deductible-limit.js +191 -0
- package/dist/structure/deductible-limit.js.map +1 -0
- package/dist/structure/discount-rate.d.ts +35 -0
- package/dist/structure/discount-rate.d.ts.map +1 -0
- package/dist/structure/discount-rate.js +172 -0
- package/dist/structure/discount-rate.js.map +1 -0
- package/dist/structure/generic-role.d.ts +2 -0
- package/dist/structure/generic-role.d.ts.map +1 -0
- package/dist/structure/generic-role.js +8 -0
- package/dist/structure/generic-role.js.map +1 -0
- package/dist/structure/gpa.d.ts +74 -0
- package/dist/structure/gpa.d.ts.map +1 -0
- package/dist/structure/gpa.js +170 -0
- package/dist/structure/gpa.js.map +1 -0
- package/dist/structure/installment-total.d.ts +110 -0
- package/dist/structure/installment-total.d.ts.map +1 -0
- package/dist/structure/installment-total.js +224 -0
- package/dist/structure/installment-total.js.map +1 -0
- package/dist/structure/interest.d.ts +22 -0
- package/dist/structure/interest.d.ts.map +1 -0
- package/dist/structure/interest.js +107 -0
- package/dist/structure/interest.js.map +1 -0
- package/dist/structure/key-value-row.d.ts +14 -0
- package/dist/structure/key-value-row.d.ts.map +1 -0
- package/dist/structure/key-value-row.js +38 -0
- package/dist/structure/key-value-row.js.map +1 -0
- package/dist/structure/lab-columns.d.ts +12 -0
- package/dist/structure/lab-columns.d.ts.map +1 -0
- package/dist/structure/lab-columns.js +11 -0
- package/dist/structure/lab-columns.js.map +1 -0
- package/dist/structure/labelled-date-order.d.ts +33 -16
- package/dist/structure/labelled-date-order.d.ts.map +1 -1
- package/dist/structure/labelled-date-order.js +38 -30
- package/dist/structure/labelled-date-order.js.map +1 -1
- package/dist/structure/labelled-order.d.ts +59 -0
- package/dist/structure/labelled-order.d.ts.map +1 -0
- package/dist/structure/labelled-order.js +65 -0
- package/dist/structure/labelled-order.js.map +1 -0
- package/dist/structure/labelled-time-order.d.ts +17 -0
- package/dist/structure/labelled-time-order.d.ts.map +1 -0
- package/dist/structure/labelled-time-order.js +79 -0
- package/dist/structure/labelled-time-order.js.map +1 -0
- package/dist/structure/line-amount-label.d.ts +31 -0
- package/dist/structure/line-amount-label.d.ts.map +1 -0
- package/dist/structure/line-amount-label.js +77 -0
- package/dist/structure/line-amount-label.js.map +1 -0
- package/dist/structure/line-amount-rate.d.ts +47 -0
- package/dist/structure/line-amount-rate.d.ts.map +1 -0
- package/dist/structure/line-amount-rate.js +141 -0
- package/dist/structure/line-amount-rate.js.map +1 -0
- package/dist/structure/line-amount-unit.d.ts +7 -0
- package/dist/structure/line-amount-unit.d.ts.map +1 -1
- package/dist/structure/line-amount-unit.js +11 -0
- package/dist/structure/line-amount-unit.js.map +1 -1
- package/dist/structure/line-amount.d.ts +33 -7
- package/dist/structure/line-amount.d.ts.map +1 -1
- package/dist/structure/line-amount.js +152 -42
- package/dist/structure/line-amount.js.map +1 -1
- package/dist/structure/meter-usage-read.d.ts +21 -0
- package/dist/structure/meter-usage-read.d.ts.map +1 -0
- package/dist/structure/meter-usage-read.js +116 -0
- package/dist/structure/meter-usage-read.js.map +1 -0
- package/dist/structure/meter-usage.d.ts +62 -0
- package/dist/structure/meter-usage.d.ts.map +1 -0
- package/dist/structure/meter-usage.js +157 -0
- package/dist/structure/meter-usage.js.map +1 -0
- package/dist/structure/net-amount.d.ts +81 -0
- package/dist/structure/net-amount.d.ts.map +1 -0
- package/dist/structure/net-amount.js +161 -0
- package/dist/structure/net-amount.js.map +1 -0
- package/dist/structure/net-gross-weight.d.ts +30 -0
- package/dist/structure/net-gross-weight.d.ts.map +1 -0
- package/dist/structure/net-gross-weight.js +79 -0
- package/dist/structure/net-gross-weight.js.map +1 -0
- package/dist/structure/order-quantity.d.ts +38 -0
- package/dist/structure/order-quantity.d.ts.map +1 -0
- package/dist/structure/order-quantity.js +104 -0
- package/dist/structure/order-quantity.js.map +1 -0
- package/dist/structure/party-role.d.ts.map +1 -1
- package/dist/structure/party-role.js +4 -1
- package/dist/structure/party-role.js.map +1 -1
- package/dist/structure/percent-sum.d.ts +2 -0
- package/dist/structure/percent-sum.d.ts.map +1 -1
- package/dist/structure/percent-sum.js +2 -0
- package/dist/structure/percent-sum.js.map +1 -1
- package/dist/structure/period-label-conflict.d.ts +52 -0
- package/dist/structure/period-label-conflict.d.ts.map +1 -0
- package/dist/structure/period-label-conflict.js +105 -0
- package/dist/structure/period-label-conflict.js.map +1 -0
- package/dist/structure/period-labels.d.ts +36 -0
- package/dist/structure/period-labels.d.ts.map +1 -0
- package/dist/structure/period-labels.js +86 -0
- package/dist/structure/period-labels.js.map +1 -0
- package/dist/structure/period-multiple.d.ts +46 -0
- package/dist/structure/period-multiple.d.ts.map +1 -0
- package/dist/structure/period-multiple.js +123 -0
- package/dist/structure/period-multiple.js.map +1 -0
- package/dist/structure/quantity-range.d.ts.map +1 -1
- package/dist/structure/quantity-range.js +1 -5
- package/dist/structure/quantity-range.js.map +1 -1
- package/dist/structure/range-bands.d.ts +2 -0
- package/dist/structure/range-bands.d.ts.map +1 -1
- package/dist/structure/range-bands.js +1 -1
- package/dist/structure/range-bands.js.map +1 -1
- package/dist/structure/range-years.d.ts +18 -0
- package/dist/structure/range-years.d.ts.map +1 -0
- package/dist/structure/range-years.js +60 -0
- package/dist/structure/range-years.js.map +1 -0
- package/dist/structure/ratio.d.ts +136 -0
- package/dist/structure/ratio.d.ts.map +1 -0
- package/dist/structure/ratio.js +214 -0
- package/dist/structure/ratio.js.map +1 -0
- package/dist/structure/reference-flags.d.ts +55 -0
- package/dist/structure/reference-flags.d.ts.map +1 -0
- package/dist/structure/reference-flags.js +116 -0
- package/dist/structure/reference-flags.js.map +1 -0
- package/dist/structure/reference-number-repeated.d.ts +12 -0
- package/dist/structure/reference-number-repeated.d.ts.map +1 -0
- package/dist/structure/reference-number-repeated.js +43 -0
- package/dist/structure/reference-number-repeated.js.map +1 -0
- package/dist/structure/reference-unit.d.ts +24 -0
- package/dist/structure/reference-unit.d.ts.map +1 -0
- package/dist/structure/reference-unit.js +80 -0
- package/dist/structure/reference-unit.js.map +1 -0
- package/dist/structure/rent-multiple.d.ts +2 -22
- package/dist/structure/rent-multiple.d.ts.map +1 -1
- package/dist/structure/rent-multiple.js +2 -49
- package/dist/structure/rent-multiple.js.map +1 -1
- package/dist/structure/revision-direction.d.ts +51 -0
- package/dist/structure/revision-direction.d.ts.map +1 -0
- package/dist/structure/revision-direction.js +163 -0
- package/dist/structure/revision-direction.js.map +1 -0
- package/dist/structure/running-balance.d.ts +36 -0
- package/dist/structure/running-balance.d.ts.map +1 -0
- package/dist/structure/running-balance.js +126 -0
- package/dist/structure/running-balance.js.map +1 -0
- package/dist/structure/scaled-quantities.d.ts +1 -1
- package/dist/structure/scaled-quantities.d.ts.map +1 -1
- package/dist/structure/scaled-quantities.js +23 -6
- package/dist/structure/scaled-quantities.js.map +1 -1
- package/dist/structure/serial-range.d.ts +9 -0
- package/dist/structure/serial-range.d.ts.map +1 -0
- package/dist/structure/serial-range.js +41 -0
- package/dist/structure/serial-range.js.map +1 -0
- package/dist/structure/share-amount.d.ts +55 -0
- package/dist/structure/share-amount.d.ts.map +1 -0
- package/dist/structure/share-amount.js +162 -0
- package/dist/structure/share-amount.js.map +1 -0
- package/dist/structure/shift-times.d.ts +32 -0
- package/dist/structure/shift-times.d.ts.map +1 -0
- package/dist/structure/shift-times.js +112 -0
- package/dist/structure/shift-times.js.map +1 -0
- package/dist/structure/span-label.d.ts +3 -0
- package/dist/structure/span-label.d.ts.map +1 -0
- package/dist/structure/span-label.js +27 -0
- package/dist/structure/span-label.js.map +1 -0
- package/dist/structure/stated-multiple.d.ts +39 -0
- package/dist/structure/stated-multiple.d.ts.map +1 -0
- package/dist/structure/stated-multiple.js +49 -0
- package/dist/structure/stated-multiple.js.map +1 -0
- package/dist/structure/stated-period.d.ts +3 -2
- package/dist/structure/stated-period.d.ts.map +1 -1
- package/dist/structure/stated-period.js +17 -11
- package/dist/structure/stated-period.js.map +1 -1
- package/dist/structure/table-scale.d.ts +45 -0
- package/dist/structure/table-scale.d.ts.map +1 -0
- package/dist/structure/table-scale.js +188 -0
- package/dist/structure/table-scale.js.map +1 -0
- package/dist/structure/tax-price.d.ts +29 -0
- package/dist/structure/tax-price.d.ts.map +1 -0
- package/dist/structure/tax-price.js +112 -0
- package/dist/structure/tax-price.js.map +1 -0
- package/dist/structure/tax.d.ts +2 -0
- package/dist/structure/tax.d.ts.map +1 -1
- package/dist/structure/tax.js +46 -23
- package/dist/structure/tax.js.map +1 -1
- package/dist/structure/tier-threshold.d.ts +65 -0
- package/dist/structure/tier-threshold.d.ts.map +1 -0
- package/dist/structure/tier-threshold.js +170 -0
- package/dist/structure/tier-threshold.js.map +1 -0
- package/dist/structure/time-range.d.ts +2 -0
- package/dist/structure/time-range.d.ts.map +1 -1
- package/dist/structure/time-range.js +7 -2
- package/dist/structure/time-range.js.map +1 -1
- package/dist/structure/total-line.d.ts +34 -2
- package/dist/structure/total-line.d.ts.map +1 -1
- package/dist/structure/total-line.js +124 -3
- package/dist/structure/total-line.js.map +1 -1
- package/dist/structure/total-row-blank.d.ts +10 -0
- package/dist/structure/total-row-blank.d.ts.map +1 -0
- package/dist/structure/total-row-blank.js +15 -0
- package/dist/structure/total-row-blank.js.map +1 -0
- package/dist/structure/total.d.ts +13 -3
- package/dist/structure/total.d.ts.map +1 -1
- package/dist/structure/total.js +80 -7
- package/dist/structure/total.js.map +1 -1
- package/dist/structure/variance-table.d.ts +34 -0
- package/dist/structure/variance-table.d.ts.map +1 -0
- package/dist/structure/variance-table.js +130 -0
- package/dist/structure/variance-table.js.map +1 -0
- package/dist/table-names.d.ts +4 -3
- package/dist/table-names.d.ts.map +1 -1
- package/dist/table-names.js +6 -6
- package/dist/table-names.js.map +1 -1
- package/dist/unlabelled-references.d.ts +16 -0
- package/dist/unlabelled-references.d.ts.map +1 -0
- package/dist/unlabelled-references.js +73 -0
- package/dist/unlabelled-references.js.map +1 -0
- package/dist/vehicle-plates.d.ts +28 -0
- package/dist/vehicle-plates.d.ts.map +1 -0
- package/dist/vehicle-plates.js +116 -0
- package/dist/vehicle-plates.js.map +1 -0
- package/dist/whole-word-runs.d.ts +24 -0
- package/dist/whole-word-runs.d.ts.map +1 -0
- package/dist/whole-word-runs.js +26 -0
- package/dist/whole-word-runs.js.map +1 -0
- package/package.json +4 -3
- package/rules/absolute-exception.yaml +1 -1
- package/rules/ai-generated-composite.yaml +1 -1
- package/rules/ai-tell.yaml +1 -1
- package/rules/amount-range-reversed.yaml +1 -1
- package/rules/amount-scale-consistency.yaml +1 -1
- package/rules/announcing-opener.yaml +1 -1
- package/rules/annual-holidays-mismatch.yaml +65 -0
- package/rules/annual-pay-mismatch.yaml +64 -0
- package/rules/article-sound.yaml +1 -1
- package/rules/assistant-residue.yaml +1 -1
- package/rules/attachment-not-attached.yaml +1 -1
- package/rules/backorder-mismatch.yaml +57 -0
- package/rules/bmi-mismatch.yaml +63 -0
- package/rules/bold-label-list.yaml +1 -1
- package/rules/broken-link.yaml +1 -1
- package/rules/capacity-runtime-mismatch.yaml +1 -1
- package/rules/change-rate-mismatch.yaml +6 -6
- package/rules/chat-citation-residue.yaml +2 -2
- package/rules/cliche.yaml +2 -2
- package/rules/closing-balance-mismatch.yaml +63 -0
- package/rules/colon-lead-in.yaml +1 -1
- package/rules/comparative-without-baseline.yaml +1 -1
- package/rules/concrete-evidence-density.yaml +1 -1
- package/rules/connection-time-short.yaml +1 -1
- package/rules/contact-variant.yaml +4 -4
- package/rules/contrast-framing.yaml +2 -2
- package/rules/cross-doc-broken-link.yaml +1 -1
- package/rules/cross-doc-fact-conflict.yaml +1 -1
- package/rules/cross-doc-term-variant.yaml +1 -1
- package/rules/cumulative-below-current.yaml +59 -0
- package/rules/currency-column-mix.yaml +70 -0
- package/rules/currency-notation-consistency.yaml +2 -2
- package/rules/cushion-phrase-density.yaml +1 -1
- package/rules/dangling-participle.yaml +2 -2
- package/rules/dangling-reference.yaml +1 -1
- package/rules/date-format-consistency.yaml +1 -1
- package/rules/date-outside-period.yaml +5 -5
- package/rules/date-range-reversed.yaml +2 -2
- package/rules/date-stamp-order.yaml +2 -2
- package/rules/date-without-year.yaml +12 -12
- package/rules/deadline-after-event.yaml +11 -6
- package/rules/deductible-exceeds-limit.yaml +54 -0
- package/rules/defined-name-repeated.yaml +3 -3
- package/rules/defined-term-form.yaml +2 -2
- package/rules/delivered-over-ordered.yaml +57 -0
- package/rules/demonstrative-opener-run.yaml +1 -1
- package/rules/discount-rate-mismatch.yaml +66 -0
- package/rules/due-before-issue.yaml +33 -12
- package/rules/duration-mismatch.yaml +16 -7
- package/rules/duration-product-mismatch.yaml +11 -3
- package/rules/elapsed-years-mismatch.yaml +11 -6
- package/rules/email-greeting-closing.yaml +2 -2
- package/rules/empty-conclusion.yaml +1 -1
- package/rules/empty-intensifier.yaml +1 -1
- package/rules/empty-list-item.yaml +1 -1
- package/rules/empty-section.yaml +1 -1
- package/rules/empty-table-cell.yaml +2 -2
- package/rules/expletive-construction.yaml +1 -1
- package/rules/fact-conflict.yaml +16 -4
- package/rules/figurative-density.yaml +1 -1
- package/rules/figure-reference-order.yaml +1 -1
- package/rules/footnote-mismatch.yaml +1 -1
- package/rules/fullwidth-alnum-consistency.yaml +1 -1
- package/rules/gpa-mismatch.yaml +80 -0
- package/rules/heading-end-punctuation-mix.yaml +1 -1
- package/rules/heading-level-skip.yaml +1 -1
- package/rules/heading-numbering-mix.yaml +3 -3
- package/rules/homophone-slip.yaml +1 -1
- package/rules/humble-for-others.yaml +1 -1
- package/rules/idiom-misuse.yaml +1 -1
- package/rules/ime-residue.yaml +1 -1
- package/rules/impossible-date.yaml +10 -6
- package/rules/installment-total-mismatch.yaml +58 -0
- package/rules/interest-mismatch.yaml +50 -0
- package/rules/interval-count-mismatch.yaml +1 -1
- package/rules/invisible-character.yaml +1 -1
- package/rules/kana-function-word.yaml +2 -2
- package/rules/katakana-density.yaml +1 -1
- package/rules/katakana-long-vowel.yaml +2 -2
- package/rules/kutoten-consistency.yaml +1 -1
- package/rules/latin-spacing.yaml +20 -6
- package/rules/layout-code-mismatch.yaml +1 -1
- package/rules/less-for-fewer.yaml +1 -1
- package/rules/line-amount-mismatch.yaml +8 -7
- package/rules/link-text-url-mismatch.yaml +1 -1
- package/rules/list-item-form-mix.yaml +1 -1
- package/rules/lookalike-character.yaml +1 -1
- package/rules/max-kanji-continuous.yaml +1 -1
- package/rules/meter-usage-mismatch.yaml +64 -0
- package/rules/misconversion.yaml +1 -1
- package/rules/modal-conflict.yaml +1 -1
- package/rules/name-variant.yaml +12 -3
- package/rules/net-amount-mismatch.yaml +57 -0
- package/rules/net-over-gross.yaml +57 -0
- package/rules/no-doubled-joshi.yaml +1 -1
- package/rules/no-mixed-desumasu.yaml +1 -1
- package/rules/no-nakaguro-parallel.yaml +1 -1
- package/rules/nominalization.yaml +1 -1
- package/rules/nonstandard-word.yaml +1 -1
- package/rules/number-style-consistency.yaml +3 -3
- package/rules/number-without-unit.yaml +1 -1
- package/rules/number-word-figure-mismatch.yaml +1 -1
- package/rules/numbering-gap.yaml +1 -1
- package/rules/obligation-without-deadline.yaml +1 -1
- package/rules/ordinal-suffix-mismatch.yaml +1 -1
- package/rules/orthographic-variant.yaml +2 -2
- package/rules/outside-announced-list.yaml +1 -1
- package/rules/padded-intro.yaml +1 -1
- package/rules/paragraph-restatement.yaml +1 -1
- package/rules/party-role-name.yaml +3 -3
- package/rules/percent-sum-mismatch.yaml +2 -2
- package/rules/period-label-conflict.yaml +68 -0
- package/rules/period-multiple-mismatch.yaml +61 -0
- package/rules/period-part-exceeds-whole.yaml +62 -0
- package/rules/person-consistency.yaml +1 -1
- package/rules/phone-number-variant.yaml +3 -3
- package/rules/preferred-term.yaml +2 -2
- package/rules/prerequisite-after-step.yaml +1 -1
- package/rules/product-exceeds-maximum.yaml +49 -0
- package/rules/proper-noun-density.yaml +1 -1
- package/rules/quantity-range-reversed.yaml +2 -2
- package/rules/range-band-mismatch.yaml +1 -1
- package/rules/ratio-mismatch.yaml +64 -0
- package/rules/reference-flag-mismatch.yaml +74 -0
- package/rules/reference-number-repeated.yaml +63 -0
- package/rules/reference-number-variant.yaml +81 -0
- package/rules/reference-title-mismatch.yaml +1 -1
- package/rules/reference-topic-missing.yaml +1 -1
- package/rules/reference-unit-mismatch.yaml +62 -0
- package/rules/relative-date-mismatch.yaml +1 -1
- package/rules/request-without-deadline.yaml +3 -3
- package/rules/required-listed-as-preferred.yaml +1 -1
- package/rules/required-sections.yaml +2 -2
- package/rules/requirement-modal.yaml +2 -2
- package/rules/requirement-smell.yaml +1 -1
- package/rules/revision-direction-mismatch.yaml +66 -0
- package/rules/risk-disclosure.yaml +1 -1
- package/rules/running-balance-mismatch.yaml +59 -0
- package/rules/scaled-quantity-mismatch.yaml +1 -1
- package/rules/serial-range-reversed.yaml +52 -0
- package/rules/share-amount-mismatch.yaml +58 -0
- package/rules/share-over-hundred.yaml +1 -1
- package/rules/shell-prompt-mix.yaml +1 -1
- package/rules/space-before-punctuation.yaml +1 -1
- package/rules/spelling-consistency.yaml +1 -1
- package/rules/step-statement-mix.yaml +3 -3
- package/rules/stock-transition.yaml +1 -1
- package/rules/summary-fact-mismatch.yaml +1 -1
- package/rules/table-header-variant.yaml +1 -1
- package/rules/table-unit-mix.yaml +82 -0
- package/rules/taigen-dome-in-prose.yaml +1 -1
- package/rules/tax-mismatch.yaml +13 -7
- package/rules/tier-threshold-mismatch.yaml +73 -0
- package/rules/time-order.yaml +7 -4
- package/rules/time-range-reversed.yaml +9 -4
- package/rules/toc-heading-mismatch.yaml +1 -1
- package/rules/topic-predicate-distance.yaml +1 -1
- package/rules/total-mismatch.yaml +5 -5
- package/rules/ui-label-variant.yaml +1 -1
- package/rules/unclosed-code-fence.yaml +1 -1
- package/rules/uncomparable-graded.yaml +2 -2
- package/rules/undefined-term.yaml +2 -2
- package/rules/unfilled-placeholder.yaml +2 -2
- package/rules/unit-mismatch.yaml +1 -1
- package/rules/unit-spacing-consistency.yaml +1 -1
- package/rules/unknown-word.yaml +1 -1
- package/rules/url-run-on.yaml +1 -1
- package/rules/vague-deadline.yaml +1 -1
- package/rules/vague-figure-reference.yaml +1 -1
- package/rules/vague-word-density.yaml +2 -2
- package/rules/variance-mismatch.yaml +67 -0
- package/rules/very-adjective.yaml +1 -1
- package/rules/walk-time-distance-mismatch.yaml +1 -1
- package/rules/warning-without-action.yaml +1 -1
- package/rules/weasel-word.yaml +2 -2
- package/rules/wordy-phrase.yaml +2 -2
- package/rules/yori-as-from.yaml +1 -1
- package/skills/chaff/SKILL.md +59 -9
- package/src/company-kana-spelling.ts +105 -0
- package/src/company-names.ts +159 -26
- package/src/contacts/table-rows.ts +51 -0
- package/src/derived/age-on-date.ts +161 -0
- package/src/derived/durations.ts +83 -12
- package/src/derived/hours-and-minutes.ts +41 -0
- package/src/derived/hyphenated-counts.ts +38 -0
- package/src/derived/marked-dates.ts +61 -0
- package/src/derived/money-span.ts +10 -0
- package/src/derived/period-parts.ts +360 -0
- package/src/derived/readable-date.ts +63 -0
- package/src/derived/stays.ts +7 -2
- package/src/derived/timesheet-hours.ts +112 -0
- package/src/derived/use-maximum.ts +158 -0
- package/src/derived/working-hours.ts +2 -2
- package/src/detectors/annual-holidays-mismatch.ts +41 -0
- package/src/detectors/annual-pay-mismatch.ts +71 -0
- package/src/detectors/blank-structure.ts +54 -14
- package/src/detectors/bmi-mismatch.ts +82 -0
- package/src/detectors/change-rate.ts +27 -4
- package/src/detectors/closing-balance-mismatch.ts +52 -0
- package/src/detectors/contact-variant.ts +8 -2
- package/src/detectors/cumulative-below-current.ts +30 -0
- package/src/detectors/currency-column.ts +37 -0
- package/src/detectors/date-any-year.ts +130 -0
- package/src/detectors/date-outside-period.ts +4 -10
- package/src/detectors/date-stamp-order.ts +2 -1
- package/src/detectors/date-year.ts +55 -13
- package/src/detectors/deductible-exceeds-limit.ts +55 -0
- package/src/detectors/defined-term-form.ts +6 -23
- package/src/detectors/derived-numbers.ts +50 -89
- package/src/detectors/discount-rate.ts +41 -0
- package/src/detectors/due-date.ts +21 -7
- package/src/detectors/email-letter.ts +45 -15
- package/src/detectors/event-deadline.ts +13 -3
- package/src/detectors/fact-consistency.ts +145 -7
- package/src/detectors/gloss-year.ts +21 -0
- package/src/detectors/gpa-mismatch.ts +43 -0
- package/src/detectors/impossible-date.ts +25 -3
- package/src/detectors/installment-total-mismatch.ts +68 -0
- package/src/detectors/interest.ts +43 -0
- package/src/detectors/lab-columns.ts +9 -0
- package/src/detectors/labelled-age.ts +154 -0
- package/src/detectors/line-amount.ts +58 -3
- package/src/detectors/measured-facts.ts +1 -1
- package/src/detectors/meter-usage.ts +49 -0
- package/src/detectors/name-field.ts +43 -0
- package/src/detectors/name-variant.ts +160 -16
- package/src/detectors/net-amount-mismatch.ts +86 -0
- package/src/detectors/net-gross-weight.ts +39 -0
- package/src/detectors/nominal-step.ts +35 -0
- package/src/detectors/number-style.ts +11 -2
- package/src/detectors/order-quantity.ts +46 -0
- package/src/detectors/orthographic-variant.ts +40 -10
- package/src/detectors/orthography.ts +27 -11
- package/src/detectors/period-label-conflict.ts +43 -0
- package/src/detectors/period-multiple-mismatch.ts +54 -0
- package/src/detectors/period-part.ts +71 -0
- package/src/detectors/range-words.ts +17 -0
- package/src/detectors/ratio-mismatch.ts +116 -0
- package/src/detectors/readable-dates.ts +36 -0
- package/src/detectors/reference-flag.ts +36 -0
- package/src/detectors/reference-number-repeated.ts +25 -0
- package/src/detectors/reference-number-variant.ts +44 -0
- package/src/detectors/reference-unit.ts +24 -0
- package/src/detectors/registry/annual-holidays-mismatch.ts +4 -0
- package/src/detectors/registry/annual-pay-mismatch.ts +4 -0
- package/src/detectors/registry/backorder-mismatch.ts +4 -0
- package/src/detectors/registry/bmi-mismatch.ts +4 -0
- package/src/detectors/registry/closing-balance-mismatch.ts +4 -0
- package/src/detectors/registry/cumulative-below-current.ts +4 -0
- package/src/detectors/registry/currency-column-mix.ts +4 -0
- package/src/detectors/registry/deductible-exceeds-limit.ts +4 -0
- package/src/detectors/registry/delivered-over-ordered.ts +4 -0
- package/src/detectors/registry/discount-rate.ts +4 -0
- package/src/detectors/registry/elapsed-years-mismatch.ts +1 -1
- package/src/detectors/registry/gpa-mismatch.ts +4 -0
- package/src/detectors/registry/installment-total-mismatch.ts +4 -0
- package/src/detectors/registry/interest.ts +4 -0
- package/src/detectors/registry/meter-usage.ts +4 -0
- package/src/detectors/registry/net-amount-mismatch.ts +4 -0
- package/src/detectors/registry/net-over-gross.ts +4 -0
- package/src/detectors/registry/period-label-conflict.ts +4 -0
- package/src/detectors/registry/period-multiple-mismatch.ts +4 -0
- package/src/detectors/registry/period-part-exceeds-whole.ts +4 -0
- package/src/detectors/registry/product-exceeds-maximum.ts +4 -0
- package/src/detectors/registry/ratio-mismatch.ts +4 -0
- package/src/detectors/registry/reference-flag-mismatch.ts +4 -0
- package/src/detectors/registry/reference-number-repeated.ts +4 -0
- package/src/detectors/registry/reference-number-variant.ts +4 -0
- package/src/detectors/registry/reference-unit.ts +4 -0
- package/src/detectors/registry/revision-direction.ts +4 -0
- package/src/detectors/registry/running-balance.ts +4 -0
- package/src/detectors/registry/serial-range.ts +4 -0
- package/src/detectors/registry/share-amount.ts +4 -0
- package/src/detectors/registry/table-unit-mix.ts +4 -0
- package/src/detectors/registry/tier-threshold.ts +4 -0
- package/src/detectors/registry/variance-mismatch.ts +4 -0
- package/src/detectors/relative-dates.ts +2 -1
- package/src/detectors/relative-day-words.ts +2 -1
- package/src/detectors/rent-multiple-mismatch.ts +3 -2
- package/src/detectors/request-owner.ts +5 -2
- package/src/detectors/revision-direction.ts +44 -0
- package/src/detectors/row-sentence-amounts.ts +96 -0
- package/src/detectors/running-balance.ts +31 -0
- package/src/detectors/scaled-quantity.ts +1 -1
- package/src/detectors/serial-range.ts +37 -0
- package/src/detectors/share-amount.ts +51 -0
- package/src/detectors/structure-tree.ts +58 -10
- package/src/detectors/table-scale.ts +37 -0
- package/src/detectors/tax-amount.ts +45 -13
- package/src/detectors/technical-docs.ts +4 -2
- package/src/detectors/tier-threshold.ts +108 -0
- package/src/detectors/time-order.ts +52 -18
- package/src/detectors/use-maximum.ts +38 -0
- package/src/detectors/variance.ts +33 -0
- package/src/detectors/whole-count-findings.ts +48 -0
- package/src/detectors/working-hours-findings.ts +100 -0
- package/src/facts/age-values.ts +124 -0
- package/src/facts/cell-keys.ts +21 -0
- package/src/facts/count-labels.ts +28 -0
- package/src/facts/document-terms.ts +107 -0
- package/src/facts/duration-scale.ts +22 -0
- package/src/facts/duration-values.ts +44 -0
- package/src/facts/fact-values.ts +36 -7
- package/src/facts/labelled-facts.ts +66 -9
- package/src/facts/measure-units.ts +28 -10
- package/src/facts/measures.ts +11 -11
- package/src/facts/qualified-labels.ts +126 -0
- package/src/facts/rate-values.ts +117 -0
- package/src/facts/row-sentence-amounts.ts +113 -0
- package/src/facts/superscript-power.ts +5 -0
- package/src/facts/table-facts.ts +35 -7
- package/src/facts/term-values.ts +236 -0
- package/src/facts/unit-word.ts +13 -0
- package/src/facts/verb-quantity-facts.ts +84 -0
- package/src/facts/whole-counts.ts +183 -0
- package/src/name-char-reading.ts +24 -0
- package/src/name-line-block.ts +40 -0
- package/src/name-lookalike-chars.ts +53 -0
- package/src/name-neighbours.ts +58 -0
- package/src/name-ordinary-word.ts +68 -0
- package/src/name-person.ts +31 -0
- package/src/name-separator.ts +48 -0
- package/src/name-variants.ts +42 -86
- package/src/name-weight.ts +12 -0
- package/src/person-field.ts +43 -0
- package/src/person-full-name.ts +70 -0
- package/src/phone-numbers.ts +54 -18
- package/src/plugin.ts +2 -0
- package/src/product-names.ts +98 -0
- package/src/reference-numbers.ts +55 -0
- package/src/spaced-person-name.ts +97 -0
- package/src/spacing-code.ts +22 -1
- package/src/structure/annual-holidays.ts +222 -0
- package/src/structure/annual-pay.ts +339 -0
- package/src/structure/bmi.ts +133 -0
- package/src/structure/change-rate-table.ts +135 -0
- package/src/structure/change-rate.ts +54 -17
- package/src/structure/closing-balance.ts +104 -0
- package/src/structure/column-date-order.ts +73 -0
- package/src/structure/compound-hours.ts +49 -0
- package/src/structure/cumulative-below-current.ts +66 -0
- package/src/structure/currency-column.ts +97 -0
- package/src/structure/date-deadline-mark.ts +30 -0
- package/src/structure/date-outside-period.ts +17 -9
- package/src/structure/date-range.ts +6 -9
- package/src/structure/deadline-after-event.ts +125 -8
- package/src/structure/deductible-limit.ts +255 -0
- package/src/structure/discount-rate.ts +209 -0
- package/src/structure/generic-role.ts +8 -0
- package/src/structure/gpa.ts +218 -0
- package/src/structure/installment-total.ts +343 -0
- package/src/structure/interest.ts +133 -0
- package/src/structure/key-value-row.ts +45 -0
- package/src/structure/lab-columns.ts +21 -0
- package/src/structure/labelled-date-order.ts +68 -52
- package/src/structure/labelled-order.ts +122 -0
- package/src/structure/labelled-time-order.ts +100 -0
- package/src/structure/line-amount-label.ts +100 -0
- package/src/structure/line-amount-rate.ts +178 -0
- package/src/structure/line-amount-unit.ts +16 -0
- package/src/structure/line-amount.ts +200 -48
- package/src/structure/meter-usage-read.ts +139 -0
- package/src/structure/meter-usage.ts +224 -0
- package/src/structure/net-amount.ts +243 -0
- package/src/structure/net-gross-weight.ts +97 -0
- package/src/structure/order-quantity.ts +125 -0
- package/src/structure/party-role.ts +4 -1
- package/src/structure/percent-sum.ts +3 -0
- package/src/structure/period-label-conflict.ts +174 -0
- package/src/structure/period-labels.ts +147 -0
- package/src/structure/period-multiple.ts +186 -0
- package/src/structure/quantity-range.ts +1 -8
- package/src/structure/range-bands.ts +1 -1
- package/src/structure/range-years.ts +75 -0
- package/src/structure/ratio.ts +296 -0
- package/src/structure/reference-flags.ts +156 -0
- package/src/structure/reference-number-repeated.ts +57 -0
- package/src/structure/reference-unit.ts +105 -0
- package/src/structure/rent-multiple.ts +12 -82
- package/src/structure/revision-direction.ts +214 -0
- package/src/structure/running-balance.ts +157 -0
- package/src/structure/scaled-quantities.ts +20 -6
- package/src/structure/serial-range.ts +52 -0
- package/src/structure/share-amount.ts +206 -0
- package/src/structure/shift-times.ts +136 -0
- package/src/structure/span-label.ts +26 -0
- package/src/structure/stated-multiple.ts +82 -0
- package/src/structure/stated-period.ts +23 -11
- package/src/structure/table-scale.ts +239 -0
- package/src/structure/tax-price.ts +136 -0
- package/src/structure/tax.ts +55 -20
- package/src/structure/tier-threshold.ts +218 -0
- package/src/structure/time-range.ts +9 -3
- package/src/structure/total-line.ts +174 -5
- package/src/structure/total-row-blank.ts +23 -0
- package/src/structure/total.ts +122 -13
- package/src/structure/variance-table.ts +167 -0
- package/src/table-names.ts +6 -6
- package/src/unlabelled-references.ts +83 -0
- package/src/vehicle-plates.ts +142 -0
- package/src/whole-word-runs.ts +38 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// A forecast said to be revised one way (上方修正, revised upward) whose revision table moves the other way: a table with a
|
|
2
|
+
// column of the previous forecast and one of the revised forecast (or a row of each), and a word of revision in the same
|
|
3
|
+
// section. Pure; the detector passes the text, the sections, the sentences and the words of its lexicons.
|
|
4
|
+
import type { Span } from "../plugin.ts";
|
|
5
|
+
import type { StructureIssue } from "./issues.ts";
|
|
6
|
+
import { linesOf, type Line } from "./lines.ts";
|
|
7
|
+
import { cellsOf, tablesOf, type Cell } from "../facts/table-facts.ts";
|
|
8
|
+
import { withoutEdgeMarks } from "../facts/trim-marks.ts";
|
|
9
|
+
import { escapeRegExp } from "../orthography.ts";
|
|
10
|
+
|
|
11
|
+
export type RevisionWords = {
|
|
12
|
+
/** Words that say the forecast was revised upward (上方修正, revised upward) and downward (下方修正, lowered). */
|
|
13
|
+
readonly rises: readonly string[];
|
|
14
|
+
readonly falls: readonly string[];
|
|
15
|
+
/** Verbs that say so only with a word of forecast in their sentence ("raised the forecast", not "raised funds"). */
|
|
16
|
+
readonly risesWithObject: readonly string[];
|
|
17
|
+
readonly fallsWithObject: readonly string[];
|
|
18
|
+
/** Words of forecast (予想, forecast, guidance). */
|
|
19
|
+
readonly objects: readonly string[];
|
|
20
|
+
/** Labels of the previous forecast's column or row (前回発表予想, Previous forecast) and of the revised one's. */
|
|
21
|
+
readonly previous: readonly string[];
|
|
22
|
+
readonly revised: readonly string[];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type RevisionText = {
|
|
26
|
+
readonly text: string;
|
|
27
|
+
/** Where each section starts (its heading). The text before the first is a section of its own. */
|
|
28
|
+
readonly sectionStarts: readonly number[];
|
|
29
|
+
/** The sentences and headings a word of revision is read in, for the rows it names. */
|
|
30
|
+
readonly units: readonly Span[];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type Table = { readonly header: Line; readonly rows: readonly Line[] };
|
|
34
|
+
/** One item of a revision table: its label, and its previous and revised cells. */
|
|
35
|
+
export type RevisionItem = { readonly label: string; readonly previous: Cell; readonly revised: Cell };
|
|
36
|
+
type Hit = Span & { readonly sign: 1 | -1 };
|
|
37
|
+
type Signed = { readonly word: string; readonly sign: 1 | -1; readonly needsObject: boolean };
|
|
38
|
+
|
|
39
|
+
const LATIN = /^[A-Za-z]/u;
|
|
40
|
+
const LETTER = /\p{L}/u;
|
|
41
|
+
const NEGATIVE = /^[-−▲△]/u;
|
|
42
|
+
const CURRENCY = /^[$€£¥]/u;
|
|
43
|
+
const NUMBER = /^(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?/u;
|
|
44
|
+
/** What may follow the number: a unit (百万円, million), never another number or a range ("5,200〜5,400"). */
|
|
45
|
+
const UNIT = /^[^\d.,]*$/u;
|
|
46
|
+
const RISE: 1 | -1 = 1;
|
|
47
|
+
const FALL: 1 | -1 = -1;
|
|
48
|
+
|
|
49
|
+
/** The text with a leading match of the pattern taken off, and what was taken ("" when none). */
|
|
50
|
+
const takeLeading = (text: string, pattern: RegExp): readonly [string, string] => {
|
|
51
|
+
const taken = pattern.exec(text)?.[0] ?? "";
|
|
52
|
+
return [taken, text.slice(taken.length).trimStart()];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** Where a word stands: a Latin word as a whole word, case aside; anything else as written. */
|
|
56
|
+
export const spansOf = (text: string, word: string): Span[] => {
|
|
57
|
+
const pattern = LATIN.test(word) ? new RegExp(`\\b${escapeRegExp(word)}\\b`, "giu") : new RegExp(escapeRegExp(word), "gu");
|
|
58
|
+
return [...text.matchAll(pattern)].map((match) => ({ start: match.index, end: match.index + match[0].length }));
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const mentions = (text: string, words: readonly string[]): boolean => words.some((word) => spansOf(text, word).length > 0);
|
|
62
|
+
|
|
63
|
+
/** A cell's number with the unit written around it ("5,200", "△120", "$5,200 million"); undefined when it is anything else. */
|
|
64
|
+
export const amountOf = (cell: string): { readonly value: number; readonly unit: string } | undefined => {
|
|
65
|
+
const [sign, unsigned] = takeLeading(withoutEdgeMarks(cell).normalize("NFKC"), NEGATIVE);
|
|
66
|
+
const [currency, priced] = takeLeading(unsigned, CURRENCY);
|
|
67
|
+
const [digits, rest] = takeLeading(priced, NUMBER);
|
|
68
|
+
if (digits === "" || !UNIT.test(rest)) return undefined;
|
|
69
|
+
const magnitude = Number(digits.replaceAll(",", ""));
|
|
70
|
+
return { value: sign === "" ? magnitude : -magnitude, unit: [currency, rest.trim()].join("|") };
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** Which way an item moved: 1 up, -1 down; undefined when a cell is not a number, the units differ, or nothing moved. */
|
|
74
|
+
export const moveOf = (item: RevisionItem): 1 | -1 | undefined => {
|
|
75
|
+
const [previous, revised] = [amountOf(item.previous.text), amountOf(item.revised.text)];
|
|
76
|
+
if (previous === undefined || revised === undefined || previous.unit !== revised.unit || previous.value === revised.value) return undefined;
|
|
77
|
+
return revised.value > previous.value ? 1 : -1;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/** The one index whose label is of the group and not of the other ("前回予想" is previous, "今回予想" revised). */
|
|
81
|
+
const onlyIndex = (labels: readonly string[], group: readonly string[], other: readonly string[]): number | undefined => {
|
|
82
|
+
const indices = labels.flatMap((label, index) => (mentions(label, group) && !mentions(label, other) ? [index] : []));
|
|
83
|
+
return indices.length === 1 ? indices[0] : undefined;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const labelOf = (cell: Cell | undefined): string => withoutEdgeMarks(cell?.text ?? "");
|
|
87
|
+
|
|
88
|
+
/** Items in rows, the previous and revised forecasts in columns (| 項目 | 前回予想 | 今回予想 |). */
|
|
89
|
+
const itemsByRow = (header: readonly Cell[], rows: readonly Cell[][], words: RevisionWords): RevisionItem[] | undefined => {
|
|
90
|
+
const labels = header.map((cell) => labelOf(cell));
|
|
91
|
+
const [previous, revised] = [onlyIndex(labels, words.previous, words.revised), onlyIndex(labels, words.revised, words.previous)];
|
|
92
|
+
if (previous === undefined || revised === undefined || previous === 0 || revised === 0) return undefined;
|
|
93
|
+
return rows.flatMap((row) => {
|
|
94
|
+
const [label, before, after] = [labelOf(row[0]), row[previous], row[revised]];
|
|
95
|
+
return LETTER.test(label) && before !== undefined && after !== undefined ? [{ label, previous: before, revised: after }] : [];
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** Items in columns, the previous and revised forecasts in rows (| | 売上高 | 営業利益 | with a row 前回発表予想(A)). */
|
|
100
|
+
const itemsByColumn = (header: readonly Cell[], rows: readonly Cell[][], words: RevisionWords): RevisionItem[] | undefined => {
|
|
101
|
+
const labels = rows.map((row) => labelOf(row[0]));
|
|
102
|
+
const [previous, revised] = [onlyIndex(labels, words.previous, words.revised), onlyIndex(labels, words.revised, words.previous)];
|
|
103
|
+
if (previous === undefined || revised === undefined) return undefined;
|
|
104
|
+
return header.slice(1).flatMap((cell, index) => {
|
|
105
|
+
const [label, before, after] = [labelOf(cell), rows[previous]?.[index + 1], rows[revised]?.[index + 1]];
|
|
106
|
+
return LETTER.test(label) && before !== undefined && after !== undefined ? [{ label, previous: before, revised: after }] : [];
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/** The items of a revision table, in the order written; undefined when the table is not one. */
|
|
111
|
+
export const revisionItems = (table: Table, words: RevisionWords): RevisionItem[] | undefined => {
|
|
112
|
+
const header = cellsOf(table.header);
|
|
113
|
+
const rows = table.rows.map((row) => cellsOf(row));
|
|
114
|
+
return itemsByRow(header, rows, words) ?? itemsByColumn(header, rows, words);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const sectionOf = (offset: number, starts: readonly number[], length: number): Span => {
|
|
118
|
+
const start = starts.filter((at) => at <= offset).reduce((latest, at) => Math.max(latest, at), 0);
|
|
119
|
+
const end = starts.filter((at) => at > offset).reduce((earliest, at) => Math.min(earliest, at), length);
|
|
120
|
+
return { start, end };
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const tableSpan = (table: Table): Span => {
|
|
124
|
+
const last = table.rows.at(-1) ?? table.header;
|
|
125
|
+
return { start: table.header.start, end: last.start + last.text.length };
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const within = (outer: Span, inner: Span): boolean => inner.start >= outer.start && inner.end <= outer.end;
|
|
129
|
+
|
|
130
|
+
const signedWords = (words: RevisionWords): Signed[] => [
|
|
131
|
+
...words.rises.map((word) => ({ word, sign: RISE, needsObject: false })),
|
|
132
|
+
...words.falls.map((word) => ({ word, sign: FALL, needsObject: false })),
|
|
133
|
+
...words.risesWithObject.map((word) => ({ word, sign: RISE, needsObject: true })),
|
|
134
|
+
...words.fallsWithObject.map((word) => ({ word, sign: FALL, needsObject: true })),
|
|
135
|
+
];
|
|
136
|
+
|
|
137
|
+
/** The words of revision in the section, outside its tables; a verb that needs a word of forecast, with one in its sentence. */
|
|
138
|
+
const hitsIn = (input: RevisionText, section: Span, tables: readonly Span[], words: RevisionWords): Hit[] => {
|
|
139
|
+
const text = input.text.slice(section.start, section.end);
|
|
140
|
+
return signedWords(words).flatMap(({ word, sign, needsObject }) =>
|
|
141
|
+
spansOf(text, word)
|
|
142
|
+
.map((span) => ({ start: span.start + section.start, end: span.end + section.start, sign }))
|
|
143
|
+
.filter((hit) => !tables.some((table) => within(table, hit)))
|
|
144
|
+
.filter((hit) => !needsObject || mentions(unitTextOf(input, hit), words.objects)),
|
|
145
|
+
);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/** A word revises upward inside a phrase that revises downward ("下方修正" holds no "上方修正", but "revised downward" might). */
|
|
149
|
+
const outermost = (hits: readonly Hit[]): Hit[] =>
|
|
150
|
+
hits.filter((hit) => !hits.some((other) => other !== hit && within(other, hit) && other.end - other.start > hit.end - hit.start));
|
|
151
|
+
|
|
152
|
+
/** The text of the sentence or heading a word stands in, else of its line. */
|
|
153
|
+
const unitTextOf = (input: RevisionText, hit: Span): string => {
|
|
154
|
+
const unit = input.units.find((span) => within(span, hit));
|
|
155
|
+
if (unit !== undefined) return input.text.slice(unit.start, unit.end);
|
|
156
|
+
const line = linesOf(input.text).find((candidate) => candidate.start <= hit.start && hit.start <= candidate.start + candidate.text.length);
|
|
157
|
+
return line?.text ?? input.text.slice(hit.start, hit.end);
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const OPENING_BRACKET = /[((]/u;
|
|
161
|
+
|
|
162
|
+
/** A label as a sentence names it: as written, or without the brackets it ends with ("Operating profit (loss)", 「売上高(百万円)」). */
|
|
163
|
+
export const namesItem = (sentence: string, label: string): boolean => {
|
|
164
|
+
const core = (label.split(OPENING_BRACKET)[0] ?? "").trim();
|
|
165
|
+
return [label, core].some((name) => LETTER.test(name) && spansOf(sentence, name).length > 0);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** The items the sentences of the words name; with none named, the first item, the headline figure. */
|
|
169
|
+
const checkedItems = (input: RevisionText, hits: readonly Hit[], items: readonly RevisionItem[]): RevisionItem[] => {
|
|
170
|
+
const units = hits.map((hit) => unitTextOf(input, hit));
|
|
171
|
+
const named = items.filter((item) => units.some((unit) => namesItem(unit, item.label)));
|
|
172
|
+
if (named.length > 0) return named;
|
|
173
|
+
return items.slice(0, 1);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const issueOf = (item: RevisionItem, hit: Hit, input: RevisionText): StructureIssue => {
|
|
177
|
+
const lead = item.revised.text.length - item.revised.text.trimStart().length;
|
|
178
|
+
return {
|
|
179
|
+
offset: item.revised.start + lead,
|
|
180
|
+
values: {
|
|
181
|
+
word: input.text.slice(hit.start, hit.end),
|
|
182
|
+
item: item.label,
|
|
183
|
+
previous: withoutEdgeMarks(item.previous.text),
|
|
184
|
+
revised: withoutEdgeMarks(item.revised.text),
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* One revision table's mismatches. The words of the section must agree on one direction; the items checked must agree on
|
|
191
|
+
* one move (named items that moved both ways are about different words), and that move must be the other way.
|
|
192
|
+
*/
|
|
193
|
+
const tableIssues = (input: RevisionText, table: Table, tables: readonly Span[], words: RevisionWords): StructureIssue[] => {
|
|
194
|
+
const items = revisionItems(table, words);
|
|
195
|
+
const section = sectionOf(table.header.start, input.sectionStarts, input.text.length);
|
|
196
|
+
const hits = outermost(hitsIn(input, section, tables, words));
|
|
197
|
+
const signs = new Set(hits.map((hit) => hit.sign));
|
|
198
|
+
const [hit] = hits;
|
|
199
|
+
if (items === undefined || hit === undefined || signs.size !== 1) return [];
|
|
200
|
+
const checked = checkedItems(input, hits, items).flatMap((item) => {
|
|
201
|
+
const move = moveOf(item);
|
|
202
|
+
return move === undefined ? [] : [{ item, move }];
|
|
203
|
+
});
|
|
204
|
+
const moves = new Set(checked.map(({ move }) => move));
|
|
205
|
+
if (moves.size !== 1 || moves.has(hit.sign)) return [];
|
|
206
|
+
return checked.map(({ item }) => issueOf(item, hit, input));
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
/** Each revision table whose items move against the word of revision written in its section. */
|
|
210
|
+
export const revisionDirectionMismatches = (input: RevisionText, words: RevisionWords): StructureIssue[] => {
|
|
211
|
+
const tables = tablesOf(linesOf(input.text));
|
|
212
|
+
const spans = tables.map((table) => tableSpan(table));
|
|
213
|
+
return tables.flatMap((table) => tableIssues(input, table, spans, words));
|
|
214
|
+
};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// running-balance-mismatch: a table with a running balance column (a repayment schedule, an account ledger, a stock card),
|
|
2
|
+
// where each row's balance is the row above's less this row's principal (or payment), or plus what came in less what went out.
|
|
3
|
+
// The columns are named by their heading words only. Pure.
|
|
4
|
+
import type { StructureIssue } from "./issues.ts";
|
|
5
|
+
import { holds, plain, valueIn, type ChangeTable, type TableCell } from "./change-rate-table.ts";
|
|
6
|
+
|
|
7
|
+
export type BalanceRole = "date" | "sequence" | "balance" | "interest" | "principal" | "in" | "out" | "payment";
|
|
8
|
+
export type BalanceWord = { readonly pattern: string; readonly role: BalanceRole };
|
|
9
|
+
export type BalanceWords = { readonly columns: readonly BalanceWord[]; readonly totalLabels: readonly string[] };
|
|
10
|
+
|
|
11
|
+
/** A date column first (「お支払日」, "Payment date" are not payments), then the balance ("Balance after payment", 「残元金」). */
|
|
12
|
+
const ROLE_ORDER: readonly BalanceRole[] = ["date", "sequence", "balance", "interest", "principal", "in", "out", "payment"];
|
|
13
|
+
|
|
14
|
+
/** How a row moves the balance: down by its principal or payment (a loan), or up by what came in and down by what went out. */
|
|
15
|
+
export type BalanceColumns =
|
|
16
|
+
| { readonly kind: "loan"; readonly balance: number; readonly movement: number; readonly sequence?: number }
|
|
17
|
+
| { readonly kind: "ledger"; readonly balance: number; readonly in?: number; readonly out?: number; readonly sequence?: number };
|
|
18
|
+
|
|
19
|
+
/** A heading that names both directions ("Deposit/Withdrawal", 「入出金」) says neither: its sign is in each row, unread. */
|
|
20
|
+
const BOTH_WAYS = "both";
|
|
21
|
+
|
|
22
|
+
const roleOf = (heading: string, words: readonly BalanceWord[]): BalanceRole | typeof BOTH_WAYS | undefined => {
|
|
23
|
+
const key = plain(heading).toLowerCase();
|
|
24
|
+
const named = ROLE_ORDER.filter((role) => words.some((word) => word.role === role && holds(key, word.pattern)));
|
|
25
|
+
if (named.includes("in") && named.includes("out")) return BOTH_WAYS;
|
|
26
|
+
return named[0];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** The one column of a role: undefined when none or several carry it. */
|
|
30
|
+
const onlyIndex = (indexes: readonly number[]): number | undefined => (indexes.length === 1 ? indexes[0] : undefined);
|
|
31
|
+
|
|
32
|
+
const optional = (key: "in" | "out" | "sequence", index: number | undefined): Record<string, number> => (index === undefined ? {} : { [key]: index });
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The columns a table's headings name. A principal column is the movement; without one, a payment column is, but only when
|
|
36
|
+
* no interest column says part of the payment is not principal. A table with both loan and ledger columns is not read, and
|
|
37
|
+
* neither is one with no date or row-number column: its rows may be different accounts or items, not one balance over time.
|
|
38
|
+
*/
|
|
39
|
+
export const balanceColumnsOf = (headings: readonly string[], words: readonly BalanceWord[]): BalanceColumns | undefined => {
|
|
40
|
+
const roles = headings.map((heading) => roleOf(heading, words));
|
|
41
|
+
const all = (role: BalanceRole): number[] => roles.flatMap((found, index) => (found === role ? [index] : []));
|
|
42
|
+
const balance = onlyIndex(all("balance"));
|
|
43
|
+
const sequence = optional("sequence", onlyIndex(all("sequence")));
|
|
44
|
+
const overTime = all("date").length > 0 || all("sequence").length === 1;
|
|
45
|
+
if (balance === undefined || all("sequence").length > 1 || !overTime || roles.includes(BOTH_WAYS)) return undefined;
|
|
46
|
+
const loanColumns = all("principal").length + all("payment").length + all("interest").length;
|
|
47
|
+
const ledgerColumns = all("in").length + all("out").length;
|
|
48
|
+
if (ledgerColumns > 0) {
|
|
49
|
+
const [inColumn, outColumn] = [onlyIndex(all("in")), onlyIndex(all("out"))];
|
|
50
|
+
if (loanColumns > 0 || all("in").length > 1 || all("out").length > 1) return undefined;
|
|
51
|
+
return { kind: "ledger", balance, ...optional("in", inColumn), ...optional("out", outColumn), ...sequence };
|
|
52
|
+
}
|
|
53
|
+
const principal = all("principal").length > 0 ? onlyIndex(all("principal")) : undefined;
|
|
54
|
+
const payment = all("principal").length === 0 && all("interest").length === 0 ? onlyIndex(all("payment")) : undefined;
|
|
55
|
+
const movement = principal ?? payment;
|
|
56
|
+
return movement === undefined ? undefined : { kind: "loan", balance, movement, ...sequence };
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
type Amount = { readonly value: number; readonly step: number; readonly marks: string };
|
|
60
|
+
|
|
61
|
+
/** A cell that says nothing came in or went out: blank, or a dash. */
|
|
62
|
+
const NOTHING = /^[-−–—―ー-]?$/u;
|
|
63
|
+
|
|
64
|
+
const amountIn = (cell: TableCell | undefined): Amount | undefined => (cell === undefined ? undefined : valueIn(cell.text));
|
|
65
|
+
|
|
66
|
+
/** A ledger's in or out cell: blank or a dash is zero, written to no step. */
|
|
67
|
+
const ledgerAmount = (cell: TableCell | undefined, marks: string): Amount | undefined => {
|
|
68
|
+
if (cell === undefined || NOTHING.test(plain(cell.text))) return { value: 0, step: 0, marks };
|
|
69
|
+
return amountIn(cell);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/** The signed change a row makes to the balance, and how far rounding may move it; undefined when the row cannot say. */
|
|
73
|
+
type Change = { readonly value: number; readonly step: number };
|
|
74
|
+
|
|
75
|
+
const loanChange = (row: readonly TableCell[], movement: number, marks: string): Change | undefined => {
|
|
76
|
+
const amount = amountIn(row[movement]);
|
|
77
|
+
return amount === undefined || amount.marks !== marks ? undefined : { value: -amount.value, step: amount.step };
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/** In a ledger, a row whose in and out cells are both blank says nothing of a change (a brought-forward line). */
|
|
81
|
+
const ledgerChange = (row: readonly TableCell[], columns: { in?: number; out?: number }, marks: string): Change | undefined => {
|
|
82
|
+
const cellOf = (index: number | undefined): TableCell | undefined => (index === undefined ? undefined : row[index]);
|
|
83
|
+
const [came, went] = [cellOf(columns.in), cellOf(columns.out)];
|
|
84
|
+
if ([came, went].every((cell) => cell === undefined || NOTHING.test(plain(cell.text)))) return undefined;
|
|
85
|
+
const [inAmount, outAmount] = [ledgerAmount(came, marks), ledgerAmount(went, marks)];
|
|
86
|
+
if (inAmount === undefined || outAmount === undefined || inAmount.marks !== marks || outAmount.marks !== marks) return undefined;
|
|
87
|
+
return { value: inAmount.value - outAmount.value, step: inAmount.step + outAmount.step };
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const changeOf = (row: readonly TableCell[], columns: BalanceColumns, marks: string): Change | undefined =>
|
|
91
|
+
columns.kind === "loan" ? loanChange(row, columns.movement, marks) : ledgerChange(row, columns, marks);
|
|
92
|
+
|
|
93
|
+
/** A row number written as a whole number (1, 2, 3) in the sequence column; anything else in it is not counted. */
|
|
94
|
+
const WHOLE = /^\d+$/u;
|
|
95
|
+
/** Room for the binary fractions of decimal amounts (22,630.95 − 460.01), as a share of the rounding allowed. */
|
|
96
|
+
const EPSILON = 1e-6;
|
|
97
|
+
|
|
98
|
+
const balanceOf = (row: readonly TableCell[], columns: BalanceColumns): Amount | undefined => amountIn(row[columns.balance]);
|
|
99
|
+
|
|
100
|
+
const isTotalRow = (row: readonly TableCell[], labels: readonly string[]): boolean => {
|
|
101
|
+
const label = plain(row[0]?.text ?? "").toLowerCase();
|
|
102
|
+
return labels.some((word) => holds(label, word));
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/** The rows are in order: the numbers of the sequence column rise, and a loan's balance is lower at the end than at the start. */
|
|
106
|
+
const inOrder = (rows: readonly (readonly TableCell[])[], columns: BalanceColumns, labels: readonly string[]): boolean => {
|
|
107
|
+
const { sequence } = columns;
|
|
108
|
+
const texts = sequence === undefined ? [] : rows.map((row) => plain(row[sequence]?.text ?? ""));
|
|
109
|
+
const numbers = texts.filter((text) => WHOLE.test(text)).map(Number);
|
|
110
|
+
if (numbers.some((number, index) => index > 0 && number <= (numbers[index - 1] ?? 0))) return false;
|
|
111
|
+
const balances = rows.flatMap((row) => (isTotalRow(row, labels) ? [] : (balanceOf(row, columns) ?? [])));
|
|
112
|
+
const [first, last] = [balances[0], balances.at(-1)];
|
|
113
|
+
return columns.kind === "ledger" || first === undefined || last === undefined || last.value <= first.value;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/** The expected balance written the way the cell writes its own: the same decimals, thousands commas and marks (¥, 円, $). */
|
|
117
|
+
const shownAmount = (value: number, written: Amount, text: string): string => {
|
|
118
|
+
const decimals = Math.max(0, Math.round(-Math.log10(written.step)));
|
|
119
|
+
const useGrouping = text.includes(",");
|
|
120
|
+
const number = Math.abs(value).toLocaleString("en-US", { minimumFractionDigits: decimals, maximumFractionDigits: decimals, useGrouping });
|
|
121
|
+
const [before = "", after = ""] = written.marks.split("|");
|
|
122
|
+
return `${value < 0 ? "-" : ""}${before}${number}${after}`;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
type Walk = { readonly previous?: Amount; readonly issue?: StructureIssue };
|
|
126
|
+
|
|
127
|
+
/** One row's step: its balance is what the next row starts from. A row that cannot be read starts the chain again. */
|
|
128
|
+
const stepOf = (walk: Walk, row: readonly TableCell[], columns: BalanceColumns, labels: readonly string[]): Walk => {
|
|
129
|
+
const cell = row[columns.balance];
|
|
130
|
+
const balance = balanceOf(row, columns);
|
|
131
|
+
if (walk.issue !== undefined) return walk;
|
|
132
|
+
if (cell === undefined || balance === undefined || isTotalRow(row, labels)) return {};
|
|
133
|
+
const change = changeOf(row, columns, balance.marks);
|
|
134
|
+
const { previous } = walk;
|
|
135
|
+
if (previous === undefined || previous.marks !== balance.marks || change === undefined) return { previous: balance };
|
|
136
|
+
const expected = previous.value + change.value;
|
|
137
|
+
const tolerance = ((previous.step + change.step + balance.step) / 2) * (1 + EPSILON);
|
|
138
|
+
if (Math.abs(expected - balance.value) <= tolerance) return { previous: balance };
|
|
139
|
+
const offset = cell.start + (cell.text.length - cell.text.trimStart().length);
|
|
140
|
+
return { issue: { offset, values: { balance: plain(cell.text), computed: shownAmount(expected, balance, plain(cell.text)) } } };
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Each table's first row whose balance is not the row above's moved by this row. Only the first: a wrong balance makes the
|
|
145
|
+
* next row's sum wrong too, so the walk stops there instead of reporting every row after one slip.
|
|
146
|
+
*/
|
|
147
|
+
export const runningBalanceMismatches = (tables: readonly ChangeTable[], words: BalanceWords): StructureIssue[] =>
|
|
148
|
+
tables.flatMap((table) => {
|
|
149
|
+
const columns = balanceColumnsOf(
|
|
150
|
+
table.header.map((cell) => cell.text),
|
|
151
|
+
words.columns,
|
|
152
|
+
);
|
|
153
|
+
const rows = table.rows.filter((row) => row.length === table.header.length);
|
|
154
|
+
if (columns === undefined || !inOrder(rows, columns, words.totalLabels)) return [];
|
|
155
|
+
const walk = rows.reduce<Walk>((state, row) => stepOf(state, row, columns, words.totalLabels), {});
|
|
156
|
+
return walk.issue === undefined ? [] : [walk.issue];
|
|
157
|
+
});
|
|
@@ -2,6 +2,7 @@ import type { Span } from "../plugin.ts";
|
|
|
2
2
|
import { escapeRegExp } from "../orthography.ts";
|
|
3
3
|
import { cellsOf, tablesOf, type Cell } from "../facts/table-facts.ts";
|
|
4
4
|
import { measuredValues, type MeasureUnit } from "../facts/measures.ts";
|
|
5
|
+
import { hasSuperscriptPower } from "../facts/superscript-power.ts";
|
|
5
6
|
import { withoutEdgeMarks } from "../facts/trim-marks.ts";
|
|
6
7
|
import { linesOf, type Line } from "./lines.ts";
|
|
7
8
|
import type { Mark } from "./time-marks.ts";
|
|
@@ -93,19 +94,32 @@ const VULGAR_AFTER_DIGIT = /([0-90-9])([¼½¾⅐-⅞])/gu;
|
|
|
93
94
|
|
|
94
95
|
const normalized = (cellText: string): string => withoutEdgeMarks(cellText.replace(VULGAR_AFTER_DIGIT, "$1 $2").normalize("NFKC").trim());
|
|
95
96
|
|
|
96
|
-
/**
|
|
97
|
+
/** The lexicon's units as NFKC writes them (m² and ㎡ are m2), so they match a cell that has been through NFKC. */
|
|
98
|
+
const nfkcMeasures = (measures: readonly MeasureUnit[]): MeasureUnit[] => measures.map((unit) => ({ ...unit, pattern: unit.pattern.normalize("NFKC") }));
|
|
99
|
+
|
|
100
|
+
/** The cell's first number with a measure unit after it that ends the cell. A digit inside the unit (the 2 of m2) is not a second number. */
|
|
101
|
+
const measuredAmount = (text: string, numbers: readonly RegExpMatchArray[], measures: readonly MeasureUnit[]): Amount | undefined => {
|
|
102
|
+
const [first] = numbers;
|
|
103
|
+
const [measured] = measuredValues(text, measures);
|
|
104
|
+
const factor = measured?.factors[0];
|
|
105
|
+
if (first === undefined || measured === undefined || factor === undefined) return undefined;
|
|
106
|
+
if (measured.start !== first.index || measured.end !== text.length) return undefined;
|
|
107
|
+
const unitStart = measured.end - measured.unit.length;
|
|
108
|
+
if (numbers.some((number) => number !== first && (number.index ?? 0) < unitStart)) return undefined;
|
|
109
|
+
return { amount: measured.amount * factor, written: measured.amount, unit: `=${measured.dimension}` };
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/** One cell's amount and the unit it is in. undefined when the cell holds no number, or more than one (1と1/2, 2 (300 g), 10³). */
|
|
97
113
|
export const amountOf = (cellText: string, words: ScaleWords): Amount | undefined => {
|
|
114
|
+
if (hasSuperscriptPower(cellText)) return undefined;
|
|
98
115
|
const text = normalized(cellText);
|
|
99
116
|
const numbers = [...text.matchAll(AMOUNT)];
|
|
117
|
+
const measured = measuredAmount(text, numbers, nfkcMeasures(words.measures));
|
|
118
|
+
if (measured !== undefined) return measured;
|
|
100
119
|
const [only] = numbers;
|
|
101
120
|
if (numbers.length !== 1 || only === undefined) return undefined;
|
|
102
121
|
const written = valueOf(only);
|
|
103
122
|
if (!Number.isFinite(written)) return undefined;
|
|
104
|
-
const [measured] = measuredValues(text, words.measures);
|
|
105
|
-
const factor = measured?.factors[0];
|
|
106
|
-
if (measured !== undefined && factor !== undefined && measured.start === only.index && measured.end === text.length) {
|
|
107
|
-
return { amount: measured.amount * factor, written: measured.amount, unit: `=${measured.dimension}` };
|
|
108
|
-
}
|
|
109
123
|
return { amount: written, written, unit: unitKey(text, { start: only.index, end: only.index + only[0].length }, words.unitForms) };
|
|
110
124
|
};
|
|
111
125
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// serial-range-reversed: the serial, lot and batch codes that may be one end of a range (A2400〜A1800, SN-1200 to SN-0900),
|
|
2
|
+
// read as the ends structure/amount-range.ts compares, and the ranges a serial label on their line makes ranges of codes. Pure.
|
|
3
|
+
import { escapeRegExp } from "../orthography.ts";
|
|
4
|
+
import type { StructureIssue } from "./issues.ts";
|
|
5
|
+
import type { RangeAmount } from "./amount-range.ts";
|
|
6
|
+
|
|
7
|
+
/** Fewer digits than this are a section or a grade (A1, B12), not a serial number. */
|
|
8
|
+
const MIN_DIGITS = 3;
|
|
9
|
+
|
|
10
|
+
/** One to four capital letters, an optional hyphen, the digits; not inside a longer word or number (XA2400, A2400B). */
|
|
11
|
+
const CODE = new RegExp(`(?<![A-Za-zA-Za-z0-90-9_])([A-ZA-Z]{1,4})([-‐-]?)([0-90-9]{${MIN_DIGITS},})(?![A-Za-zA-Za-z0-90-9_])`, "gu");
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A code as one end of a range: two ends compare only when their letters, their hyphen and their number of digits agree
|
|
15
|
+
* (A2400 with A1800; not with B0100, A-1800 or A240).
|
|
16
|
+
*/
|
|
17
|
+
const rangeEndOf = (match: RegExpMatchArray): RangeAmount => {
|
|
18
|
+
const [whole, letters = "", hyphen = "", digits = ""] = match;
|
|
19
|
+
const offset = match.index ?? 0;
|
|
20
|
+
const width = digits.length;
|
|
21
|
+
return {
|
|
22
|
+
offset,
|
|
23
|
+
end: offset + whole.length,
|
|
24
|
+
currency: `${letters.normalize("NFKC")}|${hyphen === "" ? "" : "-"}|${width}`,
|
|
25
|
+
value: Number(digits.normalize("NFKC")),
|
|
26
|
+
scale: undefined,
|
|
27
|
+
position: "after",
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** The serial-shaped codes in the text, as range ends, in document order. */
|
|
32
|
+
export const serialRangeEnds = (text: string): RangeAmount[] => [...text.matchAll(CODE)].map(rangeEndOf);
|
|
33
|
+
|
|
34
|
+
/** A number pattern that never matches: a bare number never shares a code's letters (A2400〜1800 is not read). */
|
|
35
|
+
export const NO_BARE_NUMBER = "(?!)";
|
|
36
|
+
|
|
37
|
+
const LATIN = /^[A-Za-z]/u;
|
|
38
|
+
|
|
39
|
+
const labelPattern = (label: string): RegExp => {
|
|
40
|
+
const escaped = escapeRegExp(label.toLowerCase());
|
|
41
|
+
return new RegExp(LATIN.test(label) ? `(?<![a-z0-9_])${escaped}(?![a-z0-9_])` : escaped, "u");
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/** Whether a serial label stands on the line before the range (製造番号:A2400〜A1800, Lots L5240 through L5210). */
|
|
45
|
+
const labelled = (text: string, offset: number, labels: readonly string[]): boolean => {
|
|
46
|
+
const before = text.slice(text.lastIndexOf("\n", offset - 1) + 1, offset).toLowerCase();
|
|
47
|
+
return labels.some((label) => labelPattern(label).test(before));
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** The reversed ranges of codes that a serial label on their line names as serial, lot or batch numbers. */
|
|
51
|
+
export const labelledRanges = (text: string, issues: readonly StructureIssue[], labels: readonly string[]): StructureIssue[] =>
|
|
52
|
+
issues.filter((issue) => labelled(text, issue.offset, labels));
|