From 31be8277bf5a99cee7f0e2b979377789c0aca883 Mon Sep 17 00:00:00 2001 From: liubiren Date: Tue, 13 Jan 2026 22:04:45 +0800 Subject: [PATCH] 1 --- 票据理赔自动化/case.py | 30 +-- 票据理赔自动化/database.db | Bin 85553152 -> 85553152 bytes .../254728869001/{application_1.jpg => image_01.jpg} | Bin .../254728869001/{beneficiary_1.jpg => image_02.jpg} | Bin .../254728869001/{insurant_1.jpg => image_03.jpg} | Bin .../254728869001/{invoice_1.jpg => image_04.jpg} | Bin .../254728869001/{invoice_2.jpg => image_05.jpg} | Bin .../254728869001/{invoice_3.jpg => image_06.jpg} | Bin .../254728869001/{invoice_4.jpg => image_07.jpg} | Bin .../254728869001/{invoice_5.jpg => image_08.jpg} | Bin .../254728869001/{invoice_6.jpg => image_09.jpg} | Bin .../254728869001/{invoice_7.jpg => image_10.jpg} | Bin .../254728869001/{invoice_8.jpg => image_11.jpg} | Bin .../254728869001/{invoice_9.jpg => image_12.jpg} | Bin .../254728869001/{invoice_10.jpg => image_13.jpg} | Bin .../254728869001/{invoice_11.jpg => image_14.jpg} | Bin .../254728869001/{invoice_12.jpg => image_15.jpg} | Bin 票据理赔自动化/dossiers/254728869001.html | 200 ++++++++---------- 票据理赔自动化/image.py | 2 +- 票据理赔自动化/masterdata.py | 71 ++++--- 票据理赔自动化/template.html | 41 +--- 21 files changed, 160 insertions(+), 184 deletions(-) rename 票据理赔自动化/directory/254728869001/{application_1.jpg => image_01.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{beneficiary_1.jpg => image_02.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{insurant_1.jpg => image_03.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_1.jpg => image_04.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_2.jpg => image_05.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_3.jpg => image_06.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_4.jpg => image_07.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_5.jpg => image_08.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_6.jpg => image_09.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_7.jpg => image_10.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_8.jpg => image_11.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_9.jpg => image_12.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_10.jpg => image_13.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_11.jpg => image_14.jpg} (100%) rename 票据理赔自动化/directory/254728869001/{invoice_12.jpg => image_15.jpg} (100%) diff --git a/票据理赔自动化/case.py b/票据理赔自动化/case.py index 4d229ea..4d5d9d1 100644 --- a/票据理赔自动化/case.py +++ b/票据理赔自动化/case.py @@ -90,12 +90,12 @@ def receipt_adjust( # 初始化理算记录 adjustments = [] - # 初始化票据剩余理算金额 - remaining_adjustment_amount = masterdata.query_remaining_adjustment_amount( - receipt_number=receipt["number"], + # 初始化票据剩余金额 + remaining_amount = masterdata.query_remaining_amount( + number=receipt["number"], ) - if remaining_adjustment_amount is None: - remaining_adjustment_amount = ( + if remaining_amount is None: + remaining_amount = ( receipt["personal_self_payment"] # 个人自费金额 + receipt["non_medical_payment"] # 个人自付金额 + receipt["reasonable_amount"] # 合理金额 @@ -152,7 +152,7 @@ def receipt_adjust( adjustment_amount = max( Decimal("0.00"), min( - remaining_adjustment_amount, # 剩余理算金额 + remaining_amount, # 票据剩余金额 remaining_coverage_amount, # 个单剩余保额 adjustable_amount := ( ( @@ -198,12 +198,12 @@ def receipt_adjust( "reasonable_amount": receipt["reasonable_amount"], # 合理金额 "reasonable_ratio": liability["reasonable_ratio"], # 合理理算比例 "reasonable_adjustable_amount": reasonable_adjustable_amount, # 合理可理算金额 - "remaining_adjustment_amount": remaining_adjustment_amount, # 剩余理算金额 + "remaining_amount": remaining_amount, # 票据剩余金额 "remaining_coverage_amount": remaining_coverage_amount, # 个单剩余保额 "adjustable_amount": adjustable_amount, # 可理算金额 "adjustment_amount": adjustment_amount, # 理算金额 "adjustment_explanation": f""" - 1、剩余理算金额:{remaining_adjustment_amount:.2f}; + 1、票据剩余金额:{remaining_amount:.2f}; 2、个单剩余保额:{remaining_coverage_amount:.2f}; 3、可理算金额:{adjustable_amount:.2f},其中: 1)个人自费可理算金额:{personal_self_adjustable_amount:.2f}={receipt['personal_self_payment']:.2f}*{liability['personal_self_ratio']:.2f}%; @@ -218,9 +218,9 @@ def receipt_adjust( } ) - remaining_adjustment_amount -= adjustment_amount - # 若剩余理算金额小于等于0则跳出循环 - if remaining_adjustment_amount <= Decimal("0.00"): + remaining_amount -= adjustment_amount + # 若票据剩余金额小于等于0则跳出循环 + if remaining_amount <= Decimal("0.00"): break if not adjustments: @@ -241,7 +241,7 @@ def receipt_adjust( "reasonable_amount": receipt["reasonable_amount"], # 合理金额 "reasonable_ratio": None, # 合理理算比例 "reasonable_adjustable_amount": None, # 合理可理算金额 - "remaining_adjustment_amount": remaining_adjustment_amount, # 剩余理算金额 + "remaining_amount": remaining_amount, # 票据剩余金额 "remaining_coverage_amount": None, # 个单剩余保额 "adjustable_amount": None, # 可理算金额 "adjustment_amount": Decimal("0.00"), # 理算金额 @@ -250,9 +250,9 @@ def receipt_adjust( ) # 新增理算记录 - masterdata.add_ajustment( - receipt_number=receipt["number"], - remaining_adjustment_amount=remaining_adjustment_amount, + masterdata.add_receipt_adjustment( + number=receipt["number"], + remaining_amount=remaining_amount, ) return adjustments diff --git a/票据理赔自动化/database.db b/票据理赔自动化/database.db index 8167cfc69a26f360f05e7745d05570edf6cd6ef9..f41f3fa173031671ea1f03a042b5e6c5c3629b01 100644 GIT binary patch delta 9549 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 NW>?Dcmwn*i{{ZgZ^Fsgt delta 6929 zcmaji3zW?D|Htv&+52_e@0W4EYcAjU&J2o~*_p^)ZeO0Y}E)_$?tzxQpRJDuYx8s|-=eQ5mZ8pvo|nT$SM}BUJKK zMyiZb8Lg79GDhVgm9Z-0R326tukwh>qbd_r9#fg9GD&5!%Ht|iRHmw^$~2YfDl=4O zs?1V(Lgh)7*(!5X=Bmt7nXj@yWueL{a znabxX2UWgM`BLR8l|w3Ds~lGOM&*dgQI&61zEk;L<(SHGl^;}oR5_t?QstD&X_cQ; z&ZzvX@{7t@m0wkUQ#q&dyUKZ$3o3u8TvYi}<&w%}mA_Q}R=J{bRppw>KPuN%Zp@VE z*%A#4Vi1cs#3KQTNJ27Fkcu>Y+XwpdlKeF`A$$?t&c-IN^c;H%xfog%8cp94&A+?m#b)f=4j{k6|JvVKN@a6ikI;8m40gW?~kez>}Db zIhc!in2!Zmh(%b8r?3P|u?)+x0#9QlRw07bScA2A2G3$0p2PE4j}3SMFXAP7u^$KU z89v8Be1R|V6%OHR9L6^|f}{8r-{E^4!*Tq8A8`UFaSEsL6VBjg{DQOi6~Eyee#d!S zz#q7XKXD0{@fZHa6-&*PF>ox_jl=OYa8m>xM<4BnHx^*T$Xcs-n7#j zmz# zZ%)e0&&kccx$eKClMAeuqb;Li6IvDSc3yDRwP=fJF>MQvr&dY(Z>iClj)F5+qb(Dw z+q@pXBN%W7gMN?GG~I?_4+g{jV20P_4TW7ES7b(Ii=~m(Zg1xHG;=wdI^ABE-4`iY z&SJ4Onrul-Y+t8x#mfHnKErUiou=0x3H3B|&q zQr245qv@N|4_jMX7o=aeZnfqXRI*zvtI{Xl>Gnyg9n(JgPWMJ);h;M;KA~_>@zzc( z-rM-1_3qHWxWYkq>P~D?r8}H|!p|;s zYnHV^`uX(j>66pjq?b%PoVF&dV1BFP(c@!_o@MnDmu%|4bbY*;8tX3Wj~wrAvD7Mi z+imCdxZGw+QP#IlvCQK!U1oAowxxJxdOZ#^sVKAdEjG{XGaP1OQ8wiNWG;uxOeo6s z6weHo(_zLJWtI9BtLbub&&L&IoqCa#xor)4wvn=!CtS| zOy+;C)b!&~){EA?)+5$_=~t{FYh!C^>jvvQ>)7D4n_Mh#8V)A$+)4U>0%u}j5Gg$M zGSw1p4Kh5p7G!_SHq7{c(qTmjltd|%Mj4bvIh02Q zR753IMio>=HB^TUHBb|^P#bkn7xhpd4bTvc&=^h76nDW62b^%hfEy+}@WO{?XpR=R z8~30kTEUM1g2+G!Vcd(>XoLIE7VXd;9ncY-&>3BDKf0nD9zb{WKu`2SZ}dT5^g|~4 zBMSpC5Q1zB!e9(R4u;}E3_~u4V+8Ur5~DC0`51$TFc#zRFvjB%JcTFdZ{66SMFHp2Td-!CcJ4d@R61EW%<*{=h~2iA%VQzwkG%;3}@+A6&-`%dEVZIeF2rAO^9BLp&0Y zh$JK<1*u3wI;<#xk|>4JD1)*nhw`X^il~IjsDi4fhU&1P25O=fYNHP7q8{p_0UDwa z8lwrC;x5?XfDpsv!B9MiVaUaBj6h-kMq(63 zBOhb%5XNF09>#b)f=4j{k6|JvVKN@a6ikI;8m40gW?~kez>}DbIhc!in2!Zmh(%b8 zr?3P|u?)+x0#9QlRw07bScA2A2G3$0p2PE4j}3SMFXAP7u^$KU89v8Be1R|V6%OHR z9L6^|f}{8r-{E^4!*Tq8A8`UFaSEsL6VBjg{DQOi6~Eyee#d!Sz#q7XKXD0{@fZHa z6VzK`PRa4l7EaBub$)%AhRDp*$*}A}XOW zs-P;Wp*n1+ftsj=+NguNsE7J!fQD#<#%O}3xC?eT;DieX+%VyR7d|vYbF{$SxCbrK z3Vs9-Ls(G}hB0J@_GdZHJ4qYwI`A2QJ&Sr~wU z5M*Nz24e_vFcc4B7;-TjBT(4Ckr;*1$j2Bwgs~WhhcOiFz|&ZXRfu3U)?h83!LwM0=kPq% zV*_5mi+BkyV#cw!=-*Fxn@CPp9Ph7%f{Dr@91y^wm|KK`q#Lmi# - 票据理赔自动化报告 + 票据理赔自动化 -
-
+
-

254728869001理算报告

+

理赔报告

- 保险分公司: 中银保险有限公司苏州分公司 | - 报案时间: 2025-07-25 12:00:00 + 保险分公司名称: 中银保险有限公司苏州分公司 | + 报案时间: 2025-07-25 12:00:00 | 赔案号:254728869001

@@ -429,105 +409,105 @@ 03 - 254728869001/insurant_1.jpg + image_03.jpg 居民身份证(国徽、头像面) 是 02 - 254728869001/beneficiary_1.jpg + image_02.jpg 银行卡 否,无需识别 01 - 254728869001/application_1.jpg + image_01.jpg 理赔申请书 是 04 - 254728869001/invoice_1.jpg + image_04.jpg 增值税发票 是 05 - 254728869001/invoice_10.jpg + image_13.jpg 增值税发票 是 06 - 254728869001/invoice_11.jpg + image_15.jpg 增值税发票 是 07 - 254728869001/invoice_12.jpg + image_05.jpg 增值税发票 是 08 - 254728869001/invoice_2.jpg + image_06.jpg 增值税发票 是 09 - 254728869001/invoice_3.jpg + image_07.jpg 增值税发票 是 10 - 254728869001/invoice_4.jpg + image_08.jpg 增值税发票 是 11 - 254728869001/invoice_5.jpg + image_09.jpg 增值税发票 是 12 - 254728869001/invoice_6.jpg + image_10.jpg 增值税发票 是 13 - 254728869001/invoice_7.jpg + image_11.jpg 增值税发票 是 14 - 254728869001/invoice_8.jpg + image_12.jpg 增值税发票 是 15 - 254728869001/invoice_9.jpg + image_14.jpg 增值税发票 是 @@ -618,7 +598,7 @@
-

在保个单

+

可理赔责任

@@ -672,7 +652,7 @@
理算金额
- 1860.94 + 0.00
@@ -694,9 +674,9 @@ 关联影像件: 0615
@@ -793,7 +773,7 @@
- + @@ -834,9 +814,9 @@ 关联影像件: 0706 @@ -942,7 +922,7 @@
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
- + @@ -983,9 +963,9 @@ 关联影像件: 1413 @@ -1082,7 +1062,7 @@
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
- + @@ -1123,9 +1103,9 @@ 关联影像件: 1312 @@ -1222,7 +1202,7 @@
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
- + @@ -1237,22 +1217,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
607.000.00 3291120253201000000001 3206021974013100295000.003139.06 药店购药补充 0.00 0.00 607.00 607.00607.000.00
- 理算金额合计: 607.00元 + 理算金额合计: 0.00元
@@ -1263,9 +1243,9 @@ 关联影像件: 1211
@@ -1362,7 +1342,7 @@ - + @@ -1377,22 +1357,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
607.000.00 3291120253201000000001 3206021974013100294393.003139.06 药店购药补充 0.00 0.00 607.00 607.00607.000.00
- 理算金额合计: 607.00元 + 理算金额合计: 0.00元
@@ -1403,7 +1383,7 @@ 关联影像件: 05 - 剩余理算金额 + 票据剩余金额 团单号 个单号 个单剩余保额 @@ -1517,22 +1497,22 @@ - 119.56 + 0.00 3291120253201000000001 320602197401310029 - 3786.00 + 3139.06 药店购药补充 0.00 0.00 119.56 119.56 - 119.56 + 0.00
- 理算金额合计: 119.56元 + 理算金额合计: 0.00元
@@ -1543,9 +1523,9 @@ 关联影像件: 1514 @@ -1642,7 +1622,7 @@ - + @@ -1657,22 +1637,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
123.480.00 3291120253201000000001 3206021974013100293666.443139.06 药店购药补充 0.00 0.00 123.48 123.48123.480.00
- 理算金额合计: 123.48元 + 理算金额合计: 0.00元
@@ -1683,7 +1663,7 @@ 关联影像件: 04 - 剩余理算金额 + 票据剩余金额 团单号 个单号 个单剩余保额 @@ -1806,22 +1786,22 @@ - 13.00 + 0.00 3291120253201000000001 320602197401310029 - 3542.96 + 3139.06 药店购药补充 0.00 0.00 13.00 13.00 - 13.00 + 0.00
- 理算金额合计: 13.00元 + 理算金额合计: 0.00元
@@ -1832,9 +1812,9 @@ 关联影像件: 0807 @@ -1940,7 +1920,7 @@ - + @@ -1958,7 +1938,7 @@ - + @@ -1981,9 +1961,9 @@ 关联影像件: 1009 @@ -2080,7 +2060,7 @@
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额0.00 3291120253201000000001 3206021974013100293529.963139.06 药店购药补充 0.00 0.00
- + @@ -2095,22 +2075,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
131.500.00 3291120253201000000001 3206021974013100293529.963139.06 药店购药补充 0.00 0.00 131.50 131.50131.500.00
- 理算金额合计: 131.50元 + 理算金额合计: 0.00元
@@ -2121,9 +2101,9 @@ 关联影像件: 1110 @@ -2220,7 +2200,7 @@ - + @@ -2235,22 +2215,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
156.200.00 3291120253201000000001 3206021974013100293398.463139.06 药店购药补充 0.00 0.00 156.20 156.20156.200.00
- 理算金额合计: 156.20元 + 理算金额合计: 0.00元
@@ -2261,9 +2241,9 @@ 关联影像件: 0908 @@ -2360,7 +2340,7 @@ - + @@ -2375,22 +2355,22 @@ - + - + - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
103.200.00 3291120253201000000001 3206021974013100293242.263139.06 药店购药补充 0.00 0.00 103.20 103.20103.200.00
- 理算金额合计: 103.20元 + 理算金额合计: 0.00元
diff --git a/票据理赔自动化/image.py b/票据理赔自动化/image.py index 9b767c7..93b904c 100644 --- a/票据理赔自动化/image.py +++ b/票据理赔自动化/image.py @@ -118,7 +118,7 @@ def image_classify(image_index: int, image_path: Path, dossier: Dict[str, Any]) # 将已分类影像件添加至影像件层 dossier["images_layer"][f"{image_index:02d}"] = { "image_path": image_path.as_posix(), # 影像件路径 - "image_relative_path": image_path.relative_to(image_path.parent.parent).as_posix(), # 影像件相对路径 + "image_name": image_path.name, # 影像件名称 "image_format": image_format, # 影像件格式 "image_guid": image_guid, # 影像件唯一标识 "image_base64": image_base64, # 影像件BASE64编码 diff --git a/票据理赔自动化/masterdata.py b/票据理赔自动化/masterdata.py index f28cd36..9ef05a5 100644 --- a/票据理赔自动化/masterdata.py +++ b/票据理赔自动化/masterdata.py @@ -161,14 +161,16 @@ class MasterData(SQLite): # 初始化票据理算表 self.execute( sql=""" - CREATE TABLE IF NOT EXISTS adjustments + CREATE TABLE IF NOT EXISTS receipt_adjustments ( + --理算记录唯一标识 + guid TEXT PRIMARY KEY, --票据号 - receipt_number TEXT PRIMARY KEY, - --剩余理算金额 - remaining_adjustment_amount TEXT NOT NULL, + number TEXT NOT NULL, + --剩余金额 + remaining_amount TEXT NOT NULL, --理算时间 - adjust_time TEXT NOT NULL + adjust_time TEXT NOT NULL ) """ ) @@ -323,31 +325,31 @@ class MasterData(SQLite): except Exception as exception: raise RuntimeError(f"{str(exception)}") from exception - def query_remaining_adjustment_amount( + def query_remaining_amount( self, - receipt_number: str, + number: str, ) -> Optional[Decimal]: """ - 根据票据号查询剩余理算金额 - :param receipt_number: 票据号 - :return: 剩余理算金额 + 根据票据号查询剩余金额 + :param number: 票据号 + :return: 剩余金额 """ try: with self: result = self.query_one( sql=""" - SELECT remaining_adjustment_amount - FROM adjustments - WHERE receipt_number = ? + SELECT remaining_amount + FROM receipt_adjustments + WHERE number = ? ORDER BY adjust_time DESC LIMIT 1; """, - parameters=(receipt_number,), + parameters=(number,), ) if not result: return None - return Decimal(result["remaining_adjustment_amount"]).quantize( + return Decimal(result["remaining_amount"]).quantize( Decimal("0.00"), rounding=ROUND_HALF_UP, ) @@ -355,34 +357,47 @@ class MasterData(SQLite): except Exception as exception: raise RuntimeError(f"{str(exception)}") from exception - def add_ajustment( + def add_receipt_adjustment( self, - receipt_number: str, - remaining_adjustment_amount: Decimal, + number: str, + remaining_amount: Decimal, ) -> None: """ - 新增理算记录 - :param receipt_number: 票据号 - :param remaining_adjustment_amount: 剩余理算金额 + 新增票据理算记录 + :param number: 票据号 + :param remaining_amount: 剩余金额 :return: 无 """ - if remaining_adjustment_amount < Decimal("0.00"): - raise ValueError("剩余理算金额小于0") + if remaining_amount < Decimal("0.00"): + raise ValueError("剩余金额小于0") # 当前时间 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") + # 构建票据理算记录唯一标识 + + guid = ( + md5( + string=f"{number} {remaining_amount:.2f} {current_time}".encode( + "utf-8" + ) + ) + .hexdigest() + .upper() + ) + with self: if not self.execute( sql=""" - INSERT INTO adjustments - (receipt_number, remaining_adjustment_amount, adjust_time) + INSERT INTO receipt_adjustments + (guid, number, remaining_amount, adjust_time) VALUES - (?, ?, ?) + (?, ?, ?, ?) """, parameters=( - receipt_number, - f"{remaining_adjustment_amount:.2f}", + guid, + number, + f"{remaining_amount:.2f}", current_time, ), ): diff --git a/票据理赔自动化/template.html b/票据理赔自动化/template.html index 5f16412..f234778 100644 --- a/票据理赔自动化/template.html +++ b/票据理赔自动化/template.html @@ -3,7 +3,7 @@ - 票据理赔自动化报告 + 票据理赔自动化 -
-
+
-

{{ obj["report_layer"]["case_number"] }}理算报告

+

理赔报告

- 保险分公司: {{ obj["report_layer"]["insurer_company"] }} | + 保险分公司名称: {{ obj["report_layer"]["insurer_company"] }} | 报案时间: {{ obj["report_layer"]["report_time"] | - datetime_to_str }} + datetime_to_str }} | 赔案号:{{ + obj["report_layer"]["case_number"] }}

@@ -432,7 +413,7 @@ {% for image_index,image in obj["images_layer"].items() %} {{ image_index }} - {{ image["image_relative_path"] }} + {{ image["image_name"] }} {{ image["image_type"] }} {{ image["image_recognized"] }} @@ -529,7 +510,7 @@
-

在保个单

+

可理赔责任

@@ -702,7 +683,7 @@
- + @@ -717,7 +698,7 @@ {% for adjustment in receipt["adjustments"] %} - +
剩余理算金额票据剩余金额 团单号 个单号 个单剩余保额
{{ adjustment["remaining_adjustment_amount"] }}{{ adjustment["remaining_amount"] }} {{ adjustment["group_policy"] }} {{ adjustment["person_policy"] }} {{ adjustment["remaining_coverage_amount"] }}