From 631c9bce165adbb648b4bf369384de479594372f Mon Sep 17 00:00:00 2001 From: Sepehr Yahyaee Date: Thu, 17 Sep 2026 12:26:42 +0330 Subject: [PATCH 1/3] Docs --- docs/Yara724 flows.pdf | Bin 0 -> 548041 bytes docs/panel-roles-reference.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/Yara724 flows.pdf diff --git a/docs/Yara724 flows.pdf b/docs/Yara724 flows.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79168c9274bc577cc387b720ee40c1c0dcce3066 GIT binary patch literal 548041 zcmaI7b97{1&^8*|wr$(CZKq?~w#|v%u`@{~w(W^C(F7Cg=J&qeUEe=<-PK+DoUZ*; zowN5r@2d3_rHX_UBP$aJ9Ocr*pM5x15*89CGg~+T0cH&wcY8|`8ZmoQ2TKwv5^;M| z8wV08dnYdvQCD+-jk~3}yN9bKEgZABtEH*ClPd|0qLZ(Uy}ca0gVnTD?f>X zjiZM*i8l|IF&BpcEs3bJv%RIZrJ1~qJ2NLcHxoP8H&9+iLs5Z&#NNivl0@3l+|KD6 zC=PISaSWFEIDDi3-_x;i za+EN2|2};QJ~kFME*5S!HdYoEE)E`g78dI7?>A1-$>RSXA|wQ7>1graY_R{|Sur;y zVTEHBQzT(la&mPrwg0~$R<{3(5*Pgs^}kpJaS|3dW(B$bX|?~;D=Lt1z%i?flDNBi zSpI)IW9R(8&ZKPY-MOm9szYBZHz3@ve|Wt2?05Y=I~98E~^=32f;0`q67W zODf4rF6cbRx1(9R`cSL6qS$vvd`nE-kGnLO5xAPvHth5DB^M(?%crpt0nEfLnqUZ zSAPrbv&wf2*2Q-FKKB1;bA9-}Jq8H}JP6HNzh9dHIfrNL_dcf{Yj0+}&Dv8vwZ(xW z3DA8LV^q^dWa>0Jy_TNtjc8se= ztU>mJfdLk~SG;R_@AQd#UZi7!V$HljGtx(G&>c&mPV>2T?jq%XREv(8h3aQ;O@1-O ztJ%;WGqRK}$|wMDouW}9A2{Is!Mk@!r#QMLH|=t&HTvIvUJlhKGdrLo+y0e>uqJ?C znE7;*pP`3a0qYIE_QTS+&~zBryji$C|Ce$8`-)e`3;n%IJoi=@x&QYRT!(pVUAx6@ z5!p}ATqzIRbv#`@TDE+iJ@RsOU^A}VDr|^zjCP0ZKMQ7Cpxh#zcUb-Oei^>px#F}o zKR9Q!QAV-ki}7Vk_e5WximWS^bll5ci0c^1MoXl_e!O>dV_VI? z?Af*Yy4tdlPuajh%6QT#XuA7%Lv81&9^0gZP)zg^?FSbf5O{nz?{_}b?ATC@bMX-- zMr;uDu&cMw5x0=dvO-myPH`B({&>n83+)rJvuq_hhrc*KtoqJG2$lMjT*^8T*!;4t z7N0`%SwS$C<(ZYrDl4_v)A##}fjhHS+~z?rM}JR~ zZv~zSJGgF1za!8bq|Z?G^w_IK=fP*2j{>;! zris)!NkeoT1{xje{Hhl=nghIDQBkQYx5sC7jk&R(bV?afWH!>|Cr)O{cl6X9O82vx zyan6({rWeuxAdzWnM#XIY{^Sra6}|3i3rPQ2D7-&HS!G|)?0xo% z^zo1wJLiQJ^FilV!qff(;3aKhY_`l+PFdgEuVz2iA%EUn^82)-z}LHD-Car3xBQl~ z-apW_%ZAqGL)J#tH!JD1&S^~SqPg~A5^z)9zBhn49yBjF=Vc;u35oh~Oooc>o!#Zl zQSeWy|Lrts&#tG$dTYkot%;itHafb%EKOKoD3XKdu8jzv3?2{p*rrb2sXjD0Mn!3d zd9D%F<;hOmLSXx&x+6O=-1|Jxr^18yu==fy)cwDWy3+_T?Dg`;9RfbHS3j48)YJ~K z-+gug6NJT0+uK8qRa*s7k1z*>9p}UPM;Et9SVr>yxLtDoc6-F|pIeMXh@k&*i=08w zZHzDWsw!GTb@oFxCWfGN*Q+cG8*`W*Jy4AxeXbH0Qur{N7e$Ir<{H*+Kmw~y&eY`Bm zS-)!_*S7=7NGVU)1H{cb9b*8Sq&iVShBw~x_p2`Tolnts$3We*UqW>|d0lsfp;}gV z;05)aBx`cE0&*`zNb|a#=+4@E`bF>hnkKia{Ik9{GG}8w!XNZ9eCD-2EI(7`hdDth zRiv7YQ$FU$D*X|yfxK{YNEOsDxL zH9kvI54GEEAe<$^db#ljYIlIv*+BYEcNN*!E5%)Utn7*F_74VEUFBOLTw z>4IVRGrnsooWpWhB)&8sV+Fp<$E5Cb&a2F^L3J0x1n;|xadpOm$tOyWo8FW&3_-`Bc9w0 zF-&ZgjS`36HaA!@kd*aGSeKyY%#FZW$KIN;naNH-mfA^Nj}y_2MXZvKhQ3m&*8i+{iYz_u@R%>Bbs)#oT%0FW1^Kh-sd1)+1L%Pm?0* zL7^dN)lA?V6W<;{=rC(${nG-a$KSr+-;ckw|L|&l*X2sKb;+jJA&(sEF5aPa7IHT+ zf!jnv_!$zI1llUZl&4P2AQSNJ&5Kwayh&;4=D2vl>=hHbdW?|!K)U(piHir?W(V6^ z&%1_GebrA~m_Ko~CjGuCUWce@R*}(^soRNYJ$bEusm!6cwkoy}r#OIWJiELz!omac zRllId#5*OU?=YCVgO`LWjSZ^-m?2W6(~>yF1E#B`!E~)?G-fgBAH5VK^@n5{j2A9L z=^=7PNe;~NkxWcifaodwVzgx|!n8Ipil5T$&x==KnL%-S+tJ)osK~RkZ%uA~SgODB z=ZAF4_YSsGJ|TeTg_EI_#890m7m*aCPQK^V3ky9jL;7cOg8$Jlz`?ndpa)w)yX6`* zz-5_~#cwdn~QX4Cl)xKaw$l6+ygjbclhN29^tB0o5lHdO^BaBqTysVZ!Gj%Brm)wUCo8?_w}*GWsTQ z!p1gatDP=33`Vw>i&UKJkbcA){mV7!dO(qmypluX61$c_!T;`BvE8I&4xH1^ zJ9Y3A741-LO_I>CcKY35SzA3*rCxtu#&;?U9+@C(yW7IKavI~=uLN$?nQRx2?$H^e zY6hcO=>#rd92#pf34(c*HB3KEl2}wSL#J1>4+BFtJkx~6QALSb1%e2NfIufA5DGUh zRe`F4s^E}A#ppu3T!InW4v%SuPQ43z}h^P5hfs!&MlZ9`S zMUl&Z>bVvd%d6^-bCXEI0C_UV^TcQvJ6Yi%5ltKGDlpGs)q=U$5=7wUQ9`jLK+WKg zQj}020lZ@d8;W9tO+hYID*Bn@m%iDB)o$$*c!P`2oP(IXw4e#E^W)OfGSL(j)QR&0 zsPQDUF!3ZdvMAJDYMs=GGDakdvY#XcY89kc@=9d%In{B~F|Gu-g%;v$DigUDlj+72 zXOyUEZqxoiB?+H`pNc3TFXrR=_e+svzPn(tBtJ&c&mT5Nqmg~C6v<JNKQj^invaupSwpcd`vergpdv1(~zyN!v_f?MtZ+kd%Elk7s6#N9O^fo zs0Kjj;n8827eDO&wFW@pgR_Pp6|?T&2+u582-bYapGlHs8If~;VPvF zIde2ALbI}3Y#gFelfXVI3d?VxMiU>_Y%@Sr$3ufZPN6+2y1}*J14Xd0J183bSDGMP zH}s(B5*i6l*@5`Bw#%}i@3*n@hJ=Fz{u~dC1Vo68y=0ye4@@gNQY=>o$Pp}bi080q z5ouW$B(!AQdo(A-h-eX^3km?H!gIl?)kCRs1Vto{*5p102LUjG+p~IA!p?YrjsP~X zQa=S7Cc-~Jf->f>Z-N4lk-a1@DlkQ<8k>|WZQD^gFPw4JcQ5akyDZnD;8PF68;xO& zdEy9$jd3r6h>;-!i_vgSO_mu<@0P(%J(96bg_G?`=a@jE=uPdNW>AQf{FAGog2tay z0|LTk8wzLf2}U=rNcE`VMHVj>NDYV-U_S!Z)_wo4P?M?sg(6e?(v~Po2}MmA#SoRi z^Tj~5Nj8%x+gCtMkr0HGz$3y%u_3_}DZAAIO@Xi)6~`OEM7Al@mf%neHAY>KA<95a zp~97v$W6dOmEBYmDcev4O*s(-lSpO$#_4HlaHL*~NLEnvUl9du6xd7P5aCsyZi>yNF}`I`6An=j1$!2Vc-Y+m{s^^@V1 zRlJ!-aj2ylhd0jD-^W{m(B2;~;qlQz%ki+`4{V zerzkXEgkkOi!#Jhfiz>jCEl^fU49sL|Mqjc(Dj!9NU3!!s^=Eu;kY6JV#GnP=+Oetz@QO zRX<+_A3|D$UZ;DO=07byk9Vy6HXh!ypiUR1e<)!7kgwwv`Fw=T)Un^ACXD2gRFi z^d-@XapaNT+JUdGmdpxo%a1Cs$J`-<@F`Qn@U&AJ0vSIHo+@iN)z5K>3ACN4@`6oBDTL+SHH0I&Vj6fIn7`;h)lHaT&zi4@o zH)G}AEdLpSdd$_FRVm-uVtc=W{i_ekgkcU`N-thNW!V^-&B&iER#$0=92o43;3LH0 z!-teWLzk}tTP3Xlwuzb%>?uYGe03I~EFx5eJx8$C06Ry`_!m1IE2jd$fi$1h6Pf{% z5e*noq3uDKr6$o;TGjnn2a}dAq)B!d_TYMdms^2$-J*B@-I>YOc;WPAAy!_7=w-^Zv zu+4ETGXDA5&S8G9LCT_p+=w&8R@EI6L_dn8?H~E=Ae&WL(KErGP*l4SU38ScAUGh7 zBz{4(va^7Cl+n9@&P#QpX@g$HD~J%j$Za<)`1YZ3KO~%P?7d$g_-s!i#BTqPP`0v< z)Ft|bFeadZxJ`ipdrKi83rS%mhgXI&!BoaGAy#HKscnIfx-kxb$V>J?TJ_l6^nYf5OMFSiQ9U69=6~ zqIzOk{<3jb>AE($My@QtUHSToE9LM4fOPOt&?YYlPsk$BC{iB|+yQq7yMpbD6Aj4v9WwmTw zVeMJ8V1uVhE7M16Dr-d6qy|L}DN|1_DXT=0q4r2|EMG_{WrikNZlmNFB4^>9dN?5h z37<@hZc9>%?JYV>$|BJleFN8(M}qGvBPudu_(s(NB{|p)FIQNKLUOfWM01`q7~3eb zFC8fs5(}kBsyHlOtUN4}R}4d^%7a-YVXCbm1DczzSZpvY2G)mzObNxtE=OvX+=?%U zkmV_!60zh+;{v&fNXaDLQ@q^4SFsJ6f`+0pCfYMmL9FXcwi_uE`0@{< z78|>#*a~%QW=Dl`lPu~i=Y^1M_727s&9d+`@K~)j>oEKHk4i02tFI`X9Tf=d8^)~n ze;}f#^7QBFBEcR|9QqDTHJb@%4idK-QO=Iei3Y`@%DT8Yi$UF2!*PsMXOxf z3L`qA!|Utk-*WzFo7UuNdp~k_GP1NHm=vKO&=%R%r~Ba((DHi!YURZVdy%)Yt+&VU@Uu_%{2RHff00+7zs4<(d+heDF3*_T>F(2YJ>3olRP7GfFDa`f$R;@duTi-@PA-YL`HXpf<*!6~!--^!Nw18GH$pZq8+1v|ey zK2j9_LoD_1nJs6Ugz|7fK%I?zMus+Oaa*&QamIy`{@dz~dnS)^Y3W@L1$1T@ zmVZ9qPz7q{3Nk@uBH0;!1s-Bw#jyCuh|QjcR)bqbttwFk?bAa-w)j=`^7m}b4_S?k z8dEA&%l=4R>-~^b9_$7U3eNT-OdWR^{@&3cF{$9eN};;MT&oqC6|E)2WDMIvSq(){ z&=w~owKP${)l{&(UfVQ9jZ}1}KZtBmfe2bOc}&gA8rzinIaOP{MmrA%nxt~cxo^<} zMGe!YTIx^MPd;$g4mNSlCu-IL+`NH)!#WOsQga_^YD&va18URN*XNGEVKENzRDY^ zUUgFx|Bj*Z_L1TN$_F=Jr3275>W86n>loJIl3_BuSP4d=mT+#g#Bfoxl1yY+W>o;@ zPYF^T%&LK0O`xe^f*Dj0C!rkLi`I+EjOtXBZM&Y31^C)sv2SSRcWR~8U#4DCR>QxM zdizf~`9~j=!JU^7e)jPYv&o;+D)h)64>9{ppGGBb=;4j_so_LD?8guiDTo@6kVu?? zEzBll2-ZQSHYOER@~Y(s2a=BqvV!lZF>BoYZr_23Rg9XpsI4Kcbs19at24p5sR;BS#7tFu-UygURVI8ikJ?{HimJxb?TbrPb6 z0o@fzE6W!-mqk68G;_5iWP0@YRN3dz;&S7#%-0)R?a8sKRtPyYfZ$ECb|W$g#`N+B z-39W61T9}viF8@Se!o6Oo%D2I0z{PzNh7&5wkI;yYjCm>$= z(7O5Tyw>00?b$fzOig*=8JygGx8mC7enMGY@9X3JnOy<_m84RO{Rldf27&(K&NOZh z4Tvnps^Emil#P^0bJ(kNYtOT$)vgb7r2p+Y9;h7S8S5};*56W&R=IYu)f&{-X)^gF ziUqey4}|(wG?EFZJ*PAQ@)udv1@fAU$+DtV;tUw<;mS*};JQkLVrR+#u?J>odPizY zDP-7NILF9MQj_dvZRsiFeY9RN)GD#)NyQd2eIqtYizfjOOF7QQ;O!&QwFc^|gs=snwbU?eMY=N#W3Tt#(5J8NtHi`3O*w*MkSDW1ho0u}{f_`VBynBKfFFyRm zpH=r%az%Utiwd>qtP#?Bhi2XqY5Wtn9IzM+A}x|)h#U!Em-2M_RXRMV%2jm6GZq|Hm+U@R<4VQMb!O%65;FvL3*c$F?ktW_{ka4g{ zt#zVuX<#sR+H{l_P-?%)+)}{S%(T?XRo~LgkaDV*JFvns!LW1smQ$9+%XV8kQ#C5a z|CEJF&TcfP7@q6ng?44&mQ@SGoepP11Ts3?geHSwTcf4M91)-u98obkyI?JWWmWL2 z<&{Y;GE;uPzhv7im{U_HnrVE}5an{I^$P&O@p`J@y8T7)cW9!d=SmRT<9{L6lda)E zYy&SQ>zp`?B!uecY#8PrTl+=??fg}-IFbISaF{J*bGF9VbAZ*rl>cml(J!s3kt}Vf zQ6A!;*8}g)9Y%Pw<;f*lALdA^VwLlWi`SaekMoiDiF+5B)IVZY+tm|@TdXXGon6t#S$okrkE?xcF=$6zZ0~&_~YK+!xPz046K@b&2p_AK&r7owjDdFCQ8) z5g*tvV*@IC4Tz*Eh#p--Jh!JHH+`71kUzfxt>1w8S-&oS=Wjq!0iD6XPK`69U;VfI zx2+wFICM_LtT&na7AMWlP(kg^&7<1(uLJpJrGYF98-FBWdq2>>*~-1&)};1jQWtX6W0r&Cy#^;ld8GslH7-R9Q8)wEX=IUQPP4C?%mA9l1}8(W!9Vs*L6!VS zG8fl4$9_gUcJVEJn1_0Msi!m`-@zc=cQ8mdNCrua8!JVN#~#r_OF-uwgHZiTaM4zAEp<{la(503B*ItT1m0y#U0lIiT)n<~cxpZ1+Gu0N9qCe!catW)&|s5Yw9#AfO?wj zkdt&U#wsgGlJJx2P%VHEzI}skgz5rLbfqR??$V2D))|tl!*UKr)~+p~wK|>g!atql z=%D#mn=FAvz$Fj1x+NIiK{Dk=h!#pS)--wo{*OP^LL%ZY3T52$zKs@$((FSun_z%a z6*4aHO`7Ut2T6AEZaq=}<6Ui2=yDvd?Q&5+whbdOnu)N4cSIh_Oa^cAGJsuFd zVpzO1hTQYcxH7dXquTab`4-uYYlt^NWUwzW{Vq&S0u2^c2@NSGTMeC7+!cpb(Uq_| ztCo_Rn9Q|IA#kn)!wE>nf_A0z-5MnW^oh9!o=IL^aQ5f*bOcc8- z8kw|62aN5bQXzD4%fHhAbOtdyYWuMW`Ec3?uo|6cNyUR1U?fT<5s#MDd9(lcFSMG{ z9gruE9gubO0UovFw_qTQ)W)6Ox*e}Jzm>b;gAO3yQ^-F?ZP;8*ZKd^uv(o?JUHc{_xeRPg-rc4(@?!aLa$FBbfbPxpZ1-X%=2< zY3Bcyo;FkZt@}uzKo~S;YjdyW{N#zj{3N^gd>QT2@08V0t(wzssZ2r_rVjO`1C+ZmeaqpYgo-jGP)oA*s=u@-V^VKkE&^V!Iv-B2diy`j|Kb*S zs*5PWin~K$66sJV%xW~F*{Ui?cab9Oak2k zDzj<}la_@x%6D|&Tul~JAUXyMlOBbQqPaETO-)J{z*sF-x3Nq;SytDB{&jWMZgY9Y zhIKc|+I4lwTAhuia!8=r@g0~;g4ywIBf=c2`mPe0QsDZ5jaNo3p4LNF*~P zP!hz_6{UGcr+MhB3ct_;PpgsuU|5*5=%AK~ZLsaU1TCRniKzRHx8 z%A%D^ zOER7T^ft%e>2r#9SNdCn#S)&G{F&%k^6Zo!ku|iT5^Qd;@{T72nN3#ItD_3$b!|D< zI{gn?vhr#)y76Ut&5UxB77?j^6MEK})Gb;ZB9F{fA@36NkUkisBzJD^pH+r+E{0)mhirBTrGJ>Mm8rpKn$^psQh~boZgXcz9hMJ>#)4_XFx=( zmNT+eYarhHeR;`)j^vbZ5HDpSgS*gkiSH{eQ>A@nDK`#I0pZh@YKaTt_~|d$36Jr9 zE2h)Y2gCHk?XFKqy?$i-iQL&3Z8=|$>u|`@9?dT>kCD)#_^>_BuO4S`_)y>B&?3Sn z6ZcyvEQq$NWh$P-1D#v4^}|I(8W`KXYDJaFW1s6DF{Ughk%6<>73TR@EeDX^Gph%B z50v(RVdl`#=QUI~sy#=XMAMMaBBElGyZcGAW8zkJ3pJz;4n-Q&Gqgc z%1RR&U{2j$h4^28-_GZ@+7Jiid~!5F4g%m5Oy}+a0#fv1jkTsJH1ha|M=ZFlF^w8D z$Q2BfD1Vr!ie0?9>#D~N0Ge2FAYNiHsK6#tKPM*oZ7F>uf97bEJXbSyrU02Sl?id`}I39#j@(Ro)$s1X)SSF21B!edz5u1ag)DbvX@whgG zZHhK30mTqVOT&xPA0uISv!jbUf)R+2FbqK$B(;20B3hye9U50us8tkd9bK?u zGTVgg_+HL-IytY?P#kHy!4Hfz%Se(1;}cYJ`Dc$&(HDsms&p?4ByrqWD*kH&hE z_ldH5YNC5{VAPZP4OP#X-=DYQYO@B3I_#azz29*Cd$>?~>^37%1_qWDds01=i4yxD zX*e{O04tf{v`|7L)ra;oJFEHXjuNK~LcU3Ubqkq|kWt8aYW%BByg&yEJ4NBmmJdu- zns_hgGgdvD+V@fi0_dG?aa0$Ug;fMTb6PIC^^se82M`*Zc2r;XK!5K^*7!Z*Tfe#b z0Jt?vv|CvtYbUM@axqR4Ixjfe*>!%>ZA*X2LRHHZ)!;~{%^|j30{GeakunVka6MKX zd==1>=)6)!xCA;IlmNDD+*mmg_?Zn&k0OtiN3ZTtVWB@QxYl4@=LcMy2%b|=)(?3G z)~A6}P?dF2k^j==Ros|J?fG);-;;wA@mmYgZy(cDxJ>(&AY(jL#LgYOQYxD*(W4-4 z9yO4v3?XVn=0_XN0AIFQ+u67GhiSRtLNyhoiZv-Nr?!cc6}dnp>C3z^U}6!PT9m46 zjdj!X3bZEgd2Nlv?K$f1!jq9=-Ift+oP@jZBFc7<`Of28&=(p;A4CMR=)SO*%JUVX zz|D%2z|XH*r!S+X9f4vpo^7@MeT$C9|M--94~yu+eEkcp>r?q}FCJOQbILG7famuc z{(w#tbWTpH?UB-qoT`uM{o1HfQ>tr0`-~Wz>D5OyBZ2d1Sb?p6y>9PybaXFbq)Cb9 zId;?-Sb;bDo|x>;H)kp;wLm4pCKhyBVdniw1p=Z#j);fG_ za?(!2-1_Z&@te4Kp_Kg%E0-1dh_TZFRAMv<~pp2dy2K|1tXVhTVy zHmkqJy-A0~T1oM<(`J&nS$7yw`i3WEUpodBYzs1smIg^^PbT&p`_5}q+JBeM$p02& zn5*fnIi;)Ti`Xa7dH`h@47zPqNc5NzV|w6cBV5m3*7vr!OAXX}In|nyFYH`B+jebA zmUVYK)k65Iez&&aTZ+;tv<=K015prWmvo22YJAvu)(?ts?Rpn{r}6!g*uNO8+a1#C zsumQH9Qd50(N$ApTt$)Towxha+_?G_TmsUR&EvUnF~Fr2>&8K*M3`wwbBZ&SxrBc6aFv5)I-*oY- zS*qX;YTNli0`Ado=NXNFKppJ_f~%VAK8UpUiL#&^Pt3o8yrB^((ES8Cm?wVlmtz?( z7^iW*7g|iCoxY7){rclfr==X3TmAVA|NJ~W%@q(l+OAr+G&uTy3h!uRJ=quB+T49r z5J=-Z8H6re;n4meiq13*5P#zNS9iP%ewDM_laF(BXH!`pxdu>NN@gX+L*KE)+aI?OGL)RG_xx`*~IH$)V6s zfSmDmeef~o9b!~qM|;uc2Cg~0lVj%33z?*!b=(^|u{x%>+Ee_YgD6tibd7D&w;^EP z*8zRgVLtitX_(9^Z$lwgt>wxFX7pZF6iB& z^w0~^MI$>7mr&Ie+TGX)77_eGA){r9w#K&$?bwvaRI&pi(c-gUebde4Jg%bu-u`>T z^|ECXJ=tSTl*y@KH{yv2gi>i`OfYEsaKy50W>+FBN;ae&jo>dOFf@Wrb^WqWNGF;# zYQS`k3)sd#MBA&NUfH+&I}sN-6Xmol9)!Bo>xwdYSp zpd6M&nR{=0bD9v)M6hy<0t;3>R>{&cN9*X<=t6MdN+Eoa$;!493EAxwg35SaMJqIqU<<0bz$TA+@Wc_Fe}4cw?%ef)z_ef zchab&q%ov67sZL_$gB*>KVB~(C7oO>aRrxNxt|wTe8=r>R8A$yvkX3{DFerfMU3`kD7sY3ezQG1m>^aj6coW$L^R867nz;@Zwp!2}$x_z8^$sE+Ixe+ZA1q!9};K*gU5A@d=|e zKeQW8{L)S*EgS!vHmEm$agQV9xeZk~j=pl$wPbNk& zx~4;@m@k538uDG}cbdw=QQ79e$BppMYEb#Zp$K7y-{FOQj3@M7z0gXF!(&j!wRv;D zPz0Ra;2wD>;W9l_cXF%T11_y9x^WqdDK#SmFl3!UcliE(H3>^I_FGhLgGg3a8TJ}H6 z1rJPOKWW#X#00TXf7hfajryvXjt2;D1QM-ca|5xBYH;A}!t04NzYsK@^J5nF5CFZb zhkd_3v}Ny(Wj?v!7JcqVj^546j*hG+hzc&m7UuFs*u~5LG9nl>NFHl`Mz8@911%+EU_C#Z_*50_T?ENjPpsk;>_B>R_D*k=Htf_x! zR(bBXOm1^iM;KtW)aP~{KanmUD2>$5B}QsDK9uF7yLQ(W)FM2+V;nlp-00zbMs79O z2Ke^{8QW+(-;lZc4=x{jUYcz5vv?AKk-rTY0*#&*0$QiYbnphAeh9N}_6E0gyuC4q z55vXwaR1B`9l@mrf0?GuzNT$_wY1a^%2amT&By%P3w%MC{@I0c@YX==csR*TG=Ovc zPKm0B$G~R zoV_*YMk9d;RE--?nZcYPT~omdMk>)fL~0ufAF+s*nICjV=v0hykuHQJAAZg7s3gM_ zs6`PGG6^`4P-HdeANcsIlTdJ-`oDO32RUStL#1O7wqvEFwMEr4Q3C-Z!De~LQfa?x zkOz=vQd{**^l=SZ-1bL{Df*&u6E zeXrq=qhe1xeH(cAj+NcEoh|p!Nc!XIH_@>M*oA>gzh&b)dWj{S*_}Oj4Ojn{4axdf zWqHVJF%zQ3_Uj$U&gouTkPACpP+HeT%$ z?e|v(v^)je^Jn>CKjrS?aPsZ=YzdV^c(q;F951}#R=duhOcL}pej7lVCu*$7bg{E* z@&W4JZkeKOsfeBMkn2z)C4ma4K+p06gIrd>*>+uh&K@tG$7d{;JFRq`O_DoDSGYVN zmNeQJmrlQRSeTXFdg%q-q*cR}mX5xQi~3+EDZp-ktsbYkg0Lss8H}+m>dJf`>5;Xn z5jlU-VCPQAzW8@z!G>}Ra(;&Cg$2zqlWj{>cFcXn(;pi1@GvY{j3E&bi{hs1S&7x* zexZ-0Jw{PeRilv@wsrR{9D47r1k63HBk)_P!^T+QLxtEQU_!a6(f9hGN$C9s7TV=C z5Q$psHS#5rzKvM!A0<{`OoXx7ewNO2s!r!8V?}aEYgQ39sy7W}*?`QPtoJYSw*r;MBlFj4FfN~qUl(J*HQ_Er%k;d=v{u#wVgg94+(#HCwtSl`bT%2nu?#jcF{_C)79?6pOfb=_X?cpapRn`u3Q!q8}x}@3bUIff;1fB$L z*p0J>;XT<4AhkEB000=L0!o=a~zBaVC-I$gxA%ws*@asO`F$4FZ-|K_t9uJJ+c~Y7^J* zQIfUSA7Buyrv?dz77h;Egx3pZZNb@YaP`Tbbq*v5+U?x+Bpy+3GU`1cUA;+$f_qmp*t_y-FxmS{7QNn zAa%D8v^R-wOn@wA;vk1%v;W%>%dZh&KRZJf+Fj=$uAwVt*wijx9l7m5ev-dsXi-v% zrJaZBPO0or0?f}n(6~1l4ZU#WTashR)rtI5R1MK?d-1F0Dnkl_-4JR=$sAz8a@}sT zpwhzrUFT)?F~VIkMf(I5S-C8gh*grq6tT}&w3r?1Yiu)Ik-RGMw7kwAc6~6qi-53A z*gHej{l!nB1&4qX$HeX`!;WEAB^@hSz*{#9m_9F!CfFYJE@p!bCBuQsAQOeFp|FSR zFTsXeDiMJ@E3<=rH^U$oOqWyq4(nymjF_Ld)$X&x9@L#z4T`OY&A_FbDINgwYk^pdVT7XfYQa; zuY(I8`w;l9QSWZb>pS1ySz?XdL`F7Br?IUMvos8DDK2ZXP4Q&szE;G)C(F{lXgJ!qkf#&i(HSwb>U$4sF$- z8dQE$_G@VmKPE_Qqg5Pd1rZ1C)owyaZfv}^;oppf2z_SM3L~$c&g}~fnb!;Qn+4T~ zGZZ~pp?+<6ZAYH^bvx$covkgSKc(%^92eFdK&YykG^y-+yMSbc_0@O(=QGqxNZ*ymBm-(fmPK65Lr)8*#yxFNe- zg_S5^O3t-RO^ss1<@y^Nl69o*Ht4D0G$arPAb8l45g;xvZ}>kCHffrcSgEFeN?n#I13} z{hbFeJ8E~7I2yTXr*v@(aDfP?G5p=;Xb@&cd@IT>nLW$SM7*l9ENzV+gxA_l;7r*B z)xpGU%!^QCLTiNdqOL*6S8^ubUB<$wSLw{OTI|wq$CXgViY}qeSU*n`Q>HYuoSs$* z`4nH;C2L>cn*9u6$$v*Q8@Dva6QtxtF!8`Ca_wqWBy4z25F5PhayDp1$v{JVg`jn>J_6VYn?b?6KH};n$(^dLW;9Aer#AbgeRZzjG8mtPN^Blk1`WcN@9!TeYJ+$c_eelfOl#(U!3EYXSLvGgW; zK0_3OZ%`{^_=wA08tuMNW?M3Lm@bMEU==S<*?ARD-|_c`ln|JnoxLEbo}CH@kLae9 zkeQxczF?@Hopabb>Z;!1JL($OChof4;UMe=7ujb%ZH0cAVHdUi);O!lhwQxs zIne@;bG_a#ydwc_Ky$Do0R~kctTQ27UKiA{RLm`hq@EM$>+;JodFzYhCDUkidHMr@ zMxDvAg??b_JVpJ0|U zK=_XMvxkVX{y&U;Q+O;55M^@X8{5f^ZQHhO+xCrZ+qP}raAMoGv-uY+9}m)qGW_9=rN<9U=wWQgOuVPxh?;YL3&PZYDrLtm9_&)74aP73f*XH%U&XHcL?> zzONQHgnFf|Wv_B0EK}=aGQq9lyaXH?UGii74ydj- zdS+rnn9vPPjsR907jUq-2SyBB>0TcKLw@FyH=j)fL#6wKq$W*aXNJ1R88*+uxfLeI z!4~nx5mTARaSWAYXO28$kE%@J*ohRdw?qKsQwyq&K#5T+3NWtLTevX||2VOewL zY&LBtROxxw?3Il~Ha?CM;_+#FMd0uGGl~8>{-!y3n%Agx(fxaj)=l82nuud2|Kc1_ z_g+4_-*hfnYEbHMJ@kUTR(CyOvHsdD@6{c-Rvmt*r0-P&u@ZyIumFX&qAMNwA=O3^ z=3Q^V0Vh*zBkbfLa5;R5m}^H{*6l9rdkkNOdoGHZTkU{A!*0DQ4A%&kC`H&|1#@6BSz~6O=rKoigI+)3lUzmOIHJBISI`q^i(1shbOQLPvnTLv1 zIpAH&m8JE$_Fhg=&AKwQLw`EjwKNspouxz%_j+NQT7w@BXAWW3>P1*MQd7PhI~1C1 z517nnZk1a`G_GfRsUQ||K&EHPZ3Qk@TPK=zlfLh?|2$`mLN2P2XfT;K>LAegVvA1AOu;6!FeS-_ zF*m+>uB^DX&-E2Cf1S4?s}D<>E3Z0eZ{Kk%LzD79o*H%s-|Pr-^iqj%9P@ftTCr=< zbg=e>3_ToKIrYdZx?G-adxc$ggmxsnoz0>|&zcg={T&Q#TH})oIF1n0=JqVOjYXbC z!z$ZAiCWfCf%#6p@$$zl;^VymZfWl|6S7Qpjs5GH ztev;fbfxbt5H*rL`-p_+6@3W5on5!}7#YUQueY1QL<_#JTQ;rl{9GGmwBE1DSihG| zx9mZ?@9SQlUZ2O_p7&4uub0gqGXTG}*7qI%`@@Ln>+^a0bMo0wLtX4^#bE?l7HF5i zz4g@te?c972$zikwEaRHEv_z_euX;o%zk2g5j)lI<)P$k82{gUyB!P{-r+0>#^Q_6 zH0fM3%ScEi@0Jd;34qMWWwHI)sZ(>TWWs^jK48(dqn~-bzf{47X;*6MI0qGou8g3q zJTk&bs{oExI{sL`dy57{54XSJXpcJDb0b&%Im5d`g#>#7<FQ%0A)+>Z?a_DtxT;2D34~@2~@2WC2y0#8{ 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 MethodRouteWhat it does GETv2/expert-claim/requestsList claims in WAITING_FOR_DAMAGE_EXPERT queue + factor-validation queue. Query: search, sortBy, page, limit, unifiedStatus, fileType. - GETv2/expert-claim/request/:claimRequestIdFull claim detail: damaged parts, captured images, documents, priceDrop, blameCase party data, video URLs. + GETv2/expert-claim/request/:claimRequestIdFull claim detail: damaged parts, captured images, documents, priceDrop, blameCase party data, video URLs. Completed claims include Fanavaran claimNo / claimId when available. POSTv2/expert-claim/assign/:claimRequestIdLock claim to this expert. Returns assigned, already_assigned_to_you, or 409. GETv2/expert-claim/request/:claimRequestId/price-dropPrice-drop context: severity labels, coefficient catalog, damaged parts + mapping, suggested car year from blame inquiry. PUTv2/expert-claim/request/:claimRequestId/price-dropCalculate and persist price-drop: carPrice × yearCoeff × sumOfCoeffs ÷ 400. From a84d83a13517292e64d753a0ab984e11ddd06ce7 Mon Sep 17 00:00:00 2001 From: Sepehr Yahyaee Date: Thu, 17 Sep 2026 12:26:58 +0330 Subject: [PATCH 2/3] Fixed dependencies --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef29116..abcfbc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8796,9 +8796,9 @@ } }, "node_modules/ip-address": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", - "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz", + "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==", "license": "MIT", "engines": { "node": ">= 12" From 7d1a50db7b0b4a72b765328cc012ff38378a38f9 Mon Sep 17 00:00:00 2001 From: Sepehr Yahyaee Date: Fri, 18 Sep 2026 16:04:33 +0330 Subject: [PATCH 3/3] fix: harden claim review and inquiry workflows Preserve damage history and current vehicle price, restore depreciation mapping, normalize inquiry/report output, and support resumable expert review with paginated case retrieval. --- docs/external-integrations-reference.html | 2 +- .../case-expert-report.builder.spec.ts | 124 ++++++ .../case-expert-report.builder.ts | 65 ++- .../persian-report-labels.ts | 171 +++++++ .../claim-request-management.service.ts | 40 +- .../claim-request-management.v2.controller.ts | 2 +- .../dto/claim-details-v2.dto.ts | 27 ++ .../dto/my-claims-v2.dto.ts | 6 + .../schema/claim-case.damage.schema.ts | 12 + src/common/utils/inquiry-error.spec.ts | 51 +++ src/common/utils/inquiry-error.ts | 220 +++++++++ src/expert-claim/dto/claim-detail-v2.dto.ts | 27 ++ .../dto/expert-claim-v2.dto.spec.ts | 17 + src/expert-claim/dto/expert-claim-v2.dto.ts | 5 +- src/expert-claim/expert-claim.service.spec.ts | 293 +++++++++++- src/expert-claim/expert-claim.service.ts | 137 ++++-- src/expert-insurer/expert-insurer.service.ts | 8 + src/helpers/claim-damaged-part-audit.spec.ts | 72 +++ src/helpers/claim-damaged-part-audit.ts | 170 +++++++ src/helpers/claim-price-drop.ts | 36 ++ src/helpers/expert-reply-pricing.spec.ts | 12 +- .../outer-damage-parts-resolve.spec.ts | 42 +- src/profile/profile.controller.spec.ts | 8 +- src/profile/profile.service.spec.ts | 12 +- .../file-maker-blame-v4-workflow.spec.ts | 137 ++++++ .../file-maker-blame-v4.controller.ts | 11 +- .../file-maker-blame-v5.controller.ts | 11 +- .../file-reviewer-blame-v4.controller.ts | 14 +- .../file-reviewer-blame-v5.controller.ts | 14 +- .../inquiry-participant-resolver.spec.ts | 12 +- .../inquiry-participant-resolver.ts | 77 ++-- .../inquiry-refresh.service.ts | 93 ++-- ...request-management.damaged-inquiry.spec.ts | 8 +- .../request-management.file-reviewer.spec.ts | 35 +- .../request-management.service.ts | 416 +++++++++++++----- .../request-management.v2.controller.ts | 2 +- src/sand-hub/sand-hub.service.spec.ts | 60 ++- src/sand-hub/sand-hub.service.ts | 266 +++++++---- 38 files changed, 2345 insertions(+), 370 deletions(-) create mode 100644 src/common/utils/inquiry-error.spec.ts create mode 100644 src/common/utils/inquiry-error.ts create mode 100644 src/helpers/claim-damaged-part-audit.spec.ts create mode 100644 src/helpers/claim-damaged-part-audit.ts diff --git a/docs/external-integrations-reference.html b/docs/external-integrations-reference.html index a0e6fdf..73daada 100644 --- a/docs/external-integrations-reference.html +++ b/docs/external-integrations-reference.html @@ -360,7 +360,7 @@ POST/inquiry/shebaSheba / bank account validation.

- ESG wraps every response as { success: boolean, data: … }. A success=false body is translated to a Persian "استعلام در دسترس نیست" (inquiry unavailable) error. + ESG wraps every response as { success: boolean, data: … }. A success=false body is translated to a contextual Persian error. For example, موردی یافت نشد becomes a plate- or VIN-specific “no matching policy” message; it is not reported as a provider outage. The offline-inquiry seed check still runs first, before any ESG HTTP call.

diff --git a/src/case-expert-report/case-expert-report.builder.spec.ts b/src/case-expert-report/case-expert-report.builder.spec.ts index 5fc36d4..5bc0058 100644 --- a/src/case-expert-report/case-expert-report.builder.spec.ts +++ b/src/case-expert-report/case-expert-report.builder.spec.ts @@ -462,4 +462,128 @@ describe("buildInsurerFileReport", () => { "پایه یک", ); }); + + it("localizes participant and recent-transfer inquiry data", () => { + const report = buildInsurerFileReport({ + overview: { publicId: "A00017" }, + blame: { + type: "THIRD_PARTY", + parties: [ + { + role: "FIRST", + person: { userId: "guilty", fullName: "مقصر" }, + }, + { + role: "SECOND", + person: { userId: "damaged", fullName: "زیان‌دیده" }, + participants: [ + { + participantId: "DRIVER", + fullName: "راننده", + nationalCode: "0012345678", + birthday: "1370/01/01", + hasDrivingLicense: true, + licenseNumber: "123456789", + licenseType: "BASE_2", + }, + ], + participantRoles: { + driver: "DRIVER", + vehicleOwner: "DRIVER", + thirdPartyPolicyholder: "DRIVER", + }, + vehicle: { + registrationState: "RECENTLY_TRANSFERRED", + previousPlateId: "55ج222ایران33", + previousPolicyholderNationalCode: "0098765432", + currentPlate: { + leftDigits: "44", + centerAlphabet: "ب", + centerDigits: "111", + ir: "22", + }, + inquiry: { + plateKind: "PREVIOUS", + attempts: [ + { + plateKind: "CURRENT", + plate: { + leftDigits: "44", + centerAlphabet: "ب", + centerDigits: "111", + ir: "22", + }, + succeeded: false, + error: "not found", + }, + { + plateKind: "PREVIOUS", + succeeded: true, + usable: true, + }, + ], + }, + }, + }, + ], + expert: { decision: { guiltyPartyId: "guilty" } }, + }, + claim: { + vehicle: { carType: "SEDAN" }, + }, + }); + + expect( + getFieldValue( + report, + PR.damagedVehicleSection, + "خودرو / وضعیت پلاک و مالکیت", + ), + ).toBe("انتقال مالکیت اخیر"); + expect( + getFieldValue(report, PR.damagedVehicleSection, "خودرو / نوع خودرو"), + ).toBe("سواری"); + expect( + getFieldValue(report, PR.damagedVehicleSection, "خودرو / پلاک قبلی"), + ).toBe("55ج222ایران33"); + expect( + getFieldValue( + report, + PR.damagedVehicleSection, + "خودرو / پلاک فعلی / دو رقم چپ پلاک", + ), + ).toBe("44"); + + const driver = getFieldValue( + report, + PR.damagedParticipantsSection, + PR.driverRole, + ); + expect(driver).toContain("گواهینامه دارد: بله"); + expect(driver).toContain("نوع گواهینامه: پایه دو"); + expect( + getFieldValue( + report, + PR.damagedVehicleSection, + "خودرو / سوابق تلاش استعلام / تلاش ۱ / نوع پلاک استعلام‌شده", + ), + ).toBe("پلاک فعلی"); + expect( + getFieldValue( + report, + PR.damagedVehicleSection, + "خودرو / سوابق تلاش استعلام / تلاش ۱ / خطا", + ), + ).toBe("موردی یافت نشد"); + + const renderedText = report.sections + .flatMap((section) => [ + section.title, + ...section.fields.flatMap((field) => [field.label, field.value]), + ]) + .join(" "); + expect(renderedText).not.toMatch( + /RECENTLY_TRANSFERRED|BASE_2|registrationState|previousPlateId|plateKind|not found|CURRENT|PREVIOUS/, + ); + }); }); diff --git a/src/case-expert-report/case-expert-report.builder.ts b/src/case-expert-report/case-expert-report.builder.ts index 986f629..a9bcd32 100644 --- a/src/case-expert-report/case-expert-report.builder.ts +++ b/src/case-expert-report/case-expert-report.builder.ts @@ -14,6 +14,7 @@ import { PR, persianAccidentCondition, persianFieldPath, + persianReportValue, persianStatus, } from "./persian-report-labels"; @@ -110,10 +111,13 @@ function firstDefined(...values: unknown[]): string | undefined { return undefined; } -function normalizeListValue(value: unknown): string | undefined { +function normalizeListValue(value: unknown, path = ""): string | undefined { if (!Array.isArray(value) || !value.length) return undefined; const items = value - .map((item) => asString(item) ?? JSON.stringify(item)) + .map( + (item) => + asString(persianReportValue(path, item)) ?? JSON.stringify(item), + ) .filter(Boolean); return items.length ? items.join("، ") : undefined; } @@ -124,18 +128,31 @@ function flattenObject( depth = 0, ): InsurerFileReportField[] { if (obj == null) return []; - if (depth > 4) { - return [{ label: persianFieldPath(prefix), value: asString(obj) }]; + if (depth > 6) { + return [ + { + label: persianFieldPath(prefix), + value: asString(persianReportValue(prefix, obj)), + }, + ]; } if (Array.isArray(obj)) { - const value = normalizeListValue(obj); + if (obj.some((item) => item && typeof item === "object")) { + return obj.flatMap((item, index) => + flattenObject(item, `${prefix}.${index + 1}`, depth + 1), + ); + } + const value = normalizeListValue(obj, prefix); return value ? [{ label: persianFieldPath(prefix || "items"), value }] : []; } if (typeof obj !== "object") { return [ - { label: persianFieldPath(prefix || "value"), value: asString(obj) }, + { + label: persianFieldPath(prefix || "value"), + value: asString(persianReportValue(prefix || "value", obj)), + }, ]; } @@ -150,14 +167,13 @@ function flattenObject( if (value === undefined || value === null || value === "") continue; const path = prefix ? `${prefix}.${key}` : key; - if ( - typeof value === "object" && - !Array.isArray(value) && - !(value instanceof Date) - ) { + if (typeof value === "object" && !(value instanceof Date)) { rows.push(...flattenObject(value, path, depth + 1)); } else { - rows.push({ label: persianFieldPath(path), value: asString(value) }); + rows.push({ + label: persianFieldPath(path), + value: asString(persianReportValue(path, value)), + }); } } @@ -638,6 +654,17 @@ function buildParticipantRolesSection( participant?.licenseNumber ? `${PR.licenseNumber}: ${asString(participant.licenseNumber)}` : undefined, + participant?.hasDrivingLicense != null + ? `${PR.hasDrivingLicense}: ${persianStatus(participant.hasDrivingLicense)}` + : undefined, + participant?.licenseType + ? `${PR.licenseType}: ${asString( + persianReportValue( + "participant.licenseType", + participant.licenseType, + ), + )}` + : undefined, ] .filter(Boolean) .join("، "); @@ -695,8 +722,12 @@ function buildDriverSection( { label: PR.licenseType, value: - licenseType ?? - asString(person.licenseType) ?? + asString( + persianReportValue( + "participant.licenseType", + licenseType ?? person.licenseType, + ), + ) ?? (person.driverLicense ? PR.driverLicense : undefined), }, { @@ -895,7 +926,7 @@ function evaluationDaghiValue(value: unknown): string | undefined { return asString(value); } const daghi = value as ReportRecord; - const option = asString(daghi.option); + const option = asString(persianReportValue("daghi.option", daghi.option)); const price = formatToman(daghi.price); return [option, price].filter(Boolean).join(" - ") || undefined; } @@ -915,7 +946,9 @@ function buildEvaluationPartsSection( { label: `${prefix} / ${PR.partName}`, value: evaluationPartName(part) }, { label: `${prefix} / ${PR.damageType}`, - value: asString(part.typeOfDamage), + value: asString( + persianReportValue("evaluation.part.typeOfDamage", part.typeOfDamage), + ), }, { label: `${prefix} / ${PR.partPrice}`, value: formatToman(part.price) }, { diff --git a/src/case-expert-report/persian-report-labels.ts b/src/case-expert-report/persian-report-labels.ts index 358c6b1..8405b46 100644 --- a/src/case-expert-report/persian-report-labels.ts +++ b/src/case-expert-report/persian-report-labels.ts @@ -29,6 +29,7 @@ export const PR = { licenseType: "نوع گواهینامه", licenseDate: "تاریخ گواهینامه", licenseNumber: "شماره گواهینامه", + hasDrivingLicense: "گواهینامه دارد", driverLicense: "گواهینامه راننده", insuranceCompany: "شرکت بیمه", policyNumber: "شماره بیمه‌نامه", @@ -194,6 +195,31 @@ const KEY_LABELS: Record = { StatusTypeCode: "کد وضعیت", label_fa: "برچسب فارسی", catalogKey: "کلید کاتالوگ", + participantId: "شناسه شخص", + participants: "اشخاص استعلام", + participantRoles: "نقش‌های اشخاص", + nationalCode: "کد ملی", + birthday: "تاریخ تولد", + fullName: "نام و نام خانوادگی", + phoneNumber: "شماره تلفن", + hasDrivingLicense: "گواهینامه دارد", + licenseNumber: "شماره گواهینامه", + registrationState: "وضعیت پلاک و مالکیت", + currentPlate: "پلاک فعلی", + previousPlate: "پلاک قبلی", + previousPlateId: "پلاک قبلی", + previousPolicyholderNationalCode: "کد ملی بیمه‌گذار پلاک قبلی", + vehicleVin: "شماره شاسی (VIN)", + driver: "راننده", + vehicleOwner: "مالک وسیله نقلیه", + thirdPartyPolicyholder: "بیمه‌گذار شخص ثالث", + carBodyPolicyholder: "بیمه‌گذار بدنه", + sameAs: "همان شخص", + plateKind: "نوع پلاک استعلام‌شده", + succeeded: "موفق", + usable: "قابل استفاده", + attempts: "سوابق تلاش استعلام", + error: "خطا", }; const STATUS_LABELS: Record = { @@ -209,6 +235,76 @@ const STATUS_LABELS: Record = { false: "خیر", }; +const REGISTRATION_STATE_LABELS: Record = { + CURRENT: "عادی (پلاک فعلی)", + RECENTLY_TRANSFERRED: "انتقال مالکیت اخیر", +}; + +const PLATE_KIND_LABELS: Record = { + CURRENT: "پلاک فعلی", + PREVIOUS: "پلاک قبلی", +}; + +const PARTICIPANT_ROLE_VALUE_LABELS: Record = { + DRIVER: "راننده", + VEHICLE_OWNER: "مالک وسیله نقلیه", + THIRD_PARTY_POLICYHOLDER: "بیمه‌گذار شخص ثالث", + CAR_BODY_POLICYHOLDER: "بیمه‌گذار بدنه", + FIRST: "طرف اول", + SECOND: "طرف دوم", +}; + +const CASE_TYPE_LABELS: Record = { + THIRD_PARTY: "شخص ثالث", + CAR_BODY: "بدنه", +}; + +const VEHICLE_TYPE_LABELS: Record = { + SEDAN: "سواری", + SUV: "شاسی‌بلند", + HATCHBACK: "هاچ‌بک", + PICKUP: "وانت", + VAN: "ون", +}; + +const VALIDITY_LABELS: Record = { + ACTIVE: "فعال", + INACTIVE: "غیرفعال", + VALID: "معتبر", + INVALID: "نامعتبر", + EXPIRED: "منقضی‌شده", +}; + +const DAMAGE_TYPE_LABELS: Record = { + REPAIR: "تعمیر", + CHANGE: "تعویض", + REPLACE: "تعویض", +}; + +const INQUIRY_ERROR_LABELS: Record = { + NOT_FOUND: "موردی یافت نشد", + NO_RECORD_FOUND: "موردی یافت نشد", + TIMEOUT: "مهلت پاسخ استعلام به پایان رسید", + REQUEST_FAILED: "استعلام ناموفق بود", + FAILED: "استعلام ناموفق بود", + UNAVAILABLE: "سرویس استعلام در دسترس نیست", +}; + +const LICENSE_TYPE_LABELS: Record = { + "1": "پایه یک", + "2": "پایه دو", + "3": "پایه سه", + BASE_1: "پایه یک", + BASE1: "پایه یک", + GRADE_1: "پایه یک", + BASE_2: "پایه دو", + BASE2: "پایه دو", + GRADE_2: "پایه دو", + BASE_3: "پایه سه", + BASE3: "پایه سه", + GRADE_3: "پایه سه", +}; + const WEATHER_LABELS: Record = { clear: "صاف", sunny: "صاف", @@ -255,9 +351,39 @@ export function persianFieldPath(path: string): string { return `بیمه / ${translatedLast}`; } if (parts[0] === "claim" && parts[1] === "vehicle") { + const attemptIndex = parts.indexOf("attempts"); + if (attemptIndex >= 0) { + const attemptNumber = Number(parts[attemptIndex + 1]); + const attemptLabel = Number.isFinite(attemptNumber) + ? `تلاش ${attemptNumber.toLocaleString("fa-IR")}` + : "تلاش استعلام"; + const plateLabel = parts.includes("plate") ? " / پلاک" : ""; + return `خودرو / سوابق تلاش استعلام / ${attemptLabel}${plateLabel} / ${translatedLast}`; + } + if (parts.includes("currentPlate")) { + return `خودرو / پلاک فعلی / ${translatedLast}`; + } + if (parts.includes("previousPlate")) { + return `خودرو / پلاک قبلی / ${translatedLast}`; + } return `خودرو / ${translatedLast}`; } if (parts[0] === "party" && parts[1] === "vehicle") { + const attemptIndex = parts.indexOf("attempts"); + if (attemptIndex >= 0) { + const attemptNumber = Number(parts[attemptIndex + 1]); + const attemptLabel = Number.isFinite(attemptNumber) + ? `تلاش ${attemptNumber.toLocaleString("fa-IR")}` + : "تلاش استعلام"; + const plateLabel = parts.includes("plate") ? " / پلاک" : ""; + return `خودرو / سوابق تلاش استعلام / ${attemptLabel}${plateLabel} / ${translatedLast}`; + } + if (parts.includes("currentPlate")) { + return `خودرو / پلاک فعلی / ${translatedLast}`; + } + if (parts.includes("previousPlate")) { + return `خودرو / پلاک قبلی / ${translatedLast}`; + } return `خودرو / ${translatedLast}`; } @@ -267,6 +393,51 @@ export function persianFieldPath(path: string): string { return translated.join(" / "); } +/** + * Localize only known domain tokens. Free-form provider values, names, + * identifiers, plates and VINs are deliberately preserved verbatim. + */ +export function persianReportValue( + path: string, + value: unknown, +): unknown { + if (value === undefined || value === null || value === "") return value; + if (typeof value === "boolean") return value ? "بله" : "خیر"; + if (typeof value !== "string" && typeof value !== "number") return value; + + const raw = String(value).trim(); + const key = raw.toUpperCase().replace(/[\s-]+/g, "_"); + const field = path.split(".").filter(Boolean).pop() ?? ""; + + if (field === "licenseType" || field === "LicenseType") { + return LICENSE_TYPE_LABELS[key] ?? raw; + } + if (field === "registrationState") { + return REGISTRATION_STATE_LABELS[key] ?? raw; + } + if (field === "plateKind") return PLATE_KIND_LABELS[key] ?? raw; + if (field === "role" || field.endsWith("Role")) { + return PARTICIPANT_ROLE_VALUE_LABELS[key] ?? raw; + } + if (field === "blameRequestType" || field === "fileType") { + return CASE_TYPE_LABELS[key] ?? raw; + } + if ( + (field === "carType" || field === "type") && + path.toLowerCase().includes("vehicle") + ) { + return VEHICLE_TYPE_LABELS[key] ?? raw; + } + if (field === "typeOfDamage") return DAMAGE_TYPE_LABELS[key] ?? raw; + if (field === "error") return INQUIRY_ERROR_LABELS[key] ?? raw; + if (/status$/i.test(field)) { + return STATUS_LABELS[raw] ?? VALIDITY_LABELS[key] ?? raw; + } + + if (raw === "true" || raw === "false") return STATUS_LABELS[raw]; + return raw; +} + export function persianStatus(value: unknown): string | undefined { if (value === undefined || value === null || value === "") return undefined; const key = String(value); diff --git a/src/claim-request-management/claim-request-management.service.ts b/src/claim-request-management/claim-request-management.service.ts index e636adc..db02286 100644 --- a/src/claim-request-management/claim-request-management.service.ts +++ b/src/claim-request-management/claim-request-management.service.ts @@ -101,7 +101,12 @@ import { ClaimListItemV2Dto, } from "./dto/my-claims-v2.dto"; import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; -import { applyListQueryV2 } from "src/helpers/list-query-v2"; +import { + applyListQueryV2, + isInListDateRange, + parseListDateRange, +} from "src/helpers/list-query-v2"; +import { resolveUnifiedFileStatus } from "src/helpers/unified-file-status"; import { partyPersonMatchesUser } from "src/helpers/iran-mobile"; import { buildBlamePartyAccessOrConditions, @@ -206,6 +211,7 @@ import { partLookupKey, resolvePartCaptureIndex, } from "src/helpers/outer-damage-parts"; +import { serializeDamagedPartSelectionHistory } from "src/helpers/claim-damaged-part-audit"; import { normalizeMoneyAmountString } from "src/utils/unicode-digits"; import { PlateNormalizerService } from "src/utils/plate-normalizer/plate-normalizer.service"; @@ -12421,7 +12427,7 @@ export class ClaimRequestManagementService { blameIdsForList.length > 0 ? ((await this.blameRequestDbService.find( { _id: { $in: blameIdsForList.map((id) => new Types.ObjectId(id)) } }, - { lean: true, select: "type creationMethod" }, + { lean: true, select: "type creationMethod status" }, )) as any[]) : []; const blameByIdForList = new Map( @@ -12443,16 +12449,37 @@ export class ClaimRequestManagementService { blameRequestId: c.blameRequestId?.toString(), blameType: blameForItem?.type ?? undefined, creationMethod: blameForItem?.creationMethod ?? undefined, + unifiedFileStatus: resolveUnifiedFileStatus({ + blameStatus: blameForItem?.status, + claimStatus: c.status, + }), }; }) as ClaimListItemV2Dto[]; + let filtered = list; + if (query.unifiedStatus) { + filtered = filtered.filter( + (row) => row.unifiedFileStatus === query.unifiedStatus, + ); + } + const { fromDate, toDate } = parseListDateRange( + query.startDate, + query.endDate, + ); + if (fromDate || toDate) { + filtered = filtered.filter((row) => + isInListDateRange(row.createdAt, fromDate, toDate), + ); + } + const paged = applyListQueryV2( - list, + filtered, { publicId: (r) => r.publicId, createdAt: (r) => r.createdAt, requestNo: (r) => r.requestNo, - status: (r) => r.status, + status: (r) => r.unifiedFileStatus ?? r.status, + fileType: (r) => r.blameType, searchExtras: (r) => [ r.claimRequestId, @@ -12588,6 +12615,10 @@ export class ClaimRequestManagementService { catalogLikeKeyFromPart, buildFileLink, }); + const damagedPartsHistory = serializeDamagedPartSelectionHistory({ + history: (claim.damage as any)?.partSelectionHistory, + currentSelectedParts: selectedNormDetails, + }); const er = claim.evaluation?.damageExpertResend; const expertResend = @@ -12671,6 +12702,7 @@ export class ClaimRequestManagementService { : undefined, carAngles, damagedParts, + damagedPartsHistory, expertResend, fanavaran: fanavaranClaimReferences(claim), evaluation: mappedEvaluation diff --git a/src/claim-request-management/claim-request-management.v2.controller.ts b/src/claim-request-management/claim-request-management.v2.controller.ts index 1fae1b9..40913fa 100644 --- a/src/claim-request-management/claim-request-management.v2.controller.ts +++ b/src/claim-request-management/claim-request-management.v2.controller.ts @@ -83,7 +83,7 @@ export class ClaimRequestManagementV2Controller { @ApiOperation({ summary: "Get My Claims (V2)", description: - "Claims for the current user, or claims from blame files initiated by the current FIELD_EXPERT / REGISTRAR (LINK and IN_PERSON). Optional query: `search`, `sortBy`, `sortOrder`, `page`, `limit`.", + "Claims for the current user, or claims from blame files initiated by the current FIELD_EXPERT / REGISTRAR (LINK and IN_PERSON). Optional query: `search`, `sortBy`, `sortOrder`, `page`, `limit`, `unifiedStatus`, `fileType`, `startDate`, `endDate`.", }) @ApiResponse({ status: 200, diff --git a/src/claim-request-management/dto/claim-details-v2.dto.ts b/src/claim-request-management/dto/claim-details-v2.dto.ts index ce35198..744254c 100644 --- a/src/claim-request-management/dto/claim-details-v2.dto.ts +++ b/src/claim-request-management/dto/claim-details-v2.dto.ts @@ -204,6 +204,33 @@ export class ClaimDetailsV2ResponseDto { fileName?: string; }>; + @ApiPropertyOptional({ + description: + 'Append-only expert damaged-part revisions. Removed rows retain their original capture URL.', + type: 'array', + items: { + type: 'object', + properties: { + revisionId: { type: 'string' }, + changedAt: { type: 'string', format: 'date-time' }, + changedBy: { type: 'object' }, + removedParts: { type: 'array', items: { type: 'object' } }, + addedParts: { type: 'array', items: { type: 'object' } }, + }, + }, + }) + damagedPartsHistory?: Array<{ + revisionId: string; + changedAt: Date | string; + changedBy: { + actorId: string; + actorName?: string; + actorType: string; + }; + removedParts: Array>; + addedParts: Array>; + }>; + @ApiPropertyOptional({ description: 'Damage expert resend instructions and progress (when status is WAITING_FOR_USER_RESEND).', diff --git a/src/claim-request-management/dto/my-claims-v2.dto.ts b/src/claim-request-management/dto/my-claims-v2.dto.ts index 3c98b71..3a2ca87 100644 --- a/src/claim-request-management/dto/my-claims-v2.dto.ts +++ b/src/claim-request-management/dto/my-claims-v2.dto.ts @@ -40,6 +40,12 @@ export class ClaimListItemV2Dto { example: 'IN_PERSON', }) creationMethod?: string; + + @ApiPropertyOptional({ + description: 'Calculated combined blame and claim lifecycle status', + example: 'WAITING_FOR_DAMAGE_EXPERT', + }) + unifiedFileStatus?: string; } export class GetMyClaimsV2ResponseDto { diff --git a/src/claim-request-management/entites/schema/claim-case.damage.schema.ts b/src/claim-request-management/entites/schema/claim-case.damage.schema.ts index 0c98b00..6830c43 100644 --- a/src/claim-request-management/entites/schema/claim-case.damage.schema.ts +++ b/src/claim-request-management/entites/schema/claim-case.damage.schema.ts @@ -18,6 +18,18 @@ export class ClaimDamageSelection { @Prop({ type: [String], default: [] }) otherParts?: string[]; + /** + * Append-only expert edit revisions. Each revision preserves the prior + * selection and capture metadata for removed parts before the live arrays + * are replaced. Mixed keeps legacy/free-text part shapes readable. + */ + @Prop({ type: [MongooseSchema.Types.Mixed], default: [] }) + partSelectionHistory?: unknown[]; + + /** Parts introduced by an expert across revisions (used for origin labels). */ + @Prop({ type: [MongooseSchema.Types.Mixed], default: [] }) + expertAddedParts?: unknown[]; + /** * Legacy fields - kept for backward compatibility */ diff --git a/src/common/utils/inquiry-error.spec.ts b/src/common/utils/inquiry-error.spec.ts new file mode 100644 index 0000000..4ea2920 --- /dev/null +++ b/src/common/utils/inquiry-error.spec.ts @@ -0,0 +1,51 @@ +import { + getInquiryErrorMessage, + isInquiryFailurePayload, +} from "./inquiry-error"; + +describe("inquiry error messages", () => { + it("turns ESG not-found responses into a contextual plate message", () => { + expect( + getInquiryErrorMessage( + { success: false, message: "موردی یافت نشد" }, + "thirdPartyPlate", + ), + ).toBe("بیمه‌نامه شخص ثالثی مطابق پلاک و کد ملی واردشده یافت نشد."); + }); + + it("distinguishes VIN and car-body not-found failures", () => { + expect(getInquiryErrorMessage({ status: 404 }, "thirdPartyVin")).toContain( + "شماره شاسی (VIN)", + ); + expect( + getInquiryErrorMessage( + new Error("No active policy found"), + "carBodyPlate", + ), + ).toBe("بیمه‌نامه بدنه فعالی مطابق پلاک و کد ملی واردشده یافت نشد."); + }); + + it("preserves a specific Persian provider message", () => { + expect( + getInquiryErrorMessage( + { message: "کد ملی واردشده صحیح نیست" }, + "personalIdentity", + ), + ).toBe("کد ملی واردشده صحیح نیست"); + }); + + it("does not expose transport or authentication details", () => { + expect( + getInquiryErrorMessage( + { response: { status: 401 }, message: "ESG authentication failed" }, + "thirdPartyPlate", + ), + ).toBe("سرویس استعلام در دسترس نیست. لطفاً کمی بعد دوباره تلاش کنید."); + }); + + it("recognizes provider failure envelopes", () => { + expect(isInquiryFailurePayload({ success: false })).toBe(true); + expect(isInquiryFailurePayload({ HasError: true })).toBe(true); + expect(isInquiryFailurePayload({ success: true, data: {} })).toBe(false); + }); +}); diff --git a/src/common/utils/inquiry-error.ts b/src/common/utils/inquiry-error.ts new file mode 100644 index 0000000..2f08ee8 --- /dev/null +++ b/src/common/utils/inquiry-error.ts @@ -0,0 +1,220 @@ +export type InquiryErrorContext = + | "thirdPartyPlate" + | "thirdPartyVin" + | "carBodyPlate" + | "carBodyVin" + | "personalIdentity" + | "drivingLicense" + | "carOwnership" + | "sheba" + | "generic"; + +type UnknownRecord = Record; + +const NOT_FOUND_MESSAGES: Record = { + thirdPartyPlate: "بیمه‌نامه شخص ثالثی مطابق پلاک و کد ملی واردشده یافت نشد.", + thirdPartyVin: + "بیمه‌نامه شخص ثالثی مطابق شماره شاسی (VIN) و کد ملی واردشده یافت نشد.", + carBodyPlate: "بیمه‌نامه بدنه فعالی مطابق پلاک و کد ملی واردشده یافت نشد.", + carBodyVin: + "بیمه‌نامه بدنه فعالی مطابق شماره شاسی (VIN) و کد ملی واردشده یافت نشد.", + personalIdentity: "اطلاعات هویتی مطابق کد ملی و تاریخ تولد واردشده یافت نشد.", + drivingLicense: + "گواهینامه‌ای مطابق کد ملی و شماره گواهینامه واردشده یافت نشد.", + carOwnership: "مالکیتی مطابق پلاک و کد ملی واردشده یافت نشد.", + sheba: "اطلاعاتی مطابق شماره شبا و کد ملی واردشده یافت نشد.", + generic: "موردی مطابق اطلاعات واردشده یافت نشد.", +}; + +const INVALID_MESSAGES: Record = { + thirdPartyPlate: "پلاک یا کد ملی واردشده برای استعلام شخص ثالث معتبر نیست.", + thirdPartyVin: + "شماره شاسی (VIN) یا کد ملی واردشده برای استعلام شخص ثالث معتبر نیست.", + carBodyPlate: "پلاک یا کد ملی واردشده برای استعلام بیمه بدنه معتبر نیست.", + carBodyVin: + "شماره شاسی (VIN) یا کد ملی واردشده برای استعلام بیمه بدنه معتبر نیست.", + personalIdentity: "کد ملی یا تاریخ تولد واردشده معتبر نیست.", + drivingLicense: "کد ملی یا شماره گواهینامه واردشده معتبر نیست.", + carOwnership: "پلاک یا کد ملی واردشده برای استعلام مالکیت معتبر نیست.", + sheba: "شماره شبا یا کد ملی واردشده معتبر نیست.", + generic: "اطلاعات ارسال‌شده برای استعلام معتبر نیست.", +}; + +const asRecord = (value: unknown): UnknownRecord | undefined => + value && typeof value === "object" && !Array.isArray(value) + ? (value as UnknownRecord) + : undefined; + +const cleanMessage = (value: unknown): string => { + if (typeof value === "string") return value.trim(); + if (Array.isArray(value)) { + return value + .filter((item): item is string => typeof item === "string") + .map((item) => item.trim()) + .filter(Boolean) + .join("، "); + } + return ""; +}; + +function errorRecords(error: unknown): UnknownRecord[] { + const root = asRecord(error); + if (!root) return []; + + const response = asRecord(root.response); + const responseData = asRecord(response?.data); + const data = asRecord(root.data); + const nestedError = asRecord(root.Error) ?? asRecord(root.error); + const responseError = + asRecord(responseData?.Error) ?? asRecord(responseData?.error); + + return [root, responseData, data, nestedError, responseError].filter( + (item): item is UnknownRecord => !!item, + ); +} + +export function inquiryErrorStatus(error: unknown): number | undefined { + for (const record of errorRecords(error)) { + const response = asRecord(record.response); + const value = + record.statusCode ?? record.status ?? response?.status ?? record.code; + const parsed = Number(value); + if (Number.isFinite(parsed) && parsed >= 100 && parsed <= 599) { + return parsed; + } + } + return undefined; +} + +export function extractInquiryProviderMessage(error: unknown): string { + for (const record of errorRecords(error)) { + for (const key of ["message", "Message", "detail", "title"] as const) { + const message = cleanMessage(record[key]); + if (message) return message; + } + const scalarData = cleanMessage(record.data); + if (scalarData) return scalarData; + } + return error instanceof Error ? error.message.trim() : cleanMessage(error); +} + +export function isInquiryFailurePayload(value: unknown): boolean { + const root = asRecord(value); + if (!root) return false; + + return ( + root.success === false || + root.isSuccess === false || + root.IsSuccess === false || + root.IsSucceed === false || + root.ReturnValue === false || + root.HasError === true || + root.hasError === true || + root.Error != null || + root.error != null + ); +} + +export function isInquiryTimeout(error: unknown): boolean { + const root = asRecord(error); + const code = String(root?.code ?? "").toUpperCase(); + const message = extractInquiryProviderMessage(error); + return ( + ["ECONNABORTED", "ETIMEDOUT", "ESOCKETTIMEDOUT"].includes(code) || + /timeout|timed out|مهلت|زمان.*پایان/i.test(message) + ); +} + +const hasPersian = (value: string): boolean => /[\u0600-\u06ff]/.test(value); + +const isNotFound = (error: unknown, message: string): boolean => { + const root = asRecord(error); + const responseData = asRecord(asRecord(root?.response)?.data); + const code = String(root?.code ?? responseData?.code ?? "").toUpperCase(); + return ( + inquiryErrorStatus(error) === 404 || + ["NOT_FOUND", "POLICY_NOT_FOUND", "NO_POLICY", "RECORD_NOT_FOUND"].includes( + code, + ) || + /\bnot[ -]?found\b|\bno (?:active |relevant )?(?:record|policy|item)\b|record\.not\.found|موردی یافت نشد|یافت نشد|پیدا نشد|فاقد بیمه(?:‌| )?نامه/i.test( + message, + ) + ); +}; + +const isInvalidInput = (message: string): boolean => + /invalid|malformed|required|must contain|bad request|نامعتبر|الزامی|وارد نشده|صحیح نیست/i.test( + message, + ); + +const isUnavailable = (error: unknown, message: string): boolean => { + const root = asRecord(error); + const code = String(root?.code ?? "").toUpperCase(); + const status = inquiryErrorStatus(error); + return ( + isInquiryTimeout(error) || + ["ECONNRESET", "ECONNREFUSED", "ENOTFOUND", "ERR_NETWORK"].includes(code) || + status === 401 || + status === 502 || + status === 503 || + status === 504 || + /offline|unavailable|connection|socket|network|authentication|credentials|empty response|در دسترس نیست|عدم دسترسی/i.test( + message, + ) + ); +}; + +/** + * Converts provider and transport failures into a stable, user-facing Persian + * message. Provider details remain in server logs; raw English or technical + * messages are never returned to clients. + */ +export function getInquiryErrorMessage( + error: unknown, + context: InquiryErrorContext = "generic", +): string { + const providerMessage = extractInquiryProviderMessage(error); + + if (isNotFound(error, providerMessage)) return NOT_FOUND_MESSAGES[context]; + + if ( + context === "carOwnership" && + /not the owner|مالک.*نیست/i.test(providerMessage) + ) { + return "پلاک واردشده متعلق به کد ملی واردشده نیست."; + } + if ( + context === "sheba" && + /does not match|تطابق ندارد/i.test(providerMessage) + ) { + return "شماره شبا متعلق به کد ملی واردشده نیست."; + } + if ( + context === "drivingLicense" && + /not valid|نامعتبر/i.test(providerMessage) + ) { + return "گواهینامه واردشده معتبر نیست."; + } + if ( + /policy insurer does not match|بیمه.*متعلق.*نیست/i.test(providerMessage) + ) { + return "بیمه‌نامه یافت‌شده متعلق به شرکت بیمه این سامانه نیست."; + } + + if (isInquiryTimeout(error)) { + return "زمان پاسخ‌گویی سرویس استعلام به پایان رسید. لطفاً دوباره تلاش کنید."; + } + if (isUnavailable(error, providerMessage)) { + return "سرویس استعلام در دسترس نیست. لطفاً کمی بعد دوباره تلاش کنید."; + } + + // A provider's specific Persian validation/business message is already safe + // and more useful than replacing it with a broad local validation message. + if (providerMessage && hasPersian(providerMessage)) return providerMessage; + + if (isInvalidInput(providerMessage) || inquiryErrorStatus(error) === 422) { + return INVALID_MESSAGES[context]; + } + + return "انجام استعلام با خطا مواجه شد. لطفاً دوباره تلاش کنید."; +} diff --git a/src/expert-claim/dto/claim-detail-v2.dto.ts b/src/expert-claim/dto/claim-detail-v2.dto.ts index fc51e08..2b827e7 100644 --- a/src/expert-claim/dto/claim-detail-v2.dto.ts +++ b/src/expert-claim/dto/claim-detail-v2.dto.ts @@ -131,6 +131,33 @@ export class ClaimDetailV2ResponseDto { url?: string; }>; + @ApiPropertyOptional({ + description: + "Append-only expert damaged-part revisions. Removed rows retain their original capture URL even after the authoritative selection changes.", + type: "array", + items: { + type: "object", + properties: { + revisionId: { type: "string" }, + changedAt: { type: "string", format: "date-time" }, + changedBy: { type: "object" }, + removedParts: { type: "array", items: { type: "object" } }, + addedParts: { type: "array", items: { type: "object" } }, + }, + }, + }) + damagedPartsHistory?: Array<{ + revisionId: string; + changedAt: Date | string; + changedBy: { + actorId: string; + actorName?: string; + actorType: string; + }; + removedParts: Array>; + addedParts: Array>; + }>; + @ApiPropertyOptional({ description: "True when user uploaded all required factors and the case awaits expert approve/reject.", diff --git a/src/expert-claim/dto/expert-claim-v2.dto.spec.ts b/src/expert-claim/dto/expert-claim-v2.dto.spec.ts index 4b15b14..a57b876 100644 --- a/src/expert-claim/dto/expert-claim-v2.dto.spec.ts +++ b/src/expert-claim/dto/expert-claim-v2.dto.spec.ts @@ -90,4 +90,21 @@ describe("SubmitExpertReplyV2Dto", () => { expect(await validate(dto)).toHaveLength(0); }); + + it("accepts a grouped Persian current car price as a string", async () => { + const dto = plainToInstance(SubmitExpertReplyV2Dto, { + carPrice: "۱٬۲۵۰٬۰۰۰٬۰۰۰", + parts: [ + { + partId: 201, + typeOfDamage: TypeOfDamage.Repair, + salary: "1000000", + totalPayment: "1000000", + factorNeeded: false, + }, + ], + }); + + expect(await validate(dto)).toHaveLength(0); + }); }); diff --git a/src/expert-claim/dto/expert-claim-v2.dto.ts b/src/expert-claim/dto/expert-claim-v2.dto.ts index e8057ca..127695a 100644 --- a/src/expert-claim/dto/expert-claim-v2.dto.ts +++ b/src/expert-claim/dto/expert-claim-v2.dto.ts @@ -122,8 +122,9 @@ export class SubmitExpertReplyV2Dto { description?: string; @ApiPropertyOptional({ - example: '1_000_000_000', - description: "Today's car price", + example: '1000000000', + description: + "Current vehicle price in Rial. Required for car-body claims and forbidden for third-party claims. This is independent from evaluation.priceDrop.carPrice.", }) @IsOptional() @IsMoneyAmountString() diff --git a/src/expert-claim/expert-claim.service.spec.ts b/src/expert-claim/expert-claim.service.spec.ts index 582e1d6..96e443c 100644 --- a/src/expert-claim/expert-claim.service.spec.ts +++ b/src/expert-claim/expert-claim.service.spec.ts @@ -1,10 +1,14 @@ import { BadRequestException } from "@nestjs/common"; +import { Types } from "mongoose"; import { ClaimCaseStatus } from "src/Types&Enums/claim-request-management/claim-case-status.enum"; import { DaghiOption } from "src/Types&Enums/claim-request-management/daghi-option.enum"; import { RoleEnum } from "src/Types&Enums/role.enum"; import { TypeOfDamage } from "src/Types&Enums/claim-request-management/type-of-damage.enum"; +import { BlameRequestType } from "src/Types&Enums/blame-request-management/blameRequestType.enum"; import { ExpertClaimService } from "./expert-claim.service"; +const V2_EXPERT_ID = "66ec0e480e321873c0900001"; + const blankPricingReply = { description: "Damage assessment", parts: [ @@ -26,7 +30,144 @@ function createService() { ) as ExpertClaimService; } +function setupSuccessfulV2Submit(blameType: BlameRequestType) { + const service = createService() as any; + const findByIdAndUpdate = jest.fn().mockResolvedValue(undefined); + const claim = { + _id: "66ec0e480e321873c0900002", + publicId: "CLM-1", + blameRequestId: "66ec0e480e321873c0900003", + status: ClaimCaseStatus.EXPERT_REVIEWING, + workflow: { locked: true, lockedBy: { actorId: V2_EXPERT_ID } }, + vehicle: { carType: "sedan" }, + damage: { + selectedParts: [ + { + id: 1, + name: "front", + side: "", + label_fa: "جلو کامل", + catalogKey: "1", + }, + ], + }, + }; + + service.claimCaseDbService = { + findById: jest.fn().mockResolvedValue(claim), + findByIdAndUpdate, + }; + service.blameRequestDbService = { + findById: jest.fn().mockResolvedValue({ + type: blameType, + expertInitiated: true, + creationMethod: "IN_PERSON", + }), + }; + service.assertExpertActorOnClaim = jest.fn().mockResolvedValue(undefined); + service.snapshotDamageExpert = jest.fn().mockResolvedValue(undefined); + service.recordClaimExpertActivity = jest.fn().mockResolvedValue(undefined); + + return { service, findByIdAndUpdate }; +} + +const validV2Reply = { + parts: [ + { + partId: 1, + typeOfDamage: TypeOfDamage.Repair, + salary: "1000000", + totalPayment: "1000000", + factorNeeded: false, + }, + ], +}; + describe("ExpertClaimService expert-reply pricing", () => { + it("requires the current car price for a car-body expert reply", async () => { + const { service, findByIdAndUpdate } = setupSuccessfulV2Submit( + BlameRequestType.CAR_BODY, + ); + + await expect( + service.submitExpertReplyV2("v2-claim", validV2Reply, { + sub: V2_EXPERT_ID, + fullName: "Expert One", + role: RoleEnum.FIELD_EXPERT, + }), + ).rejects.toMatchObject({ + response: { + code: "CAR_PRICE_REQUIRED", + field: "carPrice", + }, + }); + + expect(findByIdAndUpdate).not.toHaveBeenCalled(); + }); + + it("normalizes and persists the current car price on car-body replies", async () => { + const { service, findByIdAndUpdate } = setupSuccessfulV2Submit( + BlameRequestType.CAR_BODY, + ); + + await service.submitExpertReplyV2( + "v2-claim", + { ...validV2Reply, carPrice: "۱٬۲۵۰٬۰۰۰٬۰۰۰" }, + { + sub: V2_EXPERT_ID, + fullName: "Expert One", + role: RoleEnum.FIELD_EXPERT, + }, + ); + + expect(findByIdAndUpdate).toHaveBeenCalledTimes(1); + expect(findByIdAndUpdate.mock.calls[0][1]).toMatchObject({ + "vehicle.price": "1250000000", + }); + }); + + it("rejects the current car price on third-party replies", async () => { + const { service, findByIdAndUpdate } = setupSuccessfulV2Submit( + BlameRequestType.THIRD_PARTY, + ); + + await expect( + service.submitExpertReplyV2( + "v2-claim", + { ...validV2Reply, carPrice: "1250000000" }, + { + sub: V2_EXPERT_ID, + fullName: "Expert One", + role: RoleEnum.FIELD_EXPERT, + }, + ), + ).rejects.toMatchObject({ + response: { + code: "CAR_PRICE_NOT_ALLOWED", + field: "carPrice", + }, + }); + + expect(findByIdAndUpdate).not.toHaveBeenCalled(); + }); + + it("does not overwrite vehicle.price on third-party replies", async () => { + const { service, findByIdAndUpdate } = setupSuccessfulV2Submit( + BlameRequestType.THIRD_PARTY, + ); + + await service.submitExpertReplyV2("v2-claim", validV2Reply, { + sub: V2_EXPERT_ID, + fullName: "Expert One", + role: RoleEnum.FIELD_EXPERT, + }); + + expect(findByIdAndUpdate).toHaveBeenCalledTimes(1); + expect(findByIdAndUpdate.mock.calls[0][1]).not.toHaveProperty( + "vehicle.price", + ); + }); + it("allows a repair line without daghi and removes a stray daghi payload", () => { const service = createService() as any; @@ -105,18 +246,27 @@ describe("ExpertClaimService expert-reply pricing", () => { const findByIdAndUpdate = jest.fn(); service.claimCaseDbService = { findById: jest.fn().mockResolvedValue({ + blameRequestId: "blame-1", status: ClaimCaseStatus.EXPERT_REVIEWING, workflow: { locked: true, lockedBy: { actorId: "expert-1" } }, }), findByIdAndUpdate, }; + service.blameRequestDbService = { + findById: jest.fn().mockResolvedValue({ type: "CAR_BODY" }), + }; service.assertExpertActorOnClaim = jest.fn().mockResolvedValue(undefined); + service.snapshotDamageExpert = jest.fn().mockResolvedValue(undefined); await expect( - service.submitExpertReplyV2("v2-claim", blankPricingReply, { - sub: "expert-1", - role: RoleEnum.FIELD_EXPERT, - }), + service.submitExpertReplyV2( + "v2-claim", + { ...blankPricingReply, carPrice: "1000000" }, + { + sub: "expert-1", + role: RoleEnum.FIELD_EXPERT, + }, + ), ).rejects.toBeInstanceOf(BadRequestException); expect(findByIdAndUpdate).not.toHaveBeenCalled(); @@ -127,18 +277,24 @@ describe("ExpertClaimService expert-reply pricing", () => { const findByIdAndUpdate = jest.fn(); service.claimCaseDbService = { findById: jest.fn().mockResolvedValue({ + blameRequestId: "blame-1", status: ClaimCaseStatus.EXPERT_REVIEWING, workflow: { locked: true, lockedBy: { actorId: "expert-1" } }, }), findByIdAndUpdate, }; + service.blameRequestDbService = { + findById: jest.fn().mockResolvedValue({ type: "CAR_BODY" }), + }; service.assertExpertActorOnClaim = jest.fn().mockResolvedValue(undefined); + service.snapshotDamageExpert = jest.fn().mockResolvedValue(undefined); await expect( service.submitExpertReplyV2( "v2-claim", { description: "Damage assessment", + carPrice: "1000000", parts: [ { partId: 201, @@ -163,3 +319,132 @@ describe("ExpertClaimService expert-reply pricing", () => { expect(findByIdAndUpdate).not.toHaveBeenCalled(); }); }); + +describe("ExpertClaimService damaged-part audit", () => { + it("archives removed capture evidence before replacing the live arrays", async () => { + const service = createService() as any; + const expertId = "66ec0e480e321873c0900001"; + const findByIdAndUpdate = jest.fn().mockResolvedValue(undefined); + service.claimCaseDbService = { + findById: jest.fn().mockResolvedValue({ + _id: "66ec0e480e321873c0900002", + status: ClaimCaseStatus.EXPERT_REVIEWING, + workflow: { locked: true, lockedBy: { actorId: expertId } }, + vehicle: { carType: "SEDAN" }, + damage: { + selectedParts: [ + { + id: 101, + name: "hood", + side: "front", + label_fa: "کاپوت", + catalogKey: "front_hood", + }, + { + id: 202, + name: "door", + side: "left", + label_fa: "درب چپ", + catalogKey: "left_door", + }, + ], + }, + media: { + damagedParts: [ + { path: "claims/hood.jpg", fileName: "hood.jpg" }, + { path: "claims/door.jpg", fileName: "door.jpg" }, + ], + }, + }), + findByIdAndUpdate, + }; + service.assertExpertActorOnClaim = jest.fn().mockResolvedValue(undefined); + service.snapshotDamageExpert = jest.fn().mockResolvedValue({ + firstName: "Expert", + }); + + await service.updateClaimDamagedPartsV2( + "66ec0e480e321873c0900002", + { + selectedParts: [ + { + id: 202, + name: "door", + side: "left", + label_fa: "درب چپ", + catalogKey: "left_door", + }, + ], + }, + { + sub: expertId, + fullName: "Expert One", + role: RoleEnum.FIELD_EXPERT, + }, + ); + + expect(findByIdAndUpdate).toHaveBeenCalledTimes(1); + const update = findByIdAndUpdate.mock.calls[0][1]; + expect(update.$set["media.damagedParts"]).toEqual([ + expect.objectContaining({ path: "claims/door.jpg" }), + ]); + expect(update.$push["damage.partSelectionHistory"]).toEqual( + expect.objectContaining({ + changedBy: expect.objectContaining({ actorId: expertId }), + removedParts: [ + expect.objectContaining({ + id: 101, + capture: expect.objectContaining({ path: "claims/hood.jpg" }), + }), + ], + }), + ); + }); +}); + +describe("ExpertClaimService FileReviewer assignment", () => { + it("lets the assigned reviewer reopen a file while it is still awaiting FileReviewer work", async () => { + const service = createService() as any; + const reviewerId = new Types.ObjectId(); + const clientId = new Types.ObjectId(); + const blameId = new Types.ObjectId(); + const claimId = new Types.ObjectId(); + + service.expireClaimWorkflowLockV2IfStale = jest.fn().mockResolvedValue(undefined); + service.claimCaseDbService = { + findById: jest.fn().mockResolvedValue({ + _id: claimId, + blameRequestId: blameId, + status: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + }), + }; + service.blameRequestDbService = { + findById: jest.fn().mockResolvedValue({ + _id: blameId, + type: BlameRequestType.CAR_BODY, + status: "WAITING_FOR_FILE_REVIEWER", + assignedFileReviewerId: reviewerId, + parties: [ + { + role: "FIRST", + person: { clientId }, + }, + ], + }), + }; + service.assertExpertActorOnClaim = jest.fn(); + + await expect( + service.assignClaimForReviewV2(String(claimId), { + sub: String(reviewerId), + role: RoleEnum.FILE_REVIEWER, + clientKey: String(clientId), + }), + ).resolves.toMatchObject({ + success: true, + status: "already_assigned_to_you", + }); + + expect(service.assertExpertActorOnClaim).not.toHaveBeenCalled(); + }); +}); diff --git a/src/expert-claim/expert-claim.service.ts b/src/expert-claim/expert-claim.service.ts index 4252548..2d1d9aa 100644 --- a/src/expert-claim/expert-claim.service.ts +++ b/src/expert-claim/expert-claim.service.ts @@ -143,6 +143,10 @@ import { } from "src/helpers/outer-damage-parts"; import { normalizeResendCarPartsForStorage } from "src/helpers/claim-expert-resend"; import { ClaimVehicleTypeV2 } from "src/static/outer-car-parts-catalog"; +import { + buildDamagedPartSelectionRevision, + serializeDamagedPartSelectionHistory, +} from "src/helpers/claim-damaged-part-audit"; import { snapshotFromDamageExpert } from "src/helpers/expert-profile-snapshot"; import { DamageExpertModel } from "src/users/entities/schema/damage-expert.schema"; import { SmsOrchestrationService } from "src/sms-orchestration/sms-orchestration.service"; @@ -172,6 +176,10 @@ import { import { buildEnrichedDamagedParts } from "./dto/claim-damaged-part.enricher"; import { canonicalizeResendDocumentKey } from "src/helpers/claim-resend-document-keys"; import { getExpertReplyPricingValidationError } from "src/helpers/expert-reply-pricing"; +import { + normalizeMoneyAmountString, + parseMoneyAmountToman, +} from "src/utils/unicode-digits"; @Injectable() export class ExpertClaimService { @@ -2719,9 +2727,14 @@ export class ExpertClaimService { if (blameStatus === "WAITING_FOR_FILE_REVIEWER") { if (assignedReviewerId && assignedReviewerId === actor.sub) { - // Reviewer already assigned (e.g. after a FileMaker rejection that reset - // blame back to WAITING_FOR_FILE_REVIEWER) — skip Phase 1 and fall - // through to the damage-expert workflow lock below. + // Phase 1 is intentionally idempotent. The linked claim can still be + // in a data-capture status here, so falling through to the damage + // assessment status gate would incorrectly reject the same reviewer. + return { + success: true, + status: "already_assigned_to_you", + message: "You have already taken this file.", + }; } else { // Phase 1: first-time blame assignment return this.assignFileReviewerToV4Blame(claimRequestId, claim, actor); @@ -3263,8 +3276,6 @@ export class ExpertClaimService { ) { if (actor.role !== RoleEnum.FIELD_EXPERT) requireActorClientKey(actor); const claim = await this.claimCaseDbService.findById(claimRequestId); - const blame = await this.blameRequestDbService.findById(claim.blameRequestId); - if (!claim) { throw new NotFoundException( this.expertReplySubmissionError( @@ -3274,6 +3285,18 @@ export class ExpertClaimService { ); } + const blame = await this.blameRequestDbService.findById( + claim.blameRequestId, + ); + if (!blame) { + throw new NotFoundException( + this.expertReplySubmissionError( + "پرونده تعیین خسارت مرتبط یافت نشد.", + "BLAME_NOT_FOUND", + ), + ); + } + await this.assertExpertActorOnClaim(claim, actor); if (claim.status !== ClaimCaseStatus.EXPERT_REVIEWING) { @@ -3304,12 +3327,33 @@ export class ExpertClaimService { ); } - if (reply.carPrice && blame.type !== BlameRequestType.CAR_BODY) { - throw new ForbiddenException("قیمت روز خودرو فقط در پرونده های بدنه باید بررسی شود") - } + const carPriceWasProvided = reply.carPrice != null; + let normalizedCurrentCarPrice: string | undefined; - if (blame.type === BlameRequestType.THIRD_PARTY && reply.carPrice) { - throw new ForbiddenException("قیمت روز خودرو فقط در پرونده های بدنه باید بررسی شود") + if (blame.type === BlameRequestType.CAR_BODY) { + const parsedCurrentCarPrice = parseMoneyAmountToman(reply.carPrice); + if ( + parsedCurrentCarPrice == null || + !Number.isSafeInteger(parsedCurrentCarPrice) || + parsedCurrentCarPrice <= 0 + ) { + throw new BadRequestException( + this.expertReplySubmissionError( + "قیمت روز خودرو در پرونده بدنه الزامی است و باید مبلغی صحیح و بیشتر از صفر باشد.", + "CAR_PRICE_REQUIRED", + { field: "carPrice" }, + ), + ); + } + normalizedCurrentCarPrice = normalizeMoneyAmountString(reply.carPrice!); + } else if (carPriceWasProvided) { + throw new ForbiddenException( + this.expertReplySubmissionError( + "قیمت روز خودرو فقط برای پرونده بدنه قابل ثبت است.", + "CAR_PRICE_NOT_ALLOWED", + { field: "carPrice" }, + ), + ); } const pricingValidationError = getExpertReplyPricingValidationError( @@ -3540,7 +3584,9 @@ export class ExpertClaimService { "evaluation.ownerInsurerApproval": "", "evaluation.ownerPricedPartsApproval": "", }, - "vehicle.price": reply.carPrice, + ...(normalizedCurrentCarPrice + ? { "vehicle.price": normalizedCurrentCarPrice } + : {}), "workflow.currentStep": currentStep, "workflow.nextStep": nextWorkflowStep, [`evaluation.${replyField}`]: replyPayload, @@ -5050,6 +5096,10 @@ export class ExpertClaimService { buildFileLink, resolveStoredFileUrl, }); + const damagedPartsHistory = serializeDamagedPartSelectionHistory({ + history: (claim.damage as any)?.partSelectionHistory, + currentSelectedParts: selectedNormExpert, + }); // Vehicle payload — fall back to blame inquiry if claim vehicle is sparse let vehiclePayload = claim.vehicle as any; @@ -5229,6 +5279,7 @@ export class ExpertClaimService { : undefined, carAngles, damagedParts, + damagedPartsHistory, awaitingFactorValidation: isFactorValidationPending, requiresFileMakerApproval: !!(claim as any).requiresFileMakerApproval, fileMakerRejectionCount: (claim as any).fileMakerRejectionCount ?? 0, @@ -5606,33 +5657,58 @@ export class ExpertClaimService { ); const mergedExpertAdded = [...existingExpertAdded, ...expertAddedToAppend]; + const changedAt = new Date(); + const partSelectionRevision = buildDamagedPartSelectionRevision({ + revisionId: new Types.ObjectId().toString(), + changedAt, + changedBy: { + actorId: actor.sub, + actorName: actor.fullName, + actorType: "damage_expert", + }, + expertProfileSnapshot: damagedPartsEditSnapshot, + previousParts: previousNorm, + selectedParts: nextNorm, + previousMedia: prevMedia, + }); + const $set: Record = { "damage.selectedParts": nextNorm, "media.damagedParts": nextMedia, "damage.expertAddedParts": mergedExpertAdded, }; - await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, { - $set, - $push: { - history: { - type: "EXPERT_DAMAGED_PARTS_UPDATED", - actor: { - actorId: new Types.ObjectId(actor.sub), - actorName: actor.fullName, - actorType: "damage_expert", - }, - timestamp: new Date(), - metadata: { - previousSelectedParts: previous, - selectedParts: nextNorm, - expertAddedParts: mergedExpertAdded, - ...(damagedPartsEditSnapshot && { - expertProfileSnapshot: damagedPartsEditSnapshot, - }), - }, + const push: Record = { + history: { + type: "EXPERT_DAMAGED_PARTS_UPDATED", + actor: { + actorId: new Types.ObjectId(actor.sub), + actorName: actor.fullName, + actorType: "damage_expert", + }, + timestamp: changedAt, + metadata: { + previousSelectedParts: previous, + selectedParts: nextNorm, + expertAddedParts: mergedExpertAdded, + ...(partSelectionRevision && { + partSelectionRevisionId: partSelectionRevision.revisionId, + removedParts: partSelectionRevision.removedParts, + addedParts: partSelectionRevision.addedParts, + }), + ...(damagedPartsEditSnapshot && { + expertProfileSnapshot: damagedPartsEditSnapshot, + }), }, }, + }; + if (partSelectionRevision) { + push["damage.partSelectionHistory"] = partSelectionRevision; + } + + await this.claimCaseDbService.findByIdAndUpdate(claimRequestId, { + $set, + $push: push, }); return { @@ -5640,6 +5716,7 @@ export class ExpertClaimService { selectedParts: nextNorm, previousSelectedParts: previous, expertAddedParts: mergedExpertAdded, + partSelectionRevision, message: "Damaged parts updated successfully.", }; } diff --git a/src/expert-insurer/expert-insurer.service.ts b/src/expert-insurer/expert-insurer.service.ts index d9459d1..d2318f5 100644 --- a/src/expert-insurer/expert-insurer.service.ts +++ b/src/expert-insurer/expert-insurer.service.ts @@ -85,6 +85,7 @@ import { localizeTimelineMetadata, } from "./helper/timeline-fa-labels"; import { buildEnrichedDamagedParts } from "src/expert-claim/dto/claim-damaged-part.enricher"; +import { serializeDamagedPartSelectionHistory } from "src/helpers/claim-damaged-part-audit"; @Injectable() export class ExpertInsurerService { @@ -524,6 +525,8 @@ export class ExpertInsurerService { const d = { ...(damage as Record) }; delete d.selectedOuterParts; delete d.selectedPartIds; + // Expose the stable, URL-enriched contract instead of raw audit storage. + delete d.partSelectionHistory; return d; } @@ -677,6 +680,10 @@ export class ExpertInsurerService { catalogLikeKeyFromPart, buildFileLink, }); + const damagedPartsHistory = serializeDamagedPartSelectionHistory({ + history: (claim as any).damage?.partSelectionHistory, + currentSelectedParts: selectedNorm, + }); // Then add damagedParts to the return object const requiredDocs = claim.requiredDocuments as any; @@ -797,6 +804,7 @@ export class ExpertInsurerService { : undefined, carAngles, damagedParts, + damagedPartsHistory, videoCapture, evaluation: evaluationEnriched, userRating: claim.userRating, diff --git a/src/helpers/claim-damaged-part-audit.spec.ts b/src/helpers/claim-damaged-part-audit.spec.ts new file mode 100644 index 0000000..6837777 --- /dev/null +++ b/src/helpers/claim-damaged-part-audit.spec.ts @@ -0,0 +1,72 @@ +import { + buildDamagedPartSelectionRevision, + serializeDamagedPartSelectionHistory, +} from "./claim-damaged-part-audit"; + +describe("damaged-part selection audit", () => { + const hood = { + id: 101, + name: "hood", + side: "front", + label_fa: "کاپوت", + catalogKey: "front_hood", + }; + const door = { + id: 202, + name: "door", + side: "left", + label_fa: "درب چپ", + catalogKey: "left_door", + }; + + it("keeps the removed part capture and serializes it for panel display", () => { + const revision = buildDamagedPartSelectionRevision({ + revisionId: "revision-1", + changedAt: new Date("2026-09-18T10:00:00.000Z"), + changedBy: { + actorId: "expert-1", + actorName: "Expert One", + actorType: "damage_expert", + }, + previousParts: [hood, door], + selectedParts: [door], + previousMedia: [ + { path: "claims/hood.jpg", fileName: "hood.jpg" }, + { path: "claims/door.jpg", fileName: "door.jpg" }, + ], + }); + + expect(revision?.removedParts).toEqual([ + expect.objectContaining({ + id: 101, + capture: expect.objectContaining({ path: "claims/hood.jpg" }), + }), + ]); + + const serialized = serializeDamagedPartSelectionHistory({ + history: [revision], + currentSelectedParts: [door], + }); + expect(serialized[0].removedParts[0]).toEqual( + expect.objectContaining({ + id: 101, + captured: true, + currentlySelected: false, + url: expect.stringContaining("claims/hood.jpg"), + }), + ); + }); + + it("does not create a revision for an unchanged or order-only submission", () => { + expect( + buildDamagedPartSelectionRevision({ + revisionId: "revision-2", + changedAt: new Date(), + changedBy: { actorId: "expert-1", actorType: "damage_expert" }, + previousParts: [hood, door], + selectedParts: [door, hood], + previousMedia: [], + }), + ).toBeNull(); + }); +}); diff --git a/src/helpers/claim-damaged-part-audit.ts b/src/helpers/claim-damaged-part-audit.ts new file mode 100644 index 0000000..5bf737a --- /dev/null +++ b/src/helpers/claim-damaged-part-audit.ts @@ -0,0 +1,170 @@ +import { resolveStoredFileUrl } from "src/helpers/urlCreator"; +import { + coerceDamagedPartsMediaToArray, + partLookupKey, + type DamageSelectedPartV2, +} from "src/helpers/outer-damage-parts"; + +export interface DamagedPartAuditActor { + actorId: string; + actorName?: string; + actorType: string; +} + +export interface StoredDamagedPartAuditRow extends DamageSelectedPartV2 { + capture?: { + path?: string; + fileName?: string; + url?: string; + capturedAt?: Date | string; + }; +} + +export interface StoredDamagedPartSelectionRevision { + revisionId: string; + changedAt: Date; + changedBy: DamagedPartAuditActor; + expertProfileSnapshot?: unknown; + previousSelectedParts: DamageSelectedPartV2[]; + selectedParts: DamageSelectedPartV2[]; + removedParts: StoredDamagedPartAuditRow[]; + addedParts: StoredDamagedPartAuditRow[]; +} + +export interface DamagedPartSelectionHistoryRow { + revisionId: string; + changedAt: Date | string; + changedBy: DamagedPartAuditActor; + expertProfileSnapshot?: unknown; + removedParts: Array< + DamageSelectedPartV2 & { + partId: number | null; + captured: boolean; + url?: string; + fileName?: string; + capturedAt?: Date | string; + currentlySelected: boolean; + } + >; + addedParts: Array< + DamageSelectedPartV2 & { + partId: number | null; + currentlySelected: boolean; + } + >; +} + +function plainCapture(row: unknown): StoredDamagedPartAuditRow["capture"] { + if (!row || typeof row !== "object") return undefined; + const source = row as Record; + const capture = { + ...(source.path ? { path: String(source.path) } : {}), + ...(source.fileName ? { fileName: String(source.fileName) } : {}), + ...(source.url ? { url: String(source.url) } : {}), + ...(source.capturedAt + ? { capturedAt: source.capturedAt as Date | string } + : {}), + }; + return Object.keys(capture).length > 0 ? capture : undefined; +} + +/** + * Builds one immutable audit revision before the live selected-parts/media arrays + * are replaced. Returns null for a semantic no-op (including order-only changes). + */ +export function buildDamagedPartSelectionRevision(params: { + revisionId: string; + changedAt: Date; + changedBy: DamagedPartAuditActor; + expertProfileSnapshot?: unknown; + previousParts: DamageSelectedPartV2[]; + selectedParts: DamageSelectedPartV2[]; + previousMedia: unknown; +}): StoredDamagedPartSelectionRevision | null { + const previousKeys = new Set(params.previousParts.map(partLookupKey)); + const selectedKeys = new Set(params.selectedParts.map(partLookupKey)); + const mediaRows = coerceDamagedPartsMediaToArray( + params.previousMedia, + params.previousParts, + ); + + const removedParts = params.previousParts.flatMap((part, index) => { + if (selectedKeys.has(partLookupKey(part))) return []; + const capture = plainCapture(mediaRows[index]); + return [{ ...part, ...(capture ? { capture } : {}) }]; + }); + const addedParts = params.selectedParts + .filter((part) => !previousKeys.has(partLookupKey(part))) + .map((part) => ({ ...part })); + + if (removedParts.length === 0 && addedParts.length === 0) return null; + + return { + revisionId: params.revisionId, + changedAt: params.changedAt, + changedBy: params.changedBy, + ...(params.expertProfileSnapshot + ? { expertProfileSnapshot: params.expertProfileSnapshot } + : {}), + previousSelectedParts: params.previousParts.map((part) => ({ ...part })), + selectedParts: params.selectedParts.map((part) => ({ ...part })), + removedParts, + addedParts, + }; +} + +/** Converts stored revisions into a stable, URL-enriched panel contract. */ +export function serializeDamagedPartSelectionHistory(params: { + history: unknown; + currentSelectedParts: DamageSelectedPartV2[]; +}): DamagedPartSelectionHistoryRow[] { + if (!Array.isArray(params.history)) return []; + const currentKeys = new Set(params.currentSelectedParts.map(partLookupKey)); + + return params.history + .filter((revision) => revision && typeof revision === "object") + .map((revision: any) => ({ + revisionId: String(revision.revisionId ?? ""), + changedAt: revision.changedAt, + changedBy: { + actorId: String(revision.changedBy?.actorId ?? ""), + actorName: revision.changedBy?.actorName, + actorType: String(revision.changedBy?.actorType ?? "damage_expert"), + }, + ...(revision.expertProfileSnapshot + ? { expertProfileSnapshot: revision.expertProfileSnapshot } + : {}), + removedParts: (Array.isArray(revision.removedParts) + ? revision.removedParts + : [] + ).map((part: StoredDamagedPartAuditRow) => ({ + id: part.id ?? null, + partId: part.id ?? null, + name: part.name, + side: part.side, + label_fa: part.label_fa, + ...(part.catalogKey ? { catalogKey: part.catalogKey } : {}), + captured: !!part.capture, + ...(part.capture?.fileName ? { fileName: part.capture.fileName } : {}), + ...(part.capture?.capturedAt + ? { capturedAt: part.capture.capturedAt } + : {}), + ...(resolveStoredFileUrl(part.capture) + ? { url: resolveStoredFileUrl(part.capture) } + : {}), + currentlySelected: currentKeys.has(partLookupKey(part)), + })), + addedParts: (Array.isArray(revision.addedParts) + ? revision.addedParts + : [] + ).map((part: DamageSelectedPartV2) => ({ + ...part, + partId: part.id ?? null, + currentlySelected: currentKeys.has(partLookupKey(part)), + })), + })) + .filter( + (revision) => + revision.removedParts.length > 0 || revision.addedParts.length > 0, + ); +} diff --git a/src/helpers/claim-price-drop.ts b/src/helpers/claim-price-drop.ts index e7f5731..38b44be 100644 --- a/src/helpers/claim-price-drop.ts +++ b/src/helpers/claim-price-drop.ts @@ -110,12 +110,42 @@ for (const [seg, key] of Object.entries(SEGMENT_ALIASES)) { NORM_TO_PART_KEY.set(seg, key); } +const PERSIAN_LABEL_ALIASES: Array<[string, string]> = [ + ["گلگیر عقب", "backFender"], + ["درب عقب", "backDoor"], + ["درب جلو", "frontDoor"], + ["گلگیر جلو", "frontFender"], + ["سپر جلو", "frontBumper"], + ["سپر عقب", "frontBumper"], + ["درب موتور", "Hood"], + ["کاپوت", "Hood"], + ["درب صندوق", "Trunk"], + ["صندوق عقب", "Trunk"], + ["سقف", "Roof"], + ["کلاف", "coil"], + ["ستون", "column"], + ["سینی جلو", "frontTray"], + ["سینی عقب", "backTray"], + ["شاسی جلو", "frontChassis"], + ["شاسی عقب", "backChassis"], + ["رکاب", "carFootrest"], + ["کف اتاق", "carFloor"], +]; + export function normalizePriceDropKey(str: string): string { return String(str ?? "") .toLowerCase() .replace(/[^a-z0-9]/g, ""); } +function normalizePersianLabel(str: string): string { + return String(str ?? "") + .replace(/[يى]/g, "ی") + .replace(/ك/g, "ک") + .replace(/[\u200c\s()\-_]/g, "") + .trim(); +} + export function parsePriceDropNumber(input: number | string): number { if (typeof input === "number" && Number.isFinite(input)) return input; return Number( @@ -191,6 +221,7 @@ export function buildPriceDropCatalogForApi(): Array<{ export function resolvePriceDropPartKeyFromDamagePart(part: { name?: string; catalogKey?: string; + label_fa?: string; }): string | null { const candidates: string[] = []; if (part.catalogKey) { @@ -205,6 +236,11 @@ export function resolvePriceDropPartKeyFromDamagePart(part: { const hit = NORM_TO_PART_KEY.get(norm); if (hit && PRICE_DROP_PART_TABLE[hit]) return hit; } + + const normalizedLabel = normalizePersianLabel(part.label_fa ?? part.name ?? ""); + for (const [label, key] of PERSIAN_LABEL_ALIASES) { + if (normalizedLabel.includes(normalizePersianLabel(label))) return key; + } return null; } diff --git a/src/helpers/expert-reply-pricing.spec.ts b/src/helpers/expert-reply-pricing.spec.ts index 1a9c093..eeb1afd 100644 --- a/src/helpers/expert-reply-pricing.spec.ts +++ b/src/helpers/expert-reply-pricing.spec.ts @@ -128,21 +128,21 @@ describe("getExpertReplyPricingValidationError", () => { it.each([ ["price", "99,999", "parts[0].price"], - ["salary", "10,000,000,001", "parts[0].salary"], + ["salary", "100,000,000,001", "parts[0].salary"], ["totalPayment", "99,999", "parts[0].totalPayment"], - ["daghi.price", "10,000,000,001", "parts[0].daghi.price"], + ["daghi.price", "100,000,000,001", "parts[0].daghi.price"], ])( "enforces the amount range for %s", (field, invalidValue, expectedField) => { const part = { partId: 201, typeOfDamage: TypeOfDamage.Change, - price: "100000", - salary: "100000", - totalPayment: "100000", + price: "1000000", + salary: "1000000", + totalPayment: "1000000", daghi: { option: DaghiOption.RECYCLED_PARTS_VALUE, - price: "100000", + price: "1000000", }, }; if (field === "daghi.price") part.daghi.price = invalidValue; diff --git a/src/helpers/outer-damage-parts-resolve.spec.ts b/src/helpers/outer-damage-parts-resolve.spec.ts index 0d99140..41c68dc 100644 --- a/src/helpers/outer-damage-parts-resolve.spec.ts +++ b/src/helpers/outer-damage-parts-resolve.spec.ts @@ -43,36 +43,36 @@ describe("resolveSelectedPartByPartId", () => { }); it("resolves catalog id from outer catalog when not on claim", () => { - const hit = resolveCatalogPartByPartId(201, ClaimVehicleTypeV2.HATCHBACK); - expect(hit?.id).toBe(201); - expect(hit?.side).toBe("left"); - expect(hit?.catalogKey).toBe("left_backfender"); + const hit = resolveCatalogPartByPartId(36, ClaimVehicleTypeV2.HATCHBACK); + expect(hit?.id).toBe(36); + expect(hit?.side).toBe(""); + expect(hit?.catalogKey).toBe("36"); }); it("resolvePartForExpertReply uses catalog for new expert line", () => { const hit = resolvePartForExpertReply( - 201, + 36, [], ClaimVehicleTypeV2.HATCHBACK, ); - expect(hit?.id).toBe(201); + expect(hit?.id).toBe(36); }); it("sanitize fixes Persian side and re-hydrates from catalog id", () => { const fixed = sanitizeDamageSelectedPartV2( { - id: 201, - name: "گلگیر عقب (چپ)", + id: 36, + name: "گلگير عقب سمت راننده", side: "چپ", label_fa: "", catalogKey: "چپ", }, ClaimVehicleTypeV2.HATCHBACK, ); - expect(fixed.side).toBe("left"); - expect(fixed.name).toBe("backfender"); - expect(fixed.catalogKey).toBe("left_backfender"); - expect(catalogPartIdFromSelectedPart(fixed)).toBe(201); + expect(fixed.side).toBe(""); + expect(fixed.name).toBe("36"); + expect(fixed.catalogKey).toBe("36"); + expect(catalogPartIdFromSelectedPart(fixed)).toBe(36); }); it("internal parts have null catalog partId", () => { @@ -90,30 +90,30 @@ describe("resolveSelectedPartByPartId", () => { const fixed = sanitizeDamageSelectedPartV2( { id: null, - name: "گلگیر عقب (چپ)", + name: "گلگير عقب سمت راننده", side: "internal", - label_fa: "گلگیر عقب (چپ)", + label_fa: "گلگير عقب سمت راننده", }, ClaimVehicleTypeV2.HATCHBACK, ); - expect(fixed.id).toBe(201); - expect(fixed.side).toBe("left"); - expect(fixed.name).toBe("backfender"); - expect(fixed.catalogKey).toBe("left_backfender"); + expect(fixed.id).toBe(36); + expect(fixed.side).toBe(""); + expect(fixed.name).toBe("36"); + expect(fixed.catalogKey).toBe("36"); }); it("price drop resolves catalog id when claim row is corrupt", () => { const corrupt: DamageSelectedPartV2[] = [ { id: null, - name: "گلگیر عقب (چپ)", + name: "گلگير عقب سمت راننده", side: "internal", - label_fa: "گلگیر عقب (چپ)", + label_fa: "گلگير عقب سمت راننده", }, ]; const { coefficients, errors } = buildCoefficientsFromPartSeverities( corrupt, - [{ partId: 201, severity: "Minor" }], + [{ partId: 36, severity: "Minor" }], ClaimVehicleTypeV2.HATCHBACK, ); expect(errors).toHaveLength(0); diff --git a/src/profile/profile.controller.spec.ts b/src/profile/profile.controller.spec.ts index fdccf9f..3b85cb2 100644 --- a/src/profile/profile.controller.spec.ts +++ b/src/profile/profile.controller.spec.ts @@ -1,6 +1,8 @@ import { Test, TestingModule } from "@nestjs/testing"; import { ProfileController } from "./profile.controller"; import { ProfileService } from "./profile.service"; +import { PlatesService } from "src/plates/plates.service"; +import { JwtService } from "@nestjs/jwt"; describe("ProfileController", () => { let controller: ProfileController; @@ -8,7 +10,11 @@ describe("ProfileController", () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [ProfileController], - providers: [ProfileService], + providers: [ + { provide: ProfileService, useValue: {} }, + { provide: PlatesService, useValue: {} }, + { provide: JwtService, useValue: {} }, + ], }).compile(); controller = module.get(ProfileController); diff --git a/src/profile/profile.service.spec.ts b/src/profile/profile.service.spec.ts index 72ef957..34ac887 100644 --- a/src/profile/profile.service.spec.ts +++ b/src/profile/profile.service.spec.ts @@ -1,12 +1,22 @@ import { Test, TestingModule } from "@nestjs/testing"; import { ProfileService } from "./profile.service"; +import { UserDbService } from "src/users/entities/db-service/user.db.service"; describe("ProfileService", () => { let service: ProfileService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [ProfileService], + providers: [ + ProfileService, + { + provide: UserDbService, + useValue: { + findOne: jest.fn(), + findOneAndUpdate: jest.fn(), + }, + }, + ], }).compile(); service = module.get(ProfileService); diff --git a/src/request-management/file-maker-blame-v4-workflow.spec.ts b/src/request-management/file-maker-blame-v4-workflow.spec.ts index 503e506..3e1285a 100644 --- a/src/request-management/file-maker-blame-v4-workflow.spec.ts +++ b/src/request-management/file-maker-blame-v4-workflow.spec.ts @@ -5,6 +5,9 @@ import { RoleEnum } from "src/Types&Enums/role.enum"; import { CreationMethod } from "./entities/schema/request-management.schema"; import { PartyRole } from "./entities/schema/partyRole.enum"; import { RequestManagementService } from "./request-management.service"; +import { CaseStatus } from "src/Types&Enums/blame-request-management/caseStatus.enum"; +import { ClaimCaseStatus } from "src/Types&Enums/claim-request-management/claim-case-status.enum"; +import { ClaimWorkflowStep } from "src/Types&Enums/claim-request-management/claim-workflow-steps.enum"; describe("RequestManagementService V4 FileMaker workflow", () => { it("persists FIRST_INITIAL_FORM after the first party OTP is verified", async () => { @@ -216,4 +219,138 @@ describe("RequestManagementService V4 FileMaker workflow", () => { WorkflowStep.FIRST_VIDEO, ); }); + + it.each([false, true])( + "resumes V4/V5 FileMaker work from the linked claim during partial document upload (approval=%s)", + async (requiresFileMakerApproval) => { + const fileMakerId = new Types.ObjectId(); + const blameId = new Types.ObjectId(); + const claimId = new Types.ObjectId(); + const request = { + _id: blameId, + publicId: "BL-FILE-MAKER-RESUME", + requestNo: "BL-RESUME", + type: BlameRequestType.THIRD_PARTY, + status: CaseStatus.OPEN, + isMadeByFileMaker: true, + initiatedByFieldExpertId: fileMakerId, + requiresFileMakerApproval, + parties: [], + workflow: { + currentStep: WorkflowStep.SECOND_COMPLETED, + nextStep: WorkflowStep.WAITING_FOR_GUILT_DECISION, + completedSteps: [ + WorkflowStep.FIRST_COMPLETED, + WorkflowStep.SECOND_COMPLETED, + ], + }, + }; + const claim = { + _id: claimId, + blameRequestId: blameId, + status: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + workflow: { + currentStep: ClaimWorkflowStep.UPLOAD_REQUIRED_DOCUMENTS, + nextStep: ClaimWorkflowStep.SELECT_OUTER_PARTS, + completedSteps: [ClaimWorkflowStep.CLAIM_CREATED], + }, + }; + const service = + new (RequestManagementService as any)() as RequestManagementService; + (service as any).blameRequestDbService = { + findById: jest.fn().mockResolvedValue(request), + find: jest.fn().mockResolvedValue([request]), + }; + (service as any).claimCaseDbService = { + findOne: jest.fn().mockResolvedValue(claim), + find: jest.fn().mockResolvedValue([claim]), + }; + + const reopened = await service.getMyFileMakerFileDetail( + { sub: String(fileMakerId), role: RoleEnum.FILE_MAKER }, + String(blameId), + ); + + expect(reopened.status).toBe(CaseStatus.OPEN); + expect(reopened.claimStatus).toBe( + ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + ); + expect(reopened.fileMakerResume).toEqual({ + action: "UPLOAD_REQUIRED_DOCUMENTS", + entity: "CLAIM", + entityId: String(claimId), + status: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + currentStep: ClaimWorkflowStep.UPLOAD_REQUIRED_DOCUMENTS, + nextStep: ClaimWorkflowStep.SELECT_OUTER_PARTS, + }); + + const list = await service.getMyFileMakerFiles({ + sub: String(fileMakerId), + role: RoleEnum.FILE_MAKER, + }); + expect(list.list[0]).toEqual( + expect.objectContaining({ + linkedClaimId: String(claimId), + claimStatus: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + fileMakerResume: expect.objectContaining({ + action: "UPLOAD_REQUIRED_DOCUMENTS", + entityId: String(claimId), + }), + }), + ); + }, + ); + + it("does not leave the blame narrative before all required signatures", async () => { + const fileMakerId = new Types.ObjectId(); + const blameId = new Types.ObjectId(); + const claimId = new Types.ObjectId(); + const request = { + _id: blameId, + publicId: "BL-FILE-MAKER-NARRATIVE", + requestNo: "BL-NARRATIVE", + type: BlameRequestType.THIRD_PARTY, + status: CaseStatus.OPEN, + isMadeByFileMaker: true, + initiatedByFieldExpertId: fileMakerId, + parties: [], + workflow: { + currentStep: WorkflowStep.FIRST_DESCRIPTION, + nextStep: WorkflowStep.FIRST_SIGN, + completedSteps: [WorkflowStep.FIRST_VOICE], + }, + }; + const claim = { + _id: claimId, + blameRequestId: blameId, + status: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, + workflow: { + currentStep: ClaimWorkflowStep.UPLOAD_REQUIRED_DOCUMENTS, + nextStep: ClaimWorkflowStep.SELECT_OUTER_PARTS, + completedSteps: [ClaimWorkflowStep.CLAIM_CREATED], + }, + }; + const service = + new (RequestManagementService as any)() as RequestManagementService; + (service as any).blameRequestDbService = { + findById: jest.fn().mockResolvedValue(request), + }; + (service as any).claimCaseDbService = { + findOne: jest.fn().mockResolvedValue(claim), + }; + + const reopened = await service.getMyFileMakerFileDetail( + { sub: String(fileMakerId), role: RoleEnum.FILE_MAKER }, + String(blameId), + ); + + expect(reopened.fileMakerResume).toEqual( + expect.objectContaining({ + action: "CONTINUE_BLAME", + entity: "BLAME", + entityId: String(blameId), + currentStep: WorkflowStep.FIRST_DESCRIPTION, + }), + ); + }); }); diff --git a/src/request-management/file-maker-blame-v4.controller.ts b/src/request-management/file-maker-blame-v4.controller.ts index cf96baa..59d30e4 100644 --- a/src/request-management/file-maker-blame-v4.controller.ts +++ b/src/request-management/file-maker-blame-v4.controller.ts @@ -5,6 +5,7 @@ import { Get, Param, Post, + Query, Put, UploadedFile, UseGuards, @@ -44,6 +45,7 @@ import { UploadRequiredDocumentV2ResponseDto, } from "src/claim-request-management/dto/upload-document-v2.dto"; import { GetCaptureRequirementsV2ResponseDto } from "src/claim-request-management/dto/capture-requirements-v2.dto"; +import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; /** * V4 FileMaker flow — first half of the split blame workflow. @@ -96,10 +98,13 @@ export class FileMakerBlameV4Controller { @Get("my-files") @ApiOperation({ summary: "List all blame files created by this FileMaker", - description: "Returns all V4 FileMaker blame files initiated by the authenticated FileMaker.", + description: "Returns V4 FileMaker blame files using the shared search, sort, filter, and pagination query contract.", }) - async getMyFiles(@CurrentUser() fileMaker: any) { - return this.requestManagementService.getMyFileMakerFiles(fileMaker); + async getMyFiles( + @CurrentUser() fileMaker: any, + @Query() query: ListQueryV2Dto, + ) { + return this.requestManagementService.getMyFileMakerFiles(fileMaker, query); } @Get("my-files/:requestId") diff --git a/src/request-management/file-maker-blame-v5.controller.ts b/src/request-management/file-maker-blame-v5.controller.ts index 626cc67..d2c0dbf 100644 --- a/src/request-management/file-maker-blame-v5.controller.ts +++ b/src/request-management/file-maker-blame-v5.controller.ts @@ -5,6 +5,7 @@ import { Get, Param, Post, + Query, Put, UploadedFile, UseGuards, @@ -44,6 +45,7 @@ import { UploadRequiredDocumentV2ResponseDto, } from "src/claim-request-management/dto/upload-document-v2.dto"; import { GetCaptureRequirementsV2ResponseDto } from "src/claim-request-management/dto/capture-requirements-v2.dto"; +import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; /** * V5 FileMaker flow — identical to V4 but under the /v5/ prefix. @@ -95,10 +97,13 @@ export class FileMakerBlameV5Controller { @Get("my-files") @ApiOperation({ summary: "List all blame files created by this FileMaker", - description: "Returns all V5 FileMaker blame files initiated by the authenticated FileMaker.", + description: "Returns V5 FileMaker blame files using the shared search, sort, filter, and pagination query contract.", }) - async getMyFiles(@CurrentUser() fileMaker: any) { - return this.requestManagementService.getMyFileMakerFiles(fileMaker); + async getMyFiles( + @CurrentUser() fileMaker: any, + @Query() query: ListQueryV2Dto, + ) { + return this.requestManagementService.getMyFileMakerFiles(fileMaker, query); } @Get("my-files/:requestId") diff --git a/src/request-management/file-reviewer-blame-v4.controller.ts b/src/request-management/file-reviewer-blame-v4.controller.ts index 65dec6d..b5a71ea 100644 --- a/src/request-management/file-reviewer-blame-v4.controller.ts +++ b/src/request-management/file-reviewer-blame-v4.controller.ts @@ -10,6 +10,7 @@ import { Patch, Post, Put, + Query, UploadedFile, UseGuards, UseInterceptors, @@ -48,6 +49,7 @@ import { CapturePartV2Dto, CapturePartV2ResponseDto, } from "src/claim-request-management/dto/capture-part-v2.dto"; +import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; import { GetCaptureRequirementsV2ResponseDto } from "src/claim-request-management/dto/capture-requirements-v2.dto"; /** @@ -88,10 +90,16 @@ export class FileReviewerBlameV4Controller { @ApiOperation({ summary: "List available and assigned FileMaker blame files", description: - "Returns V4 FileMaker blame files in this reviewer's insurer: sealed files that are still available to claim, plus files already assigned to the authenticated FileReviewer.", + "Returns V4 FileMaker blame files in this reviewer's insurer using the shared search, sort, filter, and pagination query contract: sealed files that are still available to claim, plus files already assigned to the authenticated FileReviewer.", }) - async getMyFiles(@CurrentUser() fileReviewer: any) { - return this.requestManagementService.getMyFileReviewerFiles(fileReviewer); + async getMyFiles( + @CurrentUser() fileReviewer: any, + @Query() query: ListQueryV2Dto, + ) { + return this.requestManagementService.getMyFileReviewerFiles( + fileReviewer, + query, + ); } @Get("my-files/:requestId") diff --git a/src/request-management/file-reviewer-blame-v5.controller.ts b/src/request-management/file-reviewer-blame-v5.controller.ts index 5c76cf0..329eaf1 100644 --- a/src/request-management/file-reviewer-blame-v5.controller.ts +++ b/src/request-management/file-reviewer-blame-v5.controller.ts @@ -9,6 +9,7 @@ import { Patch, Post, Put, + Query, UploadedFile, UseGuards, UseInterceptors, @@ -48,6 +49,7 @@ import { CapturePartV2ResponseDto, } from "src/claim-request-management/dto/capture-part-v2.dto"; import { GetCaptureRequirementsV2ResponseDto } from "src/claim-request-management/dto/capture-requirements-v2.dto"; +import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; /** * V5 FileReviewer flow — same as V4 except after the damage expert completes @@ -86,10 +88,16 @@ export class FileReviewerBlameV5Controller { @ApiOperation({ summary: "List available and assigned FileMaker blame files", description: - "Returns V5 FileMaker blame files in this reviewer's insurer: sealed files that are still available to claim, plus files already assigned to the authenticated FileReviewer.", + "Returns V5 FileMaker blame files in this reviewer's insurer using the shared search, sort, filter, and pagination query contract: sealed files that are still available to claim, plus files already assigned to the authenticated FileReviewer.", }) - async getMyFiles(@CurrentUser() fileReviewer: any) { - return this.requestManagementService.getMyFileReviewerFiles(fileReviewer); + async getMyFiles( + @CurrentUser() fileReviewer: any, + @Query() query: ListQueryV2Dto, + ) { + return this.requestManagementService.getMyFileReviewerFiles( + fileReviewer, + query, + ); } @Get("my-files/:requestId") diff --git a/src/request-management/inquiry-participant-resolver.spec.ts b/src/request-management/inquiry-participant-resolver.spec.ts index 89ba35a..20553b9 100644 --- a/src/request-management/inquiry-participant-resolver.spec.ts +++ b/src/request-management/inquiry-participant-resolver.spec.ts @@ -74,7 +74,7 @@ describe("inquiry participant resolver", () => { }, vin: "NAAM01E15HK123456", }), - ).toThrow("previousPolicyholderNationalCode"); + ).toThrow("کد ملی بیمه‌گذار قبلی"); }); it("defaults an omitted registration state to CURRENT", () => { @@ -102,7 +102,7 @@ describe("inquiry participant resolver", () => { }, vin: "TOO-SHORT", }), - ).toThrow("vehicle.vin must contain exactly 17 characters."); + ).toThrow("شماره شاسی (VIN) باید دقیقاً ۱۷ کاراکتر باشد."); }); it("rejects an incomplete current plate", () => { @@ -115,7 +115,7 @@ describe("inquiry participant resolver", () => { ir: "22", }, }), - ).toThrow("vehicle.currentPlate.centerDigits is required."); + ).toThrow("سه رقم میانی پلاک در پلاک فعلی الزامی است."); }); it("rejects invalid vehicle choice values", () => { @@ -129,7 +129,7 @@ describe("inquiry participant resolver", () => { ir: "22", }, }), - ).toThrow("vehicle.registrationState must be CURRENT or RECENTLY_TRANSFERRED."); + ).toThrow("وضعیت پلاک خودرو باید «فعلی» یا «تازه تعویض‌شده» باشد."); expect(() => resolveInquiryVehicle({ @@ -141,7 +141,7 @@ describe("inquiry participant resolver", () => { }, isNewCar: "false" as any, }), - ).toThrow("vehicle.isNewCar must be a boolean."); + ).toThrow("وضعیت صفر بودن خودرو نامعتبر است."); }); it("rejects a previous policyholder national code for a current registration", () => { @@ -647,7 +647,7 @@ describe("inquiry participant resolver", () => { expect(() => resolveInquiryParticipants(BlameRequestType.THIRD_PARTY, input as any), - ).toThrow("THIRD_PARTY_POLICYHOLDER does not support the unknown option."); + ).toThrow("ثبت بیمه‌گذار شخص ثالث به‌صورت نامشخص امکان‌پذیر نیست."); }); it("strips the removed unknown field from historical participant output", () => { diff --git a/src/request-management/inquiry-participant-resolver.ts b/src/request-management/inquiry-participant-resolver.ts index 15b5013..550a352 100644 --- a/src/request-management/inquiry-participant-resolver.ts +++ b/src/request-management/inquiry-participant-resolver.ts @@ -60,6 +60,20 @@ export interface InquirySubjects { driverNationalCode: string; } +const PARTICIPANT_ROLE_LABELS: Record = { + [InquiryParticipantRole.DRIVER]: "راننده", + [InquiryParticipantRole.VEHICLE_OWNER]: "مالک خودرو", + [InquiryParticipantRole.THIRD_PARTY_POLICYHOLDER]: "بیمه‌گذار شخص ثالث", + [InquiryParticipantRole.CAR_BODY_POLICYHOLDER]: "بیمه‌گذار بدنه", +}; + +const PLATE_FIELD_LABELS = { + leftDigits: "دو رقم سمت چپ پلاک", + centerAlphabet: "حرف پلاک", + centerDigits: "سه رقم میانی پلاک", + ir: "کد ایران پلاک", +} as const; + /** * The single routing seam for external inquiries. Policy checks belong to * their policyholder, Sheba belongs to the vehicle owner, and licence data @@ -70,7 +84,7 @@ export function resolveInquirySubjects( ): InquirySubjects { if (!submission.vehicleOwner) { throw new BadRequestException( - "Vehicle owner identity is required for Sheba validation.", + "اطلاعات هویتی مالک خودرو برای استعلام شبا الزامی است.", ); } return { @@ -102,7 +116,11 @@ function assertCompleteInquiryPlate( "ir", ] as const) { if (plate?.[field] == null || String(plate[field]).trim() === "") { - throw new BadRequestException(`${path}.${field} is required.`); + const plateLabel = + path === "vehicle.currentPlate" ? "پلاک فعلی" : "پلاک قبلی"; + throw new BadRequestException( + `${PLATE_FIELD_LABELS[field]} در ${plateLabel} الزامی است.`, + ); } } } @@ -171,21 +189,21 @@ function requiredIdentity( ): ResolvedInquiryParticipant { if (Object.prototype.hasOwnProperty.call(input, "phoneNumber")) { throw new BadRequestException( - `${role} does not accept phoneNumber; phone numbers are collected separately from inquiry identity.`, + `شماره همراه ${PARTICIPANT_ROLE_LABELS[role]} باید جدا از اطلاعات هویتی استعلام ارسال شود.`, ); } const nationalCode = String(input.nationalCode ?? "").trim(); const birthday = String(input.birthday ?? "").trim(); if (!nationalCode || !birthday) { throw new BadRequestException( - `${role} requires nationalCode and birthday.`, + `کد ملی و تاریخ تولد ${PARTICIPANT_ROLE_LABELS[role]} الزامی است.`, ); } if ( role === InquiryParticipantRole.DRIVER && typeof input.hasDrivingLicense !== "boolean" ) { - throw new BadRequestException("DRIVER requires hasDrivingLicense."); + throw new BadRequestException("وضعیت داشتن گواهینامه راننده الزامی است."); } if ( role === InquiryParticipantRole.DRIVER && @@ -194,7 +212,7 @@ function requiredIdentity( !String(input.licenseType ?? "").trim()) ) { throw new BadRequestException( - "DRIVER requires licenseNumber and licenseType when hasDrivingLicense is true.", + "شماره و نوع گواهینامه برای راننده دارای گواهینامه الزامی است.", ); } return { @@ -220,7 +238,7 @@ export function resolveInquiryParticipants( ); if (!hasRoleCompleteInput) { throw new BadRequestException( - "driver, vehicleOwner, and thirdPartyPolicyholder are required in the structured inquiry format.", + "اطلاعات راننده، مالک خودرو و بیمه‌گذار شخص ثالث برای استعلام الزامی است.", ); } if ( @@ -228,7 +246,7 @@ export function resolveInquiryParticipants( input.carBodyPolicyholder != null ) { throw new BadRequestException( - "CAR_BODY_POLICYHOLDER is not allowed for a THIRD_PARTY case.", + "بیمه‌گذار بدنه برای پرونده شخص ثالث قابل ثبت نیست.", ); } @@ -249,19 +267,23 @@ export function resolveInquiryParticipants( if (existing) return existing; if (resolving.has(role)) { throw new BadRequestException( - "Participant sameAs references cannot be circular.", + "ارتباط اشخاص یکسان در اطلاعات استعلام نامعتبر است.", ); } const value = input[ROLE_FIELDS[role]] as | InquiryParticipantInputDto | undefined; - if (!value) throw new BadRequestException(`${role} is required.`); + if (!value) { + throw new BadRequestException( + `اطلاعات ${PARTICIPANT_ROLE_LABELS[role]} الزامی است.`, + ); + } resolving.add(role); let participantId: string; if (Object.prototype.hasOwnProperty.call(value, "unknown")) { throw new BadRequestException( - `${role} does not support the unknown option.`, + `ثبت ${PARTICIPANT_ROLE_LABELS[role]} به‌صورت نامشخص امکان‌پذیر نیست.`, ); } else if (value.sameAs) { const hasPersonSpecificFields = Object.entries(value).some( @@ -269,7 +291,7 @@ export function resolveInquiryParticipants( ); if (hasPersonSpecificFields) { throw new BadRequestException( - `${role} must contain either sameAs or identity fields, not both.`, + `برای ${PARTICIPANT_ROLE_LABELS[role]} باید فقط ارتباط با شخص دیگر یا اطلاعات هویتی مستقل ارسال شود.`, ); } participantId = resolveRole(value.sameAs); @@ -280,7 +302,7 @@ export function resolveInquiryParticipants( ); if (duplicate) { throw new BadRequestException( - `${role} duplicates an existing nationalCode; use sameAs instead.`, + `کد ملی ${PARTICIPANT_ROLE_LABELS[role]} تکراری است؛ ارتباط با شخص ثبت‌شده را انتخاب کنید.`, ); } participants.set(participant.participantId, participant); @@ -317,29 +339,29 @@ export function resolveInquiryVehicle( input: InquiryVehicleInputDto, ): ResolvedInquiryVehicle { if (!input) { - throw new BadRequestException("vehicle is required."); + throw new BadRequestException("اطلاعات خودرو برای استعلام الزامی است."); } const registrationState = input.registrationState ?? VehicleRegistrationState.CURRENT; if (!Object.values(VehicleRegistrationState).includes(registrationState)) { throw new BadRequestException( - "vehicle.registrationState must be CURRENT or RECENTLY_TRANSFERRED.", + "وضعیت پلاک خودرو باید «فعلی» یا «تازه تعویض‌شده» باشد.", ); } if (input.isNewCar != null && typeof input.isNewCar !== "boolean") { - throw new BadRequestException("vehicle.isNewCar must be a boolean."); + throw new BadRequestException("وضعیت صفر بودن خودرو نامعتبر است."); } const previousPolicyholderNationalCode = String( input.previousPolicyholderNationalCode ?? "", ).trim(); if (!input.currentPlate) { - throw new BadRequestException("vehicle.currentPlate is required."); + throw new BadRequestException("پلاک فعلی خودرو برای استعلام الزامی است."); } assertCompleteInquiryPlate(input.currentPlate, "vehicle.currentPlate"); const vin = String(input.vin ?? "").trim(); if (vin && vin.length !== 17) { throw new BadRequestException( - "vehicle.vin must contain exactly 17 characters.", + "شماره شاسی (VIN) باید دقیقاً ۱۷ کاراکتر باشد.", ); } if ( @@ -347,7 +369,7 @@ export function resolveInquiryVehicle( (!input.previousPlate || !vin || !previousPolicyholderNationalCode) ) { throw new BadRequestException( - "RECENTLY_TRANSFERRED requires previousPlate, vin, and previousPolicyholderNationalCode.", + "برای خودروی تازه تعویض‌پلاک‌شده، پلاک قبلی، شماره شاسی (VIN) و کد ملی بیمه‌گذار قبلی الزامی است.", ); } if ( @@ -355,7 +377,7 @@ export function resolveInquiryVehicle( (input.previousPlate || input.previousPolicyholderNationalCode != null) ) { throw new BadRequestException( - "previousPlate and previousPolicyholderNationalCode are only allowed for RECENTLY_TRANSFERRED vehicles.", + "پلاک و کد ملی بیمه‌گذار قبلی فقط برای خودروی تازه تعویض‌پلاک‌شده قابل ثبت است.", ); } if (input.previousPlate) { @@ -442,7 +464,7 @@ function assertStructuredInquiryInput(input: Record): void { ); if (legacyFields.length > 0) { throw new BadRequestException( - `Legacy inquiry fields are not accepted: ${legacyFields.join(", ")}. Use driver, vehicleOwner, thirdPartyPolicyholder, carBodyPolicyholder, and vehicle.`, + "ساختار قدیمی اطلاعات استعلام پذیرفته نمی‌شود؛ اطلاعات اشخاص و خودرو را در بخش‌های جدید ارسال کنید.", ); } } @@ -466,7 +488,7 @@ export function assertPreviousPlateInquiryMatchesVin( .filter(Boolean); if (!expected || !candidates.includes(expected)) { throw new BadRequestException( - "Previous-plate inquiry does not match the submitted VIN/chassis; manual review is required.", + "نتیجه استعلام پلاک قبلی با شماره شاسی (VIN) واردشده مطابقت ندارد و پرونده نیازمند بررسی دستی است.", ); } } @@ -540,7 +562,7 @@ export async function runPlateInquiryWithFallback(options: { }); if (!isLast) continue; const error = new BadRequestException( - "No current usable policy was found for the submitted vehicle identifiers.", + "بیمه‌نامه معتبر و فعالی مطابق مشخصات خودرو و کد ملی واردشده یافت نشد.", ) as BadRequestException & { attempts?: typeof attempts }; error.attempts = attempts; throw error; @@ -592,7 +614,12 @@ export async function runPlateInquiryWithFallback(options: { } } - throw lastError ?? new BadRequestException("Inquiry failed for all plates."); + throw ( + lastError ?? + new BadRequestException( + "برای هیچ‌یک از پلاک‌های ثبت‌شده نتیجه معتبری یافت نشد.", + ) + ); } export function normalizeInquirySubmission>( @@ -610,7 +637,7 @@ export function normalizeInquirySubmission>( ); if (!driver || !thirdPartyPolicyholder) { throw new BadRequestException( - "Driver and third-party policyholder identities are required.", + "اطلاعات هویتی راننده و بیمه‌گذار شخص ثالث الزامی است.", ); } const vehicleOwner = participantForRole( diff --git a/src/request-management/inquiry-refresh.service.ts b/src/request-management/inquiry-refresh.service.ts index a6e73bb..40d669f 100644 --- a/src/request-management/inquiry-refresh.service.ts +++ b/src/request-management/inquiry-refresh.service.ts @@ -17,6 +17,7 @@ import { ReinquiryInquiriesResponseDto, ReinquiryPartyResultDto, } from "./dto/reinquiry-inquiries.dto"; +import { getInquiryErrorMessage } from "src/common/utils/inquiry-error"; type PlateParts = { leftDigits: number; @@ -48,7 +49,7 @@ export class InquiryRefreshService { if (!body.publicId && !body.blameRequestId && limit === 0) { throw new BadRequestException( - "Provide publicId, blameRequestId, or limit for bulk refresh.", + "برای اجرای مجدد استعلام، شناسه عمومی پرونده، شناسه پرونده یا تعداد پرونده‌ها را وارد کنید.", ); } @@ -58,14 +59,16 @@ export class InquiryRefreshService { if (body.publicId) filter.publicId = body.publicId; if (body.blameRequestId) { if (!Types.ObjectId.isValid(body.blameRequestId)) { - throw new BadRequestException("Invalid blameRequestId"); + throw new BadRequestException("شناسه پرونده معتبر نیست."); } filter._id = new Types.ObjectId(body.blameRequestId); } let docs = await this.blameRequestDbService.find(filter, { lean: true }); if (!docs.length) { - throw new NotFoundException("No matching blame cases found"); + throw new NotFoundException( + "پرونده تقصیر مطابق اطلاعات واردشده یافت نشد.", + ); } docs = limit > 0 ? docs.slice(0, limit) : docs; @@ -111,8 +114,8 @@ export class InquiryRefreshService { if (index === -1) { partyResults.push({ role, - thirdParty: { ok: false, message: "party not found" }, - person: { ok: false, message: "party not found" }, + thirdParty: { ok: false, message: "طرف پرونده یافت نشد." }, + person: { ok: false, message: "طرف پرونده یافت نشد." }, }); continue; } @@ -150,7 +153,9 @@ export class InquiryRefreshService { blameRequestId: new Types.ObjectId(String(doc._id)), }); claimsUpdated = linkedClaims.length; - this.logger.log(`[dry-run] ${label} would update blame + ${claimsUpdated} claim(s)`); + this.logger.log( + `[dry-run] ${label} would update blame + ${claimsUpdated} claim(s)`, + ); } return { @@ -208,9 +213,7 @@ export class InquiryRefreshService { plateId: party?.vehicle?.plateId, ...(plate ? { plate } : {}), ...(nationalCode ? { nationalCode } : {}), - ...(birthDate !== null && birthDate !== undefined - ? { birthDate } - : {}), + ...(birthDate !== null && birthDate !== undefined ? { birthDate } : {}), }; if (dryRun) { @@ -223,8 +226,8 @@ export class InquiryRefreshService { result.thirdParty = { ok: false, message: !plate - ? "plate not found on party" - : "nationalCodeOfInsurer/nationalCodeOfDriver missing", + ? "پلاک برای این طرف پرونده ثبت نشده است." + : "کد ملی برای این طرف پرونده ثبت نشده است.", }; } else { await this.waitForRateLimit(); @@ -249,7 +252,9 @@ export class InquiryRefreshService { inquiriesChanged = true; result.thirdParty = { ok: false, - message: inquiry.mapped.Error.Message || "third-party inquiry error", + message: + inquiry.mapped.Error.Message || + getInquiryErrorMessage(inquiry.mapped, "thirdPartyPlate"), }; } else { nextParty = this.applyThirdPartyToParty( @@ -292,11 +297,18 @@ export class InquiryRefreshService { } } } catch (error: any) { - this.recordPartyInquiry(inquiries, "thirdParty", role, false, {}, error); + this.recordPartyInquiry( + inquiries, + "thirdParty", + role, + false, + {}, + error, + ); inquiriesChanged = true; result.thirdParty = { ok: false, - message: error?.message || String(error), + message: getInquiryErrorMessage(error, "thirdPartyPlate"), }; } } @@ -305,8 +317,8 @@ export class InquiryRefreshService { result.person = { ok: false, message: !nationalCode - ? "nationalCodeOfInsurer/nationalCodeOfDriver missing" - : "insurerBirthday/driverBirthday missing", + ? "کد ملی برای این طرف پرونده ثبت نشده است." + : "تاریخ تولد برای این طرف پرونده ثبت نشده است.", }; } else { await this.waitForRateLimit(); @@ -333,7 +345,7 @@ export class InquiryRefreshService { inquiriesChanged = true; result.person = { ok: false, - message: error?.message || String(error), + message: getInquiryErrorMessage(error, "personalIdentity"), }; } } @@ -477,12 +489,14 @@ export class InquiryRefreshService { ): Promise { const blameDoc = await this.blameRequestDbService.findById(blameId); if (!blameDoc) { - throw new NotFoundException(`Blame case ${blameId} not found`); + throw new NotFoundException("پرونده تقصیر یافت نشد."); } for (const role of roles) { const memParty = updatedParties.find((party) => party?.role === role); - const docIdx = blameDoc.parties.findIndex((party) => party?.role === role); + const docIdx = blameDoc.parties.findIndex( + (party) => party?.role === role, + ); if (!memParty || docIdx === -1) continue; const party = blameDoc.parties[docIdx]; @@ -514,7 +528,9 @@ export class InquiryRefreshService { party.insurance.company = memParty.insurance.company; } if (memParty.insurance.financialCeiling !== undefined) { - party.insurance.financialCeiling = String(memParty.insurance.financialCeiling); + party.insurance.financialCeiling = String( + memParty.insurance.financialCeiling, + ); } if (memParty.insurance.startDate !== undefined) { party.insurance.startDate = memParty.insurance.startDate; @@ -541,7 +557,8 @@ export class InquiryRefreshService { }); const inquiryPatch: Record = {}; - if (inquiries.thirdParty) inquiryPatch["inquiries.thirdParty"] = inquiries.thirdParty; + if (inquiries.thirdParty) + inquiryPatch["inquiries.thirdParty"] = inquiries.thirdParty; if (inquiries.person) inquiryPatch["inquiries.person"] = inquiries.person; if (!Object.keys(inquiryPatch).length) return 0; @@ -590,14 +607,16 @@ export class InquiryRefreshService { private normalizeInquiryError(error: any): Record { return { - message: error?.message || String(error), + message: getInquiryErrorMessage(error, "generic"), status: error?.status ?? error?.response?.status, data: error?.data ?? error?.response?.data, }; } private resolvePartyPlate(party: Record): PlateParts | null { - const fromPlateId = this.parsePlateFromCompactString(party?.vehicle?.plateId); + const fromPlateId = this.parsePlateFromCompactString( + party?.vehicle?.plateId, + ); if (fromPlateId) return fromPlateId; const candidates = [ @@ -608,14 +627,24 @@ export class InquiryRefreshService { ].filter(Boolean); for (const candidate of candidates) { - const leftDigits = this.firstPresent(candidate.Plk1, candidate.platePartOne); + const leftDigits = this.firstPresent( + candidate.Plk1, + candidate.platePartOne, + ); const centerAlphabet = this.firstPresent( candidate.plateLetterid, candidate.plateLetterId, candidate.plateLetterTitle, ); - const centerDigits = this.firstPresent(candidate.Plk3, candidate.platePartThree); - const ir = this.firstPresent(candidate.PlkSrl, candidate.plkSrl, candidate.plateSerialNumber); + const centerDigits = this.firstPresent( + candidate.Plk3, + candidate.platePartThree, + ); + const ir = this.firstPresent( + candidate.PlkSrl, + candidate.plkSrl, + candidate.plateSerialNumber, + ); if ( leftDigits !== undefined && @@ -623,7 +652,9 @@ export class InquiryRefreshService { centerDigits !== undefined && ir !== undefined ) { - const plateLetter = this.plateNormalizer.normalizePlateText(String(centerAlphabet)); + const plateLetter = this.plateNormalizer.normalizePlateText( + String(centerAlphabet), + ); const parsed: PlateParts = { leftDigits: Number(leftDigits), centerAlphabet: plateLetter, @@ -653,7 +684,9 @@ export class InquiryRefreshService { const ir = Number(irRaw); const leftDigits = Number(leftRaw); const centerDigits = Number(centerRaw); - const centerAlphabet = this.plateNormalizer.normalizePlateText(String(alphaRaw || "")); + const centerAlphabet = this.plateNormalizer.normalizePlateText( + String(alphaRaw || ""), + ); if ( !Number.isFinite(ir) || !Number.isFinite(leftDigits) || @@ -685,6 +718,8 @@ export class InquiryRefreshService { } private firstPresent(...values: unknown[]): unknown { - return values.find((value) => value !== undefined && value !== null && value !== ""); + return values.find( + (value) => value !== undefined && value !== null && value !== "", + ); } } diff --git a/src/request-management/request-management.damaged-inquiry.spec.ts b/src/request-management/request-management.damaged-inquiry.spec.ts index cb107f0..a78d5bd 100644 --- a/src/request-management/request-management.damaged-inquiry.spec.ts +++ b/src/request-management/request-management.damaged-inquiry.spec.ts @@ -15,12 +15,8 @@ describe("damaged-party inquiry requirements", () => { const service = getService(); await expect( - (service as any).validateShebaV3( - undefined, - "0012345678", - "client-id", - ), - ).rejects.toThrow("sheba is required for the damaged party."); + (service as any).validateShebaV3(undefined, "0012345678", "client-id"), + ).rejects.toThrow("شماره شبا برای طرف زیان‌دیده الزامی است."); expect( (service as any).sandHubService.getShebaValidation, ).not.toHaveBeenCalled(); diff --git a/src/request-management/request-management.file-reviewer.spec.ts b/src/request-management/request-management.file-reviewer.spec.ts index df1fdf5..153b3ac 100644 --- a/src/request-management/request-management.file-reviewer.spec.ts +++ b/src/request-management/request-management.file-reviewer.spec.ts @@ -14,6 +14,7 @@ describe("RequestManagementService FileReviewer inbox", () => { publicId: "BLM-OPEN", type: "THIRD_PARTY", status: "WAITING_FOR_FILE_REVIEWER", + createdAt: new Date("2026-01-02T00:00:00.000Z"), isMadeByFileMaker: true, expertInitiated: true, creationMethod: "IN_PERSON", @@ -34,6 +35,9 @@ describe("RequestManagementService FileReviewer inbox", () => { undefined, blameRequestDbService, ) as RequestManagementService; + (service as any).claimCaseDbService = { + find: jest.fn().mockResolvedValue([]), + }; return { service, blameRequestDbService }; } @@ -46,7 +50,7 @@ describe("RequestManagementService FileReviewer inbox", () => { clientKey: String(clientId), }); - expect(result).toEqual([ + expect(result.list).toEqual([ expect.objectContaining({ _id: sealedFile._id, publicId: "BLM-OPEN" }), ]); expect(blameRequestDbService.find).toHaveBeenCalledWith( @@ -82,7 +86,34 @@ describe("RequestManagementService FileReviewer inbox", () => { clientKey: String(clientId), }); - expect(result).toEqual([]); + expect(result.list).toEqual([]); + }); + + it("sorts and paginates the reviewer inbox with the shared list contract", async () => { + const olderFile = { + ...sealedFile, + _id: new Types.ObjectId(), + publicId: "BLM-OLDER", + createdAt: new Date("2026-01-01T00:00:00.000Z"), + }; + const { service } = createService([olderFile, sealedFile]); + + const result = await service.getMyFileReviewerFiles( + { + sub: String(reviewerId), + role: RoleEnum.FILE_REVIEWER, + clientKey: String(clientId), + }, + { page: 1, limit: 1, sortBy: "createdAt", sortOrder: "desc" }, + ); + + expect(result).toEqual( + expect.objectContaining({ total: 2, page: 1, limit: 1, totalPages: 2 }), + ); + expect(result.list).toHaveLength(1); + expect(result.list[0]).toEqual( + expect.objectContaining({ publicId: "BLM-OPEN" }), + ); }); it("does not expose an open file's details to a reviewer from another tenant", async () => { diff --git a/src/request-management/request-management.service.ts b/src/request-management/request-management.service.ts index 79093e2..c3db7bf 100644 --- a/src/request-management/request-management.service.ts +++ b/src/request-management/request-management.service.ts @@ -60,9 +60,14 @@ import { FileMakerDbService } from "src/users/entities/db-service/file-maker.db. import { FileReviewerDbService } from "src/users/entities/db-service/file-reviewer.db.service"; import { isOtpExpiryActive } from "src/helpers/user-otp-expiry"; import { parseIranLocalDateTime } from "src/helpers/iran-datetime"; -import { applyListQueryV2 } from "src/helpers/list-query-v2"; +import { + applyListQueryV2, + isInListDateRange, + parseListDateRange, +} from "src/helpers/list-query-v2"; import { ListQueryV2Dto } from "src/common/dto/list-query-v2.dto"; import { GetUserBlameListV2ResponseDto } from "src/request-management/dto/blame-list-user-v2.dto"; +import { resolveUnifiedFileStatus } from "src/helpers/unified-file-status"; import { AutoCloseRequestService } from "src/utils/cron/cron.service"; import { SmsOrchestrationService } from "src/sms-orchestration/sms-orchestration.service"; import { @@ -138,6 +143,9 @@ import { runPlateInquiryWithFallback, sanitizeStoredInquiryParticipants, } from "./inquiry-participant-resolver"; +import { + getInquiryErrorMessage, +} from "src/common/utils/inquiry-error"; /** * Formats a compact Jalali date (number or string like 13780624) as YYYY/MM/DD. @@ -154,6 +162,18 @@ function formatJalaliCompact( return String(raw); } +type FileMakerResumeProjection = { + action: + | "CONTINUE_BLAME" + | "UPLOAD_REQUIRED_DOCUMENTS" + | "WAIT_FOR_FILE_REVIEWER"; + entity: "BLAME" | "CLAIM"; + entityId: string; + status: string; + currentStep: string; + nextStep?: string; +}; + @Injectable() export class RequestManagementService { private readonly logger = new Logger(RequestManagementService.name); @@ -183,10 +203,16 @@ export class RequestManagementService { } /** Keep eligibility rejections distinct from an unavailable CAR_BODY provider. */ - private throwCarBodyInquiryFailure(err: unknown): never { - if (err instanceof ForbiddenException) throw err; + private throwCarBodyInquiryFailure( + err: unknown, + context: "carBodyPlate" | "carBodyVin" = "carBodyPlate", + ): never { + const message = getInquiryErrorMessage(err, context); + if (err instanceof ForbiddenException) { + throw new ForbiddenException(message); + } - throw new HttpException("Car body inquiry failed", HttpStatus.BAD_REQUEST); + throw new HttpException(message, HttpStatus.BAD_REQUEST); } /** @@ -200,7 +226,7 @@ export class RequestManagementService { const configuredCode = Number(process.env.CLIENT_ID); if (!Number.isFinite(configuredCode)) { throw new InternalServerErrorException( - "CLIENT_ID must be configured to save CAR_BODY policy ownership.", + "تنظیمات شرکت بیمه برای ذخیره بیمه‌نامه بدنه کامل نیست.", ); } @@ -220,7 +246,7 @@ export class RequestManagementService { const clientId = (client as any)?._id ?? (client as any)?._doc?._id; if (!clientId) { throw new InternalServerErrorException( - "Configured CAR_BODY insurer client could not be resolved.", + "شرکت بیمه تنظیم‌شده برای بیمه‌نامه بدنه قابل شناسایی نیست.", ); } return clientId; @@ -394,7 +420,7 @@ export class RequestManagementService { const policyholderNationalCode = subjects.carBodyPolicyNationalCode; if (!policyholderNationalCode) { throw new BadRequestException( - "Car-body policyholder identity is required for a CAR_BODY inquiry.", + "اطلاعات بیمه‌گذار برای استعلام بیمه بدنه الزامی است.", ); } const result = await runPlateInquiryWithFallback({ @@ -434,7 +460,7 @@ export class RequestManagementService { ).trim(); if (!chassis) { throw new BadRequestException( - "vehicle.vin is required for a VIN/chassis inquiry.", + "شماره شاسی (VIN) برای استعلام خودرو الزامی است.", ); } const subjects = resolveInquirySubjects(submission); @@ -462,7 +488,7 @@ export class RequestManagementService { for (const participant of participants) { if (!participant.nationalCode || !participant.birthday) { throw new BadRequestException( - `${participant.participantId} requires nationalCode and birthday for personal inquiry.`, + "کد ملی و تاریخ تولد برای استعلام هویت الزامی است.", ); } try { @@ -486,7 +512,7 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `${participant.participantId} personal identity inquiry failed: ${error?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(error, "personalIdentity"), ); } } @@ -512,7 +538,7 @@ export class RequestManagementService { const plate = submission.vehicle?.currentPlate ?? submission.dto.plate; if (!plate) { throw new BadRequestException( - "Current plate is required for vehicle ownership inquiry.", + "پلاک فعلی برای استعلام مالکیت خودرو الزامی است.", ); } try { @@ -536,7 +562,7 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `Vehicle ownership inquiry failed: ${error?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(error, "carOwnership"), ); } } @@ -558,7 +584,7 @@ export class RequestManagementService { } if (!submission.driver.licenseNumber) { throw new BadRequestException( - "Driver licence number is required when the driver has a licence.", + "شماره گواهینامه راننده برای استعلام گواهینامه الزامی است.", ); } try { @@ -582,7 +608,7 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `Driver licence inquiry failed: ${error?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(error, "drivingLicense"), ); } } @@ -683,7 +709,7 @@ export class RequestManagementService { private normalizeInquiryError(err: any): any { if (!err) return undefined; return { - message: err?.message || String(err), + message: getInquiryErrorMessage(err, "generic"), status: err?.response?.status, data: err?.response?.data, ...(Array.isArray(err?.attempts) ? { attempts: err.attempts } : {}), @@ -1745,7 +1771,7 @@ export class RequestManagementService { body.insurerLicense === body.driverLicense) ) { throw new BadRequestException( - "Insurer and Driver should be two different persons in this mode.", + "در این حالت، بیمه‌گذار و راننده باید دو شخص متفاوت باشند.", ); } } else if (body.driverIsInsurer === true) { @@ -1757,7 +1783,7 @@ export class RequestManagementService { String(body.driverBirthday) === String(body.insurerBirthday); if (!sameNat || !sameLic || !sameBirthday) { throw new BadRequestException( - "When driverIsInsurer is true, insurer and driver data must be the same.", + "وقتی راننده همان بیمه‌گذار است، اطلاعات راننده و بیمه‌گذار باید یکسان باشد.", ); } } @@ -1831,7 +1857,10 @@ export class RequestManagementService { err, ); await this.persistBlameInquiryAudit(req); - throw new HttpException("Inquiry failed", HttpStatus.BAD_REQUEST); + throw new HttpException( + getInquiryErrorMessage(err, "thirdPartyPlate"), + HttpStatus.BAD_REQUEST, + ); } if (inquiryMapped?.Error) { @@ -1847,7 +1876,8 @@ export class RequestManagementService { }); await this.persistBlameInquiryAudit(req); throw new HttpException( - inquiryMapped.Error.Message || "Inquiry returned error", + inquiryMapped.Error.Message || + getInquiryErrorMessage(inquiryMapped, "thirdPartyPlate"), HttpStatus.BAD_REQUEST, ); } @@ -1875,7 +1905,7 @@ export class RequestManagementService { const clientName = inquiryMapped?.CompanyName; if (!clientName) { const error = new BadRequestException( - `CompanyName missing from inquiry response`, + "پاسخ استعلام بیمه‌نامه ناقص است و نام شرکت بیمه در آن وجود ندارد.", ); this.recordPartyCaseInquiryStatus( req, @@ -1903,7 +1933,7 @@ export class RequestManagementService { : null; if (clientName && !client) { const error = new BadRequestException( - `CompanyCode missing or invalid in inquiry response`, + "پاسخ استعلام بیمه‌نامه ناقص است و شرکت بیمه قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -2188,7 +2218,7 @@ export class RequestManagementService { body.insurerLicense === body.driverLicense) ) { throw new BadRequestException( - "Insurer and Driver should be two different persons in this mode.", + "در این حالت، بیمه‌گذار و راننده باید دو شخص متفاوت باشند.", ); } } else if (body.driverIsInsurer === true) { @@ -2200,7 +2230,7 @@ export class RequestManagementService { String(body.driverBirthday) === String(body.insurerBirthday); if (!sameNat || !sameLic || !sameBirthday) { throw new BadRequestException( - "When driverIsInsurer is true, insurer and driver data must be the same.", + "وقتی راننده همان بیمه‌گذار است، اطلاعات راننده و بیمه‌گذار باید یکسان باشد.", ); } } @@ -2261,7 +2291,10 @@ export class RequestManagementService { err, ); await this.persistBlameInquiryAudit(req); - throw new HttpException("VIN inquiry failed", HttpStatus.BAD_REQUEST); + throw new HttpException( + getInquiryErrorMessage(err, "thirdPartyVin"), + HttpStatus.BAD_REQUEST, + ); } if (inquiryMapped?.Error) { @@ -2275,7 +2308,8 @@ export class RequestManagementService { }); await this.persistBlameInquiryAudit(req); throw new HttpException( - inquiryMapped.Error.Message || "VIN inquiry returned error", + inquiryMapped.Error.Message || + getInquiryErrorMessage(inquiryMapped, "thirdPartyVin"), HttpStatus.BAD_REQUEST, ); } @@ -2303,7 +2337,7 @@ export class RequestManagementService { const clientName = inquiryMapped?.CompanyName; if (!clientName) { const error = new BadRequestException( - "CompanyName missing from VIN inquiry response", + "پاسخ استعلام VIN ناقص است و نام شرکت بیمه در آن وجود ندارد.", ); this.recordPartyCaseInquiryStatus( req, @@ -2329,7 +2363,7 @@ export class RequestManagementService { : null; if (clientName && !client) { const error = new BadRequestException( - "CompanyCode missing or invalid in VIN inquiry response", + "پاسخ استعلام VIN ناقص است و شرکت بیمه قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -2459,7 +2493,7 @@ export class RequestManagementService { err, ); await this.persistBlameInquiryAudit(req); - this.throwCarBodyInquiryFailure(err); + this.throwCarBodyInquiryFailure(err, "carBodyVin"); } } @@ -3472,7 +3506,10 @@ export class RequestManagementService { : null; if (!client) { - throw new HttpException("Client not found", HttpStatus.CONFLICT); + throw new HttpException( + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", + HttpStatus.CONFLICT, + ); } const partyDetails = @@ -3642,7 +3679,7 @@ export class RequestManagementService { this.logger.error(er); if (er instanceof HttpException) throw er; throw new InternalServerErrorException( - "Failed to update request with plate details.", + "ذخیره اطلاعات پلاک و بیمه‌نامه انجام نشد.", ); } @@ -3670,7 +3707,7 @@ export class RequestManagementService { body.driverIsInsurer === false ) { throw new BadRequestException( - "Insurer and Driver should be two different persons in this mode.", + "در این حالت، بیمه‌گذار و راننده باید دو شخص متفاوت باشند.", ); } @@ -3703,7 +3740,7 @@ export class RequestManagementService { if (isSameNationalCode || isSamePlate) { throw new ConflictException( - "The plate and national code for the second party cannot be the same as the first party.", + "پلاک و کد ملی طرف دوم نمی‌تواند با طرف اول یکسان باشد.", ); } } @@ -6466,6 +6503,20 @@ export class RequestManagementService { }, ); + const requestIds = requests.map((request: any) => request._id); + const claimsForStatus = + requestIds.length > 0 + ? ((await this.claimCaseDbService.find( + { blameRequestId: { $in: requestIds } }, + { lean: true, select: "blameRequestId status" }, + )) as any[]) + : []; + const claimStatusByBlameId = new Map( + claimsForStatus + .filter((claim) => claim?.blameRequestId && claim?.status) + .map((claim) => [String(claim.blameRequestId), claim.status]), + ); + const enriched = requests.map((req: any) => { const isInitiator = (user?.role === RoleEnum.FIELD_EXPERT && @@ -6487,17 +6538,44 @@ export class RequestManagementService { ...obj, userSide: party?.role ?? null, initiatedByMe: isInitiator, + unifiedFileStatus: resolveUnifiedFileStatus({ + blameStatus: req.status, + claimStatus: claimStatusByBlameId.get(String(req._id)), + }), }; }); + let filtered = enriched; + if (query.unifiedStatus) { + filtered = filtered.filter( + (row) => row.unifiedFileStatus === query.unifiedStatus, + ); + } + const { fromDate, toDate } = parseListDateRange( + query.startDate, + query.endDate, + ); + if (fromDate || toDate) { + filtered = filtered.filter((row) => + isInListDateRange(row.createdAt, fromDate, toDate), + ); + } + const paged = applyListQueryV2( - enriched, + filtered, { publicId: (r) => String((r as { publicId?: string }).publicId ?? ""), createdAt: (r) => (r as { createdAt?: Date }).createdAt, requestNo: (r) => String((r as { requestNo?: string }).requestNo ?? ""), - status: (r) => String((r as { status?: string }).status ?? ""), + status: (r) => + String( + (r as { unifiedFileStatus?: string; status?: string }) + .unifiedFileStatus ?? + (r as { status?: string }).status ?? + "", + ), + fileType: (r) => (r as { type?: string }).type, searchExtras: (r) => { const row = r as { blameStatus?: string; @@ -7004,8 +7082,9 @@ export class RequestManagementService { e, ); await (req as any).save(); - throw new InternalServerErrorException( - "Failed to process plate information.", + if (e instanceof HttpException) throw e; + throw new BadRequestException( + getInquiryErrorMessage(e, "thirdPartyPlate"), ); } @@ -7020,7 +7099,7 @@ export class RequestManagementService { : await this.clientService.findOne({ clientName }); if (!client) { const error = new NotFoundException( - `Client not found for company: ${clientName}`, + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -7345,7 +7424,7 @@ export class RequestManagementService { : null; if (!client) { const error = new NotFoundException( - `Client not found for company: ${clientName}`, + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -8104,7 +8183,7 @@ export class RequestManagementService { if (!client) { const error = new NotFoundException( - `Client not found for company: ${clientName}`, + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", ); await this.persistLegacyInquiryAudit( requestId, @@ -8188,8 +8267,8 @@ export class RequestManagementService { ); this.logger.error("Error processing first party plate:", plateError); if (plateError instanceof HttpException) throw plateError; - throw new InternalServerErrorException( - "Failed to process first party plate information", + throw new BadRequestException( + getInquiryErrorMessage(plateError, "thirdPartyPlate"), ); } @@ -8241,7 +8320,7 @@ export class RequestManagementService { if (!client) { const error = new NotFoundException( - `Client not found for company: ${clientName}${companyCode ? ` (code: ${companyCode})` : ""}`, + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", ); await this.persistLegacyInquiryAudit( requestId, @@ -8326,8 +8405,9 @@ export class RequestManagementService { }, ); this.logger.error("Error processing second party plate:", plateError); - throw new InternalServerErrorException( - "Failed to process second party plate information", + if (plateError instanceof HttpException) throw plateError; + throw new BadRequestException( + getInquiryErrorMessage(plateError, "thirdPartyPlate"), ); } @@ -8584,7 +8664,7 @@ export class RequestManagementService { if (!client) { const error = new NotFoundException( - `Client not found for company: ${clientName}`, + "شرکت بیمه موجود در پاسخ استعلام قابل شناسایی نیست.", ); await this.persistLegacyInquiryAudit( requestId, @@ -8710,9 +8790,8 @@ export class RequestManagementService { }, ); this.logger.error("Error processing first party plate:", plateError); - throw new InternalServerErrorException( - "Failed to process first party plate information", - ); + if (plateError instanceof HttpException) throw plateError; + throw new BadRequestException(getInquiryErrorMessage(plateError)); } // For CAR_BODY: Create expertSubmitReply @@ -9850,14 +9929,14 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `${roleLabel} party plate inquiry failed: ${err?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(err, "thirdPartyPlate"), ); } if (inquiryMapped?.Error) { const error = new BadRequestException( inquiryMapped.Error.Message || - `${roleLabel} party plate inquiry returned an error`, + getInquiryErrorMessage(inquiryMapped, "thirdPartyPlate"), ); this.recordPartyCaseInquiryStatus( req, @@ -9881,7 +9960,7 @@ export class RequestManagementService { const companyCode = inquiryMapped?.CompanyCode; if (!clientName) { const error = new BadRequestException( - `CompanyName missing from ${roleLabel} party inquiry response`, + "پاسخ استعلام بیمه‌نامه ناقص است و نام شرکت بیمه در آن وجود ندارد.", ); this.recordPartyCaseInquiryStatus( req, @@ -9908,7 +9987,7 @@ export class RequestManagementService { : null; if (clientName && !client) { const error = new BadRequestException( - `CompanyCode missing or invalid in ${roleLabel} party inquiry response`, + "پاسخ استعلام بیمه‌نامه ناقص است و شرکت بیمه قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -10128,7 +10207,7 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `${roleLabel} party driving license inquiry failed: ${err?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(err, "drivingLicense"), ); } } @@ -10143,7 +10222,7 @@ export class RequestManagementService { ): Promise { if (!String(sheba ?? "").trim()) { throw new BadRequestException( - "sheba is required for the damaged party.", + "شماره شبا برای طرف زیان‌دیده الزامی است.", ); } await this.sandHubService.getShebaValidation( @@ -10764,14 +10843,14 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `${roleLabel} party VIN inquiry failed: ${err?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(err, "thirdPartyVin"), ); } if (inquiryMapped?.Error) { const error = new BadRequestException( inquiryMapped.Error.Message || - `${roleLabel} party VIN inquiry returned an error`, + getInquiryErrorMessage(inquiryMapped, "thirdPartyVin"), ); this.recordPartyCaseInquiryStatus( req, @@ -10793,7 +10872,7 @@ export class RequestManagementService { const companyCode = inquiryMapped?.CompanyCode; if (!clientName) { const error = new BadRequestException( - `CompanyName missing from ${roleLabel} party VIN inquiry response`, + "پاسخ استعلام VIN ناقص است و نام شرکت بیمه در آن وجود ندارد.", ); this.recordPartyCaseInquiryStatus( req, @@ -10818,7 +10897,7 @@ export class RequestManagementService { : null; if (clientName && !client) { const error = new BadRequestException( - `CompanyCode missing or invalid in ${roleLabel} party VIN inquiry response`, + "پاسخ استعلام VIN ناقص است و شرکت بیمه قابل شناسایی نیست.", ); this.recordPartyCaseInquiryStatus( req, @@ -10970,7 +11049,7 @@ export class RequestManagementService { err, ); await this.persistBlameInquiryAudit(req); - this.throwCarBodyInquiryFailure(err); + this.throwCarBodyInquiryFailure(err, "carBodyVin"); } } @@ -11045,7 +11124,7 @@ export class RequestManagementService { ); await this.persistBlameInquiryAudit(req); throw new BadRequestException( - `${roleLabel} party driving license inquiry failed: ${err?.message || "استعلام در دسترس نیست"}`, + getInquiryErrorMessage(err, "drivingLicense"), ); } } @@ -12756,27 +12835,124 @@ export class RequestManagementService { return { ...workflow, completedSteps }; } - // /** - // * V4/V5 dirty bridge: FileMaker FE resumes from blame `status`, but pre-capture - // * document upload lives on the claim (`UPLOADING_REQUIRED_DOCUMENTS`) while blame - // * is still at FIRST/SECOND_COMPLETED. Mirror claim status into `status` only for - // * that phase so leave/re-enter can continue; keep real blame status as - // * `blameCaseStatus`. Remove once FE keys off `claimStatus` / a unified resume pointer. - // */ - // private fileMakerStatusForResume( - // blameStatus: unknown, - // claimStatus: unknown, - // ): { status: unknown; blameCaseStatus?: unknown } { - // if (claimStatus === ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS) { - // return { - // status: ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS, - // blameCaseStatus: blameStatus, - // }; - // } - // return { status: blameStatus }; - // } + /** + * FileMaker owns a cross-aggregate workflow: the party narrative is stored on + * the blame case, while required-document progress is stored on its linked + * claim. Expose the authoritative aggregate to resume instead of overloading + * either record's status with the other record's state. + */ + private fileMakerResumeProjection( + file: any, + claim?: any, + ): FileMakerResumeProjection { + const blameWorkflow = this.fileMakerWorkflowProjection(file); + const narrativeTerminalStep = + file?.type === BlameRequestType.CAR_BODY + ? WorkflowStep.FIRST_COMPLETED + : WorkflowStep.SECOND_COMPLETED; + const narrativeComplete = + blameWorkflow.currentStep === narrativeTerminalStep || + (blameWorkflow.completedSteps ?? []).includes(narrativeTerminalStep); + const claimWorkflow = claim?.workflow ?? {}; - async getMyFileMakerFiles(fileMaker: any): Promise { + if ( + narrativeComplete && + claim && + claim.status === ClaimCaseStatus.UPLOADING_REQUIRED_DOCUMENTS && + claimWorkflow.currentStep === ClaimWorkflowStep.UPLOAD_REQUIRED_DOCUMENTS + ) { + return { + action: "UPLOAD_REQUIRED_DOCUMENTS", + entity: "CLAIM", + entityId: String(claim._id), + status: claim.status, + currentStep: claimWorkflow.currentStep, + nextStep: claimWorkflow.nextStep, + }; + } + + if ( + narrativeComplete && + claim && + (claim.status === ClaimCaseStatus.WAITING_FOR_FILE_REVIEWER || + file?.status === CaseStatus.WAITING_FOR_FILE_REVIEWER) + ) { + return { + action: "WAIT_FOR_FILE_REVIEWER", + entity: "CLAIM", + entityId: String(claim._id), + status: claim.status, + currentStep: claimWorkflow.currentStep, + nextStep: claimWorkflow.nextStep, + }; + } + + return { + action: "CONTINUE_BLAME", + entity: "BLAME", + entityId: String(file._id), + status: file.status, + currentStep: blameWorkflow.currentStep, + nextStep: blameWorkflow.nextStep, + }; + } + + private paginateUserFacingFiles( + rows: any[], + query: ListQueryV2Dto, + ): GetUserBlameListV2ResponseDto { + let filtered = rows; + if (query.unifiedStatus) { + filtered = filtered.filter( + (row) => row.unifiedFileStatus === query.unifiedStatus, + ); + } + + const { fromDate, toDate } = parseListDateRange( + query.startDate, + query.endDate, + ); + if (fromDate || toDate) { + filtered = filtered.filter((row) => + isInListDateRange(row.createdAt, fromDate, toDate), + ); + } + + const paged = applyListQueryV2( + filtered, + { + publicId: (row) => String(row.publicId ?? ""), + createdAt: (row) => row.createdAt, + requestNo: (row) => String(row.requestNo ?? ""), + status: (row) => String(row.unifiedFileStatus ?? row.status ?? ""), + fileType: (row) => row.type, + searchExtras: (row) => + [ + row._id, + row.blameStatus, + row.claimStatus, + row.workflow?.currentStep, + row.claimWorkflow?.currentStep, + ] + .filter(Boolean) + .map(String), + }, + query, + ); + + return { + list: paged.list, + total: paged.total, + page: paged.page, + limit: paged.limit, + totalPages: paged.totalPages, + }; + } + + async getMyFileMakerFiles( + fileMaker: any, + query: ListQueryV2Dto = {}, + ): Promise { if (fileMaker?.role !== RoleEnum.FILE_MAKER) { throw new ForbiddenException("Only FileMakers can use this endpoint."); } @@ -12785,26 +12961,27 @@ export class RequestManagementService { isMadeByFileMaker: true, initiatedByFieldExpertId: makerId, }); - // const blameIds = (files || []).map((f: any) => f._id).filter(Boolean); - // const claims = - // blameIds.length > 0 - // ? await this.claimCaseDbService.find( - // { blameRequestId: { $in: blameIds } }, - // { lean: true, select: "blameRequestId status" }, - // ) - // : []; - // const claimStatusByBlameId = new Map(); - // for (const c of claims as any[]) { - // const blameId = c?.blameRequestId != null ? String(c.blameRequestId) : ""; - // if (blameId) claimStatusByBlameId.set(blameId, c.status); - // } + const blameIds = (files || []).map((f: any) => f._id).filter(Boolean); + const claims = + blameIds.length > 0 + ? await this.claimCaseDbService.find( + { blameRequestId: { $in: blameIds } }, + { + lean: true, + select: "blameRequestId status workflow", + }, + ) + : []; + const claimByBlameId = new Map(); + for (const claim of claims as any[]) { + const blameId = + claim?.blameRequestId != null ? String(claim.blameRequestId) : ""; + if (blameId) claimByBlameId.set(blameId, claim); + } - return (files || []).map((f: any) => { + const list = (files || []).map((f: any) => { const workflow = this.fileMakerWorkflowProjection(f); - // const resume = this.fileMakerStatusForResume( - // f.status, - // claimStatusByBlameId.get(String(f._id)), - // ); + const claim = claimByBlameId.get(String(f._id)); return { _id: f._id, publicId: f.publicId, @@ -12817,11 +12994,21 @@ export class RequestManagementService { nextStep: workflow.nextStep, completedSteps: workflow.completedSteps, }, + linkedClaimId: claim?._id ? String(claim._id) : null, + claimStatus: claim?.status, + unifiedFileStatus: resolveUnifiedFileStatus({ + blameStatus: f.status, + claimStatus: claim?.status, + }), + claimWorkflow: claim?.workflow, + fileMakerResume: this.fileMakerResumeProjection(f, claim), requiresFileMakerApproval: f.requiresFileMakerApproval, createdAt: f.createdAt, updatedAt: f.updatedAt, }; }); + + return this.paginateUserFacingFiles(list, query); } async getMyFileMakerFileDetail( @@ -12855,6 +13042,7 @@ export class RequestManagementService { : claim ? { ...(claim as any) } : null; + const fileMakerResume = this.fileMakerResumeProjection(plain, claimPlain); return { _id: plain._id, publicId: plain.publicId, @@ -12907,6 +13095,7 @@ export class RequestManagementService { hasSigned: p.confirmation != null, })), linkedClaimId: claimPlain ? String(claimPlain._id) : null, + fileMakerResume, ...(claimPlain ? { claimStatus: claimPlain.status, @@ -12933,7 +13122,10 @@ export class RequestManagementService { // ─── FileReviewer file list / detail (V4 + V5) ───────────────────────────── - async getMyFileReviewerFiles(fileReviewer: any): Promise { + async getMyFileReviewerFiles( + fileReviewer: any, + query: ListQueryV2Dto = {}, + ): Promise { if (fileReviewer?.role !== RoleEnum.FILE_REVIEWER) { throw new ForbiddenException("Only FileReviewers can use this endpoint."); } @@ -12971,13 +13163,35 @@ export class RequestManagementService { ); }); - return visibleFiles.map((f: any) => ({ + const visibleBlameIds = visibleFiles + .map((f: any) => f._id) + .filter(Boolean); + const claims = + visibleBlameIds.length > 0 + ? await this.claimCaseDbService.find( + { blameRequestId: { $in: visibleBlameIds } }, + { lean: true, select: "blameRequestId status" }, + ) + : []; + const claimByBlameId = new Map(); + for (const claim of claims as any[]) { + if (claim?.blameRequestId) { + claimByBlameId.set(String(claim.blameRequestId), claim); + } + } + + const list = visibleFiles.map((f: any) => ({ _id: f._id, publicId: f.publicId, requestNo: f.requestNo, type: f.type, status: f.status, blameStatus: f.blameStatus, + claimStatus: claimByBlameId.get(String(f._id))?.status, + unifiedFileStatus: resolveUnifiedFileStatus({ + blameStatus: f.status, + claimStatus: claimByBlameId.get(String(f._id))?.status, + }), workflow: { currentStep: f.workflow?.currentStep, nextStep: f.workflow?.nextStep, @@ -12987,6 +13201,8 @@ export class RequestManagementService { createdAt: f.createdAt, updatedAt: f.updatedAt, })); + + return this.paginateUserFacingFiles(list, query); } async getMyFileReviewerFileDetail( diff --git a/src/request-management/request-management.v2.controller.ts b/src/request-management/request-management.v2.controller.ts index d3671ac..f41a2fa 100644 --- a/src/request-management/request-management.v2.controller.ts +++ b/src/request-management/request-management.v2.controller.ts @@ -82,7 +82,7 @@ export class RequestManagementV2Controller { @ApiOperation({ summary: "List my blame requests (V2)", description: - "Party-owned blame files, or files initiated by the current FIELD_EXPERT / REGISTRAR. Optional query: `search`, `sortBy` (publicId | createdAt | requestNo | status), `sortOrder`, `page`, `limit`.", + "Party-owned blame files, or files initiated by the current FIELD_EXPERT / REGISTRAR. Optional query: `search`, `sortBy` (publicId | createdAt | requestNo | status), `sortOrder`, `page`, `limit`, `unifiedStatus`, `fileType`, `startDate`, `endDate`.", }) async getAllBlameRequestsV2( @CurrentUser() user: any, diff --git a/src/sand-hub/sand-hub.service.spec.ts b/src/sand-hub/sand-hub.service.spec.ts index fccdefc..ef7b743 100644 --- a/src/sand-hub/sand-hub.service.spec.ts +++ b/src/sand-hub/sand-hub.service.spec.ts @@ -1,6 +1,7 @@ import { SandHubService } from "./sand-hub.service"; import { ForbiddenException, + NotFoundException, ServiceUnavailableException, } from "@nestjs/common"; import { ExternalInquirySettingsService } from "src/client/external-inquiry-settings.service"; @@ -58,7 +59,9 @@ describe("SandHubService inquiry mocks", () => { }); it("keeps disabled-live third-party mock policy usable", async () => { - const result = await service.getTejaratBlockInquiry(userDetail); + const result = await service.getTejaratBlockInquiry(userDetail, { + enforceDeploymentClientMatch: true, + }); expect(isMappedPolicyCurrent(result.mapped)).toBe(true); }); @@ -121,6 +124,17 @@ describe("SandHubService inquiry mocks", () => { expect(httpService.post).not.toHaveBeenCalled(); }); + it("returns a contextual Persian error when no car-body policy matches", async () => { + externalInquirySettings.isInquiryLive.mockResolvedValue(true); + lookupsService.findLastProcessedCarPolicy.mockRejectedValue( + new NotFoundException("No active Fanavaran car-body policy was found"), + ); + + await expect(service.getCarBodyInquiry(userDetail)).rejects.toThrow( + "بیمه‌نامه بدنه فعالی مطابق پلاک و کد ملی واردشده یافت نشد.", + ); + }); + it("does not let an offline third-party seed override a live ESG inquiry", async () => { process.env.CLIENT_ID = "8"; externalInquirySettings.isInquiryLive.mockResolvedValue(true); @@ -129,12 +143,10 @@ describe("SandHubService inquiry mocks", () => { raw: { mocked: true }, mapped: { PrntPlcyCmpDocNo: "MOCK-POLICY" }, }); - const esg = jest - .spyOn(service as any, "makeEsgRequest") - .mockResolvedValue({ - success: true, - data: { PrntCmpDocNo: "REAL-ESG-POLICY" }, - }); + const esg = jest.spyOn(service as any, "makeEsgRequest").mockResolvedValue({ + success: true, + data: { PrntCmpDocNo: "REAL-ESG-POLICY" }, + }); const result = await service.getTejaratBlockInquiry(userDetail); @@ -143,6 +155,40 @@ describe("SandHubService inquiry mocks", () => { expect(result.mapped.PrntPlcyCmpDocNo).toBe("REAL-ESG-POLICY"); }); + it("preserves ESG not-found semantics as a Persian plate-specific error", async () => { + process.env.CLIENT_ID = "8"; + externalInquirySettings.isInquiryLive.mockResolvedValue(true); + jest.spyOn(service as any, "makeEsgRequest").mockResolvedValue({ + success: false, + message: "موردی یافت نشد", + }); + + const result = await service.getTejaratBlockInquiry(userDetail, { + enforceDeploymentClientMatch: true, + }); + + expect(result.mapped.Error.Message).toBe( + "بیمه‌نامه شخص ثالثی مطابق پلاک و کد ملی واردشده یافت نشد.", + ); + }); + + it("uses a VIN-specific message for the same ESG not-found response", async () => { + externalInquirySettings.isInquiryLive.mockResolvedValue(true); + jest.spyOn(service as any, "makeEsgRequest").mockResolvedValue({ + success: false, + message: "موردی یافت نشد", + }); + + const result = await service.getPolicyByChassisInquiry({ + nationalCode: "0012345678", + chassis: "NAAR03HFFRDE07024", + }); + + expect(result.mapped.Error.Message).toBe( + "بیمه‌نامه شخص ثالثی مطابق شماره شاسی (VIN) و کد ملی واردشده یافت نشد.", + ); + }); + it("rejects a guilty third-party policy issued by another insurer", async () => { process.env.CLIENT_ID = "15"; externalInquirySettings.isInquiryLive.mockResolvedValue(true); diff --git a/src/sand-hub/sand-hub.service.ts b/src/sand-hub/sand-hub.service.ts index 31337d9..de2f862 100644 --- a/src/sand-hub/sand-hub.service.ts +++ b/src/sand-hub/sand-hub.service.ts @@ -24,6 +24,13 @@ import { jalaliToGregorianDate } from "src/helpers/date-jalali"; import { firstValueFrom } from "rxjs"; import { mapEsgCarBodyPolicyToInquiry } from "./esg-car-body-inquiry.mapper"; import type { Plates } from "src/Types&Enums/plate.interface"; +import { + getInquiryErrorMessage, + inquiryErrorStatus, + isInquiryFailurePayload, + isInquiryTimeout, + type InquiryErrorContext, +} from "src/common/utils/inquiry-error"; type CarBodyInquiryDetail = Omit & { plate: Plates | string; @@ -31,9 +38,6 @@ type CarBodyInquiryDetail = Omit & { @Injectable() export class SandHubService { - private static readonly ESG_INQUIRY_UNAVAILABLE_MESSAGE = - "استعلام در دسترس نیست"; - private readonly logger = new Logger(SandHubService.name); private loginToken: string | null = null; private tokenExpiry: Date | null = null; @@ -90,6 +94,30 @@ export class SandHubService { return resolveFanavaranClientKey() === "parsian"; } + private inquiryContext(type: ExternalInquiryType): InquiryErrorContext { + if (type === "vinChassis") return "thirdPartyVin"; + return type; + } + + private throwInquiryError( + error: unknown, + context: InquiryErrorContext, + ): never { + const message = getInquiryErrorMessage(error, context); + const status = inquiryErrorStatus(error); + + if (error instanceof ForbiddenException || status === 403) { + throw new ForbiddenException(message); + } + if (isInquiryTimeout(error) || status === 504) { + throw new GatewayTimeoutException(message); + } + if ([400, 404, 409, 422].includes(status ?? 0)) { + throw new BadRequestException(message); + } + throw new ServiceUnavailableException(message); + } + /** * A case may proceed only when the policy belongs to the insurer served by * this deployment. Callers opt in for the guilty/first-party policy only. @@ -101,7 +129,7 @@ export class SandHubService { const expectedClientCode = String(process.env.CLIENT_ID ?? "").trim(); if (!expectedClientCode) { throw new ServiceUnavailableException( - "CLIENT_ID must be configured before insurance eligibility can be checked.", + "تنظیمات شرکت بیمه برای بررسی اعتبار بیمه‌نامه کامل نیست.", ); } @@ -111,7 +139,7 @@ export class SandHubService { if (actualClientCode === expectedClientCode) return; throw new ForbiddenException( - `${insuranceLine} policy insurer does not match this deployment.`, + "بیمه‌نامه یافت‌شده متعلق به شرکت بیمه این سامانه نیست.", ); } @@ -134,13 +162,13 @@ export class SandHubService { const expectedClientCode = String(process.env.CLIENT_ID ?? "").trim(); if (!expectedClientCode) { throw new ServiceUnavailableException( - "CLIENT_ID must be configured before insurance eligibility can be checked.", + "تنظیمات شرکت بیمه برای بررسی اعتبار بیمه‌نامه کامل نیست.", ); } if (expectedClientCode === "8") return; throw new ForbiddenException( - "CAR_BODY policy insurer does not match this deployment.", + "بیمه‌نامه یافت‌شده متعلق به شرکت بیمه این سامانه نیست.", ); } @@ -426,7 +454,7 @@ export class SandHubService { this.logger.error("Failed to login to SandHub:", er.message); this.loginToken = null; this.tokenExpiry = null; - throw new UnauthorizedException("SandHub authentication failed"); + throw new UnauthorizedException("احراز هویت سرویس استعلام انجام نشد."); } } @@ -446,7 +474,7 @@ export class SandHubService { if (!email || !password) { throw new UnauthorizedException( - "Tejarat inquiry credentials are not configured (TEJARAT_INQUIRY_EMAIL/TEJARAT_INQUIRY_PASSWORD)", + "اطلاعات اتصال به سرویس استعلام تجارت نو تنظیم نشده است.", ); } @@ -486,12 +514,18 @@ export class SandHubService { ); this.tejaratAccessToken = null; this.tejaratTokenExpiry = null; - throw new UnauthorizedException("Tejarat inquiry authentication failed"); + throw new UnauthorizedException( + "احراز هویت سرویس استعلام تجارت نو انجام نشد.", + ); } } private async getEsgAccessToken(): Promise { - if (this.esgAccessToken && this.esgTokenExpiry && this.esgTokenExpiry > new Date()) { + if ( + this.esgAccessToken && + this.esgTokenExpiry && + this.esgTokenExpiry > new Date() + ) { return this.esgAccessToken; } @@ -501,7 +535,7 @@ export class SandHubService { if (!baseUrl || !username || !password) { throw new UnauthorizedException( - "ESG credentials are not configured (ESG_URL/ESG_USERNAME/ESG_PASSWORD)", + "اطلاعات اتصال به سرویس استعلام ESG تنظیم نشده است.", ); } @@ -539,7 +573,9 @@ export class SandHubService { this.logger.error("Failed to login to ESG inquiry:", er?.message || er); this.esgAccessToken = null; this.esgTokenExpiry = null; - throw new UnauthorizedException("ESG inquiry authentication failed"); + throw new UnauthorizedException( + "احراز هویت سرویس استعلام ESG انجام نشد.", + ); } } @@ -603,24 +639,30 @@ export class SandHubService { this.esgTokenExpiry = null; } + if ([400, 404, 409, 422].includes(status)) { + this.throwInquiryError(err, this.inquiryContext(inquiryType)); + } + + if (attempt === maxRetries - 1) { + this.throwInquiryError(err, this.inquiryContext(inquiryType)); + } const delay = INITIAL_DELAY * Math.pow(BACKOFF_FACTOR, attempt); await new Promise((resolve) => setTimeout(resolve, delay)); - if (attempt === maxRetries - 1) throw err; } } } - private mapEsgPolicyByPlateToOldFormat(raw: any): any { + private mapEsgPolicyByPlateToOldFormat( + raw: any, + context: "thirdPartyPlate" | "thirdPartyVin" = "thirdPartyPlate", + ): any { if (!raw) return raw; - if (raw?.success === false) { - this.logger.warn( - "ESG policyByPlate inquiry returned success=false", - raw, - ); + if (isInquiryFailurePayload(raw)) { + this.logger.warn("ESG policy inquiry returned a failure payload", raw); return { Error: { - Message: SandHubService.ESG_INQUIRY_UNAVAILABLE_MESSAGE, + Message: getInquiryErrorMessage(raw, context), }, }; } @@ -670,7 +712,8 @@ export class SandHubService { ): string | null { if (input === null || input === undefined) return null; - const raw = typeof input === "number" ? String(input) : String(input).trim(); + const raw = + typeof input === "number" ? String(input) : String(input).trim(); if (!raw) return null; let year = 0; @@ -700,7 +743,9 @@ export class SandHubService { return `${year}-${mm}-${dd}`; } - private getDefaultMockPersonInquiry(nationalCode: string): Record { + private getDefaultMockPersonInquiry( + nationalCode: string, + ): Record { return { firstName: "نام", lastName: "خانوادگی", @@ -711,10 +756,10 @@ export class SandHubService { } private mapEsgPersonInquiryToOldFormat(raw: any): Record { - if (raw?.success === false) { + if (isInquiryFailurePayload(raw)) { this.logger.warn("ESG person inquiry returned success=false", raw); throw new BadRequestException( - SandHubService.ESG_INQUIRY_UNAVAILABLE_MESSAGE, + getInquiryErrorMessage(raw, "personalIdentity"), ); } @@ -736,11 +781,9 @@ export class SandHubService { } private mapEsgShebaInquiryToOldFormat(raw: any): Record { - if (raw?.success === false) { + if (isInquiryFailurePayload(raw)) { this.logger.warn("ESG sheba inquiry returned success=false", raw); - throw new BadRequestException( - SandHubService.ESG_INQUIRY_UNAVAILABLE_MESSAGE, - ); + throw new BadRequestException(getInquiryErrorMessage(raw, "sheba")); } const data = raw?.data ?? {}; @@ -800,11 +843,15 @@ export class SandHubService { this.tejaratTokenExpiry = null; } + if ([400, 404, 409, 422].includes(status)) { + this.throwInquiryError(err, this.inquiryContext(inquiryType)); + } + + if (attempt === maxRetries - 1) { + this.throwInquiryError(err, this.inquiryContext(inquiryType)); + } const delay = INITIAL_DELAY * Math.pow(BACKOFF_FACTOR, attempt); await new Promise((resolve) => setTimeout(resolve, delay)); - if (attempt === maxRetries - 1) { - throw err; - } } } } @@ -883,8 +930,13 @@ export class SandHubService { `[MOCK] getEsgPolicyByPlateInquiry plate=${JSON.stringify(requestPayload)}`, ); } - const mapped = this.mapEsgPolicyByPlateToOldFormat(raw); - this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + const mapped = this.mapEsgPolicyByPlateToOldFormat( + raw, + "thirdPartyPlate", + ); + if (!mapped?.Error) { + this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + } return { raw, mapped }; } @@ -912,8 +964,16 @@ export class SandHubService { `[MOCK] getTejaratBlockInquiry plate=${JSON.stringify(requestPayload)}`, ); } - const mapped = this.mapNewApiResponseToOldFormat(raw); - this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + const mapped = isInquiryFailurePayload(raw) + ? { + Error: { + Message: getInquiryErrorMessage(raw, "thirdPartyPlate"), + }, + } + : this.mapNewApiResponseToOldFormat(raw); + if (!mapped?.Error) { + this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + } return { raw, mapped }; } @@ -962,13 +1022,15 @@ export class SandHubService { } if (isVinInquiry) { - const raw = await this.lookupsService.findLastProcessedCarPolicy( - "car-body", - { + let raw: any; + try { + raw = await this.lookupsService.findLastProcessedCarPolicy("car-body", { nationalCode: String(userDetail.nationalCodeOfInsurer), vin: plateOrVin, - }, - ); + }); + } catch (error) { + this.throwInquiryError(error, "carBodyVin"); + } if (useParsianCarBodyLookup) { this.assertParsianCarBodyLookupMatchesDeployment(); } @@ -1000,10 +1062,15 @@ export class SandHubService { plaqueRight: String(plateOrVin.centerDigits), plaqueSerial: String(plateOrVin.ir), }; - const raw = await this.lookupsService.findLastProcessedCarPolicy( - "car-body", - query, - ); + let raw: any; + try { + raw = await this.lookupsService.findLastProcessedCarPolicy( + "car-body", + query, + ); + } catch (error) { + this.throwInquiryError(error, "carBodyPlate"); + } this.assertParsianCarBodyLookupMatchesDeployment(); return { @@ -1046,6 +1113,11 @@ export class SandHubService { options, ); + if (isInquiryFailurePayload(raw)) { + throw new BadRequestException( + getInquiryErrorMessage(raw, "carBodyPlate"), + ); + } const mapped = this.mapCarBodyInquiryResponse(raw); return { raw, mapped }; } @@ -1114,7 +1186,6 @@ export class SandHubService { }; } - /** * ESG VIN/chassis-number inquiry (`/inquiry/policyByChassis`). * @@ -1130,10 +1201,10 @@ export class SandHubService { options?: SandHubInquiryOptions, ): Promise<{ raw: any; mapped: any }> { const baseUrl = process.env.ESG_URL ?? "http://192.168.20.22:8085"; - const requestUrl = `${baseUrl}/inquiry/carByChassis`; + const requestUrl = `${baseUrl}/inquiry/policyByChassis`; const requestPayload = { nationalCode: String(identity.nationalCode), - chassisNo: String(identity.chassis), + chassis: String(identity.chassis), }; const live = await this.isInquiryLive("vinChassis", options); @@ -1144,8 +1215,10 @@ export class SandHubService { this.logger.debug( `[MOCK] getPolicyByChassisInquiry nationalCode=${identity.nationalCode} chassis=${identity.chassis}`, ); - const mapped = this.mapEsgPolicyByPlateToOldFormat(raw); - this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + const mapped = this.mapEsgPolicyByPlateToOldFormat(raw, "thirdPartyVin"); + if (!mapped?.Error) { + this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + } return { raw, mapped }; } @@ -1155,12 +1228,13 @@ export class SandHubService { "vinChassis", options, ); - const mapped = this.mapEsgPolicyByPlateToOldFormat(raw); - this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + const mapped = this.mapEsgPolicyByPlateToOldFormat(raw, "thirdPartyVin"); + if (!mapped?.Error) { + this.enforceDeploymentClientMatch(mapped, "THIRD_PARTY", options); + } return { raw, mapped }; } - private async makeSandHubRequest( url: string, payload: any, @@ -1205,7 +1279,7 @@ export class SandHubService { } } throw new BadGatewayException( - "Failed to fetch data from SandHub after multiple retries", + "سرویس استعلام پس از چند تلاش پاسخ نداد. لطفاً کمی بعد دوباره تلاش کنید.", ); } @@ -1229,11 +1303,16 @@ export class SandHubService { // Pattern: {centerDigits}{centerLetter(s)}{leftDigits}{ir} const m = plk.trim().match(/^(\d+)([^\d\s]+)(\d+)\s+(\d+)$/); if (!m) return null; - const Plk3 = parseInt(m[1], 10); // center digits + const Plk3 = parseInt(m[1], 10); // center digits const Plk2 = this.plateNormalizer.normalizePlateText(m[2]); - const Plk1 = parseInt(m[3], 10); // left digits + const Plk1 = parseInt(m[3], 10); // left digits const PlkSrl = parseInt(m[4], 10); // IR region code - if (!Number.isFinite(Plk3) || !Number.isFinite(Plk1) || !Number.isFinite(PlkSrl) || !Plk2) { + if ( + !Number.isFinite(Plk3) || + !Number.isFinite(Plk1) || + !Number.isFinite(PlkSrl) || + !Plk2 + ) { return null; } return { Plk1, Plk2, Plk3, PlkSrl }; @@ -1245,7 +1324,12 @@ export class SandHubService { // If the response carries a `plk` plate string (VIN inquiry) but lacks the // individual Plk1/Plk2/Plk3/PlkSrl fields, parse and inject them so that // all downstream plate-handling code works identically to the plate flow. - let plkParts: { Plk1: number; Plk2: string; Plk3: number; PlkSrl: number } | null = null; + let plkParts: { + Plk1: number; + Plk2: string; + Plk3: number; + PlkSrl: number; + } | null = null; if ( newResponse.plk && newResponse.Plk1 == null && @@ -1258,13 +1342,15 @@ export class SandHubService { // Map the new field names to the old field names return { ...newResponse, - ...(plkParts ? { - Plk1: plkParts.Plk1, - Plk2: plkParts.Plk2, - Plk3: plkParts.Plk3, - PlkSrl: plkParts.PlkSrl, - plateLetterid: plkParts.Plk2, - } : {}), + ...(plkParts + ? { + Plk1: plkParts.Plk1, + Plk2: plkParts.Plk2, + Plk3: plkParts.Plk3, + PlkSrl: plkParts.PlkSrl, + plateLetterid: plkParts.Plk2, + } + : {}), // Company information CompanyCode: newResponse.companyId || newResponse.CompanyCode, CompanyName: newResponse.companyPersianName || newResponse.CompanyName, @@ -1401,7 +1487,7 @@ export class SandHubService { ) { throw err; } - throw new Error(err); + this.throwInquiryError(err, "thirdPartyPlate"); } } @@ -1420,7 +1506,7 @@ export class SandHubService { const jalaliBirthDate = this.normalizeJalaliBirthDateForEsg(birthDate); if (!jalaliBirthDate) { throw new BadRequestException( - `Invalid birth date for personal inquiry: ${birthDate}. Expected a Jalali date (e.g. 13781124 or "1378-11-24").`, + "تاریخ تولد واردشده برای استعلام هویت معتبر نیست.", ); } @@ -1454,7 +1540,7 @@ export class SandHubService { const gregorianBirthdate = jalaliToGregorianDate(birthDate); if (!gregorianBirthdate) { throw new BadRequestException( - `Invalid birth date for personal inquiry: ${birthDate}. Expected a Jalali date (e.g. 13770624 or "1377-06-24").`, + "تاریخ تولد واردشده برای استعلام هویت معتبر نیست.", ); } @@ -1472,7 +1558,7 @@ export class SandHubService { if (response?.message?.includes("err.record.not.found")) { throw new NotFoundException( - "Personal inquiry failed: Record not found for the given national code and birth date.", + getInquiryErrorMessage(response, "personalIdentity"), ); } return response.data; @@ -1483,7 +1569,7 @@ export class SandHubService { ) { throw err; } - throw new Error(`Error in finding personal inquiry: ${err}`); + this.throwInquiryError(err, "personalIdentity"); } } @@ -1512,22 +1598,13 @@ export class SandHubService { if (response?.data?.IsSucceed === false) { throw new NotFoundException( - "Driving license check failed: The license is not valid or could not be found.", + "گواهینامه‌ای مطابق کد ملی و شماره گواهینامه واردشده یافت نشد.", ); } return response.data; } catch (error) { - if ( - error instanceof BadGatewayException && - error.message.includes("multiple retries") - ) { - throw new BadGatewayException( - `Driving license check failed after multiple retries. The service may be down.`, - ); - } - // For all other errors (like 400, 404, etc.), re-throw them as-is. - throw new Error(`Error in finding driving license: ${error}`); + this.throwInquiryError(error, "drivingLicense"); } } @@ -1563,13 +1640,13 @@ export class SandHubService { response, ); throw new BadRequestException( - "Ownership validation failed: The provided national ID is not the owner of this vehicle.", + "پلاک واردشده متعلق به کد ملی واردشده نیست.", ); } return response; } catch (err) { - throw new Error(`Error in finding car ownership: ${err}`); + this.throwInquiryError(err, "carOwnership"); } } @@ -1619,7 +1696,7 @@ export class SandHubService { response, ); throw new BadRequestException( - "Sheba ID validation failed. The provided Sheba ID does not match the national ID.", + "شماره شبا متعلق به کد ملی واردشده نیست.", ); } @@ -1647,7 +1724,7 @@ export class SandHubService { response, ); throw new BadRequestException( - "Sheba ID validation failed. The provided Sheba ID does not match the national ID.", + "شماره شبا متعلق به کد ملی واردشده نیست.", ); } @@ -1656,7 +1733,7 @@ export class SandHubService { if (err instanceof BadRequestException) { throw err; } - throw new Error(`Error in matching sheba validation: ${err}`); + this.throwInquiryError(err, "sheba"); } } @@ -1672,9 +1749,7 @@ export class SandHubService { ); if (err.response.status === 400) { - throw new BadGatewayException( - `SandHub rejected the request with a 400 Bad Request. Details: ${JSON.stringify(err.response.data)}`, - ); + throw new BadGatewayException(getInquiryErrorMessage(err, "generic")); } } else { this.logger.error( @@ -1685,23 +1760,24 @@ export class SandHubService { if (err.message === "EMPTY_RESPONSE") { throw new BadGatewayException( - "SandHub is offline or returned an empty response", + "سرویس استعلام پاسخی برنگرداند. لطفاً دوباره تلاش کنید.", ); } if (err.code === "ECONNABORTED") { - throw new GatewayTimeoutException("SandHub request timed out"); + throw new GatewayTimeoutException( + "زمان پاسخ‌گویی سرویس استعلام به پایان رسید. لطفاً دوباره تلاش کنید.", + ); } if (err.code === "ECONNRESET" || err.message.includes("socket hang up")) { throw new ServiceUnavailableException( - "SandHub connection was reset or closed unexpectedly", + "ارتباط با سرویس استعلام قطع شد. لطفاً دوباره تلاش کنید.", ); } // This final check is for when all retries have failed for a retryable error. - if (attempt >= maxRetries) { + if (attempt >= maxRetries - 1) { throw new BadGatewayException( - "Failed to fetch data from SandHub after multiple retries", - err.message, + "سرویس استعلام پس از چند تلاش پاسخ نداد. لطفاً کمی بعد دوباره تلاش کنید.", ); } }

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