@whiteslove/parsing-lexicon 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/index.d.ts +374 -374
  4. package/package.json +77 -75
  5. package/src/central-asia-locations.js +211 -211
  6. package/src/central-asia.js +233 -233
  7. package/src/contact.d.ts +44 -44
  8. package/src/contact.js +159 -159
  9. package/src/countries.js +175 -175
  10. package/src/country-context.d.ts +10 -10
  11. package/src/country-context.js +22 -22
  12. package/src/currency.d.ts +14 -14
  13. package/src/currency.js +66 -66
  14. package/src/geo.js +169 -169
  15. package/src/geography-central-asia.js +42 -42
  16. package/src/geography-detection.d.ts +14 -14
  17. package/src/geography-detection.js +64 -64
  18. package/src/geography-display.d.ts +13 -13
  19. package/src/geography-display.js +113 -113
  20. package/src/geography.js +210 -210
  21. package/src/hiring-advanced.js +147 -147
  22. package/src/hiring-candidate-fields.d.ts +9 -9
  23. package/src/hiring-candidate-fields.js +92 -92
  24. package/src/hiring-context.d.ts +64 -64
  25. package/src/hiring-context.js +412 -412
  26. package/src/hiring-language-extensions.d.ts +19 -19
  27. package/src/hiring-language-extensions.js +139 -139
  28. package/src/hiring-languages.js +135 -135
  29. package/src/hiring-location-fields.d.ts +3 -3
  30. package/src/hiring-location-fields.js +53 -53
  31. package/src/hiring-professions-ro.js +191 -191
  32. package/src/hiring-professions.js +437 -437
  33. package/src/hiring-requirements.d.ts +16 -16
  34. package/src/hiring-requirements.js +170 -170
  35. package/src/hiring-salary-context.d.ts +27 -27
  36. package/src/hiring-salary-context.js +76 -76
  37. package/src/hiring-semantics.d.ts +29 -29
  38. package/src/hiring-semantics.js +218 -218
  39. package/src/hiring-skills.d.ts +21 -21
  40. package/src/hiring-skills.js +315 -315
  41. package/src/hiring-source-aliases.d.ts +32 -32
  42. package/src/hiring-source-aliases.js +185 -185
  43. package/src/hiring-source-semantics.d.ts +31 -31
  44. package/src/hiring-source-semantics.js +293 -293
  45. package/src/hiring-temporal.d.ts +15 -15
  46. package/src/hiring-temporal.js +67 -67
  47. package/src/hiring-vacancy-fields.d.ts +5 -5
  48. package/src/hiring-vacancy-fields.js +23 -23
  49. package/src/hiring-work-semantics.d.ts +34 -34
  50. package/src/hiring-work-semantics.js +72 -72
  51. package/src/hiring.js +180 -180
  52. package/src/housing-address.d.ts +18 -18
  53. package/src/housing-address.js +217 -210
  54. package/src/housing-commercial.d.ts +1 -0
  55. package/src/housing-commercial.js +9 -0
  56. package/src/housing-context.d.ts +36 -36
  57. package/src/housing-context.js +183 -183
  58. package/src/housing-features.js +30 -30
  59. package/src/housing-intent.d.ts +9 -9
  60. package/src/housing-intent.js +132 -132
  61. package/src/housing-listing-fields.js +131 -131
  62. package/src/housing-money.d.ts +7 -7
  63. package/src/housing-money.js +102 -102
  64. package/src/housing-source-aliases.d.ts +8 -8
  65. package/src/housing-source-aliases.js +51 -51
  66. package/src/housing-structured.d.ts +55 -55
  67. package/src/housing-structured.js +219 -219
  68. package/src/housing.js +200 -200
  69. package/src/index.js +45 -44
  70. package/src/kz-location-extensions.js +307 -307
  71. package/src/landmarks.js +21 -21
  72. package/src/lexicon-core.js +58 -58
  73. package/src/location-merge.js +106 -106
  74. package/src/locations.js +456 -456
  75. package/src/money-core.d.ts +10 -10
  76. package/src/money-core.js +81 -81
  77. package/src/money-lexicon.d.ts +5 -5
  78. package/src/money-lexicon.js +79 -79
  79. package/src/money.js +154 -154
  80. package/src/normalization.js +384 -384
  81. package/src/odesa-metropolitan.js +144 -144
  82. package/src/romania-geography.js +47 -47
  83. package/src/tashkent-colloquial.js +80 -72
  84. package/src/tashkent-housing-geography.d.ts +38 -38
  85. package/src/tashkent-housing-geography.js +211 -211
  86. package/src/tashkent-pois.js +215 -215
  87. package/src/tashkent-residential-complexes.js +272 -272
  88. package/src/ua-location-extensions-major.js +118 -118
  89. package/src/ua-location-extensions-metro.js +9 -9
  90. package/src/ua-location-extensions-regional.js +246 -246
  91. package/src/ua-secondary-cities.d.ts +2 -2
  92. package/src/ua-secondary-cities.js +57 -57
  93. package/src/ukraine.js +75 -75
  94. package/src/uz-location-extensions.js +259 -259
