From 3d69f8501f8a1c57beae74903732308d1a7c1f35 Mon Sep 17 00:00:00 2001 From: caoxiaozhu Date: Sat, 20 Jun 2026 10:17:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(risk):=20=E7=94=B3=E8=AF=B7=E5=8D=95?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E9=A3=8E=E9=99=A9=E5=8F=AF=E8=A7=81=E6=80=A7?= =?UTF-8?q?=E7=BB=86=E5=8C=96=E4=B8=8E=E8=A7=84=E5=88=99=E8=A1=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 申请单阶段将 policy/trip/amount 类风险对申请人可见、可自行修正,画像/审批流程类仍走领导可见 - 平台风险标记与语义推断统一采用该策略,更新对应单元测试 - 风险规则中 city_mismatch 等城市匹配规则移除 expense_application 阶段,仅保留 reimbursement - 同步更新交通/通信/差旅/出差等财务规则表 --- .../rules/finance-rules/交通工具等级标准.xlsx | Bin 6072 -> 6070 bytes .../rules/finance-rules/交通费用预估表.xlsx | Bin 7197 -> 7195 bytes .../finance-rules/公司通信费报销规则.xlsx | Bin 5934 -> 5933 bytes server/rules/finance-rules/出差补助标准.xlsx | Bin 5931 -> 5929 bytes .../rules/finance-rules/地区淡旺季映射表.xlsx | Bin 11427 -> 11425 bytes .../rules/finance-rules/差旅住宿费标准.xlsx | Bin 14706 -> 14708 bytes .../rules/finance-rules/差旅职级映射表.xlsx | Bin 5783 -> 5781 bytes .../risk.travel.high.city_mismatch.json | 3 -- .../risk.travel.high.date_outside_trip.json | 3 -- .../risk.travel.high.personal_purpose.json | 3 -- .../risk.travel.high.preapproval_absent.json | 3 -- ...isk.travel.low.attachment_ocr_missing.json | 3 -- ...el.low.local_transport_detail_missing.json | 3 -- .../risk.travel.low.vague_ticket_content.json | 3 -- .../risk.travel.medium.duplicate_ticket.json | 3 -- ...sk.travel.medium.multi_city_no_reason.json | 3 -- .../risk.travel.medium.reason_too_brief.json | 3 -- .../risk.travel.medium.title_mismatch.json | 3 -- .../expense_claim_platform_risk_flag.py | 28 +++++++++--------- .../app/services/expense_claim_risk_stage.py | 4 +++ .../test_expense_claim_platform_risk_stage.py | 8 +++-- 21 files changed, 23 insertions(+), 50 deletions(-) diff --git a/server/rules/finance-rules/交通工具等级标准.xlsx b/server/rules/finance-rules/交通工具等级标准.xlsx index 4578c8b29cba34315ee74d3681fd454ecd295566..d2ecf62f888a847bdef8120cc60cb9228aba3b04 100644 GIT binary patch delta 576 zcmdm?zfGSvz?+#xgn@y9gW)sNm5ICuIDu5m6s~2@UQWCwSAWp!h=D*`eCo-)b4^;6 z6mNGw@^mb4{3tf*=G}zJZ7ECcZr{FkcdTo^obiA2`)34F7n#%^T7Jdd=ZQhS+x=D@ z-#eR>1E(Q$H$~ zb{~*Bz-P;LDqyN;Oyr^ZC!go@dT*MPT&8Wx<7|0_+dMbq;OobSKX0me=%gmgvnec6 z+1JUpHtTu!qs%uVHQK8_zgf?8>#T|6CCx|EVkb@i^)0XbeAGeL;1A0LYL4#|*}5kG zUfT8kf2%KizxMX7eUG@~>Ic{NZ=H`43NbTd<|qrWF)+;8{DskkjTsmso3%OeSiy`r zyoSsm#^ehE&%gpZ1zQ-w0uI8Dzyhiw-VlLeQENnKPTnqR23Gb#RGRVjWF9dkFwam- zno(x5ub6riDBPd8M`&>}GcYvrGB5xU95gWY0=X4A`o$%cIjO~Z6}dS9-i%Bl%i|%L7!v~nH(VnFLj&W%$>+qRz?QuRTDEF3ySSVJ$TH*Ck9VyFs{GB!z#xU9 e!%%p#zpxBHniZ1^#HAU$(L^ zi}b{o&2?}}66%P4QW5QP*`+gZcfEh~Ha-^fzK_3uY+P&df_0aJ|G`SG9F28sx61+- z#H+if=`$$Fom@4e*TuZ8T71o;kCJ>3ME9*`cAWX#G$LuKsP>GOmGM0%BUcs%{_4MQ zj;Yr{H}aK*(?rpN)S2~7z4c~iPCD^j)Csx&Ju?36ogIOU>-+i7fBv-crP69X&56Bk zjg2C^6_$7Z$;^=c5tegq^M0-+;g4Aks{6lwGHFl9_t|&NCZ@(+%Zyuo^sU~0;j6tG zueYE4y7<4=7Qfkhf3|;An!x+#m-$allyHcd88b&&fQ@1E2SzhCW?+bH*5t@z1v6&x z8Zv_zlg|k}0}E^yY+(co*a<%Z3n+_tLj(#%tr4L)d8?=ySlK&KX~w&gxx|#fJbf`~ zM!Ct}V(RjsaDU<+p~cC}z|hFczyL&W(7@O~d7_vMSjPsSj>D7Bh)IEYFU6$o*9bB& zROINF=NDxs<>zPXRpjObcr!AIFvH_D#`yK)U2B2H{bpofkb)b_z|g>GEIip)SY~p( WI1kvoJaK78iOF5!YHTT@Aawv(iqN6} diff --git a/server/rules/finance-rules/交通费用预估表.xlsx b/server/rules/finance-rules/交通费用预估表.xlsx index 74593c5389fc340dcafbb16a0ec40a3adc49b019..49756425ca48b2e74fb06b9c652dbf2125aec36d 100644 GIT binary patch delta 588 zcmbPhG24PSz?+#xgn@y9gW)sNm5ICuIDu5m6s~2@UQWCwSAWp!h=D*`eCo-)b4^;6 z6mNGw@^mb4{3tf*=G}zJZ7ECcZr{FkcdTo^obiA2`)34F7n#%^T7Jdd=ZQhS+x=D@ z-#eR>1E(Q$H$~ zb{~*Bz-P;LDqyN;Oyr^ZC!go@dT*MPT&8Wx<7|0_+dMbq;OobSKX0me=%gmgvnec6 z+1JUpHtTu!qs%uVHQK8_zgf?8>#T|6CCx|EVkb@i^)0XbeAGeL;1A0LYL4#|*}5kG zUfT8kf2%KizxMX7eUG@~>Ic{NZ=H`43NbTd<|qrWF)+;8{DskkjTsmso3%Nva)KGm zLWayB#$4rubj>%RWQj^b0@qq2TBPGrFW%3Ux85@wc z?e4F;4gi&jF)=W3BWq*S5M^M9FG|fR*4G1(0p5&EBFyk;pBx}9%_ulIM_LYSXfKdA jZSqQKO|W}sw>h;)Gcqt-XGV8#_2iGzYHY_PK{f#Z<;&V% delta 594 zcmbPjG1r1Oz?+#xgn@y9gTdG3;zZs9fX%OR^*?OD z)As+=mFm}Z3z`<`i7%V$;FKiP5&fhh+U2rKXW;I7|LAReEarV5fB)FH*5n22E(iaE zm0UR*>)39W1ulqJcTdx2P?9^jYDTY%d0Vyknnxcc`5uVwTg~h^^SNn6(o#|F87(X0 zdrn5KEDZeBf8iWcuY+#nD+{NIq6PJ-Gn;zr&CZ;3;=8C5a{qf|{MkD@0vXr$^Pm6x zY2{0$)qI*0d)*ovMRqGJ@BWjSA^jsP=iKJ~TuZ_qvm8|SfBj_Ao{;ae@0v|ajk}f^ zxBTc^z5T*hdo^BfKlyd>f2}Qkv-kdN|EM&9_s=i$pPVQ`5;HSqjr0}IHBH8Fw(7K=Xu3v@_$LjuyO&+k6vb zV5rE^FD|LfNiEi^$ju4xW@Hj!hDU77cK6p^2Y?#Im>3wikqu(hnrtX71vbb}TAERK ra+b6lnAZ*D&6vDgS`+M$*=$46U@U+D*{W0%^ry}#? zXPY(#b2p2cl^JilHS1{KM$<|A{?1wBYrgGv-?jfQC$}u+bNVhgKS|zT($OtavCk)8 zNIdN4;>e&<>$E&*Cg=Ra&hm2?{poS%@Y=sx+39R0GoPoVE0pZ<>(2iQAON*>X*~UVg~I*LlBf^y4GudsOzWnd-(Z z8yF~m`{kknIcv`QU7w78uWm@2s?K4>erH4Wr%n6nZ`g0z_N+Ac!?G1W=Urcv#j?M8 zc8vY6e5dQu)f@gB#IdeziT{7CjtM0cVrIt7Q5IlhV3@P{3!@1eGcZIpYjZqf0W(B+ z4VgiV$sPjFzygMXO^jfHZ9vMT zL12ZVw=TQJCZ=;blegDDOgcQ}%oBlEGhh9-dp%uP++6Fy+m|0xqwLn+KCsKxYl?}+ zg~`v(t^TM~E+NHf-}TAj_il$YL3Iv0izxNwPf9Dx_g8v^%$y!ND?GDs^U3_9ue{c* zyYGH|{lCo@%9h=`_TOM0i`Sv~^}+Ed!4NYuW{$D|8w11UPmHE)%)k)Yti|z+1AVYn%C@pX)!%Zx*{^Y<)!Ig?LdYvpxzmV=eda-Pw?QfY~T z;mX$9Ya^$AR4(m4Aa#JxmhDu)RMD9F$U{#)&*$~tG%2}E+my%I@(Q=n*QrsUitZ`gRa3J zmI>4x-zl;3;$U-*9Q?OppGamUpUuJ7MEA07GPu8{E5+wjTsm; zo3%M!vw#_ryoSsm#$;cCXJ7#{!74_uz-FOGV1XIJ-VlLjBG#PnV4bWbY9h;)15?9wW^~7PPW~^Z#C6$1duiQH-c delta 576 zcmZ3fw_1-kz?+#xgn@y9gTdG3;zZs9oIomO=kJP&*AuVF)%*G%HsERdf9gv0>$(L^ zi}b{o&2?}}66%P4QW5QP*`+gZcfEh~Ha-^fzK_3uY+P&df_0aJ|G`SG9F28sx61+- z#H+if=`$$Fom@4e*TuZ8T71o;kCJ>3ME9*`cAWX#G$LuKsP>GOmGM0%BUcs%{_4MQ zj;Yr{H}aK*(?rpN)S2~7z4c~iPCD^j)Csx&Ju?36ogIOU>-+i7fBv-crP69X&56Bk zjg2C^6_$7Z$;^=c5tegq^M0-+;g4Aks{6lwGHFl9_t|&NCZ@(+%Zyuo^sU~0;j6tG zueYE4y7<4=7Qfkhf3|;An!x+#m-$allyHcd88b&&fQ@1E2SzhCW?+bH*5r820%nNw z8Zv_zlf4C=fdxzis~Euo8-*T$1*QpmLj<0PSR+DnvWBP`SXrW|G~?aLwW3P$ppahj zX4ASIEDQ{L1Q-}3fYAU04UKY>_lc@Ufz&*4kI>>|W?*RKWncgzIA~zx0dgyH^ovU> zb5e`-DspoIycwB9nBnmmv)%o5*8!jgF(w8EZn#DUh6YB5$@XGWU1E(Q$H$~ zb{~*Bz-P;LDqyN;Oyr^ZC!go@dT*MPT&8Wx<7|0_+dMbq;OobSKX0me=%gmgvnec6 z+1JUpHtTu!qs%uVHQK8_zgf?8>#T|6CCx|EVkb@i^)0XbeAGeL;1A0LYL4#|*}5kG zUfT8kf2%KizxMX7eUG@~>Ic{NZ=H`43NbTd<|qrWF)+;8{DskkjTsmso3%Njq`-_0 zB|~NqWAYx=XJCP)YR!yb0d0*(U;zP5Z-_vgmNgvIFi%EX znn{LZvK5Dvc7Qh{lL#|BE@GazM`&>}GcYvrGB5xU95gUiPOj6I0c)SDEnUA>m4P9? zC^e^8Uk^m08?!7y^K2v|1A{da0|P(Y5C(<@#%XE{3>7*0<@rU~N%{HNdKI}j=$egR wKi;(#sOdM*04WsBG8$mb@kNu(brivFiPn*3V$_^0uPHjYS4V)&R|}*b0IZVV&Hw-a delta 517 zcmZ1&xj2$Hz?+#xgn@y9gTdG3;zZs9oIomO=kJP&*AuVF)%*G%HsERdf9gv0>$(L^ zi}b{o&2?}}66%P4QW5QP*`+gZcfEh~Ha-^fzK_3uY+P&df_0aJ|G`SG9F28sx61+- z#H+if=`$$Fom@4e*TuZ8T71o;kCJ>3ME9*`cAWX#G$LuKsP>GOmGM0%BUcs%{_4MQ zj;Yr{H}aK*(?rpN)S2~7z4c~iPCD^j)Csx&Ju?36ogIOU>-+i7fBv-crP69X&56Bk zjg2C^6_$7Z$;^=c5tegq^M0-+;g4Aks{6lwGHFl9_t|&NCZ@(+%Zyuo^sU~0;j6tG zueYE4y7<4=7Qfkhf3|;An!x+#m-$allyHcd88b&&fQ@1E2SzhCW?+bH*5rti0yEl_ z44FZU$-7jafdv+;H8X+*G<91^6_*Ap$X4)`-xYyg<{9 diff --git a/server/rules/finance-rules/差旅住宿费标准.xlsx b/server/rules/finance-rules/差旅住宿费标准.xlsx index ea7f8fea93957550df2407249858a53ebb8325e6..2bb1594397202db1bb3134fcc9a078aaa83823ef 100644 GIT binary patch delta 573 zcmexV^reV5z?+#xgn@y9gCUFQ%0%7+^*}17m?eShby@wMJ| z`hfWB|6e?hU1CZ6)p33!zr@O;Tcl#2Pc}$A+~?xRpi=CzJa{JO{KK{KbC=chvUAkm zs(HcebheV2&okOrN-a@POxap{ZRC`P#$}riNFCslt?~+(DjE}c=*6Y^yv3U)Bxi|d zNwgJ3oR7J;qG|i`$>f4_x+u}@tOItZU@gFU-Msa zqXg3CSB!RS%)nsUtj(dL4rWB@8#03!llzRGfd$Hq8yLX?zf2y11@4=ALj-iqtvTUA zJh{-^46JOGxisVb$;ZryYwHBwK(PeIX;^N6n3p0!bz-8utzZ&%liW^a-{ z{^S3jn_){n9{R#K-}${^Ky#t#u5I0ie)yItd}30V#cUSyY<@(az$(nl&W6s4ycfpE-4^IiPiT}@;F}YPHd2_&F z1Chg3&n~&i+?yvC|Lp1KW!+1xn`chC#vvRKEPthBqJ8h$mVDRBd4EG4c6$l4%(cne zi?2>}USRt_xKD{4)Q_i4sJc z-!R&-F#`i>vo42@I+zioZ^#T{OrBu$3@lJ-+`tGH_+#=2Eb!3O8zP`@Zp{e~;K{}2 zW?*G&%%vIcPCj9-1m?Xpmu8aVm~6u#r5)hS$RxrHkDiz(?h#s?%nS^TybKIL1P2X_ zzLWheWWd_b?RObiVCaPPL8t_V3RWkDFXoho7K1g diff --git a/server/rules/finance-rules/差旅职级映射表.xlsx b/server/rules/finance-rules/差旅职级映射表.xlsx index f0593aa014328777ea96039b8a4f17ef7cd64339..43d0326b6ff92e6156087e6083eaa00ec522a36d 100644 GIT binary patch delta 546 zcmbQPJ5`rAz?+#xgn@y9gW)sNm5ICuIDu5m6s~2@UQWCwSAWp!h=D*`eCo-)b4^;6 z6mNGw@^mb4{3tf*=G}zJZ7ECcZr{FkcdTo^obiA2`)34F7n#%^T7Jdd=ZQhS+x=D@ z-#eR>1E(Q$H$~ zb{~*Bz-P;LDqyN;Oyr^ZC!go@dT*MPT&8Wx<7|0_+dMbq;OobSKX0me=%gmgvnec6 z+1JUpHtTu!qs%uVHQK8_zgf?8>#T|6CCx|EVkb@i^)0XbeAGeL;1A0LYL4#|*}5kG zUfT8kf2%KizxMX7eUG@~>Ic{NZ=H`43NbTd<|qrWF)+;8{DskkjTsmso3%LtS-^~X z9z$jjWAbMHXJCOj0u78{0ePWEU;!3kZ-_vUh&3WKCr=YG11mc(BF%Vv@@o+#Fi${K zno(x5j;OjFDBPd8M`&>}GcYvrGB5xU95gT%@Gvk`>s93D1b8zti7>-s zZt_H+K}#mD6_o-TdkV$(L^ zi}b{o&2?}}66%P4QW5QP*`+gZcfEh~Ha-^fzK_3uY+P&df_0aJ|G`SG9F28sx61+- z#H+if=`$$Fom@4e*TuZ8T71o;kCJ>3ME9*`cAWX#G$LuKsP>GOmGM0%BUcs%{_4MQ zj;Yr{H}aK*(?rpN)S2~7z4c~iPCD^j)Csx&Ju?36ogIOU>-+i7fBv-crP69X&56Bk zjg2C^6_$7Z$;^=c5tegq^M0-+;g4Aks{6lwGHFl9_t|&NCZ@(+%Zyuo^sU~0;j6tG zueYE4y7<4=7Qfkhf3|;An!x+#m-$allyHcd88b&&fQ@1E2SzhCW?+bH*5n9e0W)fO z44FZU$s75ffdys>G%$h%WQ87q1(<}rAp!v+)`-xYJVnF|tn93aG~?aLFGZBVJU&rr zM!CsaqU!RXaDU<+p~cC}z|hFczyL&W(7;$Uxj<9~tfL>OW7*`@qEay+9hXcRO2QZ! z7%Z3=82I7p85kNE`vn*nDsuG8^NX^R^7FIxDspoIycwB9nBlP