@bisondesk/commons-sdk 1.0.631 → 1.0.633
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/lib/constants.d.ts +2 -0
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +2 -0
- package/lib/constants.js.map +1 -1
- package/lib/numbers-fr.d.ts +2 -0
- package/lib/numbers-fr.d.ts.map +1 -0
- package/lib/numbers-fr.js +81 -0
- package/lib/numbers-fr.js.map +1 -0
- package/lib/numbers-fr.test.d.ts +2 -0
- package/lib/numbers-fr.test.d.ts.map +1 -0
- package/lib/numbers-fr.test.js +48 -0
- package/lib/numbers-fr.test.js.map +1 -0
- package/package.json +1 -1
- package/src/constants.ts +4 -0
- package/src/numbers-fr.test.ts +50 -0
- package/src/numbers-fr.ts +95 -0
- package/tsconfig.tsbuildinfo +1 -1
package/lib/constants.d.ts
CHANGED
|
@@ -96,6 +96,8 @@ export declare const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_GROUP_ID = "leasing_
|
|
|
96
96
|
export declare const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_PRINT_VERSION_GROUP_ID = "leasing_contract_amortization_print_version_template";
|
|
97
97
|
export declare const LEASING_QUOTE_LOCATION_TEMPLATE = "leasing_quote_location_template";
|
|
98
98
|
export declare const LEASING_CONTRACT_TC_TEMPLATE_GROUP_ID = "leasing_contract_tc_template";
|
|
99
|
+
export declare const LEASING_CONTRACT_SPECIFIC_CONDITIONS_TEMPLATE_GROUP_ID = "leasing_contract_specific_conditions_template";
|
|
100
|
+
export declare const LEASING_CONTRACT_CAUTIONNEMENT_TEMPLATE_GROUP_ID = "leasing_contract_cautionnement_template";
|
|
99
101
|
export declare const SALES_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = "sales_quote_proforma_template";
|
|
100
102
|
export declare const SALES_QUOTE_AGREEMENT_TEMPLATE_GROUP_ID = "sales_quote_agreement_template";
|
|
101
103
|
export declare const SALES_INVOICE_TEMPLATE_GROUP_ID = "sales_invoice_template";
|
package/lib/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"/","sources":["constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"/","sources":["constants.ts"],"names":[],"mappings":"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"}
|
package/lib/constants.js
CHANGED
|
@@ -107,6 +107,8 @@ export const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_GROUP_ID = 'leasing_contract
|
|
|
107
107
|
export const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_PRINT_VERSION_GROUP_ID = 'leasing_contract_amortization_print_version_template';
|
|
108
108
|
export const LEASING_QUOTE_LOCATION_TEMPLATE = 'leasing_quote_location_template';
|
|
109
109
|
export const LEASING_CONTRACT_TC_TEMPLATE_GROUP_ID = 'leasing_contract_tc_template';
|
|
110
|
+
export const LEASING_CONTRACT_SPECIFIC_CONDITIONS_TEMPLATE_GROUP_ID = 'leasing_contract_specific_conditions_template';
|
|
111
|
+
export const LEASING_CONTRACT_CAUTIONNEMENT_TEMPLATE_GROUP_ID = 'leasing_contract_cautionnement_template';
|
|
110
112
|
export const SALES_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'sales_quote_proforma_template';
|
|
111
113
|
export const SALES_QUOTE_AGREEMENT_TEMPLATE_GROUP_ID = 'sales_quote_agreement_template';
|
|
112
114
|
export const SALES_INVOICE_TEMPLATE_GROUP_ID = 'sales_invoice_template';
|
package/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"/","sources":["constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Carries a record's version between server and client: the server answers with it on a read,\n * and a client hands it back on a write so the write only lands while the row still stands\n * there. Successor to the older `x-record-modified-at`.\n */\nexport const RECORD_VERSION_HEADER = 'x-record-version';\n\n//\n// STATIC ROLES\n//\nexport enum AppRoles {\n Accountant = 'accountant',\n Admin = 'admins',\n Administrative = 'administrative',\n AppManager = 'app_manager',\n Board = 'board',\n Commercial = 'commercial',\n InboundCommercial = 'inbound_commercial',\n LeasingCommercial = 'leasing_commercial',\n GeneralManager = 'general_manager',\n GeneralManagerAssistant = 'general_manager_assistant',\n ParkLogistics = 'park_logistics',\n Purchaser = 'purchaser',\n SalesManager = 'sales_manager',\n SalesPriceManager = 'sales_price_manager',\n SalesStockManager = 'sales_stock_manager',\n SalesMarketingManager = 'sales_marketing_manager',\n SeniorAccountant = 'senior_accountant',\n TrackAndTraceManager = 'track_and_trace_manager',\n}\n\nexport const TOP_ROLES = [\n AppRoles.Admin,\n AppRoles.Board,\n AppRoles.GeneralManager,\n AppRoles.SeniorAccountant,\n];\n\nexport enum TopLevelActions {\n AdministrationAll = 'admin:*',\n DocumentsFinanceBrowse = 'docs:finance:browse',\n DocumentsFinanceIssueProforma = 'docs:finance:new:proforma',\n DocumentsFinanceIssue = 'docs:finance:new',\n DocumentsAdministrativeBrowse = 'docs:administrative:browse',\n LeadsAll = 'leads:*',\n CrmOrgsBrowse = 'crm:orgs:browse',\n CrmContactsBrowse = 'crm:contacts:browse',\n BrowseDocumentDrafts = 'docs:drafts:browse',\n BrowsePurchasePayments = 'vehicles:purchase-payments:browse',\n BrowsePendingRemarks = 'remarks:pending:browse',\n LeasingDebtorsView = 'leasing:debtors:view',\n LeasingOverduesView = 'leasing:overdues:view',\n LeasingContractsExport = 'leasing:contracts:export',\n LeasingContractsBrowse = 'leasing:contracts:browse',\n LeasingContractsRsExport = 'leasing:contracts:rs:export-rs', // rs stands for rental solutions\n LeasingDebtorsExport = 'leasing:debtors:export',\n MarketBrowse = 'market:browse',\n MarketInsights = 'insights:market',\n MarketingAll = 'marketing:*',\n OffersBrowse = 'offers:browse',\n OpportunitiesBrowseAll = 'opps:browse',\n OpportunitiesBrowseAssigned = 'opps:browse:assigned',\n IntercompanyPaymentsBrowse = 'opps:intercompany-payments:browse',\n VehicleInsights = 'insights:vehicle',\n SaveBankAccounts = 'settings:bank-accounts:save',\n SettingsAll = 'settings:*',\n VehicleCreate = 'vehicle:create',\n TasksAll = 'tasks:*',\n TrackAndTraceDevices = 'tt:devices:*',\n ManageStocklists = 'stocklists:manage',\n TransportsBrowse = 'transports:browse',\n}\n\n//\n// I18N\n//\nexport const SUPPORTED_LANGUAGES = ['en', 'fr', 'nl', 'es', 'de', 'pt'] as const;\n\n//\n// Headers\n//\nexport const TENANT_ID_ADMIN_HEADER = 'tenant-id';\nexport const SERVICE_ID_ADMIN_HEADER = 'service-id';\n\n//\n// AUTH\n//\nexport const NO_TENANT_ID_VALUE = 'notenant';\nexport const SYSTEM_USER_ID = 'system';\nexport const CROSS_TENANT_USER_ID = 'cross-tenant-sync';\n\n/** The registry of synthetic (non-human) user ids — behavior checks key on this list. */\nexport const SYNTHETIC_USER_IDS: readonly string[] = [SYSTEM_USER_ID, CROSS_TENANT_USER_ID];\n\n/** Display labels for the synthetic user ids — a projection of the registry above. */\nexport const SYNTHETIC_USER_LABELS: Record<string, string> = {\n [SYSTEM_USER_ID]: 'System',\n [CROSS_TENANT_USER_ID]: 'Tenant-sync',\n};\n\n//\n// Business Entity IDs\n//\nexport enum BusinessEntityIds {\n BecrisDeclarations = 'becris_declarations',\n Contacts = 'contacts',\n Emails = 'emails',\n ExternalVehicleSale = 'external_vehicle_sale',\n Documents = 'documents',\n FinanceDocuments = 'finance_documents',\n AdministrativeDocuments = 'administrative_documents',\n InternetVehicles = 'internet-vehicles',\n LeasingContracts = 'leasing_contracts',\n LeasingUploadAutomation = 'leasing_upload_automation',\n Offers = 'offers',\n Opportunities = 'opportunities',\n Organizations = 'organizations',\n PdfTemplates = 'pdf_templates',\n Users = 'users',\n Vehicles = 'vehicles',\n VehiclesPurchase = 'vehicle_purchase',\n VehiclesPriceLists = 'vehicles_price_lists',\n Debtors = 'debtors',\n DebtorsDossier = 'debtor-dossiers',\n DocumentDrafts = 'document_drafts',\n TrackAndTraceDevices = 'track_and_trace_devices',\n Interests = 'interests',\n Prospects = 'prospects',\n Stocklists = 'stocklists',\n Transports = 'transports',\n}\n\n//\n// PDF Templates IDs\n//\nexport const LEASING_QUOTE_TEMPLATE_GROUP_ID = 'leasing_quote_template';\nexport const LEASING_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'leasing_quote_proforma_template';\nexport const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_GROUP_ID =\n 'leasing_contract_amortization_template';\nexport const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_PRINT_VERSION_GROUP_ID =\n 'leasing_contract_amortization_print_version_template';\nexport const LEASING_QUOTE_LOCATION_TEMPLATE = 'leasing_quote_location_template';\nexport const LEASING_CONTRACT_TC_TEMPLATE_GROUP_ID = 'leasing_contract_tc_template';\nexport const SALES_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'sales_quote_proforma_template';\nexport const SALES_QUOTE_AGREEMENT_TEMPLATE_GROUP_ID = 'sales_quote_agreement_template';\nexport const SALES_INVOICE_TEMPLATE_GROUP_ID = 'sales_invoice_template';\nexport const VEHICLES_STICKER_TEMPLATE_GROUP_ID = 'vehicles_sticker_template';\nexport const EXTERNAL_DELIVERY_CONFIRMATION_TEMPLATE_GROUP_ID = 'external_delivery_confirmation';\n\n//\n// VAT Prefixes for EU Countries and Great Britain & Northern Ireland\n//\nexport const EU_VAT_COUNTRY_CODES = [\n 'at',\n 'be',\n 'bg',\n 'hr',\n 'cy',\n 'cz',\n 'dk',\n 'ee',\n 'fi',\n 'fr',\n 'de',\n 'gr', // greece has EL prefix but the country code is GR\n 'el',\n 'hu',\n 'ie',\n 'it',\n 'lv',\n 'lt',\n 'lu',\n 'mt',\n 'nl',\n 'pl',\n 'pt',\n 'ro',\n 'sk',\n 'si',\n 'es',\n 'se',\n 'xi', // Northern Ireland\n];\n\nexport const HEXON_LANG_CODES: [string, ...string[]] = [\n 'en',\n 'nl',\n 'de',\n 'fr',\n 'es',\n 'pt',\n 'it',\n 'pl',\n 'ru',\n 'ro',\n 'el',\n 'bg',\n];\n\nexport const DEFAULT_SLB_PARTNER = 'To be announced';\n\nexport const SHARE_DOC_TEMPLATE_DEFAULT_LANGUAGE = 'en';\nexport const SHARE_DOC_TEMPLATE_LANGUAGES = [\n SHARE_DOC_TEMPLATE_DEFAULT_LANGUAGE,\n 'fr',\n 'nl',\n 'ro',\n] as const;\n"]}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"/","sources":["constants.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Carries a record's version between server and client: the server answers with it on a read,\n * and a client hands it back on a write so the write only lands while the row still stands\n * there. Successor to the older `x-record-modified-at`.\n */\nexport const RECORD_VERSION_HEADER = 'x-record-version';\n\n//\n// STATIC ROLES\n//\nexport enum AppRoles {\n Accountant = 'accountant',\n Admin = 'admins',\n Administrative = 'administrative',\n AppManager = 'app_manager',\n Board = 'board',\n Commercial = 'commercial',\n InboundCommercial = 'inbound_commercial',\n LeasingCommercial = 'leasing_commercial',\n GeneralManager = 'general_manager',\n GeneralManagerAssistant = 'general_manager_assistant',\n ParkLogistics = 'park_logistics',\n Purchaser = 'purchaser',\n SalesManager = 'sales_manager',\n SalesPriceManager = 'sales_price_manager',\n SalesStockManager = 'sales_stock_manager',\n SalesMarketingManager = 'sales_marketing_manager',\n SeniorAccountant = 'senior_accountant',\n TrackAndTraceManager = 'track_and_trace_manager',\n}\n\nexport const TOP_ROLES = [\n AppRoles.Admin,\n AppRoles.Board,\n AppRoles.GeneralManager,\n AppRoles.SeniorAccountant,\n];\n\nexport enum TopLevelActions {\n AdministrationAll = 'admin:*',\n DocumentsFinanceBrowse = 'docs:finance:browse',\n DocumentsFinanceIssueProforma = 'docs:finance:new:proforma',\n DocumentsFinanceIssue = 'docs:finance:new',\n DocumentsAdministrativeBrowse = 'docs:administrative:browse',\n LeadsAll = 'leads:*',\n CrmOrgsBrowse = 'crm:orgs:browse',\n CrmContactsBrowse = 'crm:contacts:browse',\n BrowseDocumentDrafts = 'docs:drafts:browse',\n BrowsePurchasePayments = 'vehicles:purchase-payments:browse',\n BrowsePendingRemarks = 'remarks:pending:browse',\n LeasingDebtorsView = 'leasing:debtors:view',\n LeasingOverduesView = 'leasing:overdues:view',\n LeasingContractsExport = 'leasing:contracts:export',\n LeasingContractsBrowse = 'leasing:contracts:browse',\n LeasingContractsRsExport = 'leasing:contracts:rs:export-rs', // rs stands for rental solutions\n LeasingDebtorsExport = 'leasing:debtors:export',\n MarketBrowse = 'market:browse',\n MarketInsights = 'insights:market',\n MarketingAll = 'marketing:*',\n OffersBrowse = 'offers:browse',\n OpportunitiesBrowseAll = 'opps:browse',\n OpportunitiesBrowseAssigned = 'opps:browse:assigned',\n IntercompanyPaymentsBrowse = 'opps:intercompany-payments:browse',\n VehicleInsights = 'insights:vehicle',\n SaveBankAccounts = 'settings:bank-accounts:save',\n SettingsAll = 'settings:*',\n VehicleCreate = 'vehicle:create',\n TasksAll = 'tasks:*',\n TrackAndTraceDevices = 'tt:devices:*',\n ManageStocklists = 'stocklists:manage',\n TransportsBrowse = 'transports:browse',\n}\n\n//\n// I18N\n//\nexport const SUPPORTED_LANGUAGES = ['en', 'fr', 'nl', 'es', 'de', 'pt'] as const;\n\n//\n// Headers\n//\nexport const TENANT_ID_ADMIN_HEADER = 'tenant-id';\nexport const SERVICE_ID_ADMIN_HEADER = 'service-id';\n\n//\n// AUTH\n//\nexport const NO_TENANT_ID_VALUE = 'notenant';\nexport const SYSTEM_USER_ID = 'system';\nexport const CROSS_TENANT_USER_ID = 'cross-tenant-sync';\n\n/** The registry of synthetic (non-human) user ids — behavior checks key on this list. */\nexport const SYNTHETIC_USER_IDS: readonly string[] = [SYSTEM_USER_ID, CROSS_TENANT_USER_ID];\n\n/** Display labels for the synthetic user ids — a projection of the registry above. */\nexport const SYNTHETIC_USER_LABELS: Record<string, string> = {\n [SYSTEM_USER_ID]: 'System',\n [CROSS_TENANT_USER_ID]: 'Tenant-sync',\n};\n\n//\n// Business Entity IDs\n//\nexport enum BusinessEntityIds {\n BecrisDeclarations = 'becris_declarations',\n Contacts = 'contacts',\n Emails = 'emails',\n ExternalVehicleSale = 'external_vehicle_sale',\n Documents = 'documents',\n FinanceDocuments = 'finance_documents',\n AdministrativeDocuments = 'administrative_documents',\n InternetVehicles = 'internet-vehicles',\n LeasingContracts = 'leasing_contracts',\n LeasingUploadAutomation = 'leasing_upload_automation',\n Offers = 'offers',\n Opportunities = 'opportunities',\n Organizations = 'organizations',\n PdfTemplates = 'pdf_templates',\n Users = 'users',\n Vehicles = 'vehicles',\n VehiclesPurchase = 'vehicle_purchase',\n VehiclesPriceLists = 'vehicles_price_lists',\n Debtors = 'debtors',\n DebtorsDossier = 'debtor-dossiers',\n DocumentDrafts = 'document_drafts',\n TrackAndTraceDevices = 'track_and_trace_devices',\n Interests = 'interests',\n Prospects = 'prospects',\n Stocklists = 'stocklists',\n Transports = 'transports',\n}\n\n//\n// PDF Templates IDs\n//\nexport const LEASING_QUOTE_TEMPLATE_GROUP_ID = 'leasing_quote_template';\nexport const LEASING_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'leasing_quote_proforma_template';\nexport const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_GROUP_ID =\n 'leasing_contract_amortization_template';\nexport const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_PRINT_VERSION_GROUP_ID =\n 'leasing_contract_amortization_print_version_template';\nexport const LEASING_QUOTE_LOCATION_TEMPLATE = 'leasing_quote_location_template';\nexport const LEASING_CONTRACT_TC_TEMPLATE_GROUP_ID = 'leasing_contract_tc_template';\nexport const LEASING_CONTRACT_SPECIFIC_CONDITIONS_TEMPLATE_GROUP_ID =\n 'leasing_contract_specific_conditions_template';\nexport const LEASING_CONTRACT_CAUTIONNEMENT_TEMPLATE_GROUP_ID =\n 'leasing_contract_cautionnement_template';\nexport const SALES_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'sales_quote_proforma_template';\nexport const SALES_QUOTE_AGREEMENT_TEMPLATE_GROUP_ID = 'sales_quote_agreement_template';\nexport const SALES_INVOICE_TEMPLATE_GROUP_ID = 'sales_invoice_template';\nexport const VEHICLES_STICKER_TEMPLATE_GROUP_ID = 'vehicles_sticker_template';\nexport const EXTERNAL_DELIVERY_CONFIRMATION_TEMPLATE_GROUP_ID = 'external_delivery_confirmation';\n\n//\n// VAT Prefixes for EU Countries and Great Britain & Northern Ireland\n//\nexport const EU_VAT_COUNTRY_CODES = [\n 'at',\n 'be',\n 'bg',\n 'hr',\n 'cy',\n 'cz',\n 'dk',\n 'ee',\n 'fi',\n 'fr',\n 'de',\n 'gr', // greece has EL prefix but the country code is GR\n 'el',\n 'hu',\n 'ie',\n 'it',\n 'lv',\n 'lt',\n 'lu',\n 'mt',\n 'nl',\n 'pl',\n 'pt',\n 'ro',\n 'sk',\n 'si',\n 'es',\n 'se',\n 'xi', // Northern Ireland\n];\n\nexport const HEXON_LANG_CODES: [string, ...string[]] = [\n 'en',\n 'nl',\n 'de',\n 'fr',\n 'es',\n 'pt',\n 'it',\n 'pl',\n 'ru',\n 'ro',\n 'el',\n 'bg',\n];\n\nexport const DEFAULT_SLB_PARTNER = 'To be announced';\n\nexport const SHARE_DOC_TEMPLATE_DEFAULT_LANGUAGE = 'en';\nexport const SHARE_DOC_TEMPLATE_LANGUAGES = [\n SHARE_DOC_TEMPLATE_DEFAULT_LANGUAGE,\n 'fr',\n 'nl',\n 'ro',\n] as const;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers-fr.d.ts","sourceRoot":"/","sources":["numbers-fr.ts"],"names":[],"mappings":"AAiEA,eAAO,MAAM,mBAAmB,UAAW,MAAM,GAAG,MAAM,KAAG,MA6B5D,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const UNITS = [
|
|
2
|
+
'zéro',
|
|
3
|
+
'un',
|
|
4
|
+
'deux',
|
|
5
|
+
'trois',
|
|
6
|
+
'quatre',
|
|
7
|
+
'cinq',
|
|
8
|
+
'six',
|
|
9
|
+
'sept',
|
|
10
|
+
'huit',
|
|
11
|
+
'neuf',
|
|
12
|
+
'dix',
|
|
13
|
+
'onze',
|
|
14
|
+
'douze',
|
|
15
|
+
'treize',
|
|
16
|
+
'quatorze',
|
|
17
|
+
'quinze',
|
|
18
|
+
'seize',
|
|
19
|
+
'dix-sept',
|
|
20
|
+
'dix-huit',
|
|
21
|
+
'dix-neuf',
|
|
22
|
+
];
|
|
23
|
+
const TENS = ['', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante'];
|
|
24
|
+
const belowHundred = (n, allowPluralS) => {
|
|
25
|
+
if (n < 20) {
|
|
26
|
+
return UNITS[n];
|
|
27
|
+
}
|
|
28
|
+
if (n < 70) {
|
|
29
|
+
const tens = TENS[Math.floor(n / 10)];
|
|
30
|
+
const unit = n % 10;
|
|
31
|
+
if (unit === 0) {
|
|
32
|
+
return tens;
|
|
33
|
+
}
|
|
34
|
+
return unit === 1 ? `${tens} et un` : `${tens}-${UNITS[unit]}`;
|
|
35
|
+
}
|
|
36
|
+
if (n < 80) {
|
|
37
|
+
return n === 71 ? 'soixante et onze' : `soixante-${UNITS[n - 60]}`;
|
|
38
|
+
}
|
|
39
|
+
const unit = n - 80;
|
|
40
|
+
if (unit === 0) {
|
|
41
|
+
return allowPluralS ? 'quatre-vingts' : 'quatre-vingt';
|
|
42
|
+
}
|
|
43
|
+
return `quatre-vingt-${UNITS[unit]}`;
|
|
44
|
+
};
|
|
45
|
+
const belowThousand = (n, allowPluralS) => {
|
|
46
|
+
const hundreds = Math.floor(n / 100);
|
|
47
|
+
const rest = n % 100;
|
|
48
|
+
if (hundreds === 0) {
|
|
49
|
+
return belowHundred(rest, allowPluralS);
|
|
50
|
+
}
|
|
51
|
+
const head = hundreds === 1 ? 'cent' : `${UNITS[hundreds]} cent${rest === 0 && allowPluralS ? 's' : ''}`;
|
|
52
|
+
return rest === 0 ? head : `${head} ${belowHundred(rest, allowPluralS)}`;
|
|
53
|
+
};
|
|
54
|
+
export const numberToFrenchWords = (value) => {
|
|
55
|
+
const n = Math.trunc(Number(value));
|
|
56
|
+
if (!Number.isFinite(n) || n < 0 || n >= 1_000_000_000_000) {
|
|
57
|
+
throw new Error(`numbers-fr.unsupported-value: ${value}`);
|
|
58
|
+
}
|
|
59
|
+
if (n === 0) {
|
|
60
|
+
return 'zéro';
|
|
61
|
+
}
|
|
62
|
+
const billions = Math.trunc(n / 1_000_000_000);
|
|
63
|
+
const millions = Math.trunc(n / 1_000_000) % 1_000;
|
|
64
|
+
const thousands = Math.trunc(n / 1_000) % 1_000;
|
|
65
|
+
const units = n % 1_000;
|
|
66
|
+
const parts = [];
|
|
67
|
+
if (billions > 0) {
|
|
68
|
+
parts.push(billions === 1 ? 'un milliard' : `${belowThousand(billions, true)} milliards`);
|
|
69
|
+
}
|
|
70
|
+
if (millions > 0) {
|
|
71
|
+
parts.push(millions === 1 ? 'un million' : `${belowThousand(millions, true)} millions`);
|
|
72
|
+
}
|
|
73
|
+
if (thousands > 0) {
|
|
74
|
+
parts.push(thousands === 1 ? 'mille' : `${belowThousand(thousands, false)} mille`);
|
|
75
|
+
}
|
|
76
|
+
if (units > 0) {
|
|
77
|
+
parts.push(belowThousand(units, true));
|
|
78
|
+
}
|
|
79
|
+
return parts.join(' ');
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=numbers-fr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers-fr.js","sourceRoot":"/","sources":["numbers-fr.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG;IACZ,MAAM;IACN,IAAI;IACJ,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IACP,UAAU;IACV,UAAU;IACV,UAAU;CACX,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAI9E,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,YAAqB,EAAU,EAAE;IAChE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACX,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACzD,CAAC;IACD,OAAO,gBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,YAAqB,EAAU,EAAE;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;IACrB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,GACR,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9F,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;AAC3E,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAsB,EAAU,EAAE;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC","sourcesContent":["const UNITS = [\n 'zéro',\n 'un',\n 'deux',\n 'trois',\n 'quatre',\n 'cinq',\n 'six',\n 'sept',\n 'huit',\n 'neuf',\n 'dix',\n 'onze',\n 'douze',\n 'treize',\n 'quatorze',\n 'quinze',\n 'seize',\n 'dix-sept',\n 'dix-huit',\n 'dix-neuf',\n];\n\nconst TENS = ['', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante'];\n\n// \"vingt\" and \"cent\" take a plural \"s\" only when multiplied and not followed by\n// another numeral word (\"quatre-vingts\" / \"deux cents\", but \"quatre-vingt mille\").\nconst belowHundred = (n: number, allowPluralS: boolean): string => {\n if (n < 20) {\n return UNITS[n];\n }\n if (n < 70) {\n const tens = TENS[Math.floor(n / 10)];\n const unit = n % 10;\n if (unit === 0) {\n return tens;\n }\n return unit === 1 ? `${tens} et un` : `${tens}-${UNITS[unit]}`;\n }\n if (n < 80) {\n return n === 71 ? 'soixante et onze' : `soixante-${UNITS[n - 60]}`;\n }\n const unit = n - 80;\n if (unit === 0) {\n return allowPluralS ? 'quatre-vingts' : 'quatre-vingt';\n }\n return `quatre-vingt-${UNITS[unit]}`;\n};\n\nconst belowThousand = (n: number, allowPluralS: boolean): string => {\n const hundreds = Math.floor(n / 100);\n const rest = n % 100;\n if (hundreds === 0) {\n return belowHundred(rest, allowPluralS);\n }\n const head =\n hundreds === 1 ? 'cent' : `${UNITS[hundreds]} cent${rest === 0 && allowPluralS ? 's' : ''}`;\n return rest === 0 ? head : `${head} ${belowHundred(rest, allowPluralS)}`;\n};\n\n/**\n * Spells a non-negative integer amount in French words (traditional orthography), for legal\n * documents such as the cautionnement's mention manuscrite. Decimals are truncated; the\n * currency word is not included. Supports values below one trillion.\n */\nexport const numberToFrenchWords = (value: string | number): string => {\n const n = Math.trunc(Number(value));\n if (!Number.isFinite(n) || n < 0 || n >= 1_000_000_000_000) {\n throw new Error(`numbers-fr.unsupported-value: ${value}`);\n }\n if (n === 0) {\n return 'zéro';\n }\n\n const billions = Math.trunc(n / 1_000_000_000);\n const millions = Math.trunc(n / 1_000_000) % 1_000;\n const thousands = Math.trunc(n / 1_000) % 1_000;\n const units = n % 1_000;\n\n const parts: string[] = [];\n if (billions > 0) {\n parts.push(billions === 1 ? 'un milliard' : `${belowThousand(billions, true)} milliards`);\n }\n if (millions > 0) {\n parts.push(millions === 1 ? 'un million' : `${belowThousand(millions, true)} millions`);\n }\n if (thousands > 0) {\n parts.push(thousands === 1 ? 'mille' : `${belowThousand(thousands, false)} mille`);\n }\n if (units > 0) {\n parts.push(belowThousand(units, true));\n }\n\n return parts.join(' ');\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers-fr.test.d.ts","sourceRoot":"/","sources":["numbers-fr.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { numberToFrenchWords } from './numbers-fr.js';
|
|
2
|
+
describe('numberToFrenchWords', () => {
|
|
3
|
+
test.each([
|
|
4
|
+
[0, 'zéro'],
|
|
5
|
+
[1, 'un'],
|
|
6
|
+
[16, 'seize'],
|
|
7
|
+
[17, 'dix-sept'],
|
|
8
|
+
[21, 'vingt et un'],
|
|
9
|
+
[32, 'trente-deux'],
|
|
10
|
+
[70, 'soixante-dix'],
|
|
11
|
+
[71, 'soixante et onze'],
|
|
12
|
+
[72, 'soixante-douze'],
|
|
13
|
+
[80, 'quatre-vingts'],
|
|
14
|
+
[81, 'quatre-vingt-un'],
|
|
15
|
+
[90, 'quatre-vingt-dix'],
|
|
16
|
+
[91, 'quatre-vingt-onze'],
|
|
17
|
+
[100, 'cent'],
|
|
18
|
+
[101, 'cent un'],
|
|
19
|
+
[180, 'cent quatre-vingts'],
|
|
20
|
+
[200, 'deux cents'],
|
|
21
|
+
[201, 'deux cent un'],
|
|
22
|
+
[999, 'neuf cent quatre-vingt-dix-neuf'],
|
|
23
|
+
[1000, 'mille'],
|
|
24
|
+
[1001, 'mille un'],
|
|
25
|
+
[2000, 'deux mille'],
|
|
26
|
+
[80000, 'quatre-vingt mille'],
|
|
27
|
+
[200000, 'deux cent mille'],
|
|
28
|
+
[655957, 'six cent cinquante-cinq mille neuf cent cinquante-sept'],
|
|
29
|
+
[1000000, 'un million'],
|
|
30
|
+
[2000000, 'deux millions'],
|
|
31
|
+
[25000000, 'vingt-cinq millions'],
|
|
32
|
+
[15758239, 'quinze millions sept cent cinquante-huit mille deux cent trente-neuf'],
|
|
33
|
+
[80000000, 'quatre-vingts millions'],
|
|
34
|
+
[200000000, 'deux cents millions'],
|
|
35
|
+
[1000000000, 'un milliard'],
|
|
36
|
+
[1500000200, 'un milliard cinq cents millions deux cents'],
|
|
37
|
+
])('%s -> %s', (value, expected) => {
|
|
38
|
+
expect(numberToFrenchWords(value)).toEqual(expected);
|
|
39
|
+
});
|
|
40
|
+
test('accepts string amounts and truncates decimals', () => {
|
|
41
|
+
expect(numberToFrenchWords('50000')).toEqual('cinquante mille');
|
|
42
|
+
expect(numberToFrenchWords('50000.75')).toEqual('cinquante mille');
|
|
43
|
+
});
|
|
44
|
+
test.each([[-1], [Number.NaN], [1_000_000_000_000]])('rejects %s', (value) => {
|
|
45
|
+
expect(() => numberToFrenchWords(value)).toThrow('numbers-fr.unsupported-value');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=numbers-fr.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers-fr.test.js","sourceRoot":"/","sources":["numbers-fr.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,IAAI,CAAC;QACR,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,IAAI,CAAC;QACT,CAAC,EAAE,EAAE,OAAO,CAAC;QACb,CAAC,EAAE,EAAE,UAAU,CAAC;QAChB,CAAC,EAAE,EAAE,aAAa,CAAC;QACnB,CAAC,EAAE,EAAE,aAAa,CAAC;QACnB,CAAC,EAAE,EAAE,cAAc,CAAC;QACpB,CAAC,EAAE,EAAE,kBAAkB,CAAC;QACxB,CAAC,EAAE,EAAE,gBAAgB,CAAC;QACtB,CAAC,EAAE,EAAE,eAAe,CAAC;QACrB,CAAC,EAAE,EAAE,iBAAiB,CAAC;QACvB,CAAC,EAAE,EAAE,kBAAkB,CAAC;QACxB,CAAC,EAAE,EAAE,mBAAmB,CAAC;QACzB,CAAC,GAAG,EAAE,MAAM,CAAC;QACb,CAAC,GAAG,EAAE,SAAS,CAAC;QAChB,CAAC,GAAG,EAAE,oBAAoB,CAAC;QAC3B,CAAC,GAAG,EAAE,YAAY,CAAC;QACnB,CAAC,GAAG,EAAE,cAAc,CAAC;QACrB,CAAC,GAAG,EAAE,iCAAiC,CAAC;QACxC,CAAC,IAAI,EAAE,OAAO,CAAC;QACf,CAAC,IAAI,EAAE,UAAU,CAAC;QAClB,CAAC,IAAI,EAAE,YAAY,CAAC;QACpB,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAC7B,CAAC,MAAM,EAAE,iBAAiB,CAAC;QAC3B,CAAC,MAAM,EAAE,wDAAwD,CAAC;QAClE,CAAC,OAAO,EAAE,YAAY,CAAC;QACvB,CAAC,OAAO,EAAE,eAAe,CAAC;QAC1B,CAAC,QAAQ,EAAE,qBAAqB,CAAC;QACjC,CAAC,QAAQ,EAAE,sEAAsE,CAAC;QAClF,CAAC,QAAQ,EAAE,wBAAwB,CAAC;QACpC,CAAC,SAAS,EAAE,qBAAqB,CAAC;QAClC,CAAC,UAAU,EAAE,aAAa,CAAC;QAC3B,CAAC,UAAU,EAAE,4CAA4C,CAAC;KAC3D,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3E,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { numberToFrenchWords } from './numbers-fr.js';\n\ndescribe('numberToFrenchWords', () => {\n test.each([\n [0, 'zéro'],\n [1, 'un'],\n [16, 'seize'],\n [17, 'dix-sept'],\n [21, 'vingt et un'],\n [32, 'trente-deux'],\n [70, 'soixante-dix'],\n [71, 'soixante et onze'],\n [72, 'soixante-douze'],\n [80, 'quatre-vingts'],\n [81, 'quatre-vingt-un'],\n [90, 'quatre-vingt-dix'],\n [91, 'quatre-vingt-onze'],\n [100, 'cent'],\n [101, 'cent un'],\n [180, 'cent quatre-vingts'],\n [200, 'deux cents'],\n [201, 'deux cent un'],\n [999, 'neuf cent quatre-vingt-dix-neuf'],\n [1000, 'mille'],\n [1001, 'mille un'],\n [2000, 'deux mille'],\n [80000, 'quatre-vingt mille'],\n [200000, 'deux cent mille'],\n [655957, 'six cent cinquante-cinq mille neuf cent cinquante-sept'],\n [1000000, 'un million'],\n [2000000, 'deux millions'],\n [25000000, 'vingt-cinq millions'],\n [15758239, 'quinze millions sept cent cinquante-huit mille deux cent trente-neuf'],\n [80000000, 'quatre-vingts millions'],\n [200000000, 'deux cents millions'],\n [1000000000, 'un milliard'],\n [1500000200, 'un milliard cinq cents millions deux cents'],\n ])('%s -> %s', (value, expected) => {\n expect(numberToFrenchWords(value)).toEqual(expected);\n });\n\n test('accepts string amounts and truncates decimals', () => {\n expect(numberToFrenchWords('50000')).toEqual('cinquante mille');\n expect(numberToFrenchWords('50000.75')).toEqual('cinquante mille');\n });\n\n test.each([[-1], [Number.NaN], [1_000_000_000_000]])('rejects %s', (value) => {\n expect(() => numberToFrenchWords(value)).toThrow('numbers-fr.unsupported-value');\n });\n});\n"]}
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -141,6 +141,10 @@ export const LEASING_CONTRACT_AMORTIZATION_TEMPLATE_PRINT_VERSION_GROUP_ID =
|
|
|
141
141
|
'leasing_contract_amortization_print_version_template';
|
|
142
142
|
export const LEASING_QUOTE_LOCATION_TEMPLATE = 'leasing_quote_location_template';
|
|
143
143
|
export const LEASING_CONTRACT_TC_TEMPLATE_GROUP_ID = 'leasing_contract_tc_template';
|
|
144
|
+
export const LEASING_CONTRACT_SPECIFIC_CONDITIONS_TEMPLATE_GROUP_ID =
|
|
145
|
+
'leasing_contract_specific_conditions_template';
|
|
146
|
+
export const LEASING_CONTRACT_CAUTIONNEMENT_TEMPLATE_GROUP_ID =
|
|
147
|
+
'leasing_contract_cautionnement_template';
|
|
144
148
|
export const SALES_QUOTE_PROFORMA_TEMPLATE_GROUP_ID = 'sales_quote_proforma_template';
|
|
145
149
|
export const SALES_QUOTE_AGREEMENT_TEMPLATE_GROUP_ID = 'sales_quote_agreement_template';
|
|
146
150
|
export const SALES_INVOICE_TEMPLATE_GROUP_ID = 'sales_invoice_template';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { numberToFrenchWords } from './numbers-fr.js';
|
|
2
|
+
|
|
3
|
+
describe('numberToFrenchWords', () => {
|
|
4
|
+
test.each([
|
|
5
|
+
[0, 'zéro'],
|
|
6
|
+
[1, 'un'],
|
|
7
|
+
[16, 'seize'],
|
|
8
|
+
[17, 'dix-sept'],
|
|
9
|
+
[21, 'vingt et un'],
|
|
10
|
+
[32, 'trente-deux'],
|
|
11
|
+
[70, 'soixante-dix'],
|
|
12
|
+
[71, 'soixante et onze'],
|
|
13
|
+
[72, 'soixante-douze'],
|
|
14
|
+
[80, 'quatre-vingts'],
|
|
15
|
+
[81, 'quatre-vingt-un'],
|
|
16
|
+
[90, 'quatre-vingt-dix'],
|
|
17
|
+
[91, 'quatre-vingt-onze'],
|
|
18
|
+
[100, 'cent'],
|
|
19
|
+
[101, 'cent un'],
|
|
20
|
+
[180, 'cent quatre-vingts'],
|
|
21
|
+
[200, 'deux cents'],
|
|
22
|
+
[201, 'deux cent un'],
|
|
23
|
+
[999, 'neuf cent quatre-vingt-dix-neuf'],
|
|
24
|
+
[1000, 'mille'],
|
|
25
|
+
[1001, 'mille un'],
|
|
26
|
+
[2000, 'deux mille'],
|
|
27
|
+
[80000, 'quatre-vingt mille'],
|
|
28
|
+
[200000, 'deux cent mille'],
|
|
29
|
+
[655957, 'six cent cinquante-cinq mille neuf cent cinquante-sept'],
|
|
30
|
+
[1000000, 'un million'],
|
|
31
|
+
[2000000, 'deux millions'],
|
|
32
|
+
[25000000, 'vingt-cinq millions'],
|
|
33
|
+
[15758239, 'quinze millions sept cent cinquante-huit mille deux cent trente-neuf'],
|
|
34
|
+
[80000000, 'quatre-vingts millions'],
|
|
35
|
+
[200000000, 'deux cents millions'],
|
|
36
|
+
[1000000000, 'un milliard'],
|
|
37
|
+
[1500000200, 'un milliard cinq cents millions deux cents'],
|
|
38
|
+
])('%s -> %s', (value, expected) => {
|
|
39
|
+
expect(numberToFrenchWords(value)).toEqual(expected);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('accepts string amounts and truncates decimals', () => {
|
|
43
|
+
expect(numberToFrenchWords('50000')).toEqual('cinquante mille');
|
|
44
|
+
expect(numberToFrenchWords('50000.75')).toEqual('cinquante mille');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test.each([[-1], [Number.NaN], [1_000_000_000_000]])('rejects %s', (value) => {
|
|
48
|
+
expect(() => numberToFrenchWords(value)).toThrow('numbers-fr.unsupported-value');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const UNITS = [
|
|
2
|
+
'zéro',
|
|
3
|
+
'un',
|
|
4
|
+
'deux',
|
|
5
|
+
'trois',
|
|
6
|
+
'quatre',
|
|
7
|
+
'cinq',
|
|
8
|
+
'six',
|
|
9
|
+
'sept',
|
|
10
|
+
'huit',
|
|
11
|
+
'neuf',
|
|
12
|
+
'dix',
|
|
13
|
+
'onze',
|
|
14
|
+
'douze',
|
|
15
|
+
'treize',
|
|
16
|
+
'quatorze',
|
|
17
|
+
'quinze',
|
|
18
|
+
'seize',
|
|
19
|
+
'dix-sept',
|
|
20
|
+
'dix-huit',
|
|
21
|
+
'dix-neuf',
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const TENS = ['', '', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante'];
|
|
25
|
+
|
|
26
|
+
// "vingt" and "cent" take a plural "s" only when multiplied and not followed by
|
|
27
|
+
// another numeral word ("quatre-vingts" / "deux cents", but "quatre-vingt mille").
|
|
28
|
+
const belowHundred = (n: number, allowPluralS: boolean): string => {
|
|
29
|
+
if (n < 20) {
|
|
30
|
+
return UNITS[n];
|
|
31
|
+
}
|
|
32
|
+
if (n < 70) {
|
|
33
|
+
const tens = TENS[Math.floor(n / 10)];
|
|
34
|
+
const unit = n % 10;
|
|
35
|
+
if (unit === 0) {
|
|
36
|
+
return tens;
|
|
37
|
+
}
|
|
38
|
+
return unit === 1 ? `${tens} et un` : `${tens}-${UNITS[unit]}`;
|
|
39
|
+
}
|
|
40
|
+
if (n < 80) {
|
|
41
|
+
return n === 71 ? 'soixante et onze' : `soixante-${UNITS[n - 60]}`;
|
|
42
|
+
}
|
|
43
|
+
const unit = n - 80;
|
|
44
|
+
if (unit === 0) {
|
|
45
|
+
return allowPluralS ? 'quatre-vingts' : 'quatre-vingt';
|
|
46
|
+
}
|
|
47
|
+
return `quatre-vingt-${UNITS[unit]}`;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const belowThousand = (n: number, allowPluralS: boolean): string => {
|
|
51
|
+
const hundreds = Math.floor(n / 100);
|
|
52
|
+
const rest = n % 100;
|
|
53
|
+
if (hundreds === 0) {
|
|
54
|
+
return belowHundred(rest, allowPluralS);
|
|
55
|
+
}
|
|
56
|
+
const head =
|
|
57
|
+
hundreds === 1 ? 'cent' : `${UNITS[hundreds]} cent${rest === 0 && allowPluralS ? 's' : ''}`;
|
|
58
|
+
return rest === 0 ? head : `${head} ${belowHundred(rest, allowPluralS)}`;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Spells a non-negative integer amount in French words (traditional orthography), for legal
|
|
63
|
+
* documents such as the cautionnement's mention manuscrite. Decimals are truncated; the
|
|
64
|
+
* currency word is not included. Supports values below one trillion.
|
|
65
|
+
*/
|
|
66
|
+
export const numberToFrenchWords = (value: string | number): string => {
|
|
67
|
+
const n = Math.trunc(Number(value));
|
|
68
|
+
if (!Number.isFinite(n) || n < 0 || n >= 1_000_000_000_000) {
|
|
69
|
+
throw new Error(`numbers-fr.unsupported-value: ${value}`);
|
|
70
|
+
}
|
|
71
|
+
if (n === 0) {
|
|
72
|
+
return 'zéro';
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const billions = Math.trunc(n / 1_000_000_000);
|
|
76
|
+
const millions = Math.trunc(n / 1_000_000) % 1_000;
|
|
77
|
+
const thousands = Math.trunc(n / 1_000) % 1_000;
|
|
78
|
+
const units = n % 1_000;
|
|
79
|
+
|
|
80
|
+
const parts: string[] = [];
|
|
81
|
+
if (billions > 0) {
|
|
82
|
+
parts.push(billions === 1 ? 'un milliard' : `${belowThousand(billions, true)} milliards`);
|
|
83
|
+
}
|
|
84
|
+
if (millions > 0) {
|
|
85
|
+
parts.push(millions === 1 ? 'un million' : `${belowThousand(millions, true)} millions`);
|
|
86
|
+
}
|
|
87
|
+
if (thousands > 0) {
|
|
88
|
+
parts.push(thousands === 1 ? 'mille' : `${belowThousand(thousands, false)} mille`);
|
|
89
|
+
}
|
|
90
|
+
if (units > 0) {
|
|
91
|
+
parts.push(belowThousand(units, true));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return parts.join(' ');
|
|
95
|
+
};
|