esr-code-line
Advanced tools
+9
-2
| export declare function checkDigit(code: string): number; | ||
| export declare const attachCheckDigit: (code: string) => string; | ||
| export declare const pad: (s: string, n: number) => string; | ||
| export declare function pad(s: string, n: number): string; | ||
| export declare function toSubscriberNumber(customerNumber: string): string; | ||
| export declare function codeLine(slipType: "01" | "04" | "11" | "14" | "21" | "23" | "31" | "33", amountFrancsOrEuros: string, amountRappenOrCents: string, referenceNumber: string, customerNumber: string): string; | ||
| export interface SlipRequirements { | ||
| readonly slipType: "01" | "04" | "11" | "14" | "21" | "23" | "31" | "33"; | ||
| readonly amountFrancsOrEuros: string; | ||
| readonly amountRappenOrCents: string; | ||
| readonly referenceNumber: string; | ||
| readonly customerNumber: string; | ||
| } | ||
| export declare function codeLine(req: SlipRequirements): string; |
+15
-12
@@ -26,5 +26,8 @@ "use strict"; | ||
| exports.attachCheckDigit = attachCheckDigit; | ||
| var pad = function (s, n) { | ||
| return (s.length < n ? "0".repeat(n - s.length) : "") + s; | ||
| }; | ||
| function pad(s, n) { | ||
| var zeros = ""; | ||
| for (var i = 0; i < n - s.length; i++) | ||
| zeros += "0"; | ||
| return zeros + s; | ||
| } | ||
| exports.pad = pad; | ||
@@ -37,16 +40,16 @@ function toSubscriberNumber(customerNumber) { | ||
| var isrCode = split[0], serialNumber = split[1], checkDigit = split[2]; | ||
| return isrCode + exports.pad(serialNumber, 6) + checkDigit; | ||
| return isrCode + pad(serialNumber, 6) + checkDigit; | ||
| } | ||
| exports.toSubscriberNumber = toSubscriberNumber; | ||
| function codeLine(slipType, amountFrancsOrEuros, amountRappenOrCents, referenceNumber, customerNumber) { | ||
| var paddedAmountFrancsOrEuros = exports.pad(amountFrancsOrEuros, 8); | ||
| var checkDigit1 = checkDigit(slipType + paddedAmountFrancsOrEuros + amountRappenOrCents); | ||
| var referenceNumberWithoutWhiteSpace = referenceNumber.replace(/\s/g, ""); | ||
| var subscriberNumber = toSubscriberNumber(customerNumber); | ||
| return (slipType + | ||
| function codeLine(req) { | ||
| var paddedAmountFrancsOrEuros = pad(req.amountFrancsOrEuros.toString(), 8); | ||
| var checkDigit1 = checkDigit(req.slipType + paddedAmountFrancsOrEuros + req.amountRappenOrCents); | ||
| var referenceNumberNoSpaces = req.referenceNumber.replace(/\s/g, ""); | ||
| var subscriberNumber = toSubscriberNumber(req.customerNumber); | ||
| return (req.slipType + | ||
| paddedAmountFrancsOrEuros + | ||
| amountRappenOrCents + | ||
| req.amountRappenOrCents + | ||
| checkDigit1 + | ||
| AUXILIARY_CHARACTER_1 + | ||
| referenceNumberWithoutWhiteSpace + | ||
| referenceNumberNoSpaces + | ||
| AUXILIARY_CHARACTER_2 + | ||
@@ -53,0 +56,0 @@ " " + |
+3
-1
| { | ||
| "name": "esr-code-line", | ||
| "version": "0.9.0", | ||
| "version": "1.0.0", | ||
| "description": "A code line generator for orange payment slips used in Switzerland", | ||
@@ -18,2 +18,4 @@ "main": "dist/index.js", | ||
| "payment", | ||
| "inpayment", | ||
| "payment-slip", | ||
| "switzerland", | ||
@@ -20,0 +22,0 @@ "swiss", |
+7
-7
@@ -47,9 +47,9 @@ # Code Line Generator for Orange Payment Slips used in Switzerland | ||
| const code = codeLine( | ||
| "01", | ||
| "3949", | ||
| "75", | ||
| "12 00000 00000 23447 89432 16899", | ||
| "01-162-8" | ||
| ); | ||
| const code = codeLine({ | ||
| slipType: "01", | ||
| amountFrancsOrEuros: "3949", | ||
| amountRappenOrCents: "75", | ||
| referenceNumber: "12 00000 00000 23447 89432 16899", | ||
| customerNumber: "01-162-8", | ||
| }); | ||
| ``` | ||
@@ -56,0 +56,0 @@ |
+14
-14
@@ -54,9 +54,9 @@ import { | ||
| // Values taken from ISR Manual p. 25 | ||
| const result = codeLine( | ||
| "01", | ||
| "3949", | ||
| "75", | ||
| "12 00000 00000 23447 89432 16899", | ||
| "01-162-8" | ||
| ); | ||
| const result = codeLine({ | ||
| slipType: "01", | ||
| amountFrancsOrEuros: "3949", | ||
| amountRappenOrCents: "75", | ||
| referenceNumber: "12 00000 00000 23447 89432 16899", | ||
| customerNumber: "01-162-8", | ||
| }); | ||
@@ -68,10 +68,10 @@ // check digit of slip type and amount is 3 | ||
| test("Assembles code in the correct order.", () => { | ||
| const result = codeLine( | ||
| "01", | ||
| "3949", | ||
| "75", | ||
| "12 00000 00000 23447 89432 16899", | ||
| "01-162-8" | ||
| ); | ||
| const result = codeLine({ | ||
| slipType: "01", | ||
| amountFrancsOrEuros: "3949", | ||
| amountRappenOrCents: "75", | ||
| referenceNumber: "12 00000 00000 23447 89432 16899", | ||
| customerNumber: "01-162-8", | ||
| }); | ||
| expect(result).toBe("0100003949753>120000000000234478943216899+ 010001628>"); | ||
| }); |
+21
-16
@@ -25,4 +25,7 @@ const CHECK_DIGIT_TABLE = [0, 9, 4, 6, 8, 2, 7, 1, 3, 5]; | ||
| export const pad = (s: string, n: number): string => | ||
| (s.length < n ? "0".repeat(n - s.length) : "") + s; | ||
| export function pad(s: string, n: number): string { | ||
| let zeros = ""; | ||
| for (let i = 0; i < n - s.length; i++) zeros += "0"; | ||
| return zeros + s; | ||
| } | ||
@@ -40,26 +43,28 @@ export function toSubscriberNumber(customerNumber: string): string { | ||
| export function codeLine( | ||
| slipType: "01" | "04" | "11" | "14" | "21" | "23" | "31" | "33", | ||
| amountFrancsOrEuros: string, | ||
| amountRappenOrCents: string, | ||
| referenceNumber: string, | ||
| customerNumber: string | ||
| ): string { | ||
| const paddedAmountFrancsOrEuros = pad(amountFrancsOrEuros, 8); | ||
| export interface SlipRequirements { | ||
| readonly slipType: "01" | "04" | "11" | "14" | "21" | "23" | "31" | "33"; | ||
| readonly amountFrancsOrEuros: string; | ||
| readonly amountRappenOrCents: string; | ||
| readonly referenceNumber: string; | ||
| readonly customerNumber: string; | ||
| } | ||
| export function codeLine(req: SlipRequirements): string { | ||
| const paddedAmountFrancsOrEuros = pad(req.amountFrancsOrEuros.toString(), 8); | ||
| const checkDigit1 = checkDigit( | ||
| slipType + paddedAmountFrancsOrEuros + amountRappenOrCents | ||
| req.slipType + paddedAmountFrancsOrEuros + req.amountRappenOrCents | ||
| ); | ||
| const referenceNumberWithoutWhiteSpace = referenceNumber.replace(/\s/g, ""); | ||
| const referenceNumberNoSpaces = req.referenceNumber.replace(/\s/g, ""); | ||
| const subscriberNumber = toSubscriberNumber(customerNumber); | ||
| const subscriberNumber = toSubscriberNumber(req.customerNumber); | ||
| return ( | ||
| slipType + | ||
| req.slipType + | ||
| paddedAmountFrancsOrEuros + | ||
| amountRappenOrCents + | ||
| req.amountRappenOrCents + | ||
| checkDigit1 + | ||
| AUXILIARY_CHARACTER_1 + | ||
| referenceNumberWithoutWhiteSpace + | ||
| referenceNumberNoSpaces + | ||
| AUXILIARY_CHARACTER_2 + | ||
@@ -66,0 +71,0 @@ " " + |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
33920
1.7%192
7.87%0
-100%