SyedHasanCronosPMC commited on
Commit
431f428
·
verified ·
1 Parent(s): c4c2b3f

Upload 10 files

Browse files
.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$&#22UG/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: SyedBootCampHRCronosPMC
3
- emoji: 📉
4
- colorFrom: yellow
5
  colorTo: red
6
  sdk: gradio
7
- sdk_version: 6.13.0
8
  app_file: app.py
9
  pinned: false
 
10
  license: mit
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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