From 661ed0fdb34e4322bb9cf9dd1aca30330d11c9ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 21 Feb 2026 20:47:11 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20[=EB=B8=8C=EB=9E=9C=EB=94=A9]=20?= =?UTF-8?q?=EC=A3=BC=EC=9D=BC/=EA=B2=BD=EB=8F=99=20=E2=86=92=20(=EC=A3=BC)?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EB=B8=8C=EB=A6=BF=EC=A7=80=EC=97=91=EC=8A=A4?= =?UTF-8?q?=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - e-sign 프로젝트 문서 회사명 교체 - legacy-5130 문서 회사명 교체 - SAM BI 이미지 7종 assets/bi/에 추가 --- assets/bi/sam_bi_black.png | Bin 0 -> 2321 bytes assets/bi/sam_bi_blue.png | Bin 0 -> 2277 bytes assets/bi/sam_bi_green.png | Bin 0 -> 1547 bytes assets/bi/sam_bi_orange.png | Bin 0 -> 1547 bytes assets/bi/sam_bi_purple.png | Bin 0 -> 1547 bytes assets/bi/sam_bi_red.png | Bin 0 -> 1547 bytes assets/bi/sam_bi_white.png | Bin 0 -> 2361 bytes projects/e-sign/changelog.md | 2 +- projects/e-sign/esign-storyboard-config.json | 268 ++++++++++++++++++ .../e-sign/html_slides/slide_01_cover.html | 102 +++++++ projects/e-sign/storyboard-config.json | 2 +- projects/legacy-5130/00_OVERVIEW.md | 2 +- 12 files changed, 373 insertions(+), 3 deletions(-) create mode 100755 assets/bi/sam_bi_black.png create mode 100755 assets/bi/sam_bi_blue.png create mode 100755 assets/bi/sam_bi_green.png create mode 100755 assets/bi/sam_bi_orange.png create mode 100755 assets/bi/sam_bi_purple.png create mode 100755 assets/bi/sam_bi_red.png create mode 100755 assets/bi/sam_bi_white.png create mode 100644 projects/e-sign/esign-storyboard-config.json create mode 100644 projects/e-sign/html_slides/slide_01_cover.html diff --git a/assets/bi/sam_bi_black.png b/assets/bi/sam_bi_black.png new file mode 100755 index 0000000000000000000000000000000000000000..e83d284f8c71a5b87645be6da99e617e11657cb7 GIT binary patch literal 2321 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 literal 0 HcmV?d00001 diff --git a/assets/bi/sam_bi_blue.png b/assets/bi/sam_bi_blue.png new file mode 100755 index 0000000000000000000000000000000000000000..a5cde92f8e59dad76253abd6234784a24bb37e1a GIT binary patch literal 2277 zcmai0`Bzid7QQ!JFqbKp075_^2nkWKpdbheNg$d4DiL@LGDVR@MJ7t;ijL+#ej?zB%0WUcYe0d^hB z==-7Gx#)g`V6; z=VW>Q`BZ+teJr}f+UT5%PAHGBqRb|&*w74J8B8oC!{4Jw6RkpQDKQ=GW9s7LT%``4 zn`fqB4t=^nNOL@r110d_Q1skXc-A>PZ|WgEa7(eL+MdJ3L;alVTTlIKQdzL0^z()H ztXPC>y1p!@zE~WTS}Q3B;4LD6)L^DDap=e6esLJK&>M!e{j{E)52ue2ee_~_OgpPD zMq}K@Eeq_N1^|O(;^}1{x+e!dn#A>&g(qP?fDJC^TUcNO){fuZY_MjvMjFZIG(%oQa8$+oqAorLc3X|YLMOaH8{bTgd zrs4d@Q&tMc4a-?aQ<@}+;;1=MrkKPlIMe66uQuBZ;$T9zjTwDq*|x~&K!KH}*PmjK zON8%OL)j~Sgpwxg67V}WxUn!D!jv1jOyQbw-OWTIr|;%Z*g7(+Gf8u0vN zTJ0!>`xev1Ev7axMUSkGJR)Pgt^{(s@Ph%*OMq;_0#T!`Z0K=4UtxmA25r6gp0L%9 zp->6~g|#ovK~uVANlQ1vKR8rfre{2gkMuPaSV=UNZb?nklBy9!MOsZo{Q&_Q*6Zv) zyI}pW680^f=^X?}&n9ob`*(e~#LInFyR?7vL*wtRB-6mG$PKsL+P`xgAU2dL1A|w_ z?mpZV@>3E;hTtHAcDU&5gU{aKqwJ7sF7aL*PPfVZ7oV<;N*i__v1*PaUB*(f&OIHj zyB3tEDU1Sf5^ZdG(24P4h0p8wu-;DS8(kN#Y>!oMZwZV461|K+VHPenm=oRDz-m&^GltC*M%LbI0!%ik?PT*Iu-b1XmLN$pyj(4PV_0}a9`xgv zS`X9H>rV=2SVLEf{;pYvYhL=y=E3!1ifkSS8Efy6UPi0fOAdJvRkU@?kwhSUT|9D% zPMzZ)x8$GDO}~vj2Nt=iRx8vuDhPMFzEJb z-GmElJ_@%VhFPlL>RwZ4kAc`*4^8e9`l|@Vu@!m4`TN8#+vM94VYAG@82w4CB^8~O zqt@lcm~e7}_l22(Z+~&8{gM&i~J?4(RBe*CE9t@=uYj45_dA)UT|$ zg)j3IE^6_v0xt|(noMmHSUGD%clq`MZ(qHMX}U_?yDSVFTsrG4Ui%En?Q$^=JlR+( zYxL1gaR8^9a_!;P=;?$u+wM$H*6kjApN4yf;MqE_V~K&~NS%f|5~ON9o=f5|RBO4B z;(6O|1rzWMT2JlGj2goW&)mLgy&Ljw8E1Z`Mb;V8@Lsx+7T`2RV$ZFeH z9zIDbr}Up*`e27ikTyGgxO_lhWzlrY?062pNcv{9eU<9z%B!N8LtZcM1zc*(T$^;3E&60H@}Z6S%KPE%cKkoiCOgi)V%C|$VMUXDA$uD4hH7iV z7k_HbCuYtql6wNEOOoAu_4~Ulo1eR*RO~_?h3()H_2J^U=_v-zL$F{2z+owh-SICI zy^B-D?4|T`^vrAS*yw4o$Tbeu8zK~^lH{F&l_oL$YGBXL`d24G0c5XeM3$V?Z6Oy?kYh=zqh@Cg=X zpsi$4Dk9y%QCLC^I>c?d;Cm5d%tU2mkt-tg;VAG>GYD6rKss5ZgLJQUaM1(jnK(bB zdliQV;Zz`O$N=KV%mk#{mcuoHlrS+A2dc%8IRlWBnFo+=I){ruc_7gY2mX#ix(qae z%;Y0v8&07Klm`uVxV!6DXnehoMs}Vx^TWwYK3GzGiv|N|C4(Ko7{d4UHb_SwhsWNcz4tBz%fK~gxt*%b6n17N3zKK z7}z&aiYlD}kpFuquD1(;B2ZTtuhmC*c6%Mj>Wxg)+%k}%az%lSn~PAT00(a2M&f!e znLzz43XB(GbnSnjkkuIZ0W%C>fdlmmF+dyw(O6UrZ~&2#H(~&D2HNXXf-1vt;0Biv z3}6B^JYZpf1Vp-yjg`WF<^*G`d(SJbWZEyCxK)bpBH?+QB1W#<7+VCUtN@uFC{0BE b*=cl*B-Hk-`3IQ z+NH$s+aJew)AZ!x`0bbFz)aGTwd~R^%YcaCx2EoVEC2unaY;l$RCt{2-RpAGFc1Y` zJ8f>AGUffB5(cJ)USe`>eUY?U?Kvwvc=9eAB&)VECMlqdtkRfPQPl~H*yo)?5kt`)ho9RX7cU(IX#!a6l_1Pf1whHf=@ux z+_x{ZW_W^i*ZX19(FiobW;lxS2rR*7d>Yuibio&zgCv*$nx;E&2o%A-4Glgd0z(i6 zum}V}3~-FQzxd|xg7zWNO#%TfIF~~4z!T5{0njwN-{=;x>ApRS3DHFoR?sVj;sGW= z1zCWmd3Zxs7)U`T09+&i1%XN;`cfbPCr|*O1eibtKvoza!M=M}ZUG};1c_288Ylup zPy#p-?jaQhLh$rfc#eV;NdSRZ3dI9KunP=;rg{8fZ{M820zec=RzY?p5eqZHC@=%; z1e*W=Fjp8R!Q&sx)}LV`SOm&aD3QoQFbH6PvP_BrsMIu_z;ybcF;cBoy?81}LjA^qsj*5@$xYRduR>pcd## zq3*EL-2>1Qv;r-l)1JH4Q_o7lT6Nyptbd;WP!Y66l1@9Qye=OEgb)&V0giZPfpU^~bq9Io(l&Ao z1l&?69wtIxPzzu?gZ8!ro#l(dP{s5%)MWuL<|uExznvxvd^L)unjbVi=yNs!^swt7 z@^|9lyEp7|CV{iCESE6)^^ba-MPRK@%)7HN-ham(&LFS=O;$xPIRGd96$#f#Vor#J z=?F6Iu0SBJl|H9W69PkEptnf^86Z>`p)owv*#rT*5Gxo7LU?*E^vWoK{LvGah!VnQ zQPsT)7eI8@D>lCvP7)-*7lpV&xt1!}6Q|U79LJ%j3&jK1jxEvG;(Gx)~g)RaTLAsumt_IrGR<7l)0s>*(i5KMJ z^~}?&T+7`A1j3VeF#>rA{8QjnIrRf9s6apq{0VS@I{`27CJ+S91ctzuKoPhSI08=s zN#ICe3H%5&fg6D*@FEZeP6VdFhd>p$5V!&l0$JcdU<>#Jx`0mL3uf_&-D$xbKCxR6 z%-|EdB>|P-BVZDo1Vn&tCSRatP@4FJOU8fG^-d3+DfQI09h~-$|4t%;S5Z5(EZ-B8U+v0FFTS_`S6)N><&& z|Hh^`X;lyZ8(Sjf)ja%fY>1V3NZF{sAtQ_|T>n@^SzG002ovPDHLkV1ksWlA!AGUffB5(cJ)USe`>eUY?U?Kvwvc=9eAB&)VECMlqdtkRfPQPl~H*yo)?5kt`)ho9RX7cU(IX#!a6l_1Pf1whHf=@ux z+_x{ZW_W^i*ZX19(FiobW;lxS2rR*7d>Yuibio&zgCv*$nx;E&2o%A-4Glgd0z(i6 zum}V}3~-FQzxd|xg7zWNO#%TfIF~~4z!T5{0njwN-{=;x>ApRS3DHFoR?sVj;sGW= z1zCWmd3Zxs7)U`T09+&i1%XN;`cfbPCr|*O1eibtKvoza!M=M}ZUG};1c_288Ylup zPy#p-?jaQhLh$rfc#eV;NdSRZ3dI9KunP=;rg{8fZ{M820zec=RzY?p5eqZHC@=%; z1e*W=Fjp8R!Q&sx)}LV`SOm&aD3QoQFbH6PvP_BrsMIu_z;ybcF;cBoy?81}LjA^qsj*5@$xYRduR>pcd## zq3*EL-2>1Qv;r-l)1JH4Q_o7lT6Nyptbd;WP!Y66l1@9Qye=OEgb)&V0giZPfpU^~bq9Io(l&Ao z1l&?69wtIxPzzu?gZ8!ro#l(dP{s5%)MWuL<|uExznvxvd^L)unjbVi=yNs!^swt7 z@^|9lyEp7|CV{iCESE6)^^ba-MPRK@%)7HN-ham(&LFS=O;$xPIRGd96$#f#Vor#J z=?F6Iu0SBJl|H9W69PkEptnf^86Z>`p)owv*#rT*5Gxo7LU?*E^vWoK{LvGah!VnQ zQPsT)7eI8@D>lCvP7)-*7lpV&xt1!}6Q|U79LJ%j3&jK1jxEvG;(Gx)~g)RaTLAsumt_IrGR<7l)0s>*(i5KMJ z^~}?&T+7`A1j3VeF#>rA{8QjnIrRf9s6apq{0VS@I{`27CJ+S91ctzuKoPhSI08=s zN#ICe3H%5&fg6D*@FEZeP6VdFhd>p$5V!&l0$JcdU<>#Jx`0mL3uf_&-D$xbKCxR6 z%-|EdB>|P-BVZDo1Vn&tCSRatP@4FJOU8fG^-d3+DfQI09h~-$|4t%;S5Z5(EZ-B8U+v0FFTS_`S6)N><&& z|Hh^`X;lyZ8(Sjf)ja%fY>1V3NZF{sAtQ_|T>n@^SzG002ovPDHLkV1k=hlidIS literal 0 HcmV?d00001 diff --git a/assets/bi/sam_bi_purple.png b/assets/bi/sam_bi_purple.png new file mode 100755 index 0000000000000000000000000000000000000000..7b9dc0c48779ea36bf7153cb6d74d8ee2fac3bb9 GIT binary patch literal 1547 zcmV+m2K4!fP)AGUffB5(cJ)USe`>eUY?U?Kvwvc=9eAB&)VECMlqdtkRfPQPl~H*yo)?5kt`)ho9RX7cU(IX#!a6l_1Pf1whHf=@ux z+_x{ZW_W^i*ZX19(FiobW;lxS2rR*7d>Yuibio&zgCv*$nx;E&2o%A-4Glgd0z(i6 zum}V}3~-FQzxd|xg7zWNO#%TfIF~~4z!T5{0njwN-{=;x>ApRS3DHFoR?sVj;sGW= z1zCWmd3Zxs7)U`T09+&i1%XN;`cfbPCr|*O1eibtKvoza!M=M}ZUG};1c_288Ylup zPy#p-?jaQhLh$rfc#eV;NdSRZ3dI9KunP=;rg{8fZ{M820zec=RzY?p5eqZHC@=%; z1e*W=Fjp8R!Q&sx)}LV`SOm&aD3QoQFbH6PvP_BrsMIu_z;ybcF;cBoy?81}LjA^qsj*5@$xYRduR>pcd## zq3*EL-2>1Qv;r-l)1JH4Q_o7lT6Nyptbd;WP!Y66l1@9Qye=OEgb)&V0giZPfpU^~bq9Io(l&Ao z1l&?69wtIxPzzu?gZ8!ro#l(dP{s5%)MWuL<|uExznvxvd^L)unjbVi=yNs!^swt7 z@^|9lyEp7|CV{iCESE6)^^ba-MPRK@%)7HN-ham(&LFS=O;$xPIRGd96$#f#Vor#J z=?F6Iu0SBJl|H9W69PkEptnf^86Z>`p)owv*#rT*5Gxo7LU?*E^vWoK{LvGah!VnQ zQPsT)7eI8@D>lCvP7)-*7lpV&xt1!}6Q|U79LJ%j3&jK1jxEvG;(Gx)~g)RaTLAsumt_IrGR<7l)0s>*(i5KMJ z^~}?&T+7`A1j3VeF#>rA{8QjnIrRf9s6apq{0VS@I{`27CJ+S91ctzuKoPhSI08=s zN#ICe3H%5&fg6D*@FEZeP6VdFhd>p$5V!&l0$JcdU<>#Jx`0mL3uf_&-D$xbKCxR6 z%-|EdB>|P-BVZDo1Vn&tCSRatP@4FJOU8fG^-d3+DfQI09h~-$|4t%;S5Z5(EZ-B8U+v0FFTS_`S6)N><&& z|Hh^`X;lyZ8(Sjf)ja%fY>1V3NZF{sAtQ_|T>n@^SzG002ovPDHLkV1iDnjnDu9 literal 0 HcmV?d00001 diff --git a/assets/bi/sam_bi_red.png b/assets/bi/sam_bi_red.png new file mode 100755 index 0000000000000000000000000000000000000000..93d566f85b6c8a0df1dfdd49b5c66ba8f09dbd3e GIT binary patch literal 1547 zcmV+m2K4!fP)7c3G zVQ=xk#>o*T^w8A!;N#|yn$$s3?Xb7ZAvNNFj8ctc;Q#;yaY;l$RCt{2-RpAGFc1Y` zJ8f>AGUffB5(cJ)USe`>eUY?U?Kvwvc=9eAB&)VECMlqdtkRfPQPl~H*yo)?5kt`)ho9RX7cU(IX#!a6l_1Pf1whHf=@ux z+_x{ZW_W^i*ZX19(FiobW;lxS2rR*7d>Yuibio&zgCv*$nx;E&2o%A-4Glgd0z(i6 zum}V}3~-FQzxd|xg7zWNO#%TfIF~~4z!T5{0njwN-{=;x>ApRS3DHFoR?sVj;sGW= z1zCWmd3Zxs7)U`T09+&i1%XN;`cfbPCr|*O1eibtKvoza!M=M}ZUG};1c_288Ylup zPy#p-?jaQhLh$rfc#eV;NdSRZ3dI9KunP=;rg{8fZ{M820zec=RzY?p5eqZHC@=%; z1e*W=Fjp8R!Q&sx)}LV`SOm&aD3QoQFbH6PvP_BrsMIu_z;ybcF;cBoy?81}LjA^qsj*5@$xYRduR>pcd## zq3*EL-2>1Qv;r-l)1JH4Q_o7lT6Nyptbd;WP!Y66l1@9Qye=OEgb)&V0giZPfpU^~bq9Io(l&Ao z1l&?69wtIxPzzu?gZ8!ro#l(dP{s5%)MWuL<|uExznvxvd^L)unjbVi=yNs!^swt7 z@^|9lyEp7|CV{iCESE6)^^ba-MPRK@%)7HN-ham(&LFS=O;$xPIRGd96$#f#Vor#J z=?F6Iu0SBJl|H9W69PkEptnf^86Z>`p)owv*#rT*5Gxo7LU?*E^vWoK{LvGah!VnQ zQPsT)7eI8@D>lCvP7)-*7lpV&xt1!}6Q|U79LJ%j3&jK1jxEvG;(Gx)~g)RaTLAsumt_IrGR<7l)0s>*(i5KMJ z^~}?&T+7`A1j3VeF#>rA{8QjnIrRf9s6apq{0VS@I{`27CJ+S91ctzuKoPhSI08=s zN#ICe3H%5&fg6D*@FEZeP6VdFhd>p$5V!&l0$JcdU<>#Jx`0mL3uf_&-D$xbKCxR6 z%-|EdB>|P-BVZDo1Vn&tCSRatP@4FJOU8fG^-d3+DfQI09h~-$|4t%;S5Z5(EZ-B8U+v0FFTS_`S6)N><&& z|Hh^`X;lyZ8(Sjf)ja%fY>1V3NZF{sAtQ_|T>n@^SzG002ovPDHLkV1j|kk3awb literal 0 HcmV?d00001 diff --git a/assets/bi/sam_bi_white.png b/assets/bi/sam_bi_white.png new file mode 100755 index 0000000000000000000000000000000000000000..34a5a8ca9e4f60bdd5ee6d2c052ab2fdf60f6a71 GIT binary patch literal 2361 zcmZ{m`#aQ$7so#{X2)l0OrH-bw_z^pQmoCEuS=LQ7^d9{m0PXGqFj>8Bs4B#=A$NZ zNvuMp)TSg#l5&|5DTQj2OBpj+xrCWXzN1jz`Tha>!~49S^Loy6o^zh({BTZs@9@-G zWv~hW04VI;ag7=M~5SfYsXn7wXkW`Z553A6f3MyOYajM`q*S zG1oC=1AD*i3}+u89mf1c4T!}=F-Z=BMC?%vLJ8P_-UZ(*&n(K+%UsrIPxy`S6!jvF z_MmUq_{Nf1N=P2TQ16{M^E>fWoMYIv$ti%4_99ihe0Auh^t(Orj*@vzlfwx?j~k-`-81L zfgg9WO8)SO$S$s^VZGHTxKdK;kK`C=3dRC(!{_e)%yVm0gZ$!FV*=!w_VbqS|4k44 z@==>XEhqH%Zv-M+YvZUpa&J)i$AYkR_GdoR;!Q4Xq*RSD<|DT~0|>w8KsRK0%Ji-e zJS!^|(QHiqmgvV%Yeom``}J$j6gNo#-g{US3*-#^VLO-w-rG?4tsnzfZRVXs;xA;s z=|Kgim`(~>IRW+&`;9kGy>e;~J(eu@9 zz`BEfDCR7%lXJ;^sK5}#oUtE&$O2_`%XFn{iF8@op461}GmbKgD1~j@ZzNYuF)v=Qm76*aG(%2p0fA=^0tbuiV z+Rp!ijr%fNyXKbXo$Yqyu>1;(38NRXCHel=m6g3+V?)!$j%V$DQhK(GdE6|MFC|VWqsQ!Pn!oAOCUySL0$-%2vf=1=o6>sqc@( z36gv$7VlRS4XqI_w%zuzx>0@OAgnu%XX^_Tt>oQBn~{tSPo(Enw&E-0p%8qc(@a_a zu7hKGwj;-H*XhsID%V5OZ}{D{#cbbRz$GGmy+sgkB0J$i@Pps?2i9Vq?d9rgBv+rc z6s4U>*irGI$1spthbf5X%*4rKXrZr+824;emq0fu(hqqpEQg8Q=c;}8gwlN}8jBtd z8UbO%=FKCVriCmU4&6rK=yYj(n`n(oUVf?nKc_<1^{Dn8ZqN?XlKRbSFZX`250VYf z2-jJ<`t-JBmZ+|Cwdm@btr~`P<15V`m?Em)uG=1Gpr{Lkwc~hc{fCDlDkg69O1YhN zb>6MlLAX0}TFZk}*wd$ogKn5^_Q?g!Shbd^#AqK)+0C`AHm*qrwx2O*DE{%!zm1!H zdQ&Pla;;-?N%Im>AXavBd$)f3oO4OzKE3&1&S-W*@Mui>iP+g~bYP|I$CX{`-45Rk z=^M9&!w6D;SY&WcQ|>2kYBuA~$7Y0cu0F0eKi_T89u-Y_vgkGy1N8W$ko6z(mL}C1Wuy+iy)*Ip z(YG5;0QkCM-G8P86{_7h~==FKaDEU}}N2Y(7yU4J#;cw?d7 zD|&@)HNnf4siybTIG1b>PRh~zG^ZsFg{9*XF8snZ;Q)DlT_Ef%xN}g$4 zIGOZU+oF}-RDce@OCsum+S8-mHtqjX(-`e&ibM$Fkh;<9Tj8 zOScU9A(pV{sZe?(ka1u8np-s_c6{kZ;%N!lEmdSl#B{IQeis7Snv_B7Z6Kyj2c8)t zqEWl)n5C2~I#3L`65o&^x`(@W{vHtHtq;HMcf_D0c;IyOS~O}40~7O_kO>%2_(!AE z<+-ryUalJn&~Setc>{qW5FQLLM5FX5=&jd|(}BlA(HjmK;%QLoQ~@AHih!x_)?@-k z%DcGz>kE5LTR1LxmtfTKt|{oaCq~a0W+%JzWNPp)$;uDOUa3|i_?>6ezYxIk*x`PQ H!RG%Db#^7) literal 0 HcmV?d00001 diff --git a/projects/e-sign/changelog.md b/projects/e-sign/changelog.md index 6a749a0..f0337dc 100644 --- a/projects/e-sign/changelog.md +++ b/projects/e-sign/changelog.md @@ -247,7 +247,7 @@ projects/e-sign/ | 개발 | 김보곤 (lightone2017@codebridge-x.com) | | AI 지원 | Claude Opus 4.6 (noreply@anthropic.com) | | 프로젝트 | SAM (Smart Automation Management) | -| 조직 | 주일/경동 IT 혁신팀 | +| 조직 | (주)코드브릿지엑스 IT 혁신팀 | --- diff --git a/projects/e-sign/esign-storyboard-config.json b/projects/e-sign/esign-storyboard-config.json new file mode 100644 index 0000000..e90bba6 --- /dev/null +++ b/projects/e-sign/esign-storyboard-config.json @@ -0,0 +1,268 @@ +{ + "projectName": "SAM E-Sign (전자계약 서명 솔루션)", + "company": "(주)코드브릿지엑스", + "author": "IT 혁신팀", + "date": "2026.02.13", + "version": "v1.0", + "purpose": "모두싸인과 유사한 간편 전자계약 서명 솔루션을 SAM 시스템에 구현하여, PDF/DOCX 기반 계약서에 2인 전자서명(OTP 본인인증)을 수행하고 감사 추적까지 완비하는 시스템", + "features": [ + "PDF/DOCX 계약서 업로드 및 관리", + "2인 서명 (작성자/상대방) 순차 서명", + "서명 위치 지정 (PDF.js 기반 드래그&드롭)", + "이메일 OTP 본인인증 (6자리, 5분 유효)", + "캔버스 직접 서명 (signature_pad.js)", + "PDF 서명 합성 (FPDI/TCPDF)", + "DOCX→PDF 자동 변환 (LibreOffice)", + "감사 추적 로그 (전체 행위 기록)", + "SHA-256 파일 무결성 검증" + ], + "effects": [ + { "icon": "📝", "title": "계약 디지털화", "desc": "종이 계약 → 전자 계약으로 전환하여 업무 효율 향상" }, + { "icon": "🔒", "title": "보안 강화", "desc": "OTP 인증 + 파일 해시 + 감사 로그로 법적 효력 확보" }, + { "icon": "⏱️", "title": "시간 단축", "desc": "이메일 서명 링크로 즉시 서명, 물리적 이동 불필요" }, + { "icon": "📊", "title": "추적 관리", "desc": "실시간 서명 현황 추적 및 리마인더 자동 발송" } + ], + "tocItems": [ + { "num": "01", "title": "프로젝트 개요", "desc": "목적, 주요 기능, 기대 효과" }, + { "num": "02", "title": "메뉴 구조 (IA)", "desc": "전체 화면 계층 및 네비게이션" }, + { "num": "03", "title": "계약 대시보드", "desc": "통계, 필터, 계약 목록" }, + { "num": "04", "title": "계약 생성", "desc": "계약서 업로드 및 서명자 설정" }, + { "num": "05", "title": "계약 상세", "desc": "서명 현황, 감사 로그, 액션" }, + { "num": "06", "title": "서명 위치 지정", "desc": "PDF 위 서명 필드 배치" }, + { "num": "07", "title": "서명 요청 발송", "desc": "발송 전 확인 및 이메일 발송" }, + { "num": "08", "title": "본인인증 (OTP)", "desc": "이메일 OTP 인증 화면" }, + { "num": "09", "title": "서명 수행", "desc": "문서 확인 → 서명 → 제출" }, + { "num": "10", "title": "서명 완료", "desc": "완료/거절 결과 안내" } + ], + "mainMenus": [ + { "title": "계약 대시보드", "children": ["통계 카드", "계약 목록", "필터/검색"] }, + { "title": "계약 생성", "children": ["계약 정보", "파일 업로드", "서명자 설정"] }, + { "title": "계약 상세", "children": ["서명 현황", "감사 로그", "액션 버튼"] }, + { "title": "서명 위치 지정", "children": ["PDF 뷰어", "필드 배치", "필드 설정"] }, + { "title": "서명 요청 발송", "children": ["체크리스트", "발송 확인"] } + ], + "screens": [ + { + "taskName": "계약 대시보드", + "route": "/esign", + "screenName": "E-Sign 대시보드", + "screenId": "ESIGN_001", + "descriptions": [ + { "title": "상태 통계 카드", "content": "전체/진행중/대기/완료/만료 건수를 카드 형태로 표시. 클릭 시 해당 상태로 필터링", "markerX": 2.8, "markerY": 1.4 }, + { "title": "필터 영역", "content": "상태 셀렉트, 검색(제목/상대방), 날짜 범위 필터 제공", "markerX": 1.8, "markerY": 2.3 }, + { "title": "계약 목록 테이블", "content": "계약코드, 제목, 상대방, 상태배지(색상구분), 기한, 생성일. 클릭 시 상세 이동", "markerX": 3.5, "markerY": 3.2 }, + { "title": "페이지네이션", "content": "페이지 이동 + per_page 선택. API 기반 서버 사이드 페이지네이션", "markerX": 3.5, "markerY": 4.8 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.6, "y": 1.15, "w": 5.5, "h": 0.35, "fill": "0d9488", "text": "전자계약 관리", "fontSize": 12, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 1.55, "w": 1.05, "h": 0.65, "fill": "eff6ff", "text": "전체\n24건", "fontSize": 8, "color": "1e40af"}, + {"type": "rect", "x": 2.7, "y": 1.55, "w": 1.05, "h": 0.65, "fill": "fef3c7", "text": "진행중\n8건", "fontSize": 8, "color": "92400e"}, + {"type": "rect", "x": 3.8, "y": 1.55, "w": 1.05, "h": 0.65, "fill": "f0fdf4", "text": "완료\n12건", "fontSize": 8, "color": "166534"}, + {"type": "rect", "x": 4.9, "y": 1.55, "w": 1.05, "h": 0.65, "fill": "fef2f2", "text": "만료\n4건", "fontSize": 8, "color": "991b1b"}, + {"type": "rect", "x": 6.0, "y": 1.55, "w": 1.1, "h": 0.65, "fill": "0d9488", "text": "+ 새 계약", "fontSize": 9, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 2.3, "w": 1.3, "h": 0.3, "fill": "f1f5f9", "text": "상태 ▼", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 2.95, "y": 2.3, "w": 2.5, "h": 0.3, "fill": "f1f5f9", "text": "🔍 제목, 상대방 검색...", "fontSize": 8, "color": "94a3b8", "align": "left"}, + {"type": "rect", "x": 5.5, "y": 2.3, "w": 1.6, "h": 0.3, "fill": "f1f5f9", "text": "📅 기간 선택", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 1.6, "y": 2.75, "w": 5.5, "h": 0.35, "fill": "1e293b", "text": "계약코드 제목 상대방 상태 기한 생성일", "fontSize": 7, "color": "FFFFFF", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 3.1, "w": 5.5, "h": 0.3, "fill": "FFFFFF", "text": "ES-20260213-A3F 연간 유지보수 계약 (주)한양 🟢 완료 2026-03-01 2026-02-12", "fontSize": 7, "color": "334155", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 3.4, "w": 5.5, "h": 0.3, "fill": "f8fafc", "text": "ES-20260213-K7B 장비 납품 계약 삼일테크 🟡 진행중 2026-02-28 2026-02-13", "fontSize": 7, "color": "334155", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 3.7, "w": 5.5, "h": 0.3, "fill": "FFFFFF", "text": "ES-20260212-P2M 외주 용역 계약 디자인랩 🔵 대기 2026-03-15 2026-02-11", "fontSize": 7, "color": "334155", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 4.0, "w": 5.5, "h": 0.3, "fill": "f8fafc", "text": "ES-20260210-Q8R 스크린 공급 계약 경동산업 🔴 만료 2026-02-10 2026-02-05", "fontSize": 7, "color": "334155", "align": "left"}, + {"type": "rect", "x": 3.2, "y": 4.5, "w": 2.2, "h": 0.3, "fill": "f1f5f9", "text": "< 1 2 3 ... 5 >", "fontSize": 8, "color": "64748b"} + ] + }, + { + "taskName": "계약 생성", + "route": "/esign/create", + "screenName": "새 계약 생성", + "screenId": "ESIGN_002", + "descriptions": [ + { "title": "계약 정보 입력", "content": "계약 제목(필수), 설명(선택), 서명 순서(상대방먼저/작성자먼저), 서명 기한 설정", "markerX": 1.8, "markerY": 1.6 }, + { "title": "PDF/DOCX 업로드", "content": "드래그&드롭 또는 클릭 파일 선택. PDF/DOCX 지원. DOCX는 서버에서 LibreOffice로 자동 변환", "markerX": 1.8, "markerY": 2.8 }, + { "title": "서명자 정보", "content": "작성자(이름/이메일/전화), 상대방(이름/이메일/전화) 2인 정보 입력. 이메일은 OTP 발송 주소", "markerX": 4.5, "markerY": 1.6 }, + { "title": "생성 버튼", "content": "multipart/form-data로 API 호출. 성공 시 서명위치 지정 화면으로 자동 이동", "markerX": 5.5, "markerY": 4.6 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.6, "y": 1.15, "w": 5.5, "h": 0.35, "fill": "0d9488", "text": "새 계약 생성", "fontSize": 12, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 1.6, "w": 2.6, "h": 0.3, "fill": "f1f5f9", "text": "계약 제목 *", "fontSize": 8, "color": "64748b", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 1.95, "w": 2.6, "h": 0.55, "fill": "f1f5f9", "text": "계약 설명 (선택)", "fontSize": 8, "color": "94a3b8", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 2.55, "w": 1.25, "h": 0.3, "fill": "eff6ff", "text": "⦿ 상대방 먼저", "fontSize": 8, "color": "1e40af"}, + {"type": "rect", "x": 2.9, "y": 2.55, "w": 1.3, "h": 0.3, "fill": "f1f5f9", "text": "○ 작성자 먼저", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 1.6, "y": 2.95, "w": 5.5, "h": 1.2, "fill": "f8fafc", "text": "📄\n\nPDF 또는 DOCX 파일을\n드래그하거나 클릭하여 업로드\n\n최대 20MB", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 1.6, "y": 4.2, "w": 2.6, "h": 0.3, "fill": "f1f5f9", "text": "📅 서명 기한: 2026-03-13", "fontSize": 8, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 1.6, "w": 2.8, "h": 0.25, "fill": "1e293b", "text": "✍️ 작성자 (본인)", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 4.3, "y": 1.85, "w": 2.8, "h": 0.25, "fill": "f1f5f9", "text": "이름: 홍길동", "fontSize": 8, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.1, "w": 2.8, "h": 0.25, "fill": "FFFFFF", "text": "이메일: hong@sam.kr", "fontSize": 8, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.35, "w": 2.8, "h": 0.25, "fill": "f1f5f9", "text": "전화: 010-1234-5678", "fontSize": 8, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.75, "w": 2.8, "h": 0.25, "fill": "1e293b", "text": "👤 상대방", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 4.3, "y": 3.0, "w": 2.8, "h": 0.25, "fill": "f1f5f9", "text": "이름 *", "fontSize": 8, "color": "94a3b8", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 3.25, "w": 2.8, "h": 0.25, "fill": "FFFFFF", "text": "이메일 *", "fontSize": 8, "color": "94a3b8", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 3.5, "w": 2.8, "h": 0.25, "fill": "f1f5f9", "text": "전화 (선택)", "fontSize": 8, "color": "94a3b8", "align": "left"}, + {"type": "rect", "x": 5.5, "y": 4.5, "w": 1.6, "h": 0.35, "fill": "0d9488", "text": "계약 생성", "fontSize": 10, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 4.3, "y": 4.5, "w": 1.0, "h": 0.35, "fill": "e2e8f0", "text": "취소", "fontSize": 10, "color": "64748b"} + ] + }, + { + "taskName": "계약 상세", + "route": "/esign/{id}", + "screenName": "계약 상세 정보", + "screenId": "ESIGN_003", + "descriptions": [ + { "title": "계약 기본 정보", "content": "계약 코드, 제목, 상태 배지, 서명 순서, 기한, 생성일시 표시", "markerX": 1.8, "markerY": 1.5 }, + { "title": "서명자 현황 카드", "content": "작성자/상대방 2인의 서명 상태, 인증 시각, 서명 시각을 카드로 표시. 진행 상태 시각화", "markerX": 1.8, "markerY": 2.5 }, + { "title": "감사 로그 타임라인", "content": "계약 생성→발송→열람→인증→서명→완료 전 과정의 타임라인 로그. IP, 시각 포함", "markerX": 4.5, "markerY": 2.5 }, + { "title": "액션 버튼 영역", "content": "상태별 활성 버튼: 발송(draft), 리마인더(pending), 취소, PDF 다운로드, 무결성 검증", "markerX": 1.8, "markerY": 4.5 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.6, "y": 1.15, "w": 5.5, "h": 0.35, "fill": "0d9488", "text": "계약 상세 ES-20260213-A3F2K9", "fontSize": 11, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 1.55, "w": 3.5, "h": 0.25, "fill": "f1f5f9", "text": "📋 연간 유지보수 계약 | 🟡 진행중 | 기한: 2026-03-01", "fontSize": 7, "color": "334155", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 1.9, "w": 2.6, "h": 0.25, "fill": "1e293b", "text": "서명자 현황", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 2.15, "w": 2.6, "h": 0.65, "fill": "f0fdf4", "text": "✍️ 작성자: 홍길동\n✅ 서명 완료\n2026-02-13 14:30", "fontSize": 7, "color": "166534", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 2.85, "w": 2.6, "h": 0.65, "fill": "fef3c7", "text": "👤 상대방: 김영수\n⏳ 서명 대기중\nOTP 인증 완료", "fontSize": 7, "color": "92400e", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 1.9, "w": 2.8, "h": 0.25, "fill": "1e293b", "text": "감사 로그", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 4.3, "y": 2.15, "w": 2.8, "h": 0.25, "fill": "f8fafc", "text": "🕐 14:30 서명 완료 (홍길동) IP: 192.168.1.10", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.4, "w": 2.8, "h": 0.25, "fill": "FFFFFF", "text": "🕐 14:25 본인인증 완료 (홍길동)", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.65, "w": 2.8, "h": 0.25, "fill": "f8fafc", "text": "🕐 14:20 OTP 발송 (홍길동)", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 2.9, "w": 2.8, "h": 0.25, "fill": "FFFFFF", "text": "🕐 14:15 문서 열람 (홍길동)", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 3.15, "w": 2.8, "h": 0.25, "fill": "f8fafc", "text": "🕐 10:00 서명 요청 발송", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 4.3, "y": 3.4, "w": 2.8, "h": 0.25, "fill": "FFFFFF", "text": "🕐 09:30 계약 생성 (관리자)", "fontSize": 6, "color": "334155", "align": "left"}, + {"type": "rect", "x": 1.6, "y": 4.2, "w": 1.1, "h": 0.3, "fill": "0d9488", "text": "📧 리마인더", "fontSize": 8, "color": "FFFFFF"}, + {"type": "rect", "x": 2.8, "y": 4.2, "w": 0.9, "h": 0.3, "fill": "dc2626", "text": "❌ 취소", "fontSize": 8, "color": "FFFFFF"}, + {"type": "rect", "x": 3.8, "y": 4.2, "w": 1.1, "h": 0.3, "fill": "1e293b", "text": "📥 다운로드", "fontSize": 8, "color": "FFFFFF"}, + {"type": "rect", "x": 5.0, "y": 4.2, "w": 1.0, "h": 0.3, "fill": "f59e0b", "text": "🔒 검증", "fontSize": 8, "color": "FFFFFF"} + ] + }, + { + "taskName": "서명 위치 지정", + "route": "/esign/{id}/fields", + "screenName": "서명 위치 지정", + "screenId": "ESIGN_004", + "descriptions": [ + { "title": "PDF 뷰어 영역", "content": "PDF.js로 원본 문서 렌더링. 확대/축소, 페이지 네비게이션 지원", "markerX": 2.0, "markerY": 2.0 }, + { "title": "서명 필드 배치", "content": "PDF 위 클릭으로 서명 필드 추가. 드래그로 위치 이동, 리사이즈 핸들로 크기 조절. 좌표는 %단위 저장", "markerX": 3.5, "markerY": 3.0 }, + { "title": "필드 설정 패널", "content": "서명자 선택(작성자/상대방), 필드 타입(서명/도장/텍스트/날짜/체크박스), 필수 여부 설정", "markerX": 5.8, "markerY": 1.6 }, + { "title": "저장 및 네비게이션", "content": "저장 버튼으로 필드 위치 API 전송. 페이지별 필드 관리. 완료 후 발송 화면 이동", "markerX": 5.8, "markerY": 4.5 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.6, "y": 1.15, "w": 5.5, "h": 0.35, "fill": "0d9488", "text": "서명 위치 지정 | 페이지 1/3 ◀ ▶", "fontSize": 11, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 1.6, "y": 1.55, "w": 4.0, "h": 3.3, "fill": "FFFFFF", "text": "", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 1.8, "y": 1.7, "w": 3.6, "h": 0.2, "fill": "e2e8f0", "text": "계약서 제목 영역", "fontSize": 7, "color": "64748b"}, + {"type": "rect", "x": 1.8, "y": 2.0, "w": 3.6, "h": 0.12, "fill": "f1f5f9", "text": "", "fontSize": 6, "color": "94a3b8"}, + {"type": "rect", "x": 1.8, "y": 2.15, "w": 3.6, "h": 0.12, "fill": "f1f5f9", "text": "", "fontSize": 6, "color": "94a3b8"}, + {"type": "rect", "x": 1.8, "y": 2.3, "w": 3.6, "h": 0.12, "fill": "f1f5f9", "text": "", "fontSize": 6, "color": "94a3b8"}, + {"type": "rect", "x": 1.8, "y": 2.45, "w": 3.6, "h": 0.12, "fill": "f1f5f9", "text": "", "fontSize": 6, "color": "94a3b8"}, + {"type": "rect", "x": 2.0, "y": 3.0, "w": 1.4, "h": 0.55, "fill": "dbeafe", "text": "✍️ 작성자 서명\n(드래그 가능)", "fontSize": 7, "color": "1e40af"}, + {"type": "rect", "x": 3.6, "y": 3.7, "w": 1.4, "h": 0.55, "fill": "fef3c7", "text": "👤 상대방 서명\n(드래그 가능)", "fontSize": 7, "color": "92400e"}, + {"type": "rect", "x": 5.8, "y": 1.55, "w": 1.3, "h": 0.25, "fill": "1e293b", "text": "필드 설정", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 5.8, "y": 1.85, "w": 1.3, "h": 0.25, "fill": "f1f5f9", "text": "서명자: 작성자 ▼", "fontSize": 7, "color": "334155"}, + {"type": "rect", "x": 5.8, "y": 2.15, "w": 1.3, "h": 0.25, "fill": "f1f5f9", "text": "타입: 서명 ▼", "fontSize": 7, "color": "334155"}, + {"type": "rect", "x": 5.8, "y": 2.45, "w": 1.3, "h": 0.25, "fill": "f1f5f9", "text": "☑ 필수 항목", "fontSize": 7, "color": "334155"}, + {"type": "rect", "x": 5.8, "y": 2.85, "w": 1.3, "h": 0.25, "fill": "1e293b", "text": "배치된 필드", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 5.8, "y": 3.15, "w": 1.3, "h": 0.2, "fill": "dbeafe", "text": "작성자 서명 (p.1)", "fontSize": 6, "color": "1e40af"}, + {"type": "rect", "x": 5.8, "y": 3.4, "w": 1.3, "h": 0.2, "fill": "fef3c7", "text": "상대방 서명 (p.1)", "fontSize": 6, "color": "92400e"}, + {"type": "rect", "x": 5.8, "y": 3.65, "w": 1.3, "h": 0.2, "fill": "dbeafe", "text": "작성자 날짜 (p.3)", "fontSize": 6, "color": "1e40af"}, + {"type": "rect", "x": 5.8, "y": 4.4, "w": 0.6, "h": 0.3, "fill": "e2e8f0", "text": "취소", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 6.5, "y": 4.4, "w": 0.6, "h": 0.3, "fill": "0d9488", "text": "저장", "fontSize": 8, "bold": true, "color": "FFFFFF"} + ] + }, + { + "taskName": "서명 요청 발송", + "route": "/esign/{id}/send", + "screenName": "서명 요청 발송 확인", + "screenId": "ESIGN_005", + "descriptions": [ + { "title": "발송 전 체크리스트", "content": "서명 필드 설정 완료 여부, 서명자 이메일 유효성, 서명 기한 확인. 모두 통과해야 발송 가능", "markerX": 2.5, "markerY": 1.8 }, + { "title": "서명 순서 확인", "content": "서명 순서(상대방 먼저/작성자 먼저) 표시. 1번 서명자에게만 먼저 이메일 발송", "markerX": 2.5, "markerY": 2.8 }, + { "title": "발송 버튼", "content": "발송 클릭 시 계약 상태 DRAFT→PENDING 변경, 첫 서명자에게 이메일 자동 발송", "markerX": 4.5, "markerY": 4.2 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.6, "y": 1.15, "w": 5.5, "h": 0.35, "fill": "0d9488", "text": "서명 요청 발송", "fontSize": 12, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.2, "y": 1.7, "w": 4.2, "h": 0.25, "fill": "1e293b", "text": "📋 발송 전 체크리스트", "fontSize": 9, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.2, "y": 2.0, "w": 4.2, "h": 0.25, "fill": "f0fdf4", "text": "✅ 서명 필드가 설정되었습니다 (작성자 2개, 상대방 2개)", "fontSize": 8, "color": "166534", "align": "left"}, + {"type": "rect", "x": 2.2, "y": 2.3, "w": 4.2, "h": 0.25, "fill": "f0fdf4", "text": "✅ 서명자 이메일이 유효합니다", "fontSize": 8, "color": "166534", "align": "left"}, + {"type": "rect", "x": 2.2, "y": 2.6, "w": 4.2, "h": 0.25, "fill": "f0fdf4", "text": "✅ 서명 기한: 2026-03-13 (28일 남음)", "fontSize": 8, "color": "166534", "align": "left"}, + {"type": "rect", "x": 2.2, "y": 3.1, "w": 4.2, "h": 0.25, "fill": "1e293b", "text": "📬 서명 순서", "fontSize": 9, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.2, "y": 3.4, "w": 2.0, "h": 0.6, "fill": "eff6ff", "text": "1️⃣ 상대방 (먼저)\n김영수\nkim@partner.co.kr", "fontSize": 7, "color": "1e40af"}, + {"type": "rect", "x": 4.4, "y": 3.55, "w": 0.4, "h": 0.3, "fill": "e2e8f0", "text": "→", "fontSize": 12, "color": "64748b"}, + {"type": "rect", "x": 5.0, "y": 3.4, "w": 1.4, "h": 0.6, "fill": "f1f5f9", "text": "2️⃣ 작성자\n홍길동\nhong@sam.kr", "fontSize": 7, "color": "64748b"}, + {"type": "rect", "x": 2.2, "y": 4.3, "w": 1.5, "h": 0.35, "fill": "e2e8f0", "text": "← 돌아가기", "fontSize": 9, "color": "64748b"}, + {"type": "rect", "x": 5.2, "y": 4.3, "w": 1.4, "h": 0.35, "fill": "0d9488", "text": "📧 발송하기", "fontSize": 10, "bold": true, "color": "FFFFFF"} + ] + }, + { + "taskName": "본인인증 (OTP)", + "route": "/esign/sign/{token}", + "screenName": "본인인증", + "screenId": "ESIGN_006", + "noSidebar": true, + "descriptions": [ + { "title": "계약 정보 표시", "content": "계약 제목, 서명 요청자, 서명 기한 등 기본 정보를 상단에 표시. 토큰 기반 비인증 접근", "markerX": 2.8, "markerY": 1.5 }, + { "title": "OTP 발송", "content": "서명자 이메일로 6자리 인증 코드 발송. 5분 유효, 최대 5회 시도 제한", "markerX": 3.5, "markerY": 2.5 }, + { "title": "OTP 입력 및 검증", "content": "6자리 숫자 입력 → 검증 성공 시 sign_session_token 발급 → 서명 화면 자동 이동", "markerX": 3.5, "markerY": 3.3 }, + { "title": "재발송 기능", "content": "60초 쿨다운 후 OTP 재발송 가능. 시도 횟수 초과 시 접근 차단", "markerX": 3.5, "markerY": 4.3 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.5, "y": 0.6, "w": 7.0, "h": 0.45, "fill": "0d9488", "text": "SAM E-Sign 전자계약 서명", "fontSize": 14, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.5, "y": 1.3, "w": 5.0, "h": 0.7, "fill": "f1f5f9", "text": "📋 연간 유지보수 계약\n요청자: 홍길동 (hong@sam.kr) | 기한: 2026-03-01", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 2.5, "y": 2.2, "w": 5.0, "h": 0.3, "fill": "1e293b", "text": "🔐 본인인증", "fontSize": 10, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.5, "y": 2.55, "w": 5.0, "h": 0.3, "fill": "FFFFFF", "text": "이메일로 발송된 6자리 인증 코드를 입력해주세요", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 3.2, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "3", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 3.75, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "8", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 4.3, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "2", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 4.85, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "9", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 5.4, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "1", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 5.95, "y": 3.0, "w": 0.5, "h": 0.5, "fill": "f1f5f9", "text": "5", "fontSize": 16, "bold": true, "color": "1e293b"}, + {"type": "rect", "x": 3.5, "y": 3.7, "w": 3.0, "h": 0.4, "fill": "0d9488", "text": "인증 확인", "fontSize": 11, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 3.5, "y": 4.2, "w": 3.0, "h": 0.3, "fill": "f1f5f9", "text": "인증 코드 재발송 (45초 후 가능)", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 3.5, "y": 4.6, "w": 3.0, "h": 0.2, "fill": "FFFFFF", "text": "⚠️ 유효시간: 4분 23초 남음 | 시도: 1/5회", "fontSize": 7, "color": "f59e0b"} + ] + }, + { + "taskName": "서명 수행", + "route": "/esign/sign/{token}/sign", + "screenName": "전자서명", + "screenId": "ESIGN_007", + "noSidebar": true, + "descriptions": [ + { "title": "3단계 프로세스", "content": "문서 확인 → 서명 입력 → 서명 확인. 단계별 진행바 표시. 이전 단계 돌아가기 가능", "markerX": 3.5, "markerY": 1.2 }, + { "title": "문서 확인 & 동의", "content": "PDF 다운로드 링크 + 동의 체크박스. 동의 체크 필수로 다음 단계 진행", "markerX": 2.0, "markerY": 2.0 }, + { "title": "서명 캔버스", "content": "signature_pad.js 기반 캔버스. 터치/마우스 입력. 지우기 버튼. base64 PNG로 변환하여 서버 전송", "markerX": 3.5, "markerY": 3.0 }, + { "title": "거절 기능", "content": "서명 대신 거절 선택 가능. 사유 입력 필수. 거절 시 계약 상태 REJECTED", "markerX": 5.5, "markerY": 4.5 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.5, "y": 0.6, "w": 7.0, "h": 0.45, "fill": "0d9488", "text": "SAM E-Sign 전자서명", "fontSize": 14, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 2.0, "y": 1.15, "w": 1.8, "h": 0.25, "fill": "0d9488", "text": "① 문서 확인", "fontSize": 8, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 3.9, "y": 1.15, "w": 1.8, "h": 0.25, "fill": "e2e8f0", "text": "② 서명 입력", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 5.8, "y": 1.15, "w": 1.8, "h": 0.25, "fill": "e2e8f0", "text": "③ 서명 확인", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 2.0, "y": 1.6, "w": 6.0, "h": 0.5, "fill": "f1f5f9", "text": "📄 계약서: 연간 유지보수 계약.pdf\n아래 문서를 확인한 후 서명을 진행해주세요", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 2.0, "y": 2.2, "w": 6.0, "h": 1.8, "fill": "FFFFFF", "text": "\n\n✍️ 서명 캔버스\n\n마우스 또는 터치로 서명해주세요\n(signature_pad.js)", "fontSize": 9, "color": "94a3b8"}, + {"type": "rect", "x": 2.0, "y": 4.1, "w": 1.2, "h": 0.3, "fill": "f1f5f9", "text": "🗑 지우기", "fontSize": 8, "color": "64748b"}, + {"type": "rect", "x": 2.0, "y": 4.5, "w": 1.5, "h": 0.3, "fill": "f1f5f9", "text": "☑ 동의합니다", "fontSize": 8, "color": "334155", "align": "left"}, + {"type": "rect", "x": 5.0, "y": 4.5, "w": 1.4, "h": 0.35, "fill": "0d9488", "text": "서명 제출", "fontSize": 10, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 6.5, "y": 4.5, "w": 1.2, "h": 0.35, "fill": "dc2626", "text": "서명 거절", "fontSize": 9, "color": "FFFFFF"} + ] + }, + { + "taskName": "서명 완료", + "route": "/esign/sign/{token}/done", + "screenName": "서명 완료", + "screenId": "ESIGN_008", + "noSidebar": true, + "descriptions": [ + { "title": "완료 상태 표시", "content": "서명 완료/거절/기타 상태에 따라 아이콘과 메시지 분기 표시. 성공 시 녹색, 거절 시 빨간색", "markerX": 3.5, "markerY": 2.0 }, + { "title": "서명 정보 요약", "content": "계약 제목, 서명자 이름, 서명 일시, IP 주소 등 서명 증적 정보 표시", "markerX": 3.5, "markerY": 3.2 }, + { "title": "안내 메시지", "content": "양측 서명 완료 시 완료 이메일 발송 안내. 브라우저 닫기 안내", "markerX": 3.5, "markerY": 4.2 } + ], + "wireframeElements": [ + {"type": "rect", "x": 1.5, "y": 0.6, "w": 7.0, "h": 0.45, "fill": "0d9488", "text": "SAM E-Sign", "fontSize": 14, "bold": true, "color": "FFFFFF"}, + {"type": "rect", "x": 3.0, "y": 1.5, "w": 4.0, "h": 0.6, "fill": "f0fdf4", "text": "✅", "fontSize": 28, "color": "16a34a"}, + {"type": "rect", "x": 3.0, "y": 2.1, "w": 4.0, "h": 0.4, "fill": "FFFFFF", "text": "서명이 완료되었습니다", "fontSize": 14, "bold": true, "color": "166534"}, + {"type": "rect", "x": 3.0, "y": 2.7, "w": 4.0, "h": 0.25, "fill": "f1f5f9", "text": "📋 계약: 연간 유지보수 계약", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 3.0, "y": 2.95, "w": 4.0, "h": 0.25, "fill": "FFFFFF", "text": "👤 서명자: 김영수", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 3.0, "y": 3.2, "w": 4.0, "h": 0.25, "fill": "f1f5f9", "text": "🕐 서명 일시: 2026-02-13 15:30:25", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 3.0, "y": 3.45, "w": 4.0, "h": 0.25, "fill": "FFFFFF", "text": "🌐 IP: 203.252.xxx.xxx", "fontSize": 8, "color": "334155"}, + {"type": "rect", "x": 3.0, "y": 3.9, "w": 4.0, "h": 0.5, "fill": "eff6ff", "text": "양측 서명이 모두 완료되면 완료 이메일이 발송됩니다.\n이 창을 닫으셔도 됩니다.", "fontSize": 8, "color": "1e40af"} + ] + } + ] +} diff --git a/projects/e-sign/html_slides/slide_01_cover.html b/projects/e-sign/html_slides/slide_01_cover.html new file mode 100644 index 0000000..73a2116 --- /dev/null +++ b/projects/e-sign/html_slides/slide_01_cover.html @@ -0,0 +1,102 @@ + + + + + + + + +
+ +
+

SAM E-Sign (전자계약 서명 솔루션)

+

웹 기획서 및 스토리보드

+

Version D1.0

+
+ + + \ No newline at end of file diff --git a/projects/e-sign/storyboard-config.json b/projects/e-sign/storyboard-config.json index ac14d00..5dd6fd7 100644 --- a/projects/e-sign/storyboard-config.json +++ b/projects/e-sign/storyboard-config.json @@ -1,6 +1,6 @@ { "projectName": "SAM E-Sign 전자계약 서명 솔루션", - "company": "SAM (주일/경동)", + "company": "SAM ((주)코드브릿지엑스)", "author": "DX 추진팀", "date": "2026.02.12", "version": "v1.0", diff --git a/projects/legacy-5130/00_OVERVIEW.md b/projects/legacy-5130/00_OVERVIEW.md index ca3dbb8..5fdf63c 100644 --- a/projects/legacy-5130/00_OVERVIEW.md +++ b/projects/legacy-5130/00_OVERVIEW.md @@ -8,7 +8,7 @@ ## 프로젝트 개요 ### 시스템 정보 -- **프로젝트명**: 5130 (주일/경동 통합정보시스템) +- **프로젝트명**: 5130 ((주)코드브릿지엑스 통합정보시스템) - **기술 스택**: PHP (레거시), MySQL, Bootstrap 3.x - **URL**: https://5130.co.kr - **DB명**: `chandj` (기본값, 세션으로 동적 변경 가능)