Upload 10 files
Browse files- .gitignore +6 -0
- CronosPMC_Employee_Handbook_v1.pdf +137 -0
- CronosPMC_HR_FAQ_v1.pdf +80 -0
- CronosPMC_Leave_Policy_v1.pdf +99 -0
- CronosPMC_Remote_Work_Policy_v1.pdf +99 -0
- README.md +49 -5
- app.py +327 -0
- cronospmc_avatar.png +0 -0
- cronospmc_logo.png +0 -0
- requirements.txt +9 -0
.gitignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pyc
|
| 3 |
+
.env
|
| 4 |
+
.DS_Store
|
| 5 |
+
.ipynb_checkpoints/
|
| 6 |
+
*.log
|
CronosPMC_Employee_Handbook_v1.pdf
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
%PDF-1.4
|
| 2 |
+
%���� ReportLab Generated PDF document (opensource)
|
| 3 |
+
1 0 obj
|
| 4 |
+
<<
|
| 5 |
+
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
| 6 |
+
>>
|
| 7 |
+
endobj
|
| 8 |
+
2 0 obj
|
| 9 |
+
<<
|
| 10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
| 11 |
+
>>
|
| 12 |
+
endobj
|
| 13 |
+
3 0 obj
|
| 14 |
+
<<
|
| 15 |
+
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
| 16 |
+
>>
|
| 17 |
+
endobj
|
| 18 |
+
4 0 obj
|
| 19 |
+
<<
|
| 20 |
+
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
| 21 |
+
>>
|
| 22 |
+
endobj
|
| 23 |
+
5 0 obj
|
| 24 |
+
<<
|
| 25 |
+
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
| 26 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 27 |
+
>> /Rotate 0 /Trans <<
|
| 28 |
+
|
| 29 |
+
>>
|
| 30 |
+
/Type /Page
|
| 31 |
+
>>
|
| 32 |
+
endobj
|
| 33 |
+
6 0 obj
|
| 34 |
+
<<
|
| 35 |
+
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
| 36 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 37 |
+
>> /Rotate 0 /Trans <<
|
| 38 |
+
|
| 39 |
+
>>
|
| 40 |
+
/Type /Page
|
| 41 |
+
>>
|
| 42 |
+
endobj
|
| 43 |
+
7 0 obj
|
| 44 |
+
<<
|
| 45 |
+
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
| 46 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 47 |
+
>> /Rotate 0 /Trans <<
|
| 48 |
+
|
| 49 |
+
>>
|
| 50 |
+
/Type /Page
|
| 51 |
+
>>
|
| 52 |
+
endobj
|
| 53 |
+
8 0 obj
|
| 54 |
+
<<
|
| 55 |
+
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
| 56 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 57 |
+
>> /Rotate 0 /Trans <<
|
| 58 |
+
|
| 59 |
+
>>
|
| 60 |
+
/Type /Page
|
| 61 |
+
>>
|
| 62 |
+
endobj
|
| 63 |
+
9 0 obj
|
| 64 |
+
<<
|
| 65 |
+
/PageMode /UseNone /Pages 11 0 R /Type /Catalog
|
| 66 |
+
>>
|
| 67 |
+
endobj
|
| 68 |
+
10 0 obj
|
| 69 |
+
<<
|
| 70 |
+
/Author (CronosPMC) /CreationDate (D:20260424153714+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260424153714+00'00') /Producer (ReportLab PDF Library - \(opensource\))
|
| 71 |
+
/Subject (\(unspecified\)) /Title (CronosPMC Employee Handbook \(Synthetic\) v1) /Trapped /False
|
| 72 |
+
>>
|
| 73 |
+
endobj
|
| 74 |
+
11 0 obj
|
| 75 |
+
<<
|
| 76 |
+
/Count 4 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R ] /Type /Pages
|
| 77 |
+
>>
|
| 78 |
+
endobj
|
| 79 |
+
12 0 obj
|
| 80 |
+
<<
|
| 81 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2680
|
| 82 |
+
>>
|
| 83 |
+
stream
|
| 84 |
+
Gau0E?#uLV&q0MXkbjYc93)0.qFI3**Ts1Ig%@D[S%;UK)8UhM!Cf-QG4b7toDfN0XYo[_MQ7p=#.j!Al0d#;O,!H"h#CePo^;ssq;@Cudip,W4;cQ,$XG@0r]7+KbkT2*0WD5dJtY,qGkCLS,lE0o^HIqm-?F\)d:bWZHGMG277Os`UN::U^L#?jmn`1h?:^9<P\tj*2L2QjKaR(Xbk1;gf<k<=Mgr"Jp055X^`O#`qes.`M'T:t`*bL>^F;>D]_Qf<mlVQdK)hLh.AL9-)[%sA[(VdR\$J;L6">3"f2#+nl+jD,1Ya#[a!5L*$f3i[c=]!'Vo)n#HN;'I`pDoY%mG7K:#BS;>B!hYlVqeuUe`1qQ<O<)6ZW'mmb6Fmj+(e&@GA+`a#'U>+K0Z,iJ[lZJWY$A.ZS(BW&mS5.-+V/:#F'/.1Ha"55@Q1TNc=qV>'(L.!YXZgLBX$%QHJ:mlBXa#P?sGTp%I(`^f3#"lF6erE?:eV+?AQ-M)iY?'&oblVh5Fb#P%'a%"058iO-.W<tR`83i2p;614T\tO'hMPVq=D02J0c!&gbl$TIaM=>brZ(=ruM8tk+E?Ag^Wo7n"hV&!YG!=u3;^rGc(=AZ[V-BCR[\0HB,O^l0QOtf.oN*J>'eB1pl8#h(FXqG`a`6]S's"HN;4Y_!(K^5t/9P[rEUT4^GU+;j*"nsjZ2(W.0Sqru$QGHKl1r"NBgee_K+@'%)8:Xh>>g%AIa'@/5C21:^<8@_RA<1<*.Qh-?oD^ZZ=e#0A7M3(>V;9Ng#16UR%ta7NZF.bk=]5(kd`9=)=i@LdJj4..2+]s8cte>dfKqs5\!56Xi4b>CdY>l!Nd5W*&__tCq3kf__:lfJpk;EUbDrSE?$/Zg0,%82PMs5)VM$"WD]T3GU7EFP"ip!6m^j*p<;q<!rU<r!I@0m>fip<nOoL5Z9MQ?kgT4VhoX$8>kd30:ml0jX"7M'FsOKLCp;,;>qKu'CIbS)iCID;^b:j"G\B"uYqd*`=K,hRc=)eO<GX&d?J&)>iU'7>fBct+%:IXr_8gJ"i&-nWY>i(h=M)W"8J/*r,FV=3Z3J.T`K>lTqdeXgS@*$.dAH*4aJqhGne\N13W.=f-b^dTE="#>7/dfh'W[tR!A:2s7dY9`_CX6MdhLaI!l_ZP*uu(MZe]5'%PLtgYt-Fp._PSn26qm3WU7!.Is*4sl9MG&Y8rXY,FNlWJ1buQk)K:/Ua;&d'n$l;90/s=!2RU0IrNQb-&tH(%!Tf4%mG,"kMrRAp:.Qt);1FF5%S2Ahd68I-7/GJ;hF%8Mi19j\'EpWdiPG/WuROBKm4(>#5s;SHrSYL]-YV]&&8im/?eXsEsLS9n>O5JNp#G$j4-&-,[LirY&Y>m7O?bN7]K3K>W#gd1"`s(AZR,p8.K=F/V-/]k#O4qq)/Rh,kFi5=h+oDe(MjjRN@9bkL$l'QBOb>&&P^7MX^h]PSK%;Z4S_`<FLjCnJtQCUCn5G+MkNc6dd`0,UDhI+_Y(**b,4G+QJ0uen(^.<:;57-p/8S#=[mJ'5%^\B2rP;TtnaLL2]<+-?BL)$X2T4ajD"K:b9qfogK5J.XPGp+61?*:?A<)+XAhYE`]LO=fB\.7F]ulm"9PjgEOu>-r0HKAPT?2Zj@?\Vm[[nf`a,1s/Q8mK=^AgNaJXb\gg1,EN/T=GP+VeY3aS8N/.D=AUjVge__gn9Pbi`'(."Q.5K%NY62%Ah`gMEBQit%h)=fq*ZJ-Cg>n#E:!X1N`@^C.dfNn-),G>^\$%ki@5Kuip2-9YEkg5!p>c+K.RP\BBSB^.a%?oN8+&DtH%Kn&3-*W;<Mq$C9u!A=AHgljFK=_*R)s9NBraV?9&=\#I.=XH.t62QU2F(XcQ1=tV>Xch>]h"gr_sYp#_YD"OVbFtZF&TPiEg[m)Zt?mrD<NKqT."B5a@@7]%]jD7]1I_P!;0-gg6qRa2i2Sh:(hqR409ldF);CD4eRE2Dj?%?7!3be^[FsrLi8sGAq`//O'UB]l"ZP+tP]+d#Era]>FcgIl_'kdWUq7a_L.@CNUlhjrK.N?(]d7Djk6:Fk]oWbnZaQDn_3LOGc*4:+%k^GlY9I*#X8c:?$:d$)KrR#XCW10XnT&[OM<,f_)Z%W+s72.dtm9qYnTj9&%:B2N<*AIYZ\2[$mt1`EBc\**?am?Nh*OXf[fc?$:\n%at*C$_r4(Gp-'ca$de^!nR5fmf/AgXd^.bA:QS77-fY<_:k4:QdI=kjFYk^#k.DfTf7J+]_J#S8ORMqNCKG"E]m2DX4\oI3k6b_6Vj#<S9)iccK2GrD<A<t,jLu6$SZoOiI@2i!=qBP2k38rNQSIm-ME&S1\&r0?)6]eX_F4YPKUueKVpaiGt)V>30G-q@BhaG75Cff4.W6H,UEs/l2b9UW0afXW)`Yu'+)=8-ci`Q@kkLB.V_ZY5qNlf#T;7VLT._"^m$QQft%/S[lr@?=6\0XQ+"`[-n*?u\W]pl`oaVcBQu$&cj?>QNJ%!GO<]6Yl/Z+Bf87)fGBuE*_Q1_qf+9'Va)5u^JVJ3UJj,E"p?Cm%gi_*94u^$TqqX,h4W^A32eguf!,FWC+^!R2e2D;_,DWeVpH0IVbNeOaZ<4Z2>k=9e*i&n+dZkoI@5kWV)8hkX(B'(&OBWSqB$->AJ1`!H"-c=ji\@:nlu2Krkbe~>endstream
|
| 85 |
+
endobj
|
| 86 |
+
13 0 obj
|
| 87 |
+
<<
|
| 88 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2549
|
| 89 |
+
>>
|
| 90 |
+
stream
|
| 91 |
+
Gau0E?$"c/(4>k[3)?N%7q+mOgO2]]\Flt0X0t(`75#2Y8Z4pA!C3^^pNHY$&tRYg8r]"%LnQ3u>jU/"",>=AhpDBBVaS9nl/PK/@78QJKtX-Ldl[Cg4o98#IPZ"ON.XEA53R4-nK=X25P<J'+>!!<*s@491_-M>$T_^GfV`FUk>thub"V6,BGO$(]$2eX)3Zm=J(eLX`N=s\R\snDEC&'gC&/o1@/[6:2i,&9iTn*NfTK04qaE1Wi6RM!rd=Y:/DJLP(Bo62HqZ!^];)#`_Mi[$,X%^s#n3hr#>t;tiLh:f/)mo;.-u3BU(X,Zs2f%9g-+`s\^&(NYVsu,&Atu3q"!S7_X_lXdJ^AA5B=*mYpBE]V8Q4@FOs]u\[G^?$]:e=R5HS%RYa^K93UM".EmZbS7GbhFsV7Y?8M>.=Q)H3,q3;p)5U'sC@6!Be/d.Q?^l.m\q+4mcr92h9a&\qR0<bb?8q4[Tu(-N1EKC)%6OO9#Z"1XK7Ns!oWt%PD^s@n50t[8=X>VW3LKEmG-48#+6c@!:/fG9o85a#9f!,P^5fTE%U@%%MksfB_3-C#4g"XGcd&`c3>8`W9,_/\3iJ`<35Rt>SoS)MFXO%:>_urqX>Jb6lMM)V_H@GdYGu3>SR"'TcHb\MhDq%nDU$pWAp?XG8T&48Uf<hHk%#GX4E`<@6nIrJd>2@<1+TW6Zt@l<:_R"CL.C57NZ&!s+6-WLMYhgS"JjS8p0?hb/*uQ2J=t093DU:G@pNZ-iKeqMQ0)J*PRQ/".o]Q"oFjd5K4WE(0Wb'"`rZ/81n@nP>?sD.H-.;]fs231rUHj)<$1*b#!M%uLr@-'G?!6\Db,CPP5cchP'];kDI\rtChrUoh=&Ufo?NS8o#C]LEpf:8>W*GjoV+6'?I\tT6q/M0nKaGDA4<3/FXfI.g_fdm"B&Ecnt/dh+C5C^EpI5nD%"d;jtE%Eng7"LH4:f5Y@4mJb-PQNGp9`9jp$OoU.e^pf[:P*Um,Er3CR@<q'u%h<k4,bcE)kr\.q9Hk8I7VGhW4eroiF^=WcY]34%aLihQQFJg*2Jpr(PU'RjZ%=F+AFZT4WPZ@VTn_Sfn87E4uN,p<,YM-0EUh&i(lL&q7I3I?L\4M2eiJ^F`W;togd=Ff.J-[6-WSNbic29@HKhT<<5+6('>/"RLDWcFNSS<IO14EHS*B]GCo`Seo7HEFP3[,Od5Pp\Fi.*5sL?A..c]fO9C<s<6t0*35T(,7qb=4bJPe>mN'cQ]N.OLmg1MA_H%.ZRBqZZ@8[[u9g^</.m@5+p8/4O#@bM:uM5,bK$)E2W*iU:'a[69'j3@;FZj"X+agCB.j_Hua)&%rnOf=.hSM\0lkY3(O]rL9p3)Ul*Ru<,!-L8>h0p!!dU&bW5Q-T0AHs6%E4G9bU>mh33IHl5g>USQaHH\6rC8Q:tlWh$FT.C=-05>ADHsn&E]#c[ptAJ'!C^'Q8<ri=?[G;*Yesk!^3e5Z]F>#cP<2DhH.OS[JIT)a_GH\d8KI/e`;%+6GtjS.Nn5W5O%aonHG?aO@OrgU-J0JnIf^4+0fg*?Wb5$d%3fI-['*ee9JeE5m#7Z/eS'\nhN1I)Gb9NZhEmF'CJ9Y'QuVBYEF.>+LS*4QFO"O:sTVluL&hG;97MnD]U"NB+-IX0SHf`OR4Os/H)Ph-ll+n!D@ioiJ?0U))(q.'hQ1hKs<_'5B4d_=n6.?A\&.rGmR<!)g4&V@?W>ke/RQGh&J'kse0HdK.X"+6-11s"d.ZkH5MbMFgaQnPm;oXNL<BN_R8aDK-`&i8OE#K3"I5Z#j.#.PEULg`ZG3Za4f4Q)&6PKL4Y>rMi'"_#]%R9;X/N%/5?NaN-!EPk!+oplT44P-G/38Xa<c1`i5,JGKf^!cS5TT#609G(\P\'akV_]MZjhYoa?HJQT-gm9DLGhFue,;KSUTR>79NDJ'@j0+;bqRF18CH(t:"43JAM`M7\6o0ZS(])>UB#0HcKql-.8(!,R,m+8C@&FRMS$^JCt'Bjcj0=:Qe`rH[!$c$oL87+7$,5%LYrs"<.K9/fF-P3/L1c[A&p5sAKCJ>p4<f7GamjNQ*UZ+2h!NGrJ8<<[;+=C3uoeS1?%9_7nD>NHu[&i'WFc\AE/c@S\CH=kl$^(=("=2a$H-q:%kruu3O%nG=-_NP32s3X^RT@/pJZeeVQYP>-)h`iRj7b_VM!P:51+l\PE^GTB0gfOq@@]OW*Ej<>>_.L0@0;fBQaYPpYAGF`DV50=mZHXN!$gf>*1A81lR\9)3j2_3c!udT!9UiMl/3-'9@W8&>OE]3h=aG99$_J@2]!WY`O.ei`NFuNjcmoC._hU_BQAUWI]O$Ngo(28nb/$EcOgYo8/YkEUWK/4VF\n&l''_]7^&&ne$hR#^NfF[@_VlA=D/]KGSYpOL`X\"*q8>dD'VoCI(*hGU6pM8)_EVef-U8":K;7'RK.I+FsoJe*SRJ\Z(59;]2Ghb)or=%Z,J&UhleZj-o3N`1_nRj9V^4^?=HD&+/XEo:i%m4R".HY[Tgi0D>h0DUjR+[e`>r\s4cL@cN~>endstream
|
| 92 |
+
endobj
|
| 93 |
+
14 0 obj
|
| 94 |
+
<<
|
| 95 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2594
|
| 96 |
+
>>
|
| 97 |
+
stream
|
| 98 |
+
Gau0E?$#$a&q'GWR&?I&-#5s7Hh6<C]mHp)hE#FXntHqXKI"J]^]:%?b-/Q$OJ4/Dc;L[`0$>#!&3sa:Ve6uG&)VqfNAI<$B(YM$5X@rI,mAqhJ7_$ph<a-^Ms?K4Ik^8MWpAJL0:7b$HMQ<sGX,(gI5pMPVVsA)rh/!RL>sH%1:k+U>&!m'q3L/O32V&aKMbT=o?51VEbjWE9HQ["k>t_Aqjh@!jp@MQ%Jnnbh]!Y$oc[KFl8M1S-R4"ul/hB;T.\WBAV73K`6,!BdBGk"%OY@UI4_;9MdM"NDWXeuN>`=[Y.l4,n8Zd(I(4=s9R'haeR"(^@s<4!eP[_\3Jf=\[F?O]SC@mqa(^YA$QKq9,AB_`8#a_.'+$\7nXe`>@O0WO/Wq:m[R3O<-Sf-W/PsC_3/qH\G;*8K3\E/rnPaNX2_p\6Kg-dA'F(XMN^:rY;W0ZF.DfJ$\0cF?Z?l_W74Q+u1nGmrA@CPeQDYR/]+*PFGlt@$^P6P@D'^fC'iV<PGWh^N5MgZ>*Zn(]T47`P'X+-$:d+5"Vt*-#[-]n0K&X8"8:2pB8[n=Ch-/j+U)\]"U9k@2]b:u+,H2[d]bV0l&XgCJo0fhq&]^A?"=aJ1_H9*M8UT$6bCMq4OAIIsc+hGr/M1qbZbircQM0srKrG.dQm0[^LR9f!Rs5g1c];+JNapK5.Vp_^5AOtrCZa*3mN:;</j>G-ST"IbOfL>AaoF,#o?2p8pDpiU\\7=U(I4.@%cf6bib;3'q%`KsfBDTVNN<l?f&=Yc'F$$!$Y@042S]gBND1Kc<kmt.2"3!pmUHO(q9"l3]g4mH6UQLBYW&+L2]VRHP6o%!9ADlV+rAXZd11sd;1?;"\V];t[eg49o^i0Pm_1Dfrgc36pUA]l:;<j9Y7l5CfG^anWT7a"IM&YjQ&m?*DM+.kHK6:+[Xg(;cE1U$.?;o_0.Q(f92c<p^H8obb%)]*@4eN<oZVBg_-t&Uja\*X$n!DhE!/%fEu[it8#N'?IeT<$J<lHU%3!qP&nT'S2V)"PW@`PHHBehHos8oXK8kq^"WfK;fV&YQh>!G$Gl'R4][UX>bl"IMCnot",H!Q@Oca^KkC>#sO`f8Hn/Ic&(of"HW%!^p(Hgrg+,A3M]h#5A)0D]RnCAl8X#=]W*)+\=c/<qPng69p'cVt1pm,^UWdT(..K^(?6_mD9U'`rZpL9>B%CFgZ9nfUBctT&ZJgEAgQ=H9t[(tc4VVU$o>H-(XNpq=&TUJd%8WE:MJUBm@KP@-Bb6jMTN("2A$9"N467Zff$+5oBF>$^W1N48`1DVQ-*)'.&,%$$gEEi3;O*+HlM#HJ?Lb'3r7+)8cYd#e(&otL6WZ'1`<f[(14"K=-8GE;\8>aXh%t)LRanO?Ph9=Vb-GMsb6oSLom\0l\mXM(._r8l8n62o+E,rLA8T7jLO*F8$kSZ_!9_C2Wn4l)r<g7K!q!BQ"9ID#YIAp*\-T_R@&uosdo;`As=pZggJG(PfiDNbnqe1h]H/E(`iRs-QjqL>.c`]$V912S7o"s'%G?f3*ebKn(OG>BkNW$CK;n06%BOl@e"@`JV<c!b?2/u2[/ecum@W-X;A:!97Oh!nt>jWN&GV'UKihYKNQYd`W3aV8"a@gZ?Co#Uc5mT.N=_C42!MVeB&Vq[-\2hUW;S:C4WO[TY-\;Yc/_7kVmPAR:a;GoXDn<KoY(hHZbY/MDFTE)dp=@>q.U>b!<%-O7BS4q#loqs?`K>_h&m/cc0/ae1)sFl<?FokKLer%F<`O\GEe:!k>]H&(mPA)e@/B&1ccnJ1%A]&3DoVn+@>bN(VHj@4Y^E*MnuP.j7(ML0,,80_=]k+2bqEE@`YH9I5(V>E`+,mijRrMYC2VeK;YPOUJ$tX`FQjPj=XY/S<@Y!Lm1o4KB6l1H9DA""a!-#fpK&8^\(0tka08F`ZI2+T,c>Vblk7=;XK9Uq+9>H$RnpN&eL;5E8acPu5*bt-]'YQc`mI!=o4D7r?;Q!SLVpHb2U*\2,l:BSfD)RhbG$QfQW5$3Mlba5;Bf[No!;:k,.Ubqmph&[=:kea@Ne`^g')*@5C5QBSDpnn-[)R!NgUpD--,mkCUidLK>;V&\-e0nR\8X8SQ:!He%/nlM'p56j>15_D>==RE.Vcnc#rKnHr!2oi"?krgbSTS+83DX!p=c,iTZA[eXs7f=00-I!I+MkK]W3J_-m_SFBDra@HC+,j'Zs,`!#+h[fliL6#Yp.;!h]C[r6X[8<5J'DVLlB:d?Q7X5+;.#N#o]'5tEQ)5H9.%U6#UFS8gR:3#ntq6[d_A=@a-iqJFWXYo!;aa1L^?GC[^)Hc.e?TDT5([t>0EkoNLm"$)a:(H&4$S0HXN;_r0c3LL/^;K2Pb-#C?+lGif_]AcL.k/m2E76.tmb6o@2En6b4uh*:*J$d$0DDsSMfnZ)A.m)_cZ7X;b8g^u:[$%PNg4<IU11JDAWkIG?MmTd,,'(&UP]IDf9\TkFj.OKPfE]'@K1I8Pno`\r-Ba.EuOf8*6/ul]hc"(c3KC5?#-*;6bHK9E$F;],l:(Anl/,9f*7J^ge^p\Sa>+?[:O*?__d>g\no*n7#Wbt&$U4boD~>endstream
|
| 99 |
+
endobj
|
| 100 |
+
15 0 obj
|
| 101 |
+
<<
|
| 102 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1449
|
| 103 |
+
>>
|
| 104 |
+
stream
|
| 105 |
+
Gau0CgMZ%0&:Ml+bZ!I7?:@pgmShlq\j-X6'/,4EI\EU#`Jm88,\>#Ghk=T$b/IICJ7B_-8P1f%bflK;#;1G;p4$6Hr&KCf)\5%QAiY+0'>j*S\=T6SSS`Q`].nFTgN=la^$3If[o]uE2gF)T7h]Mjoqri6U#UGr*5S_.dA<!mlFVNu@IF"IHkcjN?mX#e%i\pa1d$IBXQ9<W*+hECp8^('J#X;EIc/5LT6ePD#\!03-^i=g$u`?D[qB1==m.pZGs6ohU*+HMKKOQ`/)fIR)f`*g4Ron)`KS)O:S\_B4)Pm[!Enp/aIO[9potbaaW!!?#b9JrM]8:E[blr,QI(aQESu`?Ph.2t9Pr]_aV;.kSFDCOF,np(5/&%V/<"n8\aB)p2o<iHMRM8.]63'>CD7X&99933Y#',E)8eX?(#)!K&S`VYML=G7"DtBo^C>/*O'g\rV-7Neh^6iCY'p[=?Uo/jNaE[WRts9anM,&;495=XZF$jWRE0o/0.7^i9F4mC#%7&8P@NpH3"ju\'Lm^aLBlDc'TeX%']=%lWF:NSTa0MG9VYPHm$fsIk7&7)W.@oEUWTF5Qq.gfKTo_MKu-)\1,/oK4?Y^YSr"]>c;7LDfS5D3JoGlJMboOl8<Gd/YoG0lBkB%$Y'#ACIQdtl/:LFF_+=A#a#0)t4bSbqWq&bU]Ylk`\TMm*Cu*ltJ^LT_,\'!Hn<oE3Tp7MZ`><nS=JH=^ao&dbP!.G0'ML6`D;<,rSKXnh-=N'sL5ZuS$\_QkA"\3uZuJl7:1nd$7QN+TCTK7[&;mB-Adg[M2:"5TI"iqM<bt'7`j"I.7*6<,U0*V=m9OL6Q?cCq/PD[Qg*83:6WirWLKN;SJkl:ArSVWFTdC@5E2tt$g78-Gm]i)#=;[A.'*:fi^aJkh8ogjpI*H(E)i=pC5(cg4&/c:$RSd`sC>f9k5a2DLY,]3mViQ^LQ`L+t>^`8_#2]5.]P!c2*]KX7&dsScTqHZu;%iI?=AA?Qks_F,59Gt(dH'BEY]&MW/GS[:TEGhSOJZ\oY"2J>nFh&:r7GV5@8u<;h#fGig#_f!QN=ssS/FXgFRjV/2t7c+K(n>2l]dMcT[d$TUC<D?GR]lW!\qT/#k6cYV7E5G(pC;hJV$jbhSN4/e&RWk\4ibog\rT^[bl^GO!r$8`'a&N[O"c>Eh:Z%c:XQ(L:HRkljKFa\AWs1:2"RF?di4FVf^g3;L9B+Ddi4C+n-%uZ[us*2j#\fHu*HO"[^\lc%,'8*/lD;s$J-1E,tLeU2T&4)1lUf.^Edl:G',1RGPh0oT0[pb@(CGPKS7/`3D[-JRE7k)`uPb4"K!%YCR'C9[IAJiqY"`]#9Qa*uBlhhU[A9[fdGi/>O.M7<!9An!c;"MZ7M=ZJqse3a7-jn@,Xf1]rnK<,>4NZE:c_3nfIGL36p[99OV$9fjo>,m;Nm#M@o<D#~>endstream
|
| 106 |
+
endobj
|
| 107 |
+
xref
|
| 108 |
+
0 16
|
| 109 |
+
0000000000 65535 f
|
| 110 |
+
0000000061 00000 n
|
| 111 |
+
0000000112 00000 n
|
| 112 |
+
0000000219 00000 n
|
| 113 |
+
0000000331 00000 n
|
| 114 |
+
0000000446 00000 n
|
| 115 |
+
0000000651 00000 n
|
| 116 |
+
0000000856 00000 n
|
| 117 |
+
0000001061 00000 n
|
| 118 |
+
0000001266 00000 n
|
| 119 |
+
0000001335 00000 n
|
| 120 |
+
0000001643 00000 n
|
| 121 |
+
0000001721 00000 n
|
| 122 |
+
0000004493 00000 n
|
| 123 |
+
0000007134 00000 n
|
| 124 |
+
0000009820 00000 n
|
| 125 |
+
trailer
|
| 126 |
+
<<
|
| 127 |
+
/ID
|
| 128 |
+
[<4d5a30e34e19d2ee015939e32161310a><4d5a30e34e19d2ee015939e32161310a>]
|
| 129 |
+
% ReportLab generated PDF document -- digest (opensource)
|
| 130 |
+
|
| 131 |
+
/Info 10 0 R
|
| 132 |
+
/Root 9 0 R
|
| 133 |
+
/Size 16
|
| 134 |
+
>>
|
| 135 |
+
startxref
|
| 136 |
+
11361
|
| 137 |
+
%%EOF
|
CronosPMC_HR_FAQ_v1.pdf
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
%PDF-1.4
|
| 2 |
+
%���� ReportLab Generated PDF document (opensource)
|
| 3 |
+
1 0 obj
|
| 4 |
+
<<
|
| 5 |
+
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
| 6 |
+
>>
|
| 7 |
+
endobj
|
| 8 |
+
2 0 obj
|
| 9 |
+
<<
|
| 10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
| 11 |
+
>>
|
| 12 |
+
endobj
|
| 13 |
+
3 0 obj
|
| 14 |
+
<<
|
| 15 |
+
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
| 16 |
+
>>
|
| 17 |
+
endobj
|
| 18 |
+
4 0 obj
|
| 19 |
+
<<
|
| 20 |
+
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
| 21 |
+
>>
|
| 22 |
+
endobj
|
| 23 |
+
5 0 obj
|
| 24 |
+
<<
|
| 25 |
+
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
| 26 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 27 |
+
>> /Rotate 0 /Trans <<
|
| 28 |
+
|
| 29 |
+
>>
|
| 30 |
+
/Type /Page
|
| 31 |
+
>>
|
| 32 |
+
endobj
|
| 33 |
+
6 0 obj
|
| 34 |
+
<<
|
| 35 |
+
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
| 36 |
+
>>
|
| 37 |
+
endobj
|
| 38 |
+
7 0 obj
|
| 39 |
+
<<
|
| 40 |
+
/Author (CronosPMC) /CreationDate (D:20260424153714+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260424153714+00'00') /Producer (ReportLab PDF Library - \(opensource\))
|
| 41 |
+
/Subject (\(unspecified\)) /Title (CronosPMC HR FAQ \(Synthetic\) v1) /Trapped /False
|
| 42 |
+
>>
|
| 43 |
+
endobj
|
| 44 |
+
8 0 obj
|
| 45 |
+
<<
|
| 46 |
+
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
| 47 |
+
>>
|
| 48 |
+
endobj
|
| 49 |
+
9 0 obj
|
| 50 |
+
<<
|
| 51 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2480
|
| 52 |
+
>>
|
| 53 |
+
stream
|
| 54 |
+
Gatm<gN)%,&:O:Sm%`CZ/2*_MI;)t7:,T_D'._PrN*[V>Z;?a<!g$=TpH8mj,We`EELk<A$jgAZ]B>^?AO&HY#4C@o-i.CG5MQAUKXBN20_WMnr12[scT[o-:M0N4mS2F4?L.pg8O-($brrfQ[(F?lD__jd!C^ME&)q:sbFHk]N@qTOrSs>I@5t)P;+acCN)o+cF]!$fW=jM%F1o/pT]JDFr/M5XmM\K")#;Y$]AAEl8\rLfhJ@d.;gS<;iS@XVoP>Ln0g)(,:2r,^iYalDmq$Tbp)YsP/5O.VX_BojgkmAtA'Z5e5m.S33;2Mko"q@JcXot)iR=/7rS]*!^dU$f3LD2Qq"4aF>eN@]_s2jIVe:>U'mI[sWB5`Qj&>$XNC+9j)nX$YcD.k<ND)sPQ^!A*r^_P(^!,*VO<9E0oY[%s_/r:fWjP[mp>+Qq;6%@ijCJ82afs%4PM`95+s!58cGLu@Iqn[m\Q+qnSQ*-N9#@tYgI6!JV%K_(`Vno<-s<?K9fnoFUo%&P]*nq>NA_dJA1Pg1/nns?WQTT8m>,khf#"5-]fXlW<I';MPV2H1'Ig!k\1,4.4^'fe$LF#!He]D$?7"#Obq!#H>*>"p,nDc-F\SJXOf=>WIhH$%<b?4qmbJ\hG>RD02_CJ7I(Xbu^PfM&%"8\(q%5`:-saGU,eCeMPL@;ncH%Wf0J0TRK/Qk)Q'L3VI,X?)j3quV/-YVVPTqiMps[pkl^.apr>&@-9?r%;#NUaXE9'qD/I+l6j\H!V#\GH5q!RYgB#DV<'[/eHGuq+h<<<r,9iVb_d?k,=/>)tC!sX-Sm!sUL@aDl;O9Xe+/3"9p-95VGg2MT:d]hR.7n"Ll7]"hg<-*Y3;.+rh?:4LO9Q=h"</XDTV0J)+SYabBHcNZ$)6"<aV@!W'/aJs"(e`.5>a-_)5P>ip.-MqNF_,hYa<55U"6H8S]eJ*<12LYP`<4$T+..<6_G2#G;nKUXJqr:*hu?pm5:61*"jC>H--*V!@M]Fn[@mcL)s1[2nh:&(n\fnm3@r/LJXf.0ioEm5But*qnF'+VX4E[Akr66\5fkc.\6)s11Fl,n4VQ5cUiPN"oc?(U,Ia7#[$F46gBY`hjs9=oML?n>WQTZ5%8_aO#hB=jTb*W0-);cs6Q)pl-4\*Ch*;W*1^pm<:p"H,N%G8[3KD!iOrV08.U7l5alV0jf,Ue#RGLnGG0)]cOQ,fs`Spm.:?;tN_*uLXg?;4jQkZ'<;'bp4b?G_n"V5V/WkZP/<t17d6HU!QIA8@QDB%-a%K$(3&G!?dE9b%lZbahmYXmr*Kc?'F9j>OIP+MnW*F;iJG3`7N$<@Qt=2cJuY]/JS)ODfelcs4u#s\c6!fbh;`[*m=%&j9ffe]-?:L9[bV:M%t1*>&h"bT)r";/K2V24mP979+>4I-*4O3:$G<&X#G%Np=LLJ]_,Y&HX-8)RU+!`Nj:&kHB8Q"cMSFq^qJ>GH5TFbFW[,PpG\DOXp4(F(]X5(N$%c48YQ"=*d=_rC)CI`U`b>'/31MMN7IK;]2Z5tN,uQ9M%)Mqhc5q>d=5XaqruL,*q3!QB3BhUSYn*o+SeJAe(.)^NfUP.kNUZ/]T3'h2;p\)fIN#n^<?3-#K/9GB]E+^_2]Im_<k-lD8(b:qS>JoF9f'a'Q.M#?$1b"Hh?@Lkb)!"F?JY7l>i:uWJ]G"+ddO.F7t/iJfHJn_=/Reod?Giq,B"qX6JNQRf[T43k`>(c5,J-8@31G"T]=(QY%qTS9+7E_i-4b.l%e%=?\a65Pt<SHrV<T&H#%qdPms52W,F&(FAn^q&Q-&LEB!X52u,P6^2570<5?b=%%-dY^G)Z!uehP5i?-erVDJINs[oqehNE;!K+)gSWkRGemK;#,+X6+=k/#C;)=NHqC^U$$gh<3%r)GtJ+/n4XUEKep86>\Ht=:_DDI:Gb=g,&n9sX)_8^-\t5/&=&c4kjD8,4pr4e@L'\"S3E\]@Jm,dnV/oQ9CkaLXGNEa0)5!Y42(=30ESO7;J'2/#K&-@WH_\E*ldaV;shCec_E#3m[%7f6*<_\S#ipDeX%q:7;`5=-<r>?b^(T0OGlRmUh%ETBpE>(e&g$^erN(7''jiO.h.QC[\$i.=>S2RLmr+ilF;9un,OLHI)W>h+q1)@T$VucraH8m!W6gpqB0g@MBS6/LgR58`t5_kblWo&?g3HeRKrc/$-=Ea7P;)r"3hB\^1M,qRq\.,*\@&ch"^V[LMX=>.3-0D;WQ^A=7^i*b-l^MV1>Eg>4Y5o7S>@FfbFJYA45g,MOAN@Y:pY6EJ@g'[PlLGmTgg0L/ZmB%hXM'r/<$,iN%jQ?X'b-Bcjib9$gLDE^G#h,574M5O]']_q_d[MdOghg`SCIhp+s,H/aL_[c/Ig]_P/C5BH4+^,kYH`F(+:[P"rRDD!Xk(7*^m@l)Q2le>-jG>d\\*4nW\JXC$pC;6:K[L*Sfl2aIn4p3^IH%/:rrrSBE:>G~>endstream
|
| 55 |
+
endobj
|
| 56 |
+
xref
|
| 57 |
+
0 10
|
| 58 |
+
0000000000 65535 f
|
| 59 |
+
0000000061 00000 n
|
| 60 |
+
0000000112 00000 n
|
| 61 |
+
0000000219 00000 n
|
| 62 |
+
0000000331 00000 n
|
| 63 |
+
0000000446 00000 n
|
| 64 |
+
0000000649 00000 n
|
| 65 |
+
0000000717 00000 n
|
| 66 |
+
0000001013 00000 n
|
| 67 |
+
0000001072 00000 n
|
| 68 |
+
trailer
|
| 69 |
+
<<
|
| 70 |
+
/ID
|
| 71 |
+
[<b154908be46cc83f815beffc4e1ccfd7><b154908be46cc83f815beffc4e1ccfd7>]
|
| 72 |
+
% ReportLab generated PDF document -- digest (opensource)
|
| 73 |
+
|
| 74 |
+
/Info 7 0 R
|
| 75 |
+
/Root 6 0 R
|
| 76 |
+
/Size 10
|
| 77 |
+
>>
|
| 78 |
+
startxref
|
| 79 |
+
3643
|
| 80 |
+
%%EOF
|
CronosPMC_Leave_Policy_v1.pdf
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
%PDF-1.4
|
| 2 |
+
%���� ReportLab Generated PDF document (opensource)
|
| 3 |
+
1 0 obj
|
| 4 |
+
<<
|
| 5 |
+
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
| 6 |
+
>>
|
| 7 |
+
endobj
|
| 8 |
+
2 0 obj
|
| 9 |
+
<<
|
| 10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
| 11 |
+
>>
|
| 12 |
+
endobj
|
| 13 |
+
3 0 obj
|
| 14 |
+
<<
|
| 15 |
+
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
| 16 |
+
>>
|
| 17 |
+
endobj
|
| 18 |
+
4 0 obj
|
| 19 |
+
<<
|
| 20 |
+
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
| 21 |
+
>>
|
| 22 |
+
endobj
|
| 23 |
+
5 0 obj
|
| 24 |
+
<<
|
| 25 |
+
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
| 26 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 27 |
+
>> /Rotate 0 /Trans <<
|
| 28 |
+
|
| 29 |
+
>>
|
| 30 |
+
/Type /Page
|
| 31 |
+
>>
|
| 32 |
+
endobj
|
| 33 |
+
6 0 obj
|
| 34 |
+
<<
|
| 35 |
+
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
| 36 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 37 |
+
>> /Rotate 0 /Trans <<
|
| 38 |
+
|
| 39 |
+
>>
|
| 40 |
+
/Type /Page
|
| 41 |
+
>>
|
| 42 |
+
endobj
|
| 43 |
+
7 0 obj
|
| 44 |
+
<<
|
| 45 |
+
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
| 46 |
+
>>
|
| 47 |
+
endobj
|
| 48 |
+
8 0 obj
|
| 49 |
+
<<
|
| 50 |
+
/Author (CronosPMC) /CreationDate (D:20260424153714+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260424153714+00'00') /Producer (ReportLab PDF Library - \(opensource\))
|
| 51 |
+
/Subject (\(unspecified\)) /Title (CronosPMC Leave Policy \(Synthetic\) v1) /Trapped /False
|
| 52 |
+
>>
|
| 53 |
+
endobj
|
| 54 |
+
9 0 obj
|
| 55 |
+
<<
|
| 56 |
+
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
| 57 |
+
>>
|
| 58 |
+
endobj
|
| 59 |
+
10 0 obj
|
| 60 |
+
<<
|
| 61 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2467
|
| 62 |
+
>>
|
| 63 |
+
stream
|
| 64 |
+
GauHM?$Dc-&:O;VQq+]p#U%Jar05MSk9R$rW,Hub_+NDc=MfY)rdF5d6:-QXK&!<L3L)0[G37)oSNC>B>l=3[s.bhBjd_pUouQ`=^*54L!h+V32tO(g=1]t]^+aWJ]C2<;ok%]p:-XXo5N(qc*fcf]bb'/;$67Y*-R$`5)S@PAVTmr;=1%Jq$,+YW=_&_M`SaC[PoEl+LgJ8(0<VKmrX[8'irco3ogXs+E[SnG]b>0Q?KVW-3lZX_3rT!Sa&R;e/F]2AQHptUE&;^S.4j2&QdD)"^OSUso%;h_2$kXj]d$-hfl;Y,2o5l-&A#1s3W?r+Vpc;5>RK-1B5`4h/=O<!@!:K'+N;$i4.W=Km\6trVYdN/Im%7?i-(+F'd8o5:=tpk6?kj:rfOVSc"\Q";Sf)0Pk$h_de>M&b(<meL4%S`C#Mc5oX\35"`+/51-Z,u,=[]+7n3?efUR>\)Mt,o2HgJ-j?@:dCVEZ#@NAIJbY#auJkV*X%@)WDREF*u<M<q=-T0up^84Np"HLl%(\I,O72o)VF\-kP93p,Z1cM5:V%uLYa'6Rg7\ph@;`_g=Oi=-MoSo!=`hE.XL(%umj;MB`pg-D;hO7KBUnskRhCH.%0eI2;<f'5H'Rkm\Po6"B47V,f_fo<bDY?SY-5qBKGXERk;HF#c[eBD^$F*O@[R`eIKC_rSE$TgA'5AL=P2TFX8PGD3:60XZh'Zb05,jY0r[t6&FUUCq36hK9QNa/3_\.IQZ,F&::XA.>8fK*u)^[Wq0gtbB`R5kgCrB4`Ehrb5WQA+bY)<o(RIZ(j!34g2+jOY-1kup7EWf]#<ME)3&a_6^N"E^:+!_u4b!^7QOHhRkc682@_'%%)-H(0>!5pX,,+:>#9uOJ9:d"KM:`RQRMo8npZ:O)61s^Z#9K;Y<a0Z;m4k(PpI-Bd&d%!7,H8mtHE5^h2,9HQs$X-V,JpNc>N2.jud[fSF_#Jqn/AuDm"+=\tqEkd,_o_]55'N#He*"K*,V[t*HVJ@m@[=eh\\>AM]@909Mo>8X[o;1Nnot#<CjjgjQ]aMT9J-Yde1HN(X^W!$.>OnFWj5'&]9+5G>T;1),&[a0MRjK.E[.^oRf\FU;G7g'^XS\4U/j>C"VGjrYG=G@Tbgi9hVU'H@drNl!,o?:fVa^`mLr7"@E<n;F1\i**3SE]6e?>VnLX0C^>4M0^c8Fs:_F".Cfok.mXTuL:d!7;!)03;<+h#]mmAUc7kUKZffY<ah)nel!c/1EW[&IJ.Rej;#kC^UT$,+_\fLHsE#7+hOs$,uS/8b,SDnDCni4K>U8U=DrJ3)Q.lY7>1cJ5\C>4%!?#O1#d@PAU"13`?/??Do)O$)c7e_]pdJ,9-<N'rV3fE\)7o2me9GL_69/KHO9fTWO3h'%tA'$('8D[7=ZaD?-"KQQ1H3H\Ek$[g&T=.XHmDC&4(gJ&`0R.X/m+TD\fcr8g!431=!pEjb$5qa,@cgp1UoZuj[0f@?^bnQh@pCWp<E_Q8#:]\08=dS4h(p,7[E#P`PN$B43e##J'd%3S9H_k?+dAo[!,+.uc,i]i;'Ju^i_[RMb2dH#k_PK5KT'>apSsB6Bq\Y[[&q$0STE@IW,6C,Pbd_un7ZujKY(leMsr5o'_N"D[Dh5",K,F*2Y"0(^!3Du"tMNX^#eU^1/'Xs:)ralq)qf5D>NYt#L)r3[N27VI,jHE'a#])&1[PQ+/H\#]Jp^OO*H7c2=07-W+AroMBM*oV6*F[J[`eg,Qo::%DGUX7MhuPd?3iYbNhs8<3)H./Ij%@aCt3L(-F[Pg;d"`IjeC-LSGB@euSk(Z-15tOnF<().TU>.$@$@F"o=MG/`/.%biPQdR\HegJRq,=n3FJ<Hc-n$",hLDGr&VPEH_5!3]S06%d4`%]nB&O5WkeO(7pC1N=DI?eM`@^ul++g]i:PJ6<;VZZ^5:?X-$MDhFi@Zmp0T+&f_[7fQR,P!t3_:$Xsb4520PF[h/U;II7;L$?L#Idh,506$-X>(YYq*E^V,H8/f%rX(b=^R'@NcQ?G_ot!Y`=oX82P=D8_O92?WT"G)3dfR<R@99GGV;TqTbX5;%&P^":6nHX*D79`eO6$"=<egi<Dn(Hs5t[G@UnA(O-C\UW@>r4=?EtD?1_[qZ5)6tN_5FV<gLiB.ad^s)OEjVB@*X;HRlh]HaD6]afl65`0Rt2W#YGN<_CcC_qR.ts"$!@hAB&K\?-VG^Oa%/?29O?_,KohK`KHL$_0O]]e\'hlmQs5F7A&_ZC1B1#)827<9*Mp7Ge,Bqr/8neh':5$>rHJ3rp,-kkK/)E(;5fZ_-d6Qa"QW[.cl\*s%FS6L$W`XVGF##M\Do\dl$cC!XV9amW/ojRd"9"?I6+J&SJ]K\gf6=4`=D+qgB5AGeA@6,n\1TmfqlR=Y<ZtB]4ffc?k]lOtnJK14B-a0^TeYhhuUCcptnr9U.IBo^:pU?Hi+MA^],D1KqG5~>endstream
|
| 65 |
+
endobj
|
| 66 |
+
11 0 obj
|
| 67 |
+
<<
|
| 68 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1650
|
| 69 |
+
>>
|
| 70 |
+
stream
|
| 71 |
+
Gau0D;0/Kj&:Vs/fV][d9djC'VJg2:dWXd$?5)5OMdL!sCaDF=8RRm7hj(te8WsJSS<FiN!@7&]g@*cl%`#"B^jTf@^i)%(jX,L#KNS=Aj@(d"%%h-Ehp8k];u7^1-Ja)'p4IH"^rrcbg&XJuHT^gFBp])YN]]O^P8ImXN39ROb'^b5L3XU_n>E?a9."%1\o2,e_MW!q&PFuG5DRnob^Qi*p1FiS?9%YBkHfVG98'N._OF<a07fJA]ALrq;e/bh`>!S)-,eiC(JcKSrB12UBE&MI]9OaP2_(66SpM\4G5qf\K.cKjo%fDjE*PjD\QJ#\P4Tsc09NoU`:m?2$bGSKX1N3fI7CY25[!VL?qFE%Kb?^hiTo#A&8\%T9p[FcR7!i^V--h"m6YO"B48KFH^(*apYHMfk5NCACq1+]enW*DKT$e]1i(<[6"RI*H-TrT2X>r9'1>NMAk:LhO]_q<iFrN!dVe7F?f&7c&co@jZ8NGbHG*@j!X9Q[nl8NpTP^!L='S=!$RT;5L!o1BJ/,Hg+Dfk=!10+PF"Wf`U1\4.:K4TWI70pKWO`Am#Fa8SiA<?WG!Mp*[-Wl(R\\tMY+?_pK/%@&LgiT>Jeob_4Is4-hM8?P\(QOi]DYM#4%U>:*dj5g`cH+L59PL;j:q#8EF9[AiV/eihEfi_/,TfTfkbNKRY`3_`[>D5Iu+9V]BU"0DH_cIRS/!]"b#Gs'tU=QQY6du`4W3-/D!3G<mLtceKc'**//'R/.,\!3nhtN2akQ83!F*KB[Z2S@]74s=6@B]^YsnJe&:6WVs6:F;*(Qe@]!U74U@8pksbLg^KOD*=nXa>@5RZ8%L$3[<?(^[@8LmD`Z"UPGH>=#\8[]tO=[r8hiBEchlA:-%7$PU743G:^?d%JgFgMqXoT*Qe)8_udpM+M](oHD]B:3E(U-p9dE+9=FlNgCJWtCcB>c)cR?N*PcED4j$g&?-.DJjr_)&M2fMN$3@1s`>blOB>^W)t<E/(G><Dc@%1K[)i6F)gYO3(FUM80ojbE0jX,R,`0E?f+(a;JYQ;AE"^is+6]<'^uYI4)+@3=N.^aZE4HM$&\#7c;%/_$."\P%*_aFrHR.PH%YKNdT`<[OWWD@.01B[FQK7ga[?Ab*'4B#A1[3&7GG.LC-oD[ETe0pI);Q+(3u>^(EjB$L@YhU@dO%mk8\=G2:aX_O7@XB#ph'NOFP.``-'g3N=Aa-'#.RZU`O:o)TdCS_b#Ka*XP]gn%QfNnT\gFg/VY4gM*\qc(!a8Nf5US.ot>g=u&o[XC>KZRaTH=Y?eh(kTloNDt#4Onq^N]P)-MJ&ITb\NKsqD/U*$/6LKWngAJ'8*DP<M^SJh?u%Cg!_LqMiOCb_C?G.(.luNrI:G[2@a>9+G,Lpc;QaY),qh+k[EMo$,ZH[8Iu;Td5pLT-q(NZ&jQ&"JajD;.#`r]K99`Sc46O_oFuZ=dF)#onEBGs;KrMFo%t!raFop*\0UddU,au/B@gFW7n3\Kcn3+;CVD].gNFm<.)Lnm1]l7aIhiDD4H/Di?Fi&=F>#3MFm>a^`2]C:Y3:3mUekbf%d@OV*kK\t4bIP"r3B%hR3$m%,F(S^F#>^*)^=nG?hI,CoX"A$ibLZAnNQ`g8C=R3f?s>\G^YB)Sq[X&Xq_8~>endstream
|
| 72 |
+
endobj
|
| 73 |
+
xref
|
| 74 |
+
0 12
|
| 75 |
+
0000000000 65535 f
|
| 76 |
+
0000000061 00000 n
|
| 77 |
+
0000000112 00000 n
|
| 78 |
+
0000000219 00000 n
|
| 79 |
+
0000000331 00000 n
|
| 80 |
+
0000000446 00000 n
|
| 81 |
+
0000000650 00000 n
|
| 82 |
+
0000000854 00000 n
|
| 83 |
+
0000000922 00000 n
|
| 84 |
+
0000001224 00000 n
|
| 85 |
+
0000001289 00000 n
|
| 86 |
+
0000003848 00000 n
|
| 87 |
+
trailer
|
| 88 |
+
<<
|
| 89 |
+
/ID
|
| 90 |
+
[<906d677c05e232c135772fd0f8930cf0><906d677c05e232c135772fd0f8930cf0>]
|
| 91 |
+
% ReportLab generated PDF document -- digest (opensource)
|
| 92 |
+
|
| 93 |
+
/Info 8 0 R
|
| 94 |
+
/Root 7 0 R
|
| 95 |
+
/Size 12
|
| 96 |
+
>>
|
| 97 |
+
startxref
|
| 98 |
+
5590
|
| 99 |
+
%%EOF
|
CronosPMC_Remote_Work_Policy_v1.pdf
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
%PDF-1.4
|
| 2 |
+
%���� ReportLab Generated PDF document (opensource)
|
| 3 |
+
1 0 obj
|
| 4 |
+
<<
|
| 5 |
+
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
| 6 |
+
>>
|
| 7 |
+
endobj
|
| 8 |
+
2 0 obj
|
| 9 |
+
<<
|
| 10 |
+
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
| 11 |
+
>>
|
| 12 |
+
endobj
|
| 13 |
+
3 0 obj
|
| 14 |
+
<<
|
| 15 |
+
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
| 16 |
+
>>
|
| 17 |
+
endobj
|
| 18 |
+
4 0 obj
|
| 19 |
+
<<
|
| 20 |
+
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
| 21 |
+
>>
|
| 22 |
+
endobj
|
| 23 |
+
5 0 obj
|
| 24 |
+
<<
|
| 25 |
+
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
| 26 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 27 |
+
>> /Rotate 0 /Trans <<
|
| 28 |
+
|
| 29 |
+
>>
|
| 30 |
+
/Type /Page
|
| 31 |
+
>>
|
| 32 |
+
endobj
|
| 33 |
+
6 0 obj
|
| 34 |
+
<<
|
| 35 |
+
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
| 36 |
+
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
| 37 |
+
>> /Rotate 0 /Trans <<
|
| 38 |
+
|
| 39 |
+
>>
|
| 40 |
+
/Type /Page
|
| 41 |
+
>>
|
| 42 |
+
endobj
|
| 43 |
+
7 0 obj
|
| 44 |
+
<<
|
| 45 |
+
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
| 46 |
+
>>
|
| 47 |
+
endobj
|
| 48 |
+
8 0 obj
|
| 49 |
+
<<
|
| 50 |
+
/Author (CronosPMC) /CreationDate (D:20260424153714+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260424153714+00'00') /Producer (ReportLab PDF Library - \(opensource\))
|
| 51 |
+
/Subject (\(unspecified\)) /Title (CronosPMC Remote Work Policy \(Synthetic\) v1) /Trapped /False
|
| 52 |
+
>>
|
| 53 |
+
endobj
|
| 54 |
+
9 0 obj
|
| 55 |
+
<<
|
| 56 |
+
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
| 57 |
+
>>
|
| 58 |
+
endobj
|
| 59 |
+
10 0 obj
|
| 60 |
+
<<
|
| 61 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2512
|
| 62 |
+
>>
|
| 63 |
+
stream
|
| 64 |
+
Gau0EbAu@I'&EF8HBhBG=Yr^,H=U%tgNh:C`YhuZZdAt$+UL(Q_#U,bqYPU>OqQl^a0[<gWZjr\THC(-T5Fnpj)<lTNAI<dB6<f$THL&`P(KAdUtJh\RpGs)W38n]KrI#2^\8p:R#V5oqPdNhJY7I=2"F,bE#R)2kkRM$NbF_UmmbE(lL3VJBHDn<qN;f#EgG.dpUJDkRMujf/^NMUrHk"3O(SEs#I`M.%(pQ;O,r2pSZOjTXXCd'#_0kdo^h%j7=MIW(jZcFT2J/+@,aTg=LA)\V8nKY&VK6,;-6%?NlI[&,L18]o7qs+J.mNCjA./aKk!?99V)C)VkH!?l=3A9Me3g[@(*rB!2g:(^SUcmhdn:s>rsD)pU"Z3pZDp]%K3_LSatjj^l']&#"Wdq5VR0.h(=sU2IaQQ@>99)5NIQ3$a.P]/h-G1LuuNu9Xj,8$!@)hEH[ST(Q9>.O,OM5$pFE6C*Z^+f]XlfiqJ58G0ST);^16Wj1-?2bXa[T]-O/=a@3i.09tI@P4#9IibNd>Ui;9Y;UOY4MV$''UnL+H,L*CLqN>C'OA$sF]Q($N798D&+`gn$Gs\5+EIo0FO1mRmEkEj_.t#U)NJP-W2(Q)."Xh8JJo>p$M]MaI=Xo^=s+t<TCS&+!n_G\8G?\M,qkI;ZNPDXbkUTlY;W2-ODEe-C3[Ju&'!][>Hu(X"KTF];*KF`GIk+Nf:oV"W+^ZJo"MF1h"iQ0RWZ6T^!q-umCQV4@MtO6*.H.(6MXN/^4kS=e<Y:d-&Xkkj%j1_k&D+AXWmbNV8;.&Cas%eIokpH+!cO'&n<b@kA4%B8J<-rqf36/q^o?qo!6.$,LCbh")^Q8riCW'jmg`p6P$/Mq8Y9m<gk-!KPBjGELHEnW[npNY!$4nTike6V!TX6@V28d'pV9-s1C$@s4>)mQ].OC!r)]XQHnL5gg/)(p1"S<s5>.][rp]cPd59XNg%66`:rmnN3BR)Tb)i4VRA3+Z7uX'%id&"bi<t+jUmrl;8X:R+#u=E/MCm7'c>oCqV:VI*&DUq]3kM/h,MqYJB<bY7*T<A+D1NM@F3m=@Q+;\kOLhsS,(t$J3-l%.0=pq/o\&"3gG"bqKlFaQ.#rZY=&G]s9_#eq<T1#VgY1%k;rPcmDE,g]Q`*03*)(gA$S23l1ZHSg9"iTH47iMM47J95$T+^i908LR]EXI!$J[@5_@*_DN>>&WVRGcDWPa!Q"]p_2nsEe8EGOb\X'*jd%W6>b7NB7+8XDCHViu1sX*qo*dFBMYo(5O/JAh,"bN^OF!$NQ5U'gCph,frBWDMaHAaeXS$9,Kg%+7_Y"CuU`5cRT3/L$r"&UD*sp7Rp2L'ls6)ZU82rdni3B6*Bc,>)_-j5.qj,V;]2);6UM]R!Cf%JB/E>I8`o%B@)E_E78pF@`Pp^c-c#-%aOtRnrp;[l0kl)QEYja</(B,9$UG/o+SKGe*E&EcD_=)3\tZb`$??$;S!ck:<qNDIWgYW_J0[%#D;sGf=cZSh9TmRBJAkc8DQ5U*'\KP>)=b;"o_;KTrCq,:?aRY't,4/H^H8/AQ)8F61D_b0`d>e#X=E?S2qp4E./NZ3*eu/QUZn/*M1HfVHp(s+5sf:VGmUB9HOQmf.Q>Po(_mh6?>(2&'hAg#,`uSs)MEWP)`ScJ/8urF>5iS7V-"`lDDG]]g\oE=82I`=#05KMSmMR@fi5P^j3T4<AeuDM+[DUVm`:S]$<:k0:-jLIH77V@.cGiG?/>JBUEorl*::+%*jpn_9"*[-PiVFro7mPcKuAM:#+"TR+DMU[_UGtMn;[0KAcY5I9#jO4;0u7BR"'s+I8SjDm\VaQt<]qlOK+X=0)2A3&fc@I2IDblYB1I?*WXdI=PuQnQ(KJ.rOjch#nnq('@2`>Af*oI]]SrhTI3ZE*\oOe^pWaIop!.iSkrTA&U0.TgJf?>INk9nDRo&ma/>%G[kFd!Y7#`J:RuC0LDnAS]UCmAY`"B[G\HE"@I]_,=%dA18.*eot/!bN$c;=U-p&9X&`!aka!)UT4*-$>42?I0uL>-2B8<I=dp8L_h.!^r]WUS[sLVN+jbZC#^7.G_XRI?$r=n$?1.J*PD,24-&*o!A_beq[u]/)S<g8*Zr.uZ\[$lRmc+'<2/%6G#'Eh<8STOnWr;Eq+=NV6f:@dL35:[d:7%-QdP6NR(uEt`+*pamWu"ofQ<W^(AUYaOY$B2^7-4>M1,rQ45&e-87X*6lNrqHRQF\+t/-RGi$*]!%17m,EFm;$@c>KkUjb.430=.]BC>=9E96?oRH_p4':]40KKasU3?uYfXC`dX80FO`e5F)H^0^E(5@J8(s`M@T[A7S7<r<%(T-1E/a!U*2?MfOr;R%!5\8O7V#Z40S^gEV-^Xb&0i"X>#Jq*q$;X&[-e/MZT=VuGd%X(>2:0hAp4lD_\\,l1O+@-#_E>1d00D4SYGX1Y3C^!#HDjWVi_G0eRpGHm@?IK*J%0.qnb`Kq>kbT>YK$De75F/D+&-bB(;&1A6M~>endstream
|
| 65 |
+
endobj
|
| 66 |
+
11 0 obj
|
| 67 |
+
<<
|
| 68 |
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1385
|
| 69 |
+
>>
|
| 70 |
+
stream
|
| 71 |
+
Gau0B;,cL5&:WeDm*e[B3Fg`^SBO,n$J1arSJ9N/93r<X"$16i82;@_laq1R0NU<q0FaGd)*-DVIJWZlO$QG]f)-=!^b6'T]k"nk=KI(5UG4<KLPs.!_bp;C)ICX^8\6$T0q1lSr:mY.@0:;?B9R!a94eU\E>5`1cX9VdkhKpLh>HOXQ:[7W(Zj$o?G^`)ZW6u7]bKrd<dK%=%#]&.paIKT7qHD!UiHAplC?`U,eY5GF@(I;r:mr(I&('u)^eKPQ-Z+T/=f8`PU^uc/)fXS:VrdJ4A"74q':le?\k]aLrBgF8IJAMCj?K1a"`OB>*gedH^4;'jDUl>GV^=T_tC;of/EJ?V+2q1811fc^f:D?GkqpBU2h@k\3"T5J3jW6^`0>hU%#;;AUtW("]Vr6BSFUH7b`9&\A73GoW%2cTh4,J%@[jJ-67W]0&F@Y\ON90!Va*X$AiQ`f"pJY'lZMg(b7UT[iB7\^B6dc&H^/9'0p19:L9>k&>ac/j\D9c^9V<i=8L!B/epes!Z@IJS5$[2Ha;lhLNI(f(5P&L,^:=!`'VM4g(_fcEo]@W[6"C>h*!n85'_)gNE[G_(i9iQ?gtC8[.S;B5&kmfI!R78`9/%s=s2<eTg7eNI3I/hC;Mj39+P@HL:YeHcT8]WdM_GB>a78KKh7m19'fOn6Q.g#a;T1b]hA^!Yd0!3*iCP8m:50-SkUA#ni3+6l"Dcn,?S(ILa@G!YJb!%(bVqni+us^0BbSQSiC"8_KB.YH_na^<FU,j,55%&.uWd<fAVh&p.cA/>?tI3>tso\kZ[e$H[JKII&Nl1qQ<?n/c6$l?1/KeOdAEf.sWKTH`1=:a1a$J:<Fo9e3?RG:VcS"PGUd*R[dtY+>RB`]TpasE4\ta\>A.hQeYIX#7^HUIbqL(bJ568PB]8!@0l[k@So046ML**iK1L?Y_0E55K041\fuFo4A8We2)0es"UT^GO4%r2&Yfp:T)Sh3h,1/%eJ?6^FEeCD[.*(/^+9IRP0NPb6dec8-R9(&+ahlKa^)tFnXunQ#GjQtdb3?!&>XkTKO3Da+EUUT^EX0gd`kIKbu-a"h%"u]BE,"`:*[9A$T!e8q#D4,#0@"XSfH$u.E-Id*bOZq<M5so?PW@AmL_-d)tg-3Hp7OM<-%$,3<;0\J=ut@f7$*<YnMte!cokB)C1WdHig3b->M95h#E_7(J`rSL47`6L1$pThiVE&TiHss9JBG*#[-f-<O>pKZE3gHr=C"q#?Qh4MEP1=V%F_B<iaq8D"6?77e@tB>*icg>d3X]?HH)ok<XF93u(;U$gJ;2)cn:Be1"qA)R/iVpQ3@L=-!(3b&LIJFO+g%FgK\_T9@4_r&#@5U.@4oK6[eD1kph.hsaE\oFLL)a!q~>endstream
|
| 72 |
+
endobj
|
| 73 |
+
xref
|
| 74 |
+
0 12
|
| 75 |
+
0000000000 65535 f
|
| 76 |
+
0000000061 00000 n
|
| 77 |
+
0000000112 00000 n
|
| 78 |
+
0000000219 00000 n
|
| 79 |
+
0000000331 00000 n
|
| 80 |
+
0000000446 00000 n
|
| 81 |
+
0000000650 00000 n
|
| 82 |
+
0000000854 00000 n
|
| 83 |
+
0000000922 00000 n
|
| 84 |
+
0000001230 00000 n
|
| 85 |
+
0000001295 00000 n
|
| 86 |
+
0000003899 00000 n
|
| 87 |
+
trailer
|
| 88 |
+
<<
|
| 89 |
+
/ID
|
| 90 |
+
[<ad0743d88a1fbdfd4d0e6a9a4771eaca><ad0743d88a1fbdfd4d0e6a9a4771eaca>]
|
| 91 |
+
% ReportLab generated PDF document -- digest (opensource)
|
| 92 |
+
|
| 93 |
+
/Info 8 0 R
|
| 94 |
+
/Root 7 0 R
|
| 95 |
+
/Size 12
|
| 96 |
+
>>
|
| 97 |
+
startxref
|
| 98 |
+
5376
|
| 99 |
+
%%EOF
|
README.md
CHANGED
|
@@ -1,13 +1,57 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
colorTo: red
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version:
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
|
|
|
| 10 |
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: CronosPMC HR Enterprise Chatbot
|
| 3 |
+
emoji: 🏗️
|
| 4 |
+
colorFrom: indigo
|
| 5 |
colorTo: red
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 5.0.0
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
+
short_description: AI-powered HR assistant for CronosPMC
|
| 11 |
license: mit
|
| 12 |
---
|
| 13 |
|
| 14 |
+
# CronosPMC HR Enterprise Chatbot
|
| 15 |
+
|
| 16 |
+
A production-grade Retrieval-Augmented Generation (RAG) chatbot built for **CronosPMC** — a Dubai-based construction project management consulting and professional training practice serving GCC clients.
|
| 17 |
+
|
| 18 |
+
## What it does
|
| 19 |
+
|
| 20 |
+
Answers HR questions by retrieving relevant passages from four policy documents indexed in Pinecone:
|
| 21 |
+
|
| 22 |
+
- CronosPMC Employee Handbook (v1)
|
| 23 |
+
- CronosPMC Leave Policy (v1)
|
| 24 |
+
- CronosPMC Remote Work Policy (v1)
|
| 25 |
+
- CronosPMC HR FAQ (v1)
|
| 26 |
+
|
| 27 |
+
It uses GPT-4o-mini + `text-embedding-3-large`, with a strict guardrail prompt that scopes answers to HR topics only and routes confidential matters to `Info@CronosPMC.com`.
|
| 28 |
+
|
| 29 |
+
## Architecture
|
| 30 |
+
|
| 31 |
+
```
|
| 32 |
+
User → Gradio UI → LlamaIndex chat_engine → Pinecone (top-k retrieval)
|
| 33 |
+
↓
|
| 34 |
+
GPT-4o-mini ← retrieved chunks + system prompt
|
| 35 |
+
```
|
| 36 |
+
|
| 37 |
+
## Required Space Secrets
|
| 38 |
+
|
| 39 |
+
Configure these under **Space Settings → Variables and secrets**:
|
| 40 |
+
|
| 41 |
+
| Name | Description |
|
| 42 |
+
|---|---|
|
| 43 |
+
| `OPENAI_API_KEY` | OpenAI API key for the LLM and embeddings |
|
| 44 |
+
| `PINECONE_API_KEY` | Pinecone API key (free tier supports this scale) |
|
| 45 |
+
|
| 46 |
+
## Files
|
| 47 |
+
|
| 48 |
+
- `app.py` — main application (Gradio UI + RAG pipeline)
|
| 49 |
+
- `requirements.txt` — Python dependencies
|
| 50 |
+
- `data/` — the four CronosPMC policy PDFs
|
| 51 |
+
- `assets/` — branding assets (logo, avatar)
|
| 52 |
+
|
| 53 |
+
## Disclaimer
|
| 54 |
+
|
| 55 |
+
These policies are internal synthetic templates for demonstration. They do not constitute legal advice and do not override active UAE labour law or any employment contract.
|
| 56 |
+
|
| 57 |
+
© CronosPMC · Project Solution Experts
|
app.py
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
CronosPMC HR Enterprise Chatbot — Hugging Face Space deployment
|
| 3 |
+
================================================================
|
| 4 |
+
A production RAG chatbot grounded in 4 CronosPMC HR policy PDFs.
|
| 5 |
+
- LlamaIndex for retrieval
|
| 6 |
+
- Pinecone for the vector store (built once, reused across sessions)
|
| 7 |
+
- Gradio for the branded web UI
|
| 8 |
+
- OpenAI gpt-4o-mini + text-embedding-3-large
|
| 9 |
+
|
| 10 |
+
Required HF Space secrets:
|
| 11 |
+
OPENAI_API_KEY — OpenAI API key
|
| 12 |
+
PINECONE_API_KEY — Pinecone API key (free tier OK)
|
| 13 |
+
"""
|
| 14 |
+
|
| 15 |
+
import os
|
| 16 |
+
import time
|
| 17 |
+
import logging
|
| 18 |
+
import gradio as gr
|
| 19 |
+
|
| 20 |
+
from llama_index.core import (
|
| 21 |
+
Settings, VectorStoreIndex, SimpleDirectoryReader, StorageContext,
|
| 22 |
+
)
|
| 23 |
+
from llama_index.core.readers.file import PDFReader
|
| 24 |
+
from llama_index.llms.openai import OpenAI
|
| 25 |
+
from llama_index.embeddings.openai import OpenAIEmbedding
|
| 26 |
+
from llama_index.vector_stores.pinecone import PineconeVectorStore
|
| 27 |
+
from pinecone import Pinecone, ServerlessSpec
|
| 28 |
+
|
| 29 |
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
|
| 30 |
+
log = logging.getLogger("cronospmc")
|
| 31 |
+
|
| 32 |
+
# ----------------------------------------------------------------------
|
| 33 |
+
# 1) Configuration — read secrets from HF Space environment
|
| 34 |
+
# ----------------------------------------------------------------------
|
| 35 |
+
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
|
| 36 |
+
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
|
| 37 |
+
|
| 38 |
+
if not OPENAI_API_KEY:
|
| 39 |
+
raise RuntimeError("Missing OPENAI_API_KEY — add it under Space Settings → Secrets.")
|
| 40 |
+
if not PINECONE_API_KEY:
|
| 41 |
+
raise RuntimeError("Missing PINECONE_API_KEY — add it under Space Settings → Secrets.")
|
| 42 |
+
|
| 43 |
+
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY # LlamaIndex reads from env
|
| 44 |
+
|
| 45 |
+
INDEX_NAME = "cronospmc-hr"
|
| 46 |
+
DIMENSION = 3072
|
| 47 |
+
METRIC = "cosine"
|
| 48 |
+
DATA_DIR = "data"
|
| 49 |
+
LOGO_PATH = "assets/cronospmc_logo.png"
|
| 50 |
+
AVATAR_PATH = "assets/cronospmc_avatar.png"
|
| 51 |
+
|
| 52 |
+
# ----------------------------------------------------------------------
|
| 53 |
+
# 2) LlamaIndex global settings
|
| 54 |
+
# ----------------------------------------------------------------------
|
| 55 |
+
Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.2)
|
| 56 |
+
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-large")
|
| 57 |
+
Settings.chunk_size = 600
|
| 58 |
+
Settings.chunk_overlap = 200
|
| 59 |
+
|
| 60 |
+
# ----------------------------------------------------------------------
|
| 61 |
+
# 3) System prompt — the bot's persona and guardrails
|
| 62 |
+
# ----------------------------------------------------------------------
|
| 63 |
+
SYSTEM_PROMPT = """You are the CronosPMC HR Assistant, an internal chatbot for CronosPMC — a Dubai-based construction project management consulting and professional training practice serving GCC clients. Answer questions exclusively using the indexed CronosPMC policy documents (Employee Handbook, Leave Policy, Remote Work Policy, HR FAQ).
|
| 64 |
+
|
| 65 |
+
SCOPE — WHAT YOU ANSWER
|
| 66 |
+
Leave (annual, sick, compassionate, maternity/paternity, unpaid); working hours, attendance, core collaboration hours, Ramadan adjustments; remote and hybrid work eligibility, home office setup, travel rules; performance, probation, PIPs, disciplinary process; code of conduct, confidentiality, IP, conflict of interest; data protection and acceptable use of AI tools; harassment and grievance reporting channels; learning, training, and development entitlements; equipment, expenses, TOIL.
|
| 67 |
+
|
| 68 |
+
SCOPE — WHAT YOU DECLINE
|
| 69 |
+
Decline politely and redirect for: topics unrelated to CronosPMC HR; binding legal interpretation of UAE labour law (refer to HR and qualified counsel); individual case decisions ("Will my leave be approved?"); other employees' records, salary, or performance; visa/immigration/PRO matters; payroll, tax, or financial advice; medical advice.
|
| 70 |
+
|
| 71 |
+
SENSITIVE TOPICS
|
| 72 |
+
For harassment, discrimination, retaliation, bullying, safety concerns, or mental-health distress: acknowledge with warmth, state that the concern can be raised confidentially, provide reporting channels (their manager, HR at Info@CronosPMC.com, or leadership), emphasise that retaliation is prohibited, and do NOT investigate, judge, or predict outcomes.
|
| 73 |
+
|
| 74 |
+
WHEN UNSURE
|
| 75 |
+
If the answer is not clearly covered by the indexed documents, say so and direct the user to email Info@CronosPMC.com for support.
|
| 76 |
+
|
| 77 |
+
TONE & FORMAT
|
| 78 |
+
Warm, professional, concise. Default to a short paragraph (2–5 sentences). Use a short bullet list only when listing steps, entitlements, or eligibility criteria. Plain English, no legalese. If the user writes in Arabic, respond in Arabic. Never promise outcomes ("your leave will be approved") — describe the process. Cite the policy section where helpful (e.g., "Leave Policy, Section 2"). Always close with a clear next step when action is needed.
|
| 79 |
+
|
| 80 |
+
DISCLAIMER (when asked about legal weight)
|
| 81 |
+
These policies are internal templates for guidance. They do not override your employment contract or active UAE labour law. For binding answers, refer to HR and qualified counsel.
|
| 82 |
+
"""
|
| 83 |
+
|
| 84 |
+
# ----------------------------------------------------------------------
|
| 85 |
+
# 4) Initialize Pinecone — reuse existing index, build only if absent
|
| 86 |
+
# ----------------------------------------------------------------------
|
| 87 |
+
log.info("Connecting to Pinecone...")
|
| 88 |
+
pc = Pinecone(api_key=PINECONE_API_KEY)
|
| 89 |
+
existing_indexes = [idx["name"] for idx in pc.list_indexes()]
|
| 90 |
+
log.info(f"Existing Pinecone indexes: {existing_indexes}")
|
| 91 |
+
|
| 92 |
+
if INDEX_NAME not in existing_indexes:
|
| 93 |
+
log.info(f"Creating Pinecone index '{INDEX_NAME}' (dim={DIMENSION}, metric={METRIC})...")
|
| 94 |
+
pc.create_index(
|
| 95 |
+
name=INDEX_NAME,
|
| 96 |
+
dimension=DIMENSION,
|
| 97 |
+
metric=METRIC,
|
| 98 |
+
spec=ServerlessSpec(cloud="aws", region="us-east-1"),
|
| 99 |
+
)
|
| 100 |
+
needs_population = True
|
| 101 |
+
else:
|
| 102 |
+
log.info(f"Pinecone index '{INDEX_NAME}' already exists — reusing.")
|
| 103 |
+
# Check if it has any vectors; if empty, we need to populate it
|
| 104 |
+
pinecone_index = pc.Index(INDEX_NAME)
|
| 105 |
+
stats = pinecone_index.describe_index_stats()
|
| 106 |
+
needs_population = stats.get("total_vector_count", 0) == 0
|
| 107 |
+
|
| 108 |
+
pinecone_index = pc.Index(INDEX_NAME)
|
| 109 |
+
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
|
| 110 |
+
|
| 111 |
+
# ----------------------------------------------------------------------
|
| 112 |
+
# 5) Build the index if it's empty, otherwise reconnect
|
| 113 |
+
# ----------------------------------------------------------------------
|
| 114 |
+
if needs_population:
|
| 115 |
+
log.info(f"Loading PDFs from /{DATA_DIR}/...")
|
| 116 |
+
documents = SimpleDirectoryReader(
|
| 117 |
+
input_dir=DATA_DIR,
|
| 118 |
+
required_exts=[".pdf"],
|
| 119 |
+
file_extractor={".pdf": PDFReader()},
|
| 120 |
+
).load_data()
|
| 121 |
+
if not documents:
|
| 122 |
+
raise RuntimeError(f"No PDFs found in /{DATA_DIR}/.")
|
| 123 |
+
log.info(f"Loaded {len(documents)} document chunks. Indexing into Pinecone...")
|
| 124 |
+
storage_context = StorageContext.from_defaults(vector_store=vector_store)
|
| 125 |
+
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
|
| 126 |
+
log.info("Waiting 15s for Pinecone to make vectors queryable...")
|
| 127 |
+
time.sleep(15)
|
| 128 |
+
else:
|
| 129 |
+
log.info("Reconnecting to populated Pinecone index...")
|
| 130 |
+
index = VectorStoreIndex.from_vector_store(vector_store)
|
| 131 |
+
|
| 132 |
+
stats = pinecone_index.describe_index_stats()
|
| 133 |
+
log.info(f"Vector count: {stats.get('total_vector_count', 0)}")
|
| 134 |
+
|
| 135 |
+
# ----------------------------------------------------------------------
|
| 136 |
+
# 6) Chat engine — multi-turn memory + system prompt
|
| 137 |
+
# ----------------------------------------------------------------------
|
| 138 |
+
chat_engine = index.as_chat_engine(
|
| 139 |
+
chat_mode="condense_plus_context",
|
| 140 |
+
system_prompt=SYSTEM_PROMPT,
|
| 141 |
+
verbose=False,
|
| 142 |
+
)
|
| 143 |
+
log.info("Chat engine ready.")
|
| 144 |
+
|
| 145 |
+
# ----------------------------------------------------------------------
|
| 146 |
+
# 7) Gradio UI — branded with the CronosPMC logo and palette
|
| 147 |
+
# ----------------------------------------------------------------------
|
| 148 |
+
import base64
|
| 149 |
+
|
| 150 |
+
def _img_to_data_url(path):
|
| 151 |
+
"""Embed a local image as a data URL so it works inside HTML blocks."""
|
| 152 |
+
with open(path, "rb") as f:
|
| 153 |
+
b64 = base64.b64encode(f.read()).decode("ascii")
|
| 154 |
+
return f"data:image/png;base64,{b64}"
|
| 155 |
+
|
| 156 |
+
LOGO_DATA_URL = _img_to_data_url(LOGO_PATH)
|
| 157 |
+
|
| 158 |
+
cronospmc_theme = gr.themes.Soft(
|
| 159 |
+
primary_hue=gr.themes.Color(
|
| 160 |
+
c50="#E8EEF7", c100="#C5D2E5", c200="#9EB2D0",
|
| 161 |
+
c300="#7691BB", c400="#4F71A6", c500="#13315C",
|
| 162 |
+
c600="#0F2A4F", c700="#0B2545", c800="#08203C",
|
| 163 |
+
c900="#061830", c950="#03101F",
|
| 164 |
+
),
|
| 165 |
+
secondary_hue=gr.themes.Color(
|
| 166 |
+
c50="#FEE7EC", c100="#FCC3CD", c200="#F89BAB",
|
| 167 |
+
c300="#F37287", c400="#EE506A", c500="#E63950",
|
| 168 |
+
c600="#CC2C42", c700="#A82236", c800="#84192A",
|
| 169 |
+
c900="#601220", c950="#3A0915",
|
| 170 |
+
),
|
| 171 |
+
neutral_hue="slate",
|
| 172 |
+
font=[gr.themes.GoogleFont("Inter"), "ui-sans-serif", "system-ui", "sans-serif"],
|
| 173 |
+
).set(
|
| 174 |
+
body_background_fill="#F7F8FB",
|
| 175 |
+
block_background_fill="white",
|
| 176 |
+
block_border_width="1px",
|
| 177 |
+
block_radius="14px",
|
| 178 |
+
block_shadow="0 1px 3px rgba(11, 37, 69, 0.06), 0 4px 16px rgba(11, 37, 69, 0.04)",
|
| 179 |
+
button_primary_background_fill="#0B2545",
|
| 180 |
+
button_primary_background_fill_hover="#13315C",
|
| 181 |
+
button_primary_text_color="white",
|
| 182 |
+
input_background_fill="white",
|
| 183 |
+
input_border_color="#D9DEE8",
|
| 184 |
+
input_border_color_focus="#0B2545",
|
| 185 |
+
input_radius="10px",
|
| 186 |
+
)
|
| 187 |
+
|
| 188 |
+
custom_css = """
|
| 189 |
+
.gradio-container { max-width: 980px !important; margin: 0 auto !important; }
|
| 190 |
+
#cpmc-header {
|
| 191 |
+
background: linear-gradient(135deg, #0B2545 0%, #13315C 70%, #1A3D6B 100%);
|
| 192 |
+
color: white; padding: 26px 32px; border-radius: 16px;
|
| 193 |
+
margin-bottom: 18px;
|
| 194 |
+
box-shadow: 0 8px 24px rgba(11, 37, 69, 0.18);
|
| 195 |
+
position: relative; overflow: hidden;
|
| 196 |
+
}
|
| 197 |
+
#cpmc-header::after {
|
| 198 |
+
content: ""; position: absolute; top: -40%; right: -10%;
|
| 199 |
+
width: 320px; height: 320px;
|
| 200 |
+
background: radial-gradient(circle, rgba(230, 57, 80, 0.12) 0%, transparent 65%);
|
| 201 |
+
pointer-events: none;
|
| 202 |
+
}
|
| 203 |
+
#cpmc-header .logo-row {
|
| 204 |
+
display: flex; align-items: center; gap: 14px; margin-bottom: 4px;
|
| 205 |
+
position: relative; z-index: 1;
|
| 206 |
+
}
|
| 207 |
+
#cpmc-header img.logo {
|
| 208 |
+
height: 56px; width: auto;
|
| 209 |
+
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.25));
|
| 210 |
+
}
|
| 211 |
+
#cpmc-header .title-block h1 {
|
| 212 |
+
color: white !important; font-size: 22px !important; font-weight: 600 !important;
|
| 213 |
+
margin: 0 !important; letter-spacing: -0.2px; line-height: 1.2;
|
| 214 |
+
}
|
| 215 |
+
#cpmc-header .title-block .tagline {
|
| 216 |
+
color: #E63950 !important; font-size: 12px; font-weight: 600;
|
| 217 |
+
letter-spacing: 1.5px; text-transform: uppercase; margin-top: 2px;
|
| 218 |
+
}
|
| 219 |
+
#cpmc-header .subtitle {
|
| 220 |
+
color: #C5D2E5 !important; font-size: 14px; margin: 8px 0 0 0;
|
| 221 |
+
position: relative; z-index: 1;
|
| 222 |
+
}
|
| 223 |
+
#cpmc-header .badges {
|
| 224 |
+
margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap;
|
| 225 |
+
position: relative; z-index: 1;
|
| 226 |
+
}
|
| 227 |
+
#cpmc-header .badge {
|
| 228 |
+
background: rgba(255, 255, 255, 0.12);
|
| 229 |
+
border: 1px solid rgba(255, 255, 255, 0.22);
|
| 230 |
+
color: white; padding: 4px 11px; border-radius: 999px;
|
| 231 |
+
font-size: 12px; font-weight: 500;
|
| 232 |
+
}
|
| 233 |
+
#cpmc-header .badge-live { background: #10B981; border-color: #10B981; }
|
| 234 |
+
#cpmc-header .badge-live::before { content: "● "; color: #D1FAE5; }
|
| 235 |
+
#cpmc-header .badge-brand {
|
| 236 |
+
background: rgba(230, 57, 80, 0.18);
|
| 237 |
+
border-color: rgba(230, 57, 80, 0.4);
|
| 238 |
+
}
|
| 239 |
+
#cpmc-footer {
|
| 240 |
+
margin-top: 18px; padding: 16px 20px;
|
| 241 |
+
background: #F1F4F9; border-radius: 12px;
|
| 242 |
+
border: 1px solid #E5E9F0; font-size: 13px;
|
| 243 |
+
color: #4F5D75; line-height: 1.55;
|
| 244 |
+
}
|
| 245 |
+
#cpmc-footer strong { color: #0B2545; }
|
| 246 |
+
#cpmc-footer a { color: #E63950; font-weight: 500; text-decoration: none; }
|
| 247 |
+
#cpmc-footer a:hover { text-decoration: underline; }
|
| 248 |
+
#cpmc-footer .footer-brand {
|
| 249 |
+
display: inline-flex; align-items: center; gap: 6px;
|
| 250 |
+
color: #0B2545; font-weight: 600;
|
| 251 |
+
}
|
| 252 |
+
#cpmc-footer .footer-brand .accent { color: #E63950; }
|
| 253 |
+
footer { display: none !important; }
|
| 254 |
+
"""
|
| 255 |
+
|
| 256 |
+
|
| 257 |
+
def chat_with_hrbot(message, history):
|
| 258 |
+
if not history:
|
| 259 |
+
chat_engine.reset()
|
| 260 |
+
try:
|
| 261 |
+
response = chat_engine.chat(message)
|
| 262 |
+
return str(response)
|
| 263 |
+
except Exception as e:
|
| 264 |
+
log.exception("Chat error")
|
| 265 |
+
return f"⚠️ Sorry, something went wrong: {e}\n\nPlease try again or email Info@CronosPMC.com."
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
with gr.Blocks(theme=cronospmc_theme, css=custom_css, title="CronosPMC HR Assistant") as demo:
|
| 269 |
+
|
| 270 |
+
gr.HTML(f"""
|
| 271 |
+
<div id="cpmc-header">
|
| 272 |
+
<div class="logo-row">
|
| 273 |
+
<img class="logo" src="{LOGO_DATA_URL}" alt="CronosPMC" />
|
| 274 |
+
<div class="title-block">
|
| 275 |
+
<h1>HR Enterprise Assistant</h1>
|
| 276 |
+
<div class="tagline">Project Solution Experts · Dubai</div>
|
| 277 |
+
</div>
|
| 278 |
+
</div>
|
| 279 |
+
<p class="subtitle">Your AI-powered guide to leave, remote work, conduct, and everything in the CronosPMC handbook.</p>
|
| 280 |
+
<div class="badges">
|
| 281 |
+
<span class="badge badge-live">Online</span>
|
| 282 |
+
<span class="badge">GPT-4o-mini + Pinecone RAG</span>
|
| 283 |
+
<span class="badge badge-brand">📍 Dubai · GST</span>
|
| 284 |
+
<span class="badge">🔒 Internal use only</span>
|
| 285 |
+
</div>
|
| 286 |
+
</div>
|
| 287 |
+
""")
|
| 288 |
+
|
| 289 |
+
gr.ChatInterface(
|
| 290 |
+
fn=chat_with_hrbot,
|
| 291 |
+
type="messages",
|
| 292 |
+
chatbot=gr.Chatbot(
|
| 293 |
+
height=460,
|
| 294 |
+
type="messages",
|
| 295 |
+
avatar_images=(None, AVATAR_PATH),
|
| 296 |
+
show_copy_button=True,
|
| 297 |
+
),
|
| 298 |
+
textbox=gr.Textbox(
|
| 299 |
+
placeholder="Ask about leave, remote work, working hours, conduct, training…",
|
| 300 |
+
container=False,
|
| 301 |
+
),
|
| 302 |
+
examples=[
|
| 303 |
+
"What is the annual leave policy?",
|
| 304 |
+
"How many sick leave days am I entitled to?",
|
| 305 |
+
"Can I work remotely from another country?",
|
| 306 |
+
"What are the working hours during Ramadan?",
|
| 307 |
+
"How do I report harassment?",
|
| 308 |
+
"What training certifications does CronosPMC support?",
|
| 309 |
+
],
|
| 310 |
+
cache_examples=False,
|
| 311 |
+
)
|
| 312 |
+
|
| 313 |
+
gr.HTML("""
|
| 314 |
+
<div id="cpmc-footer">
|
| 315 |
+
<strong>About this assistant</strong> — answers are grounded in four CronosPMC policy documents:
|
| 316 |
+
the Employee Handbook, Leave Policy, Remote Work Policy, and HR FAQ — indexed in Pinecone for fast retrieval.
|
| 317 |
+
For confidential matters or anything not covered above, email
|
| 318 |
+
<a href="mailto:Info@CronosPMC.com">Info@CronosPMC.com</a>.<br><br>
|
| 319 |
+
<strong>Disclaimer</strong> — this bot provides guidance based on internal policy templates.
|
| 320 |
+
It does not override your employment contract or active UAE labour law.
|
| 321 |
+
For binding legal answers, consult HR and qualified counsel.<br><br>
|
| 322 |
+
<span class="footer-brand">© Cronos<span class="accent">PMC</span> · Project Solution Experts</span>
|
| 323 |
+
</div>
|
| 324 |
+
""")
|
| 325 |
+
|
| 326 |
+
if __name__ == "__main__":
|
| 327 |
+
demo.launch()
|
cronospmc_avatar.png
ADDED
|
|
cronospmc_logo.png
ADDED
|
requirements.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio>=5.0.0
|
| 2 |
+
llama-index>=0.12.0
|
| 3 |
+
llama-index-llms-openai>=0.3.0
|
| 4 |
+
llama-index-embeddings-openai>=0.3.0
|
| 5 |
+
llama-index-vector-stores-pinecone>=0.4.0
|
| 6 |
+
llama-index-readers-file>=0.4.0
|
| 7 |
+
pinecone>=5.0.0
|
| 8 |
+
pypdf>=5.0.0
|
| 9 |
+
openai>=1.50.0
|