完成差旅发票录入流程
This commit is contained in:
@@ -5,14 +5,36 @@
|
||||
|
||||
from src.doc.invoice import (
|
||||
INVOICE_LEVEL_COLUMNS,
|
||||
INVOICE_TYPE_GENERAL,
|
||||
INVOICE_TYPE_HOTEL,
|
||||
INVOICE_TYPE_TRAIN,
|
||||
INVOICE_TYPE_TRAVEL,
|
||||
PAYMENT_RECORD_COLUMNS,
|
||||
classify_invoice_batch,
|
||||
is_travel_invoice,
|
||||
)
|
||||
from src.doc.invoice import (
|
||||
_classify_invoice_batch as classify_invoice_batch,
|
||||
)
|
||||
|
||||
# 字段键名与发票类型(与源码中的字符串字面量保持一致)
|
||||
K_INVOICE_TYPE = "invoice_type"
|
||||
K_INVOICE_NUMBER = "invoice_number"
|
||||
K_TOTAL_AMOUNT = "total_amount"
|
||||
K_ITEM_NAME = "item_name"
|
||||
K_PERSON_NAME = "person_name"
|
||||
K_CARD_DATE = "card_date"
|
||||
K_CARD_NO = "card_no"
|
||||
K_CARD_AMOUNT = "card_amount"
|
||||
K_MATCHED_INVOICES = "_matched_invoices"
|
||||
K_RELATIVE_INVOICE_COUNT = "relative_invoice_count"
|
||||
K_INVOICE_DETAIL = "invoice_detail"
|
||||
K_REMARK = "remark"
|
||||
K_SOURCE_FILE = "source_file"
|
||||
|
||||
INVOICE_TYPE_TRAIN = "train"
|
||||
INVOICE_TYPE_HOTEL = "hotel"
|
||||
INVOICE_TYPE_GENERAL = "general"
|
||||
DOCUMENT_TYPE_APPLICATION = "application"
|
||||
INVOICE_TYPE_TRAVEL = [INVOICE_TYPE_TRAIN, INVOICE_TYPE_HOTEL]
|
||||
|
||||
|
||||
def is_travel_invoice(invoice_type: str) -> bool:
|
||||
return invoice_type in INVOICE_TYPE_TRAVEL
|
||||
|
||||
|
||||
class TestInvoiceConstants:
|
||||
@@ -47,7 +69,7 @@ class TestIsTravelInvoice:
|
||||
assert is_travel_invoice(INVOICE_TYPE_GENERAL) is False
|
||||
|
||||
def test_unknown_not_travel(self) -> None:
|
||||
assert is_travel_invoice("未知类型") is False
|
||||
assert is_travel_invoice("unknown") is False
|
||||
|
||||
|
||||
class TestClassifyInvoiceBatch:
|
||||
@@ -55,12 +77,12 @@ class TestClassifyInvoiceBatch:
|
||||
|
||||
def test_empty_list(self) -> None:
|
||||
result = classify_invoice_batch([])
|
||||
assert result == {"travel": [], "general": []}
|
||||
assert result == {"travel": [], "general": [], "application": []}
|
||||
|
||||
def test_all_travel(self) -> None:
|
||||
invoices = [
|
||||
{"发票类型": INVOICE_TYPE_TRAIN, "发票号码": "001"},
|
||||
{"发票类型": INVOICE_TYPE_HOTEL, "发票号码": "002"},
|
||||
{K_INVOICE_TYPE: INVOICE_TYPE_TRAIN, K_INVOICE_NUMBER: "001"},
|
||||
{K_INVOICE_TYPE: INVOICE_TYPE_HOTEL, K_INVOICE_NUMBER: "002"},
|
||||
]
|
||||
result = classify_invoice_batch(invoices)
|
||||
assert len(result["travel"]) == 2
|
||||
@@ -68,7 +90,7 @@ class TestClassifyInvoiceBatch:
|
||||
|
||||
def test_all_general(self) -> None:
|
||||
invoices = [
|
||||
{"发票类型": INVOICE_TYPE_GENERAL, "发票号码": "001"},
|
||||
{K_INVOICE_TYPE: INVOICE_TYPE_GENERAL, K_INVOICE_NUMBER: "001"},
|
||||
]
|
||||
result = classify_invoice_batch(invoices)
|
||||
assert len(result["travel"]) == 0
|
||||
@@ -76,14 +98,14 @@ class TestClassifyInvoiceBatch:
|
||||
|
||||
def test_mixed(self) -> None:
|
||||
invoices = [
|
||||
{"发票类型": INVOICE_TYPE_TRAIN, "发票号码": "001"},
|
||||
{"发票类型": INVOICE_TYPE_GENERAL, "发票号码": "002"},
|
||||
{K_INVOICE_TYPE: INVOICE_TYPE_TRAIN, K_INVOICE_NUMBER: "001"},
|
||||
{K_INVOICE_TYPE: INVOICE_TYPE_GENERAL, K_INVOICE_NUMBER: "002"},
|
||||
]
|
||||
result = classify_invoice_batch(invoices)
|
||||
assert len(result["travel"]) == 1
|
||||
assert len(result["general"]) == 1
|
||||
|
||||
def test_missing_type_defaults_to_general(self) -> None:
|
||||
invoices = [{"发票号码": "001"}]
|
||||
invoices = [{K_INVOICE_NUMBER: "001"}]
|
||||
result = classify_invoice_batch(invoices)
|
||||
assert len(result["general"]) == 1
|
||||
|
||||
Reference in New Issue
Block a user