Skip to content

Commit 95bd618

Browse files
committed
chore: Add xlsx dependency and implement record processing functions
1 parent 66d1d50 commit 95bd618

5 files changed

+400
-2
lines changed

basic_union.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
type User = {
3+
name: string
4+
age: number
5+
gender: "male" | "female"
6+
}
7+
8+
function goToToilet(user: User) {
9+
if (user.gender === "male") {
10+
console.log("Go to male toilet!")
11+
} else {
12+
console.log("Go to female toilet")
13+
}
14+
}

package-lock.json

+157-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"dependencies": {
33
"ts-node": "^10.8.2",
4-
"typescript": "^4.6.3"
4+
"typescript": "^4.6.3",
5+
"xlsx": "^0.18.5"
56
}
67
}

recon.ts

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import XLSX from "xlsx";
2+
3+
interface BankRecord {
4+
transactionName: string;
5+
date: string;
6+
amount: number;
7+
}
8+
interface BankRecordWithStatus extends BankRecord {
9+
status: string;
10+
}
11+
interface InternalRecord {
12+
vaNumber: string;
13+
schoolCode: string;
14+
schoolName: string;
15+
studentName: string;
16+
amount: number;
17+
}
18+
19+
const readInternalRecord = async (file: File): Promise<InternalRecord[]> => {
20+
const buffer = await file.arrayBuffer();
21+
const data = new Uint8Array(buffer);
22+
const workbook = XLSX.read(data, { type: "array" });
23+
const worksheet = workbook.Sheets[workbook.SheetNames[0] || 0];
24+
return [];
25+
};
26+
const readBankRecord = async (file: File): Promise<BankRecord[]> => {
27+
const buffer = await file.arrayBuffer();
28+
const data = new Uint8Array(buffer);
29+
const workbook = XLSX.read(data, { type: "array" });
30+
const worksheet = workbook.Sheets[workbook.SheetNames[0] || 0];
31+
return [];
32+
};
33+
34+
const markRowStatus = (
35+
internalRecords: InternalRecord[],
36+
bankRecords: BankRecord[]
37+
): BankRecordWithStatus[] => {
38+
// bad time:
39+
const result = bankRecords.map((bankRecord) => {
40+
const bankRecordVaNumber = getVaNumberFromTrx(bankRecord.transactionName);
41+
42+
let status = "";
43+
internalRecords.forEach((internalRecord) => {
44+
if (bankRecordVaNumber === internalRecord.vaNumber) {
45+
if (internalRecord.amount === bankRecord.amount) {
46+
status = "AMAN";
47+
}
48+
}
49+
});
50+
return { ...bankRecord, status };
51+
});
52+
return result;
53+
};
54+
55+
const getVaNumberFromTrx = (input: string): string => {
56+
const startIndex = input.indexOf("127");
57+
const vaNumber = input.slice(startIndex, startIndex + 18);
58+
return vaNumber;
59+
};
60+
61+
const splitVaNumber = (vaNumber: string): { left: string; right: string } => {
62+
const a = vaNumber.split("0");
63+
return { left: a[0], right: a[1] };
64+
};
65+
66+
// const pipe = (...fns) => fns.reduce((fn, cur) => fn(cur));
67+
68+
// Test case
69+
console.log(
70+
getVaNumberFromTrx(
71+
"BRIVA127060000000267170NBMBIQLIMA ARSYA ESB:NBMB:0200200P:493496516597"
72+
)
73+
);
74+
console.log(
75+
getVaNumberFromTrx(
76+
"BRIVA127060000000272563NBMBMUHAMAD FAHRE ESB:NBMB:0200200P:493502002745"
77+
)
78+
);
79+
console.log(
80+
getVaNumberFromTrx(
81+
"BRIVA127060000000317526NBMBMutiara Mauli ESB:NBMB:0200200P:493503967703"
82+
)
83+
);
84+
console.log(
85+
getVaNumberFromTrx(
86+
"BRIVA127060000000183612NBMBRamzi Fairuz ESB:NBMB:0200200P:493505973029"
87+
)
88+
);
89+
console.log(
90+
getVaNumberFromTrx(
91+
"BRIVA127060000000295840NBMBRARA PUTRI MA ESB:NBMB:0200200P:493506557999"
92+
)
93+
);
94+
console.log(
95+
getVaNumberFromTrx(
96+
"127060000000959095#004138255402#ATM #TRF TRF LINK FROM SOBIRIN LN127060000000959095ATM 4215701500340776"
97+
)
98+
);

0 commit comments

Comments
 (0)