Hệ thống đối soát giao dịch tài chính với Full Outer Merge và Tolerance Check
Viết hàm reconcile_transactions(ledger_a: pd.DataFrame, ledger_b: pd.DataFrame, key: str = "txn_id", amount_col: str = "amount", tolerance: float = 0.01) -> dict:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: outer join, indicator, floating point comparison.
Nội dung đề bài
Mục tiêu kiến thức
- Triển khai bài toán đối soát (Reconciliation) kinh điển trong ngành ngân hàng và fintech.
- Sử dụng
pd.merge(how='outer', indicator=True)phát hiện các bản ghi thiếu hụt ở một trong hai hệ thống. - So khớp giá trị số thực có xét đến sai số làm tròn (Floating-point Tolerance).
Mô tả bài toán
Viết hàm reconcile_transactions(ledger_a: pd.DataFrame, ledger_b: pd.DataFrame, key: str = "txn_id", amount_col: str = "amount", tolerance: float = 0.01) -> dict:
- Kiểm tra tính hợp lệ:
- Nếu
keyhoặcamount_colkhông tồn tại trong một trong hai DataFrame, raiseKeyError("Khong tim thay khoa doi soat hoac cot so tien"). - Nếu
tolerance < 0, raiseValueError("Tolerance phai khong am"). - Thực hiện Full Outer Join trên cột
keyvới hậu tố_avà_bkèmindicator=True: - Phân loại trạng thái cho từng giao dịch:
"MATCHED": Xuất hiện ở cả hai bên (_merge == 'both') và sai lệch |amounta - amountb| ≤ tolerance."DISCREPANCY": Xuất hiện ở cả hai bên nhưng sai lệch |amounta - amountb| > tolerance."MISSING_IN_B": Chỉ xuất hiện ởledger_a(_merge == 'left_only')."MISSING_IN_A": Chỉ xuất hiện ởledger_b(_merge == 'right_only').- Trả về dictionary có cấu trúc:
{
"summary": {
"total_records": int,
"matched_count": int,
"discrepancy_count": int,
"missing_in_b_count": int,
"missing_in_a_count": int
},
"discrepancies": [
{
"txn_id": txn_id,
"amount_a": float(amount_a),
"amount_b": float(amount_b),
"diff": float(abs(amount_a - amount_b))
}
# danh sach sap xep tang dan theo diff giam dan
]
}Input
- Tham số:
ledger_a: pd.DataFrame,ledger_b: pd.DataFrame,key: str,amount_col: str,tolerance: float.
Output
- Trả về:
dictchứasummaryvàdiscrepancies.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
reconcile_transactions(ledger_a=[{'txn_id': 'T1', 'amount': 100.0}, {'txn_id': 'T2', 'amount': 200.0}, {'txn_id': 'T3', 'amount': 300.0}], ledger_b=[{'txn_id': 'T1', 'amount': 100.005}, {'txn_id': 'T2', 'amount': 250.0}, {'txn_id': 'T4', 'amount': 400.0}], key='txn_id', amount_col='amount', tolerance=0.01)Output
{'total_records': 4, 'matched_count': 1, 'discrepancy_count': 1, 'missing_in_b_count': 1, 'missing_in_a_count': 1}Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
reconcile_transactions(ledger_a=[{'id': 1, 'amount': 10}], ledger_b=[{'txn_id': 1, 'amount': 10}], key='txn_id', amount_col='amount')Output
TrueGiải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