@@ -1,10 +1,10 @@
1
- export const MONEY_NUMBER_PATTERN: string;
2
- export const MONEY_SCALE_PATTERN: string;
3
- export const MONEY_RANGE_RE: RegExp;
4
- export const MONEY_SINGLE_RE: RegExp;
5
- export function parseNumericAmount(raw: unknown): number | null;
6
- export function moneyScaleMultiplier(raw: unknown): number;
7
- export function parseScaledAmount(raw: unknown, scale?: unknown): number | null;
8
- export function moneyCurrencyCandidatesFromText(value: unknown): readonly string[];
9
- export function moneyCurrencyFromText(value: unknown, fallbackCurrency?: string | null): string | null;
10
- export function moneyCurrencyPattern(): string;
1
+ export const MONEY_NUMBER_PATTERN: string;
2
+ export const MONEY_SCALE_PATTERN: string;
3
+ export const MONEY_RANGE_RE: RegExp;
4
+ export const MONEY_SINGLE_RE: RegExp;
5
+ export function parseNumericAmount(raw: unknown): number | null;
6
+ export function moneyScaleMultiplier(raw: unknown): number;
7
+ export function parseScaledAmount(raw: unknown, scale?: unknown): number | null;
8
+ export function moneyCurrencyCandidatesFromText(value: unknown): readonly string[];
9
+ export function moneyCurrencyFromText(value: unknown, fallbackCurrency?: string | null): string | null;
10
+ export function moneyCurrencyPattern(): string;
package/src/money-core.js CHANGED
@@ -1,81 +1,81 @@
1
- import { aliasesOf, findCanonical } from './normalization.js';
2
- import {
3
- CURRENCY_SYMBOL_CANDIDATES,
4
- CURRENCY_TERMS,
5
- NUMBER_MULTIPLIERS,
6
- } from './money-lexicon.js';
7
-
8
- export const MONEY_NUMBER_PATTERN = '\\d{1,3}(?:[ \\u00a0.,]\\d{3})+|\\d+(?:[.,]\\d+)?';
9
- export const MONEY_SCALE_PATTERN = 'k|к|тыс\\.?|тысяч(?:а|и)?|тис\\.?|thousand|ming|мың|m|м|млн\\.?|mln|million|миллион(?:ов)?|мільйон(?:ів)?|bn|млрд|mlrd|billion';
10
- export const MONEY_RANGE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?\\s*(?:-|–|—|до|to|bis|dan\\s+gacha)\\s*(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?`, 'iu');
11
- export const MONEY_SINGLE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?(?=$|[^\\p{L}\\p{N}_])`, 'giu');
12
-
13
- export function parseNumericAmount(raw) {
14
- let value = String(raw || '').replace(/\u00a0/g, ' ').trim();
15
- if (!value) return null;
16
- const grouped = /\d[ ,.]\d{3}(?:[ ,.]\d{3})*/.test(value);
17
- if (grouped) value = value.replace(/[ ,.]/g, '');
18
- else value = value.replace(/\s+/g, '').replace(',', '.');
19
- const parsed = Number(value);
20
- return Number.isFinite(parsed) ? parsed : null;
21
- }
22
-
23
- export function moneyScaleMultiplier(raw) {
24
- if (!raw) return 1;
25
- return findCanonical(raw, NUMBER_MULTIPLIERS)?.multiplier || 1;
26
- }
27
-
28
- export function parseScaledAmount(raw, scale) {
29
- const value = parseNumericAmount(raw);
30
- return value == null ? null : value * moneyScaleMultiplier(scale);
31
- }
32
-
33
- function explicitCurrencyFromText(value) {
34
- const text = String(value || '');
35
- // Ambiguous glyphs are removed so they cannot hide an explicit ISO/name token.
36
- const lexicalText = text.replace(/[$¥¥]/g, ' ');
37
- return findCanonical(lexicalText, CURRENCY_TERMS, { partial: true })?.canonical || null;
38
- }
39
-
40
- export function moneyCurrencyCandidatesFromText(value) {
41
- const text = String(value || '');
42
- const candidates = [];
43
- const add = (currency) => {
44
- if (currency && !candidates.includes(currency)) candidates.push(currency);
45
- };
46
-
47
- add(explicitCurrencyFromText(text));
48
-
49
- for (const [symbol, currencies] of Object.entries(CURRENCY_SYMBOL_CANDIDATES)) {
50
- if (!text.includes(symbol)) continue;
51
- for (const currency of currencies) add(currency);
52
- }
53
-
54
- if (!candidates.length) {
55
- add(findCanonical(text, CURRENCY_TERMS, { partial: true })?.canonical);
56
- }
57
-
58
- return Object.freeze(candidates);
59
- }
60
-
61
- export function moneyCurrencyFromText(value, fallbackCurrency = null) {
62
- const explicit = explicitCurrencyFromText(value);
63
- if (explicit) return explicit;
64
-
65
- const candidates = moneyCurrencyCandidatesFromText(value);
66
- if (!candidates.length) return fallbackCurrency;
67
- const fallback = String(fallbackCurrency || '').trim().toUpperCase();
68
- if (fallback && candidates.includes(fallback)) return fallback;
69
- return candidates[0];
70
- }
71
-
72
- function escapeRegex(value) {
73
- return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
74
- }
75
-
76
- export function moneyCurrencyPattern() {
77
- return [...new Set(CURRENCY_TERMS.flatMap((entry) => [entry.canonical, ...aliasesOf(entry)]).filter(Boolean))]
78
- .sort((a, b) => String(b).length - String(a).length)
79
- .map(escapeRegex)
80
- .join('|');
81
- }
1
+ import { aliasesOf, findCanonical } from './normalization.js';
2
+ import {
3
+ CURRENCY_SYMBOL_CANDIDATES,
4
+ CURRENCY_TERMS,
5
+ NUMBER_MULTIPLIERS,
6
+ } from './money-lexicon.js';
7
+
8
+ export const MONEY_NUMBER_PATTERN = '\\d{1,3}(?:[ \\u00a0.,]\\d{3})+|\\d+(?:[.,]\\d+)?';
9
+ export const MONEY_SCALE_PATTERN = 'k|к|тыс\\.?|тысяч(?:а|и)?|тис\\.?|thousand|ming|мың|m|м|млн\\.?|mln|million|миллион(?:ов)?|мільйон(?:ів)?|bn|млрд|mlrd|billion';
10
+ export const MONEY_RANGE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?\\s*(?:-|–|—|до|to|bis|dan\\s+gacha)\\s*(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?`, 'iu');
11
+ export const MONEY_SINGLE_RE = new RegExp(`(${MONEY_NUMBER_PATTERN})\\s*(${MONEY_SCALE_PATTERN})?(?=$|[^\\p{L}\\p{N}_])`, 'giu');
12
+
13
+ export function parseNumericAmount(raw) {
14
+ let value = String(raw || '').replace(/\u00a0/g, ' ').trim();
15
+ if (!value) return null;
16
+ const grouped = /\d[ ,.]\d{3}(?:[ ,.]\d{3})*/.test(value);
17
+ if (grouped) value = value.replace(/[ ,.]/g, '');
18
+ else value = value.replace(/\s+/g, '').replace(',', '.');
19
+ const parsed = Number(value);
20
+ return Number.isFinite(parsed) ? parsed : null;
21
+ }
22
+
23
+ export function moneyScaleMultiplier(raw) {
24
+ if (!raw) return 1;
25
+ return findCanonical(raw, NUMBER_MULTIPLIERS)?.multiplier || 1;
26
+ }
27
+
28
+ export function parseScaledAmount(raw, scale) {
29
+ const value = parseNumericAmount(raw);
30
+ return value == null ? null : value * moneyScaleMultiplier(scale);
31
+ }
32
+
33
+ function explicitCurrencyFromText(value) {
34
+ const text = String(value || '');
35
+ // Ambiguous glyphs are removed so they cannot hide an explicit ISO/name token.
36
+ const lexicalText = text.replace(/[$¥¥]/g, ' ');
37
+ return findCanonical(lexicalText, CURRENCY_TERMS, { partial: true })?.canonical || null;
38
+ }
39
+
40
+ export function moneyCurrencyCandidatesFromText(value) {
41
+ const text = String(value || '');
42
+ const candidates = [];
43
+ const add = (currency) => {
44
+ if (currency && !candidates.includes(currency)) candidates.push(currency);
45
+ };
46
+
47
+ add(explicitCurrencyFromText(text));
48
+
49
+ for (const [symbol, currencies] of Object.entries(CURRENCY_SYMBOL_CANDIDATES)) {
50
+ if (!text.includes(symbol)) continue;
51
+ for (const currency of currencies) add(currency);
52
+ }
53
+
54
+ if (!candidates.length) {
55
+ add(findCanonical(text, CURRENCY_TERMS, { partial: true })?.canonical);
56
+ }
57
+
58
+ return Object.freeze(candidates);
59
+ }
60
+
61
+ export function moneyCurrencyFromText(value, fallbackCurrency = null) {
62
+ const explicit = explicitCurrencyFromText(value);
63
+ if (explicit) return explicit;
64
+
65
+ const candidates = moneyCurrencyCandidatesFromText(value);
66
+ if (!candidates.length) return fallbackCurrency;
67
+ const fallback = String(fallbackCurrency || '').trim().toUpperCase();
68
+ if (fallback && candidates.includes(fallback)) return fallback;
69
+ return candidates[0];
70
+ }
71
+
72
+ function escapeRegex(value) {
73
+ return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
74
+ }
75
+
76
+ export function moneyCurrencyPattern() {
77
+ return [...new Set(CURRENCY_TERMS.flatMap((entry) => [entry.canonical, ...aliasesOf(entry)]).filter(Boolean))]
78
+ .sort((a, b) => String(b).length - String(a).length)
79
+ .map(escapeRegex)
80
+ .join('|');
81
+ }
@@ -1,5 +1,5 @@
1
- export const CURRENCY_TERMS: readonly import('../index.d.ts').LexiconEntity[];
2
- export const CURRENCY_SYMBOL_CANDIDATES: Readonly<Record<string, readonly string[]>>;
3
- export const SALARY_PERIODS: readonly import('../index.d.ts').LexiconEntity[];
4
- export const SALARY_MODIFIERS: Readonly<Record<string, import('../index.d.ts').LexiconEntity>>;
5
- export const NUMBER_MULTIPLIERS: readonly import('../index.d.ts').LexiconEntity[];
1
+ export const CURRENCY_TERMS: readonly import('../index.d.ts').LexiconEntity[];
2
+ export const CURRENCY_SYMBOL_CANDIDATES: Readonly<Record<string, readonly string[]>>;
3
+ export const SALARY_PERIODS: readonly import('../index.d.ts').LexiconEntity[];
4
+ export const SALARY_MODIFIERS: Readonly<Record<string, import('../index.d.ts').LexiconEntity>>;
5
+ export const NUMBER_MULTIPLIERS: readonly import('../index.d.ts').LexiconEntity[];
@@ -1,79 +1,79 @@
1
- import { lexiconEntity } from './lexicon-core.js';
2
-
3
- const group = (canonical, aliases, extra = {}) => lexiconEntity(canonical, aliases, extra);
4
-
5
- export const CURRENCY_TERMS = Object.freeze([
6
- group('USD', { ru: ['$', 'usd', 'доллар', 'доллара', 'долларов', 'бакс', 'у.е.', 'у е'], en: ['$', 'usd', 'dollar', 'dollars', 'us dollar'], uk: ['$', 'usd', 'долар', 'долари', 'доларів'], ro: ['$', 'usd', 'dolar', 'dolari'], uzLatn: ['$', 'usd', 'dollar'], uzCyrl: ['$', 'доллар'], kk: ['$', 'usd', 'доллар'] }),
7
- group('EUR', { ru: ['€', 'eur', 'евро'], en: ['€', 'eur', 'euro', 'euros'], uk: ['€', 'eur', 'євро'], ro: ['€', 'eur', 'euro'], uzLatn: ['€', 'eur', 'yevro'], uzCyrl: ['€', 'евро'], kk: ['€', 'eur', 'еуро'] }),
8
- group('UZS', { ru: ['сум', 'сумов', 'узс'], en: ['uzs', 'uzbek som'], uk: ['uzs', 'сум'], ro: ['uzs'], uzLatn: ["so'm", 'so‘m', 'soʻm', 'sum', 'uzs'], uzCyrl: ['сўм', 'сум'], kk: ['uzs'] }),
9
- group('KZT', { ru: ['тенге', 'тг', 'kzt'], en: ['kzt', 'tenge'], uk: ['тенге', 'kzt'], ro: ['kzt', 'tenge'], uzLatn: ['kzt', 'tenge'], uzCyrl: ['kzt', 'тенге'], kk: ['теңге', 'тенге', 'тг', 'kzt'] }),
10
- group('UAH', { ru: ['грн', 'гривна', 'гривны', 'гривен', '₴', 'uah'], en: ['uah', 'hryvnia', 'hryvnias', '₴'], uk: ['грн', 'гривня', 'гривні', 'гривень', '₴', 'uah'], ro: ['uah', 'hrivne', 'grivne'], uzLatn: ['uah'], uzCyrl: ['uah'], kk: ['uah'] }),
11
- group('RUB', { ru: ['₽', 'руб', 'руб.', 'рубль', 'рубля', 'рублей', 'rub', 'rur'], en: ['₽', 'rub', 'rur', 'ruble', 'rubles'], uk: ['₽', 'руб', 'рублів', 'rub'], ro: ['₽', 'rub', 'ruble'], uzLatn: ['₽', 'rub', 'rubl'], uzCyrl: ['₽', 'рубль'], kk: ['₽', 'rub', 'рубль'] }),
12
- group('GBP', { ru: ['£', 'gbp', 'фунт', 'фунтов'], en: ['£', 'gbp', 'pound', 'pounds', 'sterling'], uk: ['£', 'gbp', 'фунт', 'фунтів'], ro: ['£', 'gbp', 'liră sterlină', 'lira sterlina'], uzLatn: ['£', 'gbp', 'funt'], uzCyrl: ['£', 'фунт'], kk: ['£', 'gbp', 'фунт'] }),
13
- group('TRY', { ru: ['₺', 'try', 'лира', 'лир'], en: ['₺', 'try', 'turkish lira'], uk: ['₺', 'try', 'ліра', 'лір'], ro: ['₺', 'try', 'liră turcească', 'lira turceasca'], uzLatn: ['₺', 'try', 'lira'], uzCyrl: ['₺', 'лира'], kk: ['₺', 'try', 'лира'] }),
14
- group('GEL', { ru: ['₾', 'gel', 'лари'], en: ['₾', 'gel', 'lari'], uk: ['₾', 'gel', 'ларі'], ro: ['₾', 'gel', 'lari'], uzLatn: ['₾', 'gel', 'lari'], uzCyrl: ['₾', 'лари'], kk: ['₾', 'gel', 'лари'] }),
15
- group('AED', { ru: ['aed', 'дирхам', 'дирхамов'], en: ['aed', 'dirham', 'dirhams'], uk: ['aed', 'дирхам', 'дирхамів'], ro: ['aed', 'dirham'], uzLatn: ['aed', 'dirham'], uzCyrl: ['aed', 'дирҳам'], kk: ['aed', 'дирхам'] }),
16
- group('PLN', { ru: ['pln', 'злотый', 'злотых'], en: ['pln', 'zloty', 'zł'], uk: ['pln', 'злотий', 'злотих'], ro: ['pln', 'zlot'], uzLatn: ['pln', 'zloty'], uzCyrl: ['pln'], kk: ['pln'] }),
17
- group('RON', { ru: ['ron', 'лей', 'леев'], en: ['ron', 'romanian leu', 'lei'], uk: ['ron', 'лей', 'леїв'], ro: ['ron', 'leu', 'lei'], uzLatn: ['ron'], uzCyrl: ['ron'], kk: ['ron'] }),
18
- group('KGS', { ru: ['kgs', 'сом', 'сомов'], en: ['kgs', 'kyrgyz som'], uk: ['kgs', 'сом'], ro: ['kgs'], uzLatn: ['kgs', 'som'], uzCyrl: ['kgs', 'сом'], kk: ['kgs', 'сом'] }),
19
- group('CHF', { ru: ['chf', 'швейцарский франк', 'швейцарских франков'], en: ['chf', 'swiss franc', 'swiss francs'], uk: ['chf', 'швейцарський франк'], ro: ['chf', 'franc elvețian', 'franc elvetian'], uzLatn: ['chf', 'shveytsariya franki'], uzCyrl: ['chf'], kk: ['chf', 'швейцар франкі'] }),
20
- group('CNY', { ru: ['cny', 'rmb', 'юань', 'юаней', '元'], en: ['cny', 'rmb', 'yuan', 'renminbi', '元'], uk: ['cny', 'юань', 'юанів'], ro: ['cny', 'yuan'], uzLatn: ['cny', 'yuan'], uzCyrl: ['cny', 'юань'], kk: ['cny', 'юань'] }),
21
- group('JPY', { ru: ['jpy', 'иена', 'иены', 'иен', '円'], en: ['jpy', 'yen', 'japanese yen', '円'], uk: ['jpy', 'єна', 'єн'], ro: ['jpy', 'yen'], uzLatn: ['jpy', 'yen'], uzCyrl: ['jpy', 'иена'], kk: ['jpy', 'иена'] }),
22
- group('KRW', { ru: ['₩', 'krw', 'вона', 'вон'], en: ['₩', 'krw', 'won', 'south korean won'], uk: ['₩', 'krw', 'вона'], ro: ['₩', 'krw', 'won'], uzLatn: ['₩', 'krw', 'won'], uzCyrl: ['₩', 'krw'], kk: ['₩', 'krw', 'вон'] }),
23
- group('CAD', { ru: ['cad', 'канадский доллар', 'канадских долларов'], en: ['cad', 'canadian dollar', 'canadian dollars'], uk: ['cad', 'канадський долар'], ro: ['cad', 'dolar canadian'], uzLatn: ['cad', 'kanada dollari'], uzCyrl: ['cad'], kk: ['cad', 'канада доллары'] }),
24
- group('AUD', { ru: ['aud', 'австралийский доллар', 'австралийских долларов'], en: ['aud', 'australian dollar', 'australian dollars'], uk: ['aud', 'австралійський долар'], ro: ['aud', 'dolar australian'], uzLatn: ['aud', 'avstraliya dollari'], uzCyrl: ['aud'], kk: ['aud', 'австралия доллары'] }),
25
- group('NZD', { ru: ['nzd', 'новозеландский доллар'], en: ['nzd', 'new zealand dollar', 'new zealand dollars'], uk: ['nzd', 'новозеландський долар'], ro: ['nzd', 'dolar neozeelandez'], uzLatn: ['nzd'], uzCyrl: ['nzd'], kk: ['nzd'] }),
26
- group('SGD', { ru: ['sgd', 'сингапурский доллар'], en: ['sgd', 'singapore dollar', 'singapore dollars'], uk: ['sgd', 'сінгапурський долар'], ro: ['sgd', 'dolar singaporez'], uzLatn: ['sgd'], uzCyrl: ['sgd'], kk: ['sgd'] }),
27
- group('HKD', { ru: ['hkd', 'гонконгский доллар'], en: ['hkd', 'hong kong dollar', 'hong kong dollars'], uk: ['hkd', 'гонконзький долар'], ro: ['hkd', 'dolar hong kong'], uzLatn: ['hkd'], uzCyrl: ['hkd'], kk: ['hkd'] }),
28
- group('INR', { ru: ['₹', 'inr', 'рупия', 'рупии', 'рупий'], en: ['₹', 'inr', 'indian rupee', 'indian rupees', 'rupee', 'rupees'], uk: ['₹', 'inr', 'рупія', 'рупій'], ro: ['₹', 'inr', 'rupie indiană', 'rupie indiana'], uzLatn: ['₹', 'inr', 'rupiya'], uzCyrl: ['₹', 'inr'], kk: ['₹', 'inr', 'рупия'] }),
29
- group('CZK', { ru: ['czk', 'чешская крона', 'чешских крон'], en: ['czk', 'czech koruna', 'czech crown'], uk: ['czk', 'чеська крона'], ro: ['czk', 'coroană cehă', 'coroana ceha'], uzLatn: ['czk'], uzCyrl: ['czk'], kk: ['czk'] }),
30
- group('HUF', { ru: ['huf', 'форинт', 'форинтов'], en: ['huf', 'forint', 'hungarian forint'], uk: ['huf', 'форинт'], ro: ['huf', 'forint'], uzLatn: ['huf'], uzCyrl: ['huf'], kk: ['huf'] }),
31
- group('BGN', { ru: ['bgn', 'лев', 'лева', 'левов'], en: ['bgn', 'bulgarian lev', 'lev'], uk: ['bgn', 'болгарський лев'], ro: ['bgn', 'leva bulgărească', 'leva bulgareasca'], uzLatn: ['bgn'], uzCyrl: ['bgn'], kk: ['bgn'] }),
32
- group('MDL', { ru: ['mdl', 'молдавский лей', 'молдавских леев'], en: ['mdl', 'moldovan leu', 'moldovan lei'], uk: ['mdl', 'молдовський лей'], ro: ['mdl', 'leu moldovenesc', 'lei moldovenești', 'lei moldovenesti'], uzLatn: ['mdl'], uzCyrl: ['mdl'], kk: ['mdl'] }),
33
- group('AZN', { ru: ['₼', 'azn', 'манат', 'манатов'], en: ['₼', 'azn', 'azerbaijani manat', 'manat'], uk: ['₼', 'azn', 'манат'], ro: ['₼', 'azn', 'manat azer'], uzLatn: ['₼', 'azn', 'manat'], uzCyrl: ['₼', 'azn'], kk: ['₼', 'azn', 'манат'] }),
34
- group('AMD', { ru: ['֏', 'amd', 'драм', 'драмов'], en: ['֏', 'amd', 'armenian dram', 'dram'], uk: ['֏', 'amd', 'драм'], ro: ['֏', 'amd', 'dram armean'], uzLatn: ['֏', 'amd'], uzCyrl: ['֏', 'amd'], kk: ['֏', 'amd', 'драм'] }),
35
- group('TJS', { ru: ['tjs', 'сомони'], en: ['tjs', 'tajikistani somoni', 'somoni'], uk: ['tjs', 'сомоні'], ro: ['tjs', 'somoni'], uzLatn: ['tjs', 'somoni'], uzCyrl: ['tjs', 'сомони'], kk: ['tjs', 'сомони'] }),
36
- group('TMT', { ru: ['tmt', 'туркменский манат'], en: ['tmt', 'turkmen manat'], uk: ['tmt', 'туркменський манат'], ro: ['tmt', 'manat turkmen'], uzLatn: ['tmt', 'turkman manati'], uzCyrl: ['tmt'], kk: ['tmt'] }),
37
- ]);
38
-
39
- export const CURRENCY_SYMBOL_CANDIDATES = Object.freeze({
40
- '$': Object.freeze(['USD', 'CAD', 'AUD', 'NZD', 'SGD', 'HKD']),
41
- '€': Object.freeze(['EUR']),
42
- '₴': Object.freeze(['UAH']),
43
- '₽': Object.freeze(['RUB']),
44
- '£': Object.freeze(['GBP']),
45
- '₺': Object.freeze(['TRY']),
46
- '₾': Object.freeze(['GEL']),
47
- '₩': Object.freeze(['KRW']),
48
- '₹': Object.freeze(['INR']),
49
- '₼': Object.freeze(['AZN']),
50
- '֏': Object.freeze(['AMD']),
51
- '¥': Object.freeze(['JPY', 'CNY']),
52
- '¥': Object.freeze(['JPY', 'CNY']),
53
- });
54
-
55
- export const SALARY_PERIODS = Object.freeze([
56
- group('hour', { ru: ['в час', 'за час', 'почасово', 'часовая ставка'], en: ['per hour', 'hourly', '/hour', '/hr'], uk: ['за годину', 'на годину', 'погодинно'], ro: ['pe oră', 'pe ora', 'orar'], uzLatn: ['soatiga', 'soatlik'], uzCyrl: ['соатига', 'соатлик'], kk: ['сағатына', 'сағаттық'] }),
57
- group('day', { ru: ['в день', 'за день', 'дневная ставка'], en: ['per day', 'daily', '/day'], uk: ['за день', 'на день', 'щодня'], ro: ['pe zi', 'zilnic'], uzLatn: ['kuniga', 'kunlik'], uzCyrl: ['кунига', 'кунлик'], kk: ['күніне', 'күндік'] }),
58
- group('shift', { ru: ['за смену', 'смена', 'за выход'], en: ['per shift', 'shift rate'], uk: ['за зміну', 'зміна'], ro: ['pe tură', 'pe tura'], uzLatn: ['smenaga', 'smena uchun'], uzCyrl: ['сменага', 'смена учун'], kk: ['ауысымға', 'ауысым үшін'] }),
59
- group('week', { ru: ['в неделю', 'за неделю', 'еженедельно'], en: ['per week', 'weekly', '/week'], uk: ['на тиждень', 'за тиждень', 'щотижня'], ro: ['pe săptămână', 'pe saptamana', 'săptămânal'], uzLatn: ['haftasiga', 'haftalik'], uzCyrl: ['ҳафтасига', 'ҳафталик'], kk: ['аптасына', 'апталық'] }),
60
- group('month', { ru: ['в месяц', 'за месяц', 'месячная', 'ежемесячно', 'в мес'], en: ['per month', 'monthly', '/month', '/mo', 'pcm'], uk: ['на місяць', 'за місяць', 'щомісяця'], ro: ['pe lună', 'pe luna', 'lunar'], uzLatn: ['oyiga', 'oylik'], uzCyrl: ['ойига', 'ойлик'], kk: ['айына', 'айлық'] }),
61
- group('year', { ru: ['в год', 'за год', 'годовая', 'годовых'], en: ['per year', 'yearly', 'annual', 'annually', '/year', 'p.a.'], uk: ['на рік', 'за рік', 'річна'], ro: ['pe an', 'anual'], uzLatn: ['yiliga', 'yillik'], uzCyrl: ['йилига', 'йиллик'], kk: ['жылына', 'жылдық'] }),
62
- group('project', { ru: ['за проект', 'за заказ'], en: ['per project', 'project fee'], uk: ['за проєкт', 'за замовлення'], ro: ['pe proiect'], uzLatn: ['loyiha uchun', 'buyurtma uchun'], uzCyrl: ['лойиҳа учун', 'буюртма учун'], kk: ['жобаға', 'тапсырысқа'] }),
63
- group('piece', { ru: ['сдельно', 'за единицу', 'за штуку'], en: ['piece rate', 'per piece', 'per item'], uk: ['відрядно', 'за одиницю'], ro: ['la bucată', 'la bucata'], uzLatn: ['dona uchun', 'ishbay'], uzCyrl: ['дона учун', 'ишбай'], kk: ['данасына', 'кесімді'] }),
64
- ]);
65
-
66
- export const SALARY_MODIFIERS = Object.freeze({
67
- from: group('from', { ru: ['от', 'начиная с'], en: ['from', 'starting at', 'at least'], uk: ['від', 'починаючи від'], ro: ['de la', 'începând de la', 'incepand de la'], uzLatn: ['dan', 'kamida'], uzCyrl: ['дан', 'камида'], kk: ['бастап', 'кемінде'] }),
68
- to: group('to', { ru: ['до', 'максимум'], en: ['up to', 'maximum', 'max'], uk: ['до', 'максимум'], ro: ['până la', 'pana la', 'maximum'], uzLatn: ['gacha', 'maksimum'], uzCyrl: ['гача', 'максимум'], kk: ['дейін', 'максимум'] }),
69
- approx: group('approx', { ru: ['около', 'примерно', 'порядка'], en: ['about', 'approx', 'approximately', 'around'], uk: ['близько', 'приблизно'], ro: ['aproximativ', 'circa'], uzLatn: ['taxminan', 'atrofida'], uzCyrl: ['тахминан', 'атрофида'], kk: ['шамамен', 'шамасы'] }),
70
- negotiable: group('negotiable', { ru: ['по договоренности', 'по договорённости', 'договорная', 'обсуждается'], en: ['negotiable', 'competitive salary', 'salary discussed', 'doe'], uk: ['за домовленістю', 'договірна'], ro: ['negociabil', 'salariu negociabil'], uzLatn: ['kelishiladi', 'kelishilgan holda'], uzCyrl: ['келишилади'], kk: ['келісім бойынша', 'келісіледі'] }),
71
- gross: group('gross', { ru: ['gross', 'гросс', 'до налогов', 'до вычета налогов', 'до вычета ндфл'], en: ['gross', 'before tax', 'pre-tax'], uk: ['gross', 'до податків', 'до вирахування податків'], ro: ['brut', 'înainte de taxe', 'inainte de taxe'], uzLatn: ['soliqdan oldin', 'gross'], uzCyrl: ['солиқдан олдин'], kk: ['салыққа дейін', 'gross'] }),
72
- net: group('net', { ru: ['net', 'нетто', 'на руки', 'чистыми', 'после налогов', 'после вычета налогов'], en: ['net', 'after tax', 'take home', 'take-home'], uk: ['net', 'нетто', 'на руки', 'після податків'], ro: ['net', 'după taxe', 'dupa taxe'], uzLatn: ['qo‘lga', "qo'lga", 'soliqdan keyin', 'net'], uzCyrl: ['қўлга', 'солиқдан кейин'], kk: ['қолға', 'салықтан кейін', 'net'] }),
73
- });
74
-
75
- export const NUMBER_MULTIPLIERS = Object.freeze([
76
- group('thousand', { ru: ['к', 'тыс', 'тыс.', 'тысяч', 'тысячи'], en: ['k', 'thousand'], uk: ['к', 'тис', 'тис.', 'тисяч'], ro: ['k', 'mii'], uzLatn: ['k', 'ming'], uzCyrl: ['минг'], kk: ['k', 'мың'] }, { multiplier: 1_000 }),
77
- group('million', { ru: ['м', 'млн', 'млн.', 'миллион', 'миллионов'], en: ['m', 'mln', 'million', 'millions'], uk: ['м', 'млн', 'мільйон', 'мільйонів'], ro: ['m', 'mil', 'milioane'], uzLatn: ['m', 'mln', 'million'], uzCyrl: ['млн', 'миллион'], kk: ['м', 'млн', 'миллион'] }, { multiplier: 1_000_000 }),
78
- group('billion', { ru: ['млрд', 'миллиард', 'миллиардов'], en: ['bn', 'billion'], uk: ['млрд', 'мільярд'], ro: ['mld', 'miliard'], uzLatn: ['mlrd', 'billion'], uzCyrl: ['млрд', 'миллиард'], kk: ['млрд', 'миллиард'] }, { multiplier: 1_000_000_000 }),
79
- ]);
1
+ import { lexiconEntity } from './lexicon-core.js';
2
+
3
+ const group = (canonical, aliases, extra = {}) => lexiconEntity(canonical, aliases, extra);
4
+
5
+ export const CURRENCY_TERMS = Object.freeze([
6
+ group('USD', { ru: ['$', 'usd', 'доллар', 'доллара', 'долларов', 'бакс', 'у.е.', 'у е'], en: ['$', 'usd', 'dollar', 'dollars', 'us dollar'], uk: ['$', 'usd', 'долар', 'долари', 'доларів'], ro: ['$', 'usd', 'dolar', 'dolari'], uzLatn: ['$', 'usd', 'dollar'], uzCyrl: ['$', 'доллар'], kk: ['$', 'usd', 'доллар'] }),
7
+ group('EUR', { ru: ['€', 'eur', 'евро'], en: ['€', 'eur', 'euro', 'euros'], uk: ['€', 'eur', 'євро'], ro: ['€', 'eur', 'euro'], uzLatn: ['€', 'eur', 'yevro'], uzCyrl: ['€', 'евро'], kk: ['€', 'eur', 'еуро'] }),
8
+ group('UZS', { ru: ['сум', 'сумов', 'узс'], en: ['uzs', 'uzbek som'], uk: ['uzs', 'сум'], ro: ['uzs'], uzLatn: ["so'm", 'so‘m', 'soʻm', 'sum', 'uzs'], uzCyrl: ['сўм', 'сум'], kk: ['uzs'] }),
9
+ group('KZT', { ru: ['тенге', 'тг', 'kzt'], en: ['kzt', 'tenge'], uk: ['тенге', 'kzt'], ro: ['kzt', 'tenge'], uzLatn: ['kzt', 'tenge'], uzCyrl: ['kzt', 'тенге'], kk: ['теңге', 'тенге', 'тг', 'kzt'] }),
10
+ group('UAH', { ru: ['грн', 'гривна', 'гривны', 'гривен', '₴', 'uah'], en: ['uah', 'hryvnia', 'hryvnias', '₴'], uk: ['грн', 'гривня', 'гривні', 'гривень', '₴', 'uah'], ro: ['uah', 'hrivne', 'grivne'], uzLatn: ['uah'], uzCyrl: ['uah'], kk: ['uah'] }),
11
+ group('RUB', { ru: ['₽', 'руб', 'руб.', 'рубль', 'рубля', 'рублей', 'rub', 'rur'], en: ['₽', 'rub', 'rur', 'ruble', 'rubles'], uk: ['₽', 'руб', 'рублів', 'rub'], ro: ['₽', 'rub', 'ruble'], uzLatn: ['₽', 'rub', 'rubl'], uzCyrl: ['₽', 'рубль'], kk: ['₽', 'rub', 'рубль'] }),
12
+ group('GBP', { ru: ['£', 'gbp', 'фунт', 'фунтов'], en: ['£', 'gbp', 'pound', 'pounds', 'sterling'], uk: ['£', 'gbp', 'фунт', 'фунтів'], ro: ['£', 'gbp', 'liră sterlină', 'lira sterlina'], uzLatn: ['£', 'gbp', 'funt'], uzCyrl: ['£', 'фунт'], kk: ['£', 'gbp', 'фунт'] }),
13
+ group('TRY', { ru: ['₺', 'try', 'лира', 'лир'], en: ['₺', 'try', 'turkish lira'], uk: ['₺', 'try', 'ліра', 'лір'], ro: ['₺', 'try', 'liră turcească', 'lira turceasca'], uzLatn: ['₺', 'try', 'lira'], uzCyrl: ['₺', 'лира'], kk: ['₺', 'try', 'лира'] }),
14
+ group('GEL', { ru: ['₾', 'gel', 'лари'], en: ['₾', 'gel', 'lari'], uk: ['₾', 'gel', 'ларі'], ro: ['₾', 'gel', 'lari'], uzLatn: ['₾', 'gel', 'lari'], uzCyrl: ['₾', 'лари'], kk: ['₾', 'gel', 'лари'] }),
15
+ group('AED', { ru: ['aed', 'дирхам', 'дирхамов'], en: ['aed', 'dirham', 'dirhams'], uk: ['aed', 'дирхам', 'дирхамів'], ro: ['aed', 'dirham'], uzLatn: ['aed', 'dirham'], uzCyrl: ['aed', 'дирҳам'], kk: ['aed', 'дирхам'] }),
16
+ group('PLN', { ru: ['pln', 'злотый', 'злотых'], en: ['pln', 'zloty', 'zł'], uk: ['pln', 'злотий', 'злотих'], ro: ['pln', 'zlot'], uzLatn: ['pln', 'zloty'], uzCyrl: ['pln'], kk: ['pln'] }),
17
+ group('RON', { ru: ['ron', 'лей', 'леев'], en: ['ron', 'romanian leu', 'lei'], uk: ['ron', 'лей', 'леїв'], ro: ['ron', 'leu', 'lei'], uzLatn: ['ron'], uzCyrl: ['ron'], kk: ['ron'] }),
18
+ group('KGS', { ru: ['kgs', 'сом', 'сомов'], en: ['kgs', 'kyrgyz som'], uk: ['kgs', 'сом'], ro: ['kgs'], uzLatn: ['kgs', 'som'], uzCyrl: ['kgs', 'сом'], kk: ['kgs', 'сом'] }),
19
+ group('CHF', { ru: ['chf', 'швейцарский франк', 'швейцарских франков'], en: ['chf', 'swiss franc', 'swiss francs'], uk: ['chf', 'швейцарський франк'], ro: ['chf', 'franc elvețian', 'franc elvetian'], uzLatn: ['chf', 'shveytsariya franki'], uzCyrl: ['chf'], kk: ['chf', 'швейцар франкі'] }),
20
+ group('CNY', { ru: ['cny', 'rmb', 'юань', 'юаней', '元'], en: ['cny', 'rmb', 'yuan', 'renminbi', '元'], uk: ['cny', 'юань', 'юанів'], ro: ['cny', 'yuan'], uzLatn: ['cny', 'yuan'], uzCyrl: ['cny', 'юань'], kk: ['cny', 'юань'] }),
21
+ group('JPY', { ru: ['jpy', 'иена', 'иены', 'иен', '円'], en: ['jpy', 'yen', 'japanese yen', '円'], uk: ['jpy', 'єна', 'єн'], ro: ['jpy', 'yen'], uzLatn: ['jpy', 'yen'], uzCyrl: ['jpy', 'иена'], kk: ['jpy', 'иена'] }),
22
+ group('KRW', { ru: ['₩', 'krw', 'вона', 'вон'], en: ['₩', 'krw', 'won', 'south korean won'], uk: ['₩', 'krw', 'вона'], ro: ['₩', 'krw', 'won'], uzLatn: ['₩', 'krw', 'won'], uzCyrl: ['₩', 'krw'], kk: ['₩', 'krw', 'вон'] }),
23
+ group('CAD', { ru: ['cad', 'канадский доллар', 'канадских долларов'], en: ['cad', 'canadian dollar', 'canadian dollars'], uk: ['cad', 'канадський долар'], ro: ['cad', 'dolar canadian'], uzLatn: ['cad', 'kanada dollari'], uzCyrl: ['cad'], kk: ['cad', 'канада доллары'] }),
24
+ group('AUD', { ru: ['aud', 'австралийский доллар', 'австралийских долларов'], en: ['aud', 'australian dollar', 'australian dollars'], uk: ['aud', 'австралійський долар'], ro: ['aud', 'dolar australian'], uzLatn: ['aud', 'avstraliya dollari'], uzCyrl: ['aud'], kk: ['aud', 'австралия доллары'] }),
25
+ group('NZD', { ru: ['nzd', 'новозеландский доллар'], en: ['nzd', 'new zealand dollar', 'new zealand dollars'], uk: ['nzd', 'новозеландський долар'], ro: ['nzd', 'dolar neozeelandez'], uzLatn: ['nzd'], uzCyrl: ['nzd'], kk: ['nzd'] }),
26
+ group('SGD', { ru: ['sgd', 'сингапурский доллар'], en: ['sgd', 'singapore dollar', 'singapore dollars'], uk: ['sgd', 'сінгапурський долар'], ro: ['sgd', 'dolar singaporez'], uzLatn: ['sgd'], uzCyrl: ['sgd'], kk: ['sgd'] }),
27
+ group('HKD', { ru: ['hkd', 'гонконгский доллар'], en: ['hkd', 'hong kong dollar', 'hong kong dollars'], uk: ['hkd', 'гонконзький долар'], ro: ['hkd', 'dolar hong kong'], uzLatn: ['hkd'], uzCyrl: ['hkd'], kk: ['hkd'] }),
28
+ group('INR', { ru: ['₹', 'inr', 'рупия', 'рупии', 'рупий'], en: ['₹', 'inr', 'indian rupee', 'indian rupees', 'rupee', 'rupees'], uk: ['₹', 'inr', 'рупія', 'рупій'], ro: ['₹', 'inr', 'rupie indiană', 'rupie indiana'], uzLatn: ['₹', 'inr', 'rupiya'], uzCyrl: ['₹', 'inr'], kk: ['₹', 'inr', 'рупия'] }),
29
+ group('CZK', { ru: ['czk', 'чешская крона', 'чешских крон'], en: ['czk', 'czech koruna', 'czech crown'], uk: ['czk', 'чеська крона'], ro: ['czk', 'coroană cehă', 'coroana ceha'], uzLatn: ['czk'], uzCyrl: ['czk'], kk: ['czk'] }),
30
+ group('HUF', { ru: ['huf', 'форинт', 'форинтов'], en: ['huf', 'forint', 'hungarian forint'], uk: ['huf', 'форинт'], ro: ['huf', 'forint'], uzLatn: ['huf'], uzCyrl: ['huf'], kk: ['huf'] }),
31
+ group('BGN', { ru: ['bgn', 'лев', 'лева', 'левов'], en: ['bgn', 'bulgarian lev', 'lev'], uk: ['bgn', 'болгарський лев'], ro: ['bgn', 'leva bulgărească', 'leva bulgareasca'], uzLatn: ['bgn'], uzCyrl: ['bgn'], kk: ['bgn'] }),
32
+ group('MDL', { ru: ['mdl', 'молдавский лей', 'молдавских леев'], en: ['mdl', 'moldovan leu', 'moldovan lei'], uk: ['mdl', 'молдовський лей'], ro: ['mdl', 'leu moldovenesc', 'lei moldovenești', 'lei moldovenesti'], uzLatn: ['mdl'], uzCyrl: ['mdl'], kk: ['mdl'] }),
33
+ group('AZN', { ru: ['₼', 'azn', 'манат', 'манатов'], en: ['₼', 'azn', 'azerbaijani manat', 'manat'], uk: ['₼', 'azn', 'манат'], ro: ['₼', 'azn', 'manat azer'], uzLatn: ['₼', 'azn', 'manat'], uzCyrl: ['₼', 'azn'], kk: ['₼', 'azn', 'манат'] }),
34
+ group('AMD', { ru: ['֏', 'amd', 'драм', 'драмов'], en: ['֏', 'amd', 'armenian dram', 'dram'], uk: ['֏', 'amd', 'драм'], ro: ['֏', 'amd', 'dram armean'], uzLatn: ['֏', 'amd'], uzCyrl: ['֏', 'amd'], kk: ['֏', 'amd', 'драм'] }),
35
+ group('TJS', { ru: ['tjs', 'сомони'], en: ['tjs', 'tajikistani somoni', 'somoni'], uk: ['tjs', 'сомоні'], ro: ['tjs', 'somoni'], uzLatn: ['tjs', 'somoni'], uzCyrl: ['tjs', 'сомони'], kk: ['tjs', 'сомони'] }),
36
+ group('TMT', { ru: ['tmt', 'туркменский манат'], en: ['tmt', 'turkmen manat'], uk: ['tmt', 'туркменський манат'], ro: ['tmt', 'manat turkmen'], uzLatn: ['tmt', 'turkman manati'], uzCyrl: ['tmt'], kk: ['tmt'] }),
37
+ ]);
38
+
39
+ export const CURRENCY_SYMBOL_CANDIDATES = Object.freeze({
40
+ '$': Object.freeze(['USD', 'CAD', 'AUD', 'NZD', 'SGD', 'HKD']),
41
+ '€': Object.freeze(['EUR']),
42
+ '₴': Object.freeze(['UAH']),
43
+ '₽': Object.freeze(['RUB']),
44
+ '£': Object.freeze(['GBP']),
45
+ '₺': Object.freeze(['TRY']),
46
+ '₾': Object.freeze(['GEL']),
47
+ '₩': Object.freeze(['KRW']),
48
+ '₹': Object.freeze(['INR']),
49
+ '₼': Object.freeze(['AZN']),
50
+ '֏': Object.freeze(['AMD']),
51
+ '¥': Object.freeze(['JPY', 'CNY']),
52
+ '¥': Object.freeze(['JPY', 'CNY']),
53
+ });
54
+
55
+ export const SALARY_PERIODS = Object.freeze([
56
+ group('hour', { ru: ['в час', 'за час', 'почасово', 'часовая ставка'], en: ['per hour', 'hourly', '/hour', '/hr'], uk: ['за годину', 'на годину', 'погодинно'], ro: ['pe oră', 'pe ora', 'orar'], uzLatn: ['soatiga', 'soatlik'], uzCyrl: ['соатига', 'соатлик'], kk: ['сағатына', 'сағаттық'] }),
57
+ group('day', { ru: ['в день', 'за день', 'дневная ставка'], en: ['per day', 'daily', '/day'], uk: ['за день', 'на день', 'щодня'], ro: ['pe zi', 'zilnic'], uzLatn: ['kuniga', 'kunlik'], uzCyrl: ['кунига', 'кунлик'], kk: ['күніне', 'күндік'] }),
58
+ group('shift', { ru: ['за смену', 'смена', 'за выход'], en: ['per shift', 'shift rate'], uk: ['за зміну', 'зміна'], ro: ['pe tură', 'pe tura'], uzLatn: ['smenaga', 'smena uchun'], uzCyrl: ['сменага', 'смена учун'], kk: ['ауысымға', 'ауысым үшін'] }),
59
+ group('week', { ru: ['в неделю', 'за неделю', 'еженедельно'], en: ['per week', 'weekly', '/week'], uk: ['на тиждень', 'за тиждень', 'щотижня'], ro: ['pe săptămână', 'pe saptamana', 'săptămânal'], uzLatn: ['haftasiga', 'haftalik'], uzCyrl: ['ҳафтасига', 'ҳафталик'], kk: ['аптасына', 'апталық'] }),
60
+ group('month', { ru: ['в месяц', 'за месяц', 'месячная', 'ежемесячно', 'в мес'], en: ['per month', 'monthly', '/month', '/mo', 'pcm'], uk: ['на місяць', 'за місяць', 'щомісяця'], ro: ['pe lună', 'pe luna', 'lunar'], uzLatn: ['oyiga', 'oylik'], uzCyrl: ['ойига', 'ойлик'], kk: ['айына', 'айлық'] }),
61
+ group('year', { ru: ['в год', 'за год', 'годовая', 'годовых'], en: ['per year', 'yearly', 'annual', 'annually', '/year', 'p.a.'], uk: ['на рік', 'за рік', 'річна'], ro: ['pe an', 'anual'], uzLatn: ['yiliga', 'yillik'], uzCyrl: ['йилига', 'йиллик'], kk: ['жылына', 'жылдық'] }),
62
+ group('project', { ru: ['за проект', 'за заказ'], en: ['per project', 'project fee'], uk: ['за проєкт', 'за замовлення'], ro: ['pe proiect'], uzLatn: ['loyiha uchun', 'buyurtma uchun'], uzCyrl: ['лойиҳа учун', 'буюртма учун'], kk: ['жобаға', 'тапсырысқа'] }),
63
+ group('piece', { ru: ['сдельно', 'за единицу', 'за штуку'], en: ['piece rate', 'per piece', 'per item'], uk: ['відрядно', 'за одиницю'], ro: ['la bucată', 'la bucata'], uzLatn: ['dona uchun', 'ishbay'], uzCyrl: ['дона учун', 'ишбай'], kk: ['данасына', 'кесімді'] }),
64
+ ]);
65
+
66
+ export const SALARY_MODIFIERS = Object.freeze({
67
+ from: group('from', { ru: ['от', 'начиная с'], en: ['from', 'starting at', 'at least'], uk: ['від', 'починаючи від'], ro: ['de la', 'începând de la', 'incepand de la'], uzLatn: ['dan', 'kamida'], uzCyrl: ['дан', 'камида'], kk: ['бастап', 'кемінде'] }),
68
+ to: group('to', { ru: ['до', 'максимум'], en: ['up to', 'maximum', 'max'], uk: ['до', 'максимум'], ro: ['până la', 'pana la', 'maximum'], uzLatn: ['gacha', 'maksimum'], uzCyrl: ['гача', 'максимум'], kk: ['дейін', 'максимум'] }),
69
+ approx: group('approx', { ru: ['около', 'примерно', 'порядка'], en: ['about', 'approx', 'approximately', 'around'], uk: ['близько', 'приблизно'], ro: ['aproximativ', 'circa'], uzLatn: ['taxminan', 'atrofida'], uzCyrl: ['тахминан', 'атрофида'], kk: ['шамамен', 'шамасы'] }),
70
+ negotiable: group('negotiable', { ru: ['по договоренности', 'по договорённости', 'договорная', 'обсуждается'], en: ['negotiable', 'competitive salary', 'salary discussed', 'doe'], uk: ['за домовленістю', 'договірна'], ro: ['negociabil', 'salariu negociabil'], uzLatn: ['kelishiladi', 'kelishilgan holda'], uzCyrl: ['келишилади'], kk: ['келісім бойынша', 'келісіледі'] }),
71
+ gross: group('gross', { ru: ['gross', 'гросс', 'до налогов', 'до вычета налогов', 'до вычета ндфл'], en: ['gross', 'before tax', 'pre-tax'], uk: ['gross', 'до податків', 'до вирахування податків'], ro: ['brut', 'înainte de taxe', 'inainte de taxe'], uzLatn: ['soliqdan oldin', 'gross'], uzCyrl: ['солиқдан олдин'], kk: ['салыққа дейін', 'gross'] }),
72
+ net: group('net', { ru: ['net', 'нетто', 'на руки', 'чистыми', 'после налогов', 'после вычета налогов'], en: ['net', 'after tax', 'take home', 'take-home'], uk: ['net', 'нетто', 'на руки', 'після податків'], ro: ['net', 'după taxe', 'dupa taxe'], uzLatn: ['qo‘lga', "qo'lga", 'soliqdan keyin', 'net'], uzCyrl: ['қўлга', 'солиқдан кейин'], kk: ['қолға', 'салықтан кейін', 'net'] }),
73
+ });
74
+
75
+ export const NUMBER_MULTIPLIERS = Object.freeze([
76
+ group('thousand', { ru: ['к', 'тыс', 'тыс.', 'тысяч', 'тысячи'], en: ['k', 'thousand'], uk: ['к', 'тис', 'тис.', 'тисяч'], ro: ['k', 'mii'], uzLatn: ['k', 'ming'], uzCyrl: ['минг'], kk: ['k', 'мың'] }, { multiplier: 1_000 }),
77
+ group('million', { ru: ['м', 'млн', 'млн.', 'миллион', 'миллионов'], en: ['m', 'mln', 'million', 'millions'], uk: ['м', 'млн', 'мільйон', 'мільйонів'], ro: ['m', 'mil', 'milioane'], uzLatn: ['m', 'mln', 'million'], uzCyrl: ['млн', 'миллион'], kk: ['м', 'млн', 'миллион'] }, { multiplier: 1_000_000 }),
78
+ group('billion', { ru: ['млрд', 'миллиард', 'миллиардов'], en: ['bn', 'billion'], uk: ['млрд', 'мільярд'], ro: ['mld', 'miliard'], uzLatn: ['mlrd', 'billion'], uzCyrl: ['млрд', 'миллиард'], kk: ['млрд', 'миллиард'] }, { multiplier: 1_000_000_000 }),
79
+ ]);