From 413c44aaa0c37a7ff6ccb4b07e1464c05b878eca Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 4 Jun 2025 14:44:57 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Added=20IHK=20project=20document?= =?UTF-8?q?ation=20files=20in=20Word=20format=20=F0=9F=8E=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../00_Inhaltsverzeichnis_Anhang.docx | Bin 0 -> 38339 bytes ...erufsspezifika_FR_Digitale_Vernetzung.docx | Bin 38097 -> 38360 bytes .../02_Gespraechsprotokoll.docx | Bin 38165 -> 38600 bytes .../03_Mess_und_Pruefprotokoll.docx | Bin 38245 -> 38618 bytes .../04_Uebergabeprotokoll.docx | Bin 38247 -> 38473 bytes .../05_Abnahmeprotokoll.docx | Bin 38368 -> 38912 bytes .../06_Anwenderhandbuch_Auszug.docx | Bin 38144 -> 38252 bytes .../07_Prozessdarstellung.docx | Bin 38447 -> 38665 bytes .../08_Netzwerkplan.docx | Bin 38467 -> 38865 bytes .../generate_ihk_documents_real.py | 861 ++++++++++++++++++ 10 files changed, 861 insertions(+) create mode 100644 IHK_Projektdokumentation/Kundendokumentation_Anhang/00_Inhaltsverzeichnis_Anhang.docx create mode 100644 IHK_Projektdokumentation/Kundendokumentation_Anhang/generate_ihk_documents_real.py diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/00_Inhaltsverzeichnis_Anhang.docx b/IHK_Projektdokumentation/Kundendokumentation_Anhang/00_Inhaltsverzeichnis_Anhang.docx new file mode 100644 index 0000000000000000000000000000000000000000..2eb24e8bc39326d9922ec76706425bc927c6b341 GIT binary patch literal 38339 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 QRkA7I97TmoIGtVNKfhp?NdN!< delta 2115 zcmZ9Nc{J2*8^?b$2GKOx#*C~*CCkY0gzRO@Qj(%+Lqn1*<6&$W*#=L<{AMQm7N#EA znU>Kank*xUypzh7tqh`U;q95x>74g@?{n_+Ip6!fuJ3)_e|_63p|roDaAyZ0m<#{_ zTL2)i7XBIn1p?~_A3h=w|LHV3c}mG z_6B3A>Y$)rXoyzS;V6DXwZPi{ed_V1YD|G5rsW{8@ zWoXC!v+Y2GO=#eqESHbC=iUUph8rS_SGt3j=5te!>}uI|1=vv=7w^7dM(XiHW!8f> zoV*9?m9vS+d>)-mzyf}}9a8>H->II@TKwZ0EIF*&-Q5+=f9>z*0k zOmyv=^p(UO^(R>|5xT~!*rvMfrggb}Yb&xD*#>3NT=D%p%f?6K>PHptzAz$}Sxau+ z(~BE}gc-u1Lc#S{Z$}T>echSnxO=kH$;Lh=zHcQ=Dy~$b7Kx?#mfdS$u&`Ifh=-gq zBU(RB8?y2Xdf&6oRPCHcX3Zyu3>zUd!W66LGLEI-G)c?Hi@C5gX^zXWbW3Drc_N#G zDrv^$zG&3_Ds|};>vgKE+~>;o97=n%f0be1hsVNx6-VX}%&rj_8kK<$x;a8Dd2(q$ z0hJg3PYMyOp$`Aa4u*zB_Ms>o;S{O-obI>Tp9Ua%)errXO8hka9nor^N2c_AM5jEz?J;Iht>^Y-V<4lLOumn5H7l($TW^$RIj zZByy@S~MP0yl}RnLkSK~Qqiz{((v4^CEG*(883{~w%fS ziF?-XrX_Msa~4o&b(IY4p4pM*ky+Lekb9AUvnpenpM;x9-BrF@L1JM3T)S#ey}JZH zdhjrH-YYi26(k~oY?Sy#6`v$Rxn@{r(3ir7W3G~=MFUgYoqPRW^~V|g5Os4bs~Zs- z+aQgSnO39n>;hnUF1WRU+4LQ zCh#SjL-r&9S$1d8xz92j|xh zo4tEvB$?5T%3)e(_+wk`Am3Fmg1f-A8@aP!2@^tVSOdIptsYm8c)TpQVP zL|?qOxcng5$>r_cv081r`}o{3Hx~2r-a1E*`N0^BxyWtw3hc5cj!+?t zU4U?+ee{f5m*_Ru8qw`&|LA$??Ke!r=kRo7T-kV;&)OG^N^_30l@@yi1D_xTwd^`@ z;g+7VlGuI9_kk^Uum(zi{G!$YHQc&u_wZOV5i8d?q?bt%>)I{%u&US5>ivJFV)ot& zN7Pt5yWv~glp<5N{274^_MQYcdd0Xy*T_@8GtR2f6hRdy~FQ0ol#E%RNMKKYLBnRojB8$Ful zs{5Qi>0umKAG)IK(nGs@jkXoxP9Vrw!xLH!T=z8_4$Rk^G^}--SyCNcS=Ib8mo$y| zDf+)*(Tb~&LWFMS!@~9g9YJnT%me=rP$-lqB;b7b{>^*U$V{j}GozP9_ynut`vo8; zEDKI!6Oq4CCMkQf3!A#SskLt`2n)(~Qp^SLq8JE}OEDE-fMW9hiKGVVst7{rYV&g$ za|i%9@PkT$pKQNZEaVX!OhG7tcWH2eMKP!V)kALVj)-}2#Jsdv#IdS z!Zo9!kc&_NSQ7^Tsozz6#zOGn;0vnCW)anL*8{c)0I)Ow0Qs+?hJWzrlEW+d(a=YF+q@Y}cvpgdhg qU~5WOfQBT4XXr`-6~$Kpsi5f%Iay~1Vg5vdp{0OA7yx)=2-H6SFrOs= diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/03_Mess_und_Pruefprotokoll.docx b/IHK_Projektdokumentation/Kundendokumentation_Anhang/03_Mess_und_Pruefprotokoll.docx index 0b45910b80a78e5b47e9064c645adfc11ad28192..2ba5adcc77641572bb941ea7d3dc1ee593e788a7 100644 GIT binary patch delta 2585 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 delta 2090 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 delta 2385 zcmZWrc{tQv8~)8$vkhY_h8Si4h#^ZO60($tk|n#b8+#+mAVXt#4Zksrn4%D+vLuyk zAtjP+l;y=sLh2*yD||Dqx9j@)zVpw0-S>I!bD!&+Kb|M?F?8}il+VVBja>u)0B!)l zR`c~ipa8aZ0&;jC_n_2$%wrda;sI>C)B6rYb`2*01RwxFh-tct4fj^}#(G5s`-DWQ z;evz49jzipj|(5196qg;!@ z6iT|D;d)DIu%2m zd94ktMB$Dc7bgBIIWfi^Mp#`c8wg!_WX}Vm7>C7DVE1Y)qluR@osC~E)XwXUj$q>2 z{;DxUa{O^UiF{ya1W%E@(3LxJ)eKz$(+XLn2Oq;37ITKuxR_tF4tvUsF z06S`)5lUw7myqu(I+DNUk>?gZ!aeOThl*B5rjIhhU$x%ztch$zk)+BpGe-}_yY){;7T=r=c%S?{#WzvMC?wK!>vOyY2^Cw5X;j#wiqU2p)GL2v*wFucQ-wBIHb? z;S?chQohkrvPbRQxHZky#BR)p$k69`Mjp(xl`|In{AkwZzwc7aNE*p)f53r%v&x?|6Nen zxKvQ_Tt?Ak#tA^4A^^@5u)tzTDidTG*%Vu@W%E8&>1jU{U*Z2BeZ0+la8k%jQAkERE6dwg$Tz1{p6 zV-sqk_(qGT2Cr?z;f>RdZ-11zZyvrEMQbY5oijnmDM|1wJ!#Qgx9_Yvx^v|Ea=GsC zhAKupRADVo?KOS!s)ORUTC#uo?lm5snZ#L~@`IUFt>F#W()(39M`P>l0AtP#NAt@$ zo$djmE}!9n69#Xk#-{RDN#tm5`00a+{2x!_zTRU4ugDClR}ePAB>qoLcXRfoyu6Sr_qQn^sDS z09Uz;&GHd>Rg2$><3-su{<1ltXxmZc#Z&lNV9Bb*G+WNjBD^o(+NJZ{mf7a!9Sm%t z@jE_o{&7aVggKXobev>1qDUv{)i@!dPiJ9_OG z6#<|Tc?5FpJiQ>)-vQTN+D*@^o=RPtyl-E7*WA0sS;ys*hH>M~;>X@6&eRMa?x6Mc$j554#pi znr`&I0f6nZraVigbJok&u1&zJB zV7=bfiQ$1Yw)+bUmIL!add`cn7ky#Gm5H^?s?JLZTZm$nWHbS&YB$I)yTa`!7D(z6 z`!PyIuiO%2VEsoVMYkG01mQzwbP|LTupwC8p%mc&kpX1KZl-6tmIGyEEPAC(rB3Wk zq;9G^rmn9dcxU9@%_PBVWrr~OSn4!7$y8)I`vNRoFXpK_IzrM9=cTx)xl~MDbiN3& zZOOxnF}|;_y0sPULH@fLwmSv4wuu-*0Kkd^01&k;Fu(m~s4PTRXEn*UMp$hYo{0X+ z#zLiQ$M*M~W3!2^%c6Ayst0>U|n*-xWaG+UGu*D;%scN6?T3 z1)vTK20#NAz$s{f-`g+fLeXIDWKj@M0zcRalLosfd@SW7Q`r>&Hz-mvEQ@yf|@c}kor*(~)xR|gi% diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/06_Anwenderhandbuch_Auszug.docx b/IHK_Projektdokumentation/Kundendokumentation_Anhang/06_Anwenderhandbuch_Auszug.docx index 16765cabe3c345b181e4a34592c07a0ca8a2285b..e670f299e306ca2c3c924c3a394d6943de4773db 100644 GIT binary patch delta 2228 zcmZXVc{r4NAI6^^r>~A>OasDaMcK;h1K9$pCm00aOA z`5wF<0%edJ-ar($xdqMJ<`rIPD1t%m^eobdAe+HB+fraNOqR+ZjqewEx{A_y+-3M- z%3a>^`k;B%!oh`_ydnoO&%taPTPPC94JrNsYgz8c8_Szp-$$ukI1vejL8UUskAoL-d8Wco{WMmJ2o8EaEN(5r-B@8ZH*losS^*oxpV@;v;A0nGyr2*!_p^Nv19nh^q zVU)3zJx5;qd7f)hMOV2og_>;Kt?@Vicp5#va8`zVuXD{!wLlL7Cb|h?b=;Kaok2_( z5NIzXb?yQRCijOZ)`WJ(RAh|KU z1kLN^;Z(R>;&Va0`u)lC@9nqbN~$+xQD@da&g8^?`~o6cNnWAnsbSr#-K;RLWQK>lJvn zwvzYgPL4i9;$^ZEZ}GQm{Uf&vf)JK2w5$}@KR!fipMcI_Tr!&* zZZOTTOOpP^tNS`}-bEdliv^?pLf5M+Tt7i>xjdgXaCP4$X0^#?JCV9<0%sir3w1P@ zvsbC8OKb<+@o>kd;a6Q1aELP_)uVH+M4Jcab#&cPIaY`MTvzi&e674f_SayQA2f=4 zFW(^>xx<#3ITf12OwdF1I5i{;k_&YXw`NT9(NU=bYQ05J zwKSh?GNAf~ zSWEXe>^o<_;K1G9sRkYba>kbrV9$%!D|fD0#81e3ANi^rzQ<^=_h*G7$xr5R26b2S z(k!3&HU4fso8oqCETRQ1@Hn9t@o~pJ581*_`fdw&{Xx%ozagN3zfHBMRV zr;MW4h*tgIcJ!Fxh%A~{?A@Qnvi02~^w8v>4D^%H;nwjuVq&MV1U~D5T4|vWAHPpu z*sb75Z0Y+vJ6BBYf_ppRvph>ZnEKv^{?O-st)py7W-^8_fr(F@DaDEKC2P8w%_f=O zuN)_SGS!L7t0H+-IAd({WMD6O*>JjtF8!D)^R{*4WWaE(5Q~lvWSt$DIUcy&qnuWJ zLg*?RjjB_h9y2^vtCd)C6q^nj`e)tr4+`NwBzVrL?8{TU(n`ucNX+d>D*7+An3VP> zO-hp+lMI|C!$d#n_OvErh^-bInE%Pjic;f2##+$?JNO;ja^G$f`KqFPq zW*T3$mypo*u`GiTCA2504_f%V$}YEK!}3ruyDyY2td4wV4m4QS4lFD_6g5g(HFdu4 z4IHyT7PPNUo=JP_!&`3b_A|`*)L-r|LyQ93#)x+YN>>7y2p$w;Os6MPUh1uhZ0MTj zsr^m#_?1dZdDEql<9(tyh2YW8jXQd0XB+C+B`UQ;)W(i2;D0-);U1i_T{>vQHEnJg zb(=R#n7N!y%@U+;}D!n9Oj}mX_Y%|Iw!fk)t6kb?FzZT-qr!> z-}ty|gluyz3bS!s3}l;fAx1O#cg=azbh#&&Xh^82FxUoH0AJDI+{q{n2}uW6XbMW) zVmy92X}}N*0OUFtAjj#)UtaqNT_2RxEU*ramGWS62Py9?)1EtV8pz^xgG`q0P$Zj940^xB!LN_^7eDg zx@U%3I71E2lEQCGis!&K5W~&*!pV?H28DCgsoX!v?oUk%+NdOT0&7z$G0F(%l zzjk<3m~Q~-M0n8Nm@wkM-(@=z<;&p2fqVcU@|(Z=!hik20Y3f#B;EgWD{$h=yM}{W XIM!q(0FeI8{v7PjMZ+4ixx;?|0~^qj delta 1995 zcmZ9Ndpy(oAIHBNW>{;9xi;6Fjk&a}a*n$n8P?^vMG{GLIlsw$rsh_dE?eIja*4_< z;vj?yX}L}AR0~HAOUX(p5Pc9RK&csrXl(Kal(WeUNhK%}pgi+FKUw85AO!%A6u?I?6}odM-vKoyP;h-| zQYuSgvQ<<92X>~8{Bq6bO6GqQg)nQ0On9bE527Qb?2TpVa zj-95Y!}=7spJgSzk`}Z4cDj<}QlzQ4J+|-NgE<&vUgnl4q;FZ2JUHW@h$S~13~2T5 zdnh#=ZMOE7%M)FqXY6bt+DKO9c)j0J?)YKobbY##jjg+Zf1ZMqWaD(|UBiSpYG0nr zY<*K?`-_R+aps3)xw(fd3%m3u<*U@ZZ6Cj{J`nH%HWe0D&@&gqMl%Cx^^ydTS7eyVstbu4hsw0i*L0i6ktQT#?ZQ}1~ zKI3~|7|~rj{Ro2*sf1{pOe*Z}d6Z(>Io%sTXmD4RUz|Q%G~>0L{_1wx)k`Hl*esR*-iY!)6#n{+cr)e|07~G*|6y|Z(P5OuO0Lk2dl)AT-;Od zyW%#5?TW;_OA%%cw0o&1`U+(2T=y3a*?APo_vPS@*x7b8H?Nbg#RtV8ZwyN2*k*h7 zICs6J&#k04cib%MhZ`QFsaI+Lb^1Dh*SwklYf<|q zI%^TJi{aS->42Y9wuvC-kFDWISIV_@vI@-P$%kvWO~H4PLiuV89D;y4k8Ry|$jCJw zo8lx`c4KXGXBm_%k)E0sJO>7?rP8(*IB%g3)9#!qg-|STN|*I!fds?rvSN*MhU&TCD78=4rN<}d-agIZ(?T`;AK)qkDa!SNp}^gX8Z zth@h+t?%GIDiOyZm4K$YPukKP4>PS@m))E^|rlW5< zl`&9$(IzbggtEG)nDSBz@#`0(^S4eM@5SC%5}L|Inc0sH<$`y}Hg9LAUYF3|?{8%@sSELbk)#CwnU%wS$jHuwzhn+urj zqsmT*ZOpLC7qt09+uiiPuZ+@v(AN$)lz2wO_9*A=G983cb|5U0)${-8UGQSt zLI5rFBjY+X`_9y>m5`-?A|k3GI%qzf8=u;%Gpl{uNmTc1I|n88xE0pbrxbQRDA?~L zUTV)OY}FxzOj)X~K4n7waLr<2Wo;jtm$ zcvSWA0xk2si_;!f7o3~*{Kraoy9XYw!BJ($e6LgHN83n-CH>kumm|>Yjy^?>y?Pl4 zHQz7=*;IeH%Drs-cydv1Y%sm1f7|FwpTd{5H#u>dfy@u`4Oyi?cKJtS%aiiPi#Sj> zU&ze18_{q4+=S6`#GRra$h|i-gDe4cy<%H9d7ufxTerZxjS%=}-)K5p#qsV$j3;(s zN!hiB#aQu_=&n0>aJ83K>_If;oa&qBuaA?6`&!8>!NUBBS;6Ql_zvksS?G41-euQ` zqUiZmR3Cl>%|d>X<~&-sb(H&=kdw*(aLzBHaZG}5y?^=pTo7uaTPkA+TV&6elIF^H zK84#yAwRASDyr^ym~&0*NS0x^>XC`?PrcUg$BQbbe*J;xQnfwydDqFEB3sVM30(*i zemY+5F0_)sN=k+#?oCEBT50vmBE5a`$N$$t&5kWmn?1lm<{69oVUHz+C}wfkoP?O^ zQ6`&tdo&9wc5m8O*akt@gb^_e62FSS>Lw{}PW^T%YjbNPWo6U*8H-ZlF)q_e3>a&# z7*;F`F)p&q|J^(ttX<;d8%rHphyV?@U``)$hCmg7pDp&xTY9K6E6f-GL~r64=b%ynm9d4)F!Qvo*w#M!GuGivdnDR6vh(6wH|^e&PQB DG^l#* diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/07_Prozessdarstellung.docx b/IHK_Projektdokumentation/Kundendokumentation_Anhang/07_Prozessdarstellung.docx index dd0e65ac892e3787fee8002566ec7efb314273a9..fd277638f945424f5962360e7e8c7cd66b1e7613 100644 GIT binary patch delta 2659 zcmZvec|6o>8^(V#vM;IZ#@K~y6O)}NOC*GjHPTFD8!{3x8e4?1%nU+gLblOR_BA5e z#=eGR$(%$BmFSdXe9k$a_q^}>{PX=>_w!u${XEZKS7ik_fePlbv1B^L2LJ#YKnr@p zH4FmNf~sGG#1FU!&OG3~LxNx)T2Pns=T$rOEGq!asFGS(L~%>zn{Dp49WSa`qk#K? z$I#Z(-8Xevtkt^5#AfS>=|mp|2L%h+u~m(dpOO0OtbSiK2YNMsA=(htUx1cwA<^NE zW=PsvMs`MJ-@xe0{5F%^xhRV)KC^IIQ>)qOhS951TCaX=e0#1lC!J9IywH_H>s50+ z;$zA3Gb|)T{~fOQ2%8mew0YC=w0`*==a=)Q(t&60dRCKUUie3w zBFfF)sDLL#6&dyd-NL05xmvKR%v6kkZ9Nt}^G&iYJF6qqf`B)ALsoS-3qR!$d172X zSvgkNjt1$@ZquyNQCABwtF=$?2X*F*T$#KhYC-V_wB~u4hSm;WY<0Yv<9PK5kXNn-I-y&0}HKBQS$iU`leKU(iIa1PkvfZjC$3 zb$2E)*gOfnp zsrqn!He6Y0CqZgO3nt>EYx;4;{NroA<@Esa!16~G;gFB=hUJZ=-^f16%c;pTUcc@= z)8*dEKi{{raS2v0H1(26_PBYHnL|O;mi?hFDb2LVrmN(t?5-WIY74q=ke{$o@?Nnr zbS<1mw$1u@0Rdz(F*#q8o+r_S)X(6bj8kL36yWD+_}luoM{Sv~V@4?>=AJT=fr z$~_*o>n3sJE4?g2U(;FLpDd?P3|G2C6}zm*!LIYikrV??R9=Ir?n%TO*)(0?iHu$Ja_Eu5->On}yy;nWpV=o}AN8Z3(FPb|V57 zXe$}tSd+;{fyFPA0I^|4DHkyt7J9uY1g`Nf9aAgkqflBFJ5Nu0-Dgw1qW2T3IR71Q#47TD-K4D; z2jVx%csh#{zqHNl)C+%CHZHaSarz)<>-X!6lTFbonD4&gofec3XWXOjJPR?sdGugWD}Se&AS>bPiKf>^y99#~ zKbCesLAx9_spVM+w&z7+X9U>#V4o#A?<%6XL!HakbH0W1URI?z{h^u|FqJ{F=$g7` z)PD0el{G=m#WuU?E7_aDIGS&TkO!hfLb9HTGSqc9my0^dB$M%hc=)@t;oJl6 z$z!16w$ecCZkmjTKe1_L1?vTO=?6b9p;!UZc3okSIxvfo&yVZrqQh%#Nu#^2=416#Zk(=iTUKuq5%kjN!4v!`;e<++u%@T zHwHNl2)_uy)1~-z8|0mm)%#^Ds(I%|QbIyJ2hDEmoKU)b|Mx_W!~8=2v2u0J=dVp_ zk?VVw9~SFaRV;X>Qp+{asr`9<4R}4P{`WhZ9QwU=E($UI?a@s9-mc6^sKt&H!q*bq z8zbL7H_-K*T?sP2P!Wj>JnZnBmOZ}0ZY|~J;PULd?a2F_8qE{6nnUvLHu)_w83A~< zL@&`n&gMCTc-ZY)|DxL};JMW}>nK7o+P$*01O4)1x~RZ8jkiKJivlMcoblTYJQUse zatz0dnM+vrsKzsXn8A!t&ehdGN0tCm%@+Bxj1y0+kmY9ZW(5>y#gWLKj5pBJi0 z5$}Zyf}@&1;(Tm^t119C2jeDP-mhk2_uK1uJxXHCq6}`En|8_9&~n8XYp69>-_JfZ z&RdMc|NODThdgQR2YuxF@(pMsCrVE8D?4H5K&K~dGBb|dB^WZ$OVDHhOw?zx60FnJf^!JJc zy)-1T8$w7p(m}gq5(KOjOrns)8O;awmE0}T8cB+wc+w$Y$1svox&%XA*jMkdBxS51 z&%cL}20225C;OM_B195-7)IS*QiNtvOqyFDxO{RlAY5U_y%mA?eHUF$g5GwI6 qzZdcf0*QhBk6V0yd_m77s&(HQD**t4|Ckv!_QVr26-}Oy<1g(Dvg;|*~G4lfezzzU`4X`&5 zC=l2<2N6HwA86qbZ!sgGa3HYH>1pTZXb2ksP?W$9R$<}?tIf{AE*le4W|JUj}fiCc~ z@tciFLBuQodg+ckEkdc`o!^V=1>zv{11G~6g#z}lA!M3#Z|<)?AxZ$s-30=ZiN9^|K8$d0P}8XVhb z{aTs2Yk46ZS1wDj@#}SmtS5*u@8 zuVdY~pi=Kydd2?M`YGxMh<&adPMxo9&*8hG(R{;YZA(A?ub!rfv`2w`xV$Mpq$ zvRqPo{2o+U^?Jm)XvIF@mmz2V3=(A)*=kc?ptJ1Za7w5wv)wyYv_<)(%X*I*5smL0 zyc}LD`{vqu8w*p_X?GJXGNJ<#ZF!|)?j*ajL2JmdoMFWN&qj&oaY_-BNWN;# zINwA|kUK;no38^e{9z~*)73`aXS{p*b3b&?W?&sVtFi7lGyy>N!F`J8@enDqVLuFiJ0gm(j?ohx`$f0m0X-{ zURAtu`qk)g^ClpLsv}5SvCJpvC3w88{`ki@bS7x(B~58p0!`G z@8b!PFNJOwp0|y|zeJ+erWYr3W@rIS{%C6u*+$}uAA zZ?hS;pR#pI-KUBpYzZICh0Qc57h6iCiS4mDw&7FH{_;&EN-k=h+1QF2U~1bQR7kSu zr&7EEg1a1dS>i8_BvX}s#_UTd?p(W1Gzy#4DY0#L%$mmPoxCFUDl*OmG*{kXQp!Q1 zI=t2I`ZP;9?U=ySxG&4#XQi89bi?+-3icV_njww^Uf#qMFUh1*8a$vfz;eHmj23cmwdIFuo=UTzdWZ!wb)h@BM zZrQ~l_l7M|D5W9qVVE-|Vu<@={XZ&3^z%h(+%U1>2RyPxKGa2PS8(m$8DoSiU1mNv zopqV#RQvh;b>vV5cIquyHGZvqeJOToDizbxIz{xK{IG|;1miSYM02Fc%$(qRASF3m z^hjdrF3+7oa2_LORc-y}%;{D_#pn~YXxPV*mdkkb0!+BK$>eS~=|Y~|YTQx_uB7Y@ zh4xZadSSxX(zbQ0!@cA#51~%Tds^#QXqOu&!9G1Ef23hHe$yg4(9PD8V7IUD9pbF? zati6Aw{3Q9cyVKWxch%?w6P5yapapCJY^~jKONT#)MU^oY>kOQ^(fV&ycZ!4%Fy&^ zI_n|9&BS*M3?$JR(Vk?1qpJ5Q#YbHs=|7J&K68tOQRb1a$3R8?X$EHUbr=u^&;7qs zdxL6>Oc5voo!|mr!Nout2`0g?bGC{4;t&-8;I(G~xDR)Lzb6i2!JS_q%IFd=5P`1i zf;t8A@{EoOJ!98yCIDFG006|_@ar$BlKmefS@G(}5 zzb6i29trjpNHONG9L|r80$E8C3?)wzfgnH(NroYCBoQcQVt$eUSVn>|0uK)ZpAx}W zBossaI8+~!z|rL6plab!Ubj#Lx|Iw%7aq-uJycm~U}>Qkqq^fz-OK=EGll-KGGk$7 Qe1-S$l9>U3kjGH}1*5JKD*ylh diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/08_Netzwerkplan.docx b/IHK_Projektdokumentation/Kundendokumentation_Anhang/08_Netzwerkplan.docx index 73d8e1cc50aea6e8cd34d3f47577dc5aae2046ce..72f6dfc8c40230a6cdcc3d7744b3cd9cd5e941f6 100644 GIT binary patch delta 2831 zcmY+Gc{G&$8^#}FeT%V;t;RMqFJ2AGk}Z2-#+IhC)cay&$zZatGj^gf2HB!8Bqqt0 zeI1l!C;QeS*^)ynG=u1o9)MDh^bwN)h^NP^-MX1qwmgpw05Wv}fEyr{CGp}{Y^U58l=&NH3dMqX z3kkATz8Z1zrgLSP?apwedDJIQsQ61mi=6}RAT zKbX$%z?5ou?~D4!9e=|g<^j74q84oKTnlMQpG_<6R{(w6B|9EPzl*j|pnzWfO6G$RG>(T3J#h@zGrz_e~RPrm6Xns*;fO4h(Fe?2_UoeSTW9fq9qY zNeqXwvAy2ggs07nPl~){c8eAe$#3vj&X@_I;H-g_~*}rX**9@Im@u(XKRirx$=X- zHSNzU!wr&Sjqanbrgh3Hrk|PFcD#9hqNXJr`N-;Rogyc z`wyW_$ldMT!ZUDkuZt)M1jL?R|e~r)Q9&-M9HmRy7P$j6KY1A1ZMI4RwVfLYqkYrqK|X~(AEA)Vmlf3}LGiA_ zd2Kw`Dd&S^=RDJEDhAr8VJ6<0E8-><_-gE~qSb&TMX?A=gxB``N`#M3RGDN{bWt+d zU+%hs$&CgDi&c|)1`#6KU@MlQ=k{kcXqBEn(O!r+38S9-nXp56$C#!@hq)G{~1z-rY=j$GW+CN&T~#W^}{FO0V+J3^Ob$z$^FnTISF`tv+V! zV%WE@YH8j4w%tY8xTSyB&VJ*Q=e29fV>%0#(E4ZkmejtAG}l#OdB?5PvI54 z8;k4sgB`gv&S1iZcTh+r?fh@Hw_Y}*(Y8NJ;R{Yme1KVC1yTD+G1#3;GXDf4s-7DE zxKlS235pI8O^giNoMc*0ECnmcOP60BYfaxMOLK`FzR>z~NdK`8K_bjU*J-RXC1!93>nPEJpe&MwK6Q8k9-@+wdAwuQtp(~C{wV+TS#5A@?EL?aW|pc zu@I~r?#VLs^fsH4wvV2?%wlYG?MnZECl^L_o+e)IB=~F79!HYLyDH@g>6$WRa1Z=- zS*6X?3|})2ZyDjNYN-9>G~$~<1b@7IzMabAo7$*w@2kk8iE{k6<BHzkL;sXR=83i@Jk8ea+rH7zT8>+ot(HbN!sm^|i}ODC#3gdw;KFXNUUV$$i;o*> z;tX5db9aNCJeq|SA{j4e@5Fmd#WQ=#P3vIaMV*299|(lCIa|5GO8v8%kT>dcSZN5! z+2|x@kIyNTOVsh=52+2+>Ibi8c`YXYp13O$)rf56ii@IH;CJ6&Z@AX8ZB)~F<2j)@ z<(|SVSjUu||3Q=&1i>Lz5AmIO_0RA_7uyy=?Q8=f>o~#ZskCiyVOT`ZLV@^D@SU3i z(OGUca`$b3MX|8S&6M|hl>>LH2mj^a^p~EO<^Yw<%WgMNw3JqTA z4kbZBYg{BXk}%y_9lD3wBw;Nm*c{0Kf&hO~9qH*|2k<2|kwod-?4er?AnlW2M~8M* zpLjWd0ATk70Py^|a;O9bu^^Imve*%ntOI-9!2$qvG62AL3@Q&H=>!YN9>3UbolQ_1 zEj$ES4xhk#Y@j5P)RruMwDscKPs0s|&A$&Jkz-I~6p1NC_6Vx1Lz&DSHti1~!DCQJ zG|4;#PJfbr3KWzaLrP5%qr2CKPA;A_k|J`nAh&D8sp0T1Mv4J|z_A4~_eqdcX%;An GUi}}eFArb< delta 2443 zcmZ9Oc{r5c8^&KVOv=7BXfWB0HTxD*`BEq$V(g8iY+0j8Ba9hg$cvOlDBB20mXtx3 zR47ZxWKuGgWC_Vqe#UimUB7z&xv$T2?&mz`y#L&%w-VC&0K$FJ3d$}F001Wd1XXdr zWrF}g)eJVN9o>Rt?dVN*ID{7nYQro#j$Ieo1ppW=@EJ@L?=l)l*A=FHwCATCgIQ;7 z3h5n~5hgcodLHv>JD*fb=TPm{Ja=9AD2f{AHtU>l(0qPf9+!S&y}A!YmT)-%A3)14 z&R-!;8p*aFnV2X`m1NT+adr8gD|W1j019+NHNuUIDl1b{en}u@@AJwg7xeUSCsIxm zO`mbod8?s#KHJ?H?5L6api3wrrC+t@_uyiU6{(W7215QSWx7k&x{}y^xAu>do$D?* zE`JI2k=ZZo%Gb9~5tXQ)s;bZ(7qRYC_aHj6LmOPIG4HZCB|;Wk%{z5$j=J}X_|Js& z=_832*`5adk1)5gb56*OJ*ISOXdVp9skO_C9>4Ke6Yp|L&r$nHq3Taf%Z}sgi7#bV ztjQ$1Y}*4Zzdr<~W)|&HC`}_s^n~j!`*p7zoeveI(p|?iXN-bnQrm8;XE{}8d7344 zVpQ%uck4O@K3gKBY8_|P&t0xP_(^49vTxyXU(b{_SSTOs;4O!kcq%_=@1uW>CXUV> zH3?N3zlb->Fn{$Kjq{#3*?mHW*|j{Hss^nH!Ve?;Kcf3ehhKdYsLUp+cR$dkwY`zC z_h=8mG}+qB$WMG<5PV7JUo5pja$Dm>^d$;a z$ixH6$|mRhsoy)Yx!z-C7krED%I+JSRE};2z}3#K!`!0nIvbEeYkU;YaQt^cp+ImA&xm~Jk(#Bn zju>_|MV!W$1j@=ClHYQQ3E!;J=Ok+50 zh>o);bw2y_rI2l1b9|xQ(1>*SAId4N_!^ll9_RjY^y}Rpus5V~JrXgkGp2$5WrnjC z&5*8`68yM^;V84vCyFK_q!?aO>vr)EI2Ebp50%o}$myj@>wIT=0WB=2VsM z9!Ux&xSG+VDjY7T&unnKIJ>V~xAg_($pjtV_*Bi%XoT~*++zi~BUA4y{5gAMb2JZI zc1#EU)}Lo<`w;IC@^QJrLo*(O|88kc+B^J+GPb!nR7YRFrm6wr#1zG*(Z4Jc>fQ0C zo8?cMfBc+wr)`iIkcYP>|Ks0!t%Qumsf!gks^fU-pIwb;ZMs5a#KyfFGSQCqO-JNj zB?oTk!qWPCC1f$OJ!GddA2w0RZxdRJ+EfT z7n+Eig|#KKJ88H0q$QSOm7x)w3UnW+Z#a@RQ zKBSjwKWZfnU+KkeK6zrWRhiwo1^j=yR>$&P+KJN*{#*EJml15l%RTC3Lc3gSHTRUAwNozZ-oARB5WkZ3cEb#;NSaKgc z$dYl;_}>6m%{ahX@ytL#rg*@s87LM}x5C?cX_>$*YNXjoU?qZIk3*rXO)& z9s&99$(pkekokC!ktM&=p7xfQ=m!OWL=gZG{Hq<706ruNgZekQ-C2L&zv1vR-PA>IiMC9;Q#Mc3OWbRHEwstBLM*ZSNEMHu;8W=jC_Mt F{U2_4F--sf diff --git a/IHK_Projektdokumentation/Kundendokumentation_Anhang/generate_ihk_documents_real.py b/IHK_Projektdokumentation/Kundendokumentation_Anhang/generate_ihk_documents_real.py new file mode 100644 index 00000000..3a4218cb --- /dev/null +++ b/IHK_Projektdokumentation/Kundendokumentation_Anhang/generate_ihk_documents_real.py @@ -0,0 +1,861 @@ +from docx import Document +from docx.shared import Inches, Pt, RGBColor +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.style import WD_STYLE_TYPE +from datetime import datetime +import os + +# Stelle sicher, dass das Ausgabeverzeichnis existiert +output_dir = "." +if not os.path.exists(output_dir): + os.makedirs(output_dir) + +# Gemeinsame Funktion für die Dokumentenerstellung +def create_document(title, filename): + doc = Document() + + # Kopfzeile + section = doc.sections[0] + header = section.header + header_para = header.paragraphs[0] + header_para.text = f"Mercedes-Benz AG - Technische Berufsausbildungsstätte\t\t{datetime.now().strftime('%d.%m.%Y')}" + header_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT + + # Titel + title_para = doc.add_paragraph() + title_run = title_para.add_run(title) + title_run.font.size = Pt(16) + title_run.font.bold = True + title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER + doc.add_paragraph() + + return doc + +# 1. Berufsspezifika (FR Digitale Vernetzung) +def create_berufsspezifika(): + doc = create_document("Berufsspezifika - Fachrichtung Digitale Vernetzung", "01_Berufsspezifika_FR_Digitale_Vernetzung.docx") + + doc.add_heading("Projektbezogene Tätigkeiten", level=1) + + doc.add_heading("1. Vernetzung von Systemen", level=2) + doc.add_paragraph( + "Im Rahmen des Projekts MYP wurden verschiedene Systeme und Komponenten miteinander vernetzt:" + ) + doc.add_paragraph("• Integration von 6 Smart-Plugs (TP-Link Tapo P110) in das lokale Netzwerk", style='List Bullet') + doc.add_paragraph("• Konfiguration statischer IP-Adressen (192.168.0.100 - 192.168.0.106)", style='List Bullet') + doc.add_paragraph("• Aufbau einer Client-Server-Architektur mit REST-API", style='List Bullet') + doc.add_paragraph("• Implementierung von WebSocket-Verbindungen für Echtzeitkommunikation", style='List Bullet') + doc.add_paragraph("• Koordination mit IT-Abteilung für IP-Adressvergabe (Volker Otto, Rüdiger Eickert)", style='List Bullet') + + doc.add_heading("2. Prozessintegration", level=2) + doc.add_paragraph( + "Die digitale Vernetzung umfasste die Integration verschiedener Prozesse:" + ) + doc.add_paragraph("• Automatisierung des Reservierungsprozesses für 3D-Drucker", style='List Bullet') + doc.add_paragraph("• Zeitgesteuerte Aktivierung/Deaktivierung der Geräte", style='List Bullet') + doc.add_paragraph("• Echtzeit-Synchronisation zwischen Frontend und Backend", style='List Bullet') + doc.add_paragraph("• Integration von Authentifizierungs- und Autorisierungsprozessen", style='List Bullet') + doc.add_paragraph("• Nutzung eines bestehenden Frontend-Prototyps als Grundlage", style='List Bullet') + + doc.add_heading("3. Schnittstellenimplementierung", level=2) + doc.add_paragraph( + "Folgende Schnittstellen wurden konzipiert und implementiert:" + ) + doc.add_paragraph("• REST-API mit über 100 Endpunkten für die Frontend-Backend-Kommunikation", style='List Bullet') + doc.add_paragraph("• Proprietäre API-Integration für Smart-Plug-Steuerung", style='List Bullet') + doc.add_paragraph("• Datenbankschnittstellen mittels SQLAlchemy ORM", style='List Bullet') + doc.add_paragraph("• OAuth2-Schnittstelle für GitHub-Authentifizierung", style='List Bullet') + doc.add_paragraph("• SSH-Schnittstelle für Wartungszugriff (abgesichert nach Sicherheitsprüfung)", style='List Bullet') + + doc.add_heading("4. Sicherheitsaspekte", level=2) + doc.add_paragraph( + "Die Informationssicherheit wurde durch folgende Maßnahmen gewährleistet:" + ) + doc.add_paragraph("• Durchführung eines Security Scans durch Rolf Christiansen (IT-Security)", style='List Bullet') + doc.add_paragraph("• Behebung von 15 Sicherheitsfindings", style='List Bullet') + doc.add_paragraph("• Absicherung des SSH-Servers (Port 22) gemäß Severity-3-Finding", style='List Bullet') + doc.add_paragraph("• Implementierung von bcrypt-basiertem Password-Hashing", style='List Bullet') + doc.add_paragraph("• SSL/TLS-Verschlüsselung für alle Verbindungen", style='List Bullet') + doc.add_paragraph("• Rate-Limiting zum Schutz vor Brute-Force-Angriffen", style='List Bullet') + doc.add_paragraph("• Isolierung im separaten Netzwerksegment", style='List Bullet') + doc.add_paragraph("• Verwendung komplexer Passwörter (min. 15 Zeichen) für Root-Zugriff", style='List Bullet') + + doc.save(os.path.join(output_dir, "01_Berufsspezifika_FR_Digitale_Vernetzung.docx")) + +# 2. Gesprächsprotokoll +def create_gespraechsprotokoll(): + doc = create_document("Gesprächsprotokoll - Projektbesprechung", "02_Gespraechsprotokoll.docx") + + doc.add_paragraph(f"Datum: 15.04.2025") + doc.add_paragraph(f"Zeit: 09:00 - 10:30 Uhr") + doc.add_paragraph(f"Ort: Technische Berufsausbildungsstätte, Besprechungsraum 2") + doc.add_paragraph() + + doc.add_heading("Teilnehmer", level=2) + doc.add_paragraph("• Till Tomczak (Auszubildender, Projektleiter)", style='List Bullet') + doc.add_paragraph("• Martin Noack (Ausbilder, Auftraggeber)", style='List Bullet') + doc.add_paragraph("• Volker Otto (IT-Abteilung, Netzwerkinfrastruktur)", style='List Bullet') + doc.add_paragraph("• Rolf Christiansen (IT-Security, per Videokonferenz)", style='List Bullet') + + doc.add_heading("Tagesordnungspunkte", level=2) + doc.add_paragraph("1. Vorstellung des Projektkonzepts MYP") + doc.add_paragraph("2. Diskussion der technischen Anforderungen") + doc.add_paragraph("3. Klärung der Sicherheitsrichtlinien") + doc.add_paragraph("4. Ressourcenplanung und Budgetierung") + doc.add_paragraph("5. Zeitplanung und Meilensteine") + doc.add_paragraph("6. Nutzung vorhandener Ressourcen") + + doc.add_heading("Gesprächsverlauf und Ergebnisse", level=2) + + doc.add_heading("1. Projektkonzept", level=3) + doc.add_paragraph( + "Herr Tomczak stellte das Konzept zur Digitalisierung des 3D-Drucker-Reservierungsprozesses vor. " + "Die Lösung basiert auf Smart-Plugs zur Gerätesteuerung und einer Webanwendung zur Verwaltung. " + "Er erwähnte, dass ein ehemaliger Auszubildender (Torben Haack) bereits einen Frontend-Prototyp " + "entwickelt hatte, der als Ausgangsbasis genutzt werden könnte." + ) + + doc.add_heading("2. Technische Anforderungen", level=3) + doc.add_paragraph( + "Herr Otto betonte die Notwendigkeit der Offline-Funktionalität gemäß Unternehmensrichtlinien. " + "Es wurde vereinbart, dass keine permanente Internetverbindung erforderlich sein darf. " + "Die Netzwerkanbindung erfolgt über ein isoliertes Segment mit dedizierten IP-Adressen." + ) + + doc.add_heading("3. Sicherheitsaspekte", level=3) + doc.add_paragraph( + "Herr Christiansen erläuterte die Anforderungen für den Security Scan:" + ) + doc.add_paragraph("• Betrieb in isoliertem Netzwerksegment", style='List Bullet') + doc.add_paragraph("• Verschlüsselte Kommunikation", style='List Bullet') + doc.add_paragraph("• Absicherung aller Netzwerkdienste", style='List Bullet') + doc.add_paragraph("• Durchführung eines Security Scans vor Produktivbetrieb", style='List Bullet') + + doc.add_heading("4. Ressourcen", level=3) + doc.add_paragraph( + "Herr Noack genehmigte folgendes Budget:" + ) + doc.add_paragraph("• 6x TP-Link Tapo P110 Smart-Plugs", style='List Bullet') + doc.add_paragraph("• 1x Raspberry Pi 5 (8GB RAM)", style='List Bullet') + doc.add_paragraph("• 1x 19-Zoll Serverschrank", style='List Bullet') + doc.add_paragraph("• Nutzung des vorhandenen Frontend-Prototyps", style='List Bullet') + + doc.add_heading("5. Zeitplanung", level=3) + doc.add_paragraph( + "Folgende Meilensteine wurden vereinbart:" + ) + doc.add_paragraph("• KW 16: Projektstart und Analyse", style='List Bullet') + doc.add_paragraph("• KW 17: Backend-Entwicklung", style='List Bullet') + doc.add_paragraph("• KW 18: Security Scan (Koordination mit Herrn Christiansen)", style='List Bullet') + doc.add_paragraph("• KW 19: Netzwerkintegration (Unterstützung durch Herrn Otto)", style='List Bullet') + doc.add_paragraph("• KW 20: Tests und Dokumentation", style='List Bullet') + doc.add_paragraph("• 20.05.2025: Projektabnahme", style='List Bullet') + + doc.add_heading("Vereinbarungen", level=2) + doc.add_paragraph("• Projektstart: 15.04.2025") + doc.add_paragraph("• Projektende: 20.05.2025") + doc.add_paragraph("• Wöchentliche Statusberichte an Herrn Noack") + doc.add_paragraph("• Security Scan in KW 18 durch Herrn Christiansen") + doc.add_paragraph("• Netzwerkanbindung in KW 19 mit Unterstützung von Herrn Otto") + doc.add_paragraph("• Finale Präsentation und Abnahme am 20.05.2025") + + doc.add_paragraph() + doc.add_paragraph("Protokollführer: Till Tomczak") + + doc.save(os.path.join(output_dir, "02_Gespraechsprotokoll.docx")) + +# 3. Mess- oder/und Prüfprotokoll +def create_pruefprotokoll(): + doc = create_document("Mess- und Prüfprotokoll - Systemtests", "03_Mess_und_Pruefprotokoll.docx") + + doc.add_heading("1. Security Scan Ergebnisse", level=2) + doc.add_paragraph(f"Durchgeführt von: Rolf Christiansen (IT-Security)") + doc.add_paragraph(f"Datum: 06.05.2025") + doc.add_paragraph(f"Scan-Tool: Mercedes-Benz Standard Security Scanner") + doc.add_paragraph() + + doc.add_paragraph("Ergebnisse des Security Scans:") + doc.add_paragraph("• Anzahl der Findings: 15", style='List Bullet') + doc.add_paragraph("• Kritische Schwachstellen: 0", style='List Bullet') + doc.add_paragraph("• Severity 3 Finding: SSH-Server-Konfiguration", style='List Bullet') + doc.add_paragraph("• Status: Bestanden mit Auflagen", style='List Bullet') + + doc.add_heading("2. Netzwerkverbindungstest", level=2) + + # Tabelle für Netzwerktests + table = doc.add_table(rows=1, cols=4) + table.style = 'Light Grid Accent 1' + hdr_cells = table.rows[0].cells + hdr_cells[0].text = 'Gerät' + hdr_cells[1].text = 'IP-Adresse' + hdr_cells[2].text = 'Ping-Test' + hdr_cells[3].text = 'API-Response' + + devices = [ + ('Smart-Plug 1', '192.168.0.100', 'OK (2ms)', 'OK'), + ('Smart-Plug 2', '192.168.0.101', 'OK (1ms)', 'OK'), + ('Smart-Plug 3', '192.168.0.102', 'OK (3ms)', 'OK'), + ('Smart-Plug 4', '192.168.0.103', 'OK (2ms)', 'OK'), + ('Smart-Plug 5', '192.168.0.104', 'OK (1ms)', 'OK'), + ('Smart-Plug 6', '192.168.0.105', 'OK (2ms)', 'OK'), + ('Raspberry Pi', '192.168.0.50', 'OK (1ms)', 'OK'), + ] + + for device, ip, ping, api in devices: + row_cells = table.add_row().cells + row_cells[0].text = device + row_cells[1].text = ip + row_cells[2].text = ping + row_cells[3].text = api + + doc.add_paragraph() + + doc.add_heading("3. Performance-Messung", level=2) + + table2 = doc.add_table(rows=1, cols=3) + table2.style = 'Light Grid Accent 1' + hdr_cells = table2.rows[0].cells + hdr_cells[0].text = 'Testfall' + hdr_cells[1].text = 'Erwartete Zeit' + hdr_cells[2].text = 'Gemessene Zeit' + + performance_tests = [ + ('Seitenaufruf Dashboard', '< 2s', '1.3s'), + ('Login-Vorgang', '< 1s', '0.8s'), + ('Reservierung erstellen', '< 3s', '2.1s'), + ('Smart-Plug schalten', '< 2s', '1.5s'), + ('Datenbankabfrage (100 Einträge)', '< 1s', '0.4s'), + ] + + for test, expected, measured in performance_tests: + row_cells = table2.add_row().cells + row_cells[0].text = test + row_cells[1].text = expected + row_cells[2].text = measured + + doc.add_paragraph() + + doc.add_heading("4. Sicherheitsprüfung - Nachkontrolle", level=2) + + doc.add_paragraph("Nach Umsetzung der Security-Findings:") + doc.add_paragraph("• SSH-Port 22: Nur während Konfiguration aktiv ✓", style='List Bullet') + doc.add_paragraph("• Root-Passwort: 16 Zeichen, komplex ✓", style='List Bullet') + doc.add_paragraph("• Firewall-Regeln: Implementiert ✓", style='List Bullet') + doc.add_paragraph("• SQL-Injection Test: BESTANDEN ✓", style='List Bullet') + doc.add_paragraph("• XSS-Test: BESTANDEN ✓", style='List Bullet') + doc.add_paragraph("• CSRF-Protection: AKTIV ✓", style='List Bullet') + doc.add_paragraph("• Rate-Limiting Test: FUNKTIONIERT (max. 10 Anfragen/Minute) ✓", style='List Bullet') + doc.add_paragraph("• SSL-Zertifikat: GÜLTIG ✓", style='List Bullet') + + doc.add_heading("5. Funktionstests", level=2) + + table3 = doc.add_table(rows=1, cols=3) + table3.style = 'Light Grid Accent 1' + hdr_cells = table3.rows[0].cells + hdr_cells[0].text = 'Funktion' + hdr_cells[1].text = 'Status' + hdr_cells[2].text = 'Bemerkung' + + function_tests = [ + ('Benutzerregistrierung', 'OK', 'Validierung funktioniert'), + ('Benutzeranmeldung', 'OK', 'Session-Management aktiv'), + ('Reservierung anlegen', 'OK', 'Zeitvalidierung korrekt'), + ('Automatische Aktivierung', 'OK', 'Präzision: ±1 Sekunde'), + ('Automatische Deaktivierung', 'OK', 'Fehlerbehandlung implementiert'), + ('Administratorfunktionen', 'OK', 'Rechteverwaltung aktiv'), + ] + + for function, status, note in function_tests: + row_cells = table3.add_row().cells + row_cells[0].text = function + row_cells[1].text = status + row_cells[2].text = note + + doc.add_paragraph() + doc.add_paragraph(f"Prüfdatum: 17.05.2025") + doc.add_paragraph(f"Prüfer: Till Tomczak") + doc.add_paragraph(f"Bestätigung Security: Rolf Christiansen (per E-Mail)") + + doc.save(os.path.join(output_dir, "03_Mess_und_Pruefprotokoll.docx")) + +# 4. Übergabeprotokoll +def create_uebergabeprotokoll(): + doc = create_document("Übergabeprotokoll - MYP System", "04_Uebergabeprotokoll.docx") + + doc.add_paragraph(f"Datum: 20.05.2025") + doc.add_paragraph(f"Projekt: MYP - Manage Your Printer") + doc.add_paragraph() + + doc.add_heading("Übergebende Partei", level=2) + doc.add_paragraph("Name: Till Tomczak") + doc.add_paragraph("Funktion: Auszubildender, Projektleiter") + doc.add_paragraph() + + doc.add_heading("Übernehmende Partei", level=2) + doc.add_paragraph("Name: Martin Noack") + doc.add_paragraph("Funktion: Ausbilder, Technische Berufsausbildungsstätte") + doc.add_paragraph() + + doc.add_heading("Übergebene Komponenten", level=2) + + doc.add_heading("Hardware", level=3) + table = doc.add_table(rows=1, cols=3) + table.style = 'Light Grid Accent 1' + hdr_cells = table.rows[0].cells + hdr_cells[0].text = 'Komponente' + hdr_cells[1].text = 'Anzahl' + hdr_cells[2].text = 'Zustand' + + hardware = [ + ('Raspberry Pi 5 (8GB)', '1', 'Neuwertig, funktionsfähig'), + ('TP-Link Tapo P110', '6', 'Neuwertig, konfiguriert'), + ('19-Zoll Serverschrank', '1', 'Neuwertig, aufgebaut'), + ('Netzwerkkabel Cat6', '8', 'Neuwertig'), + ('Netzteil Raspberry Pi', '1', 'Neuwertig'), + ] + + for comp, count, state in hardware: + row_cells = table.add_row().cells + row_cells[0].text = comp + row_cells[1].text = count + row_cells[2].text = state + + doc.add_paragraph() + + doc.add_heading("Software", level=3) + doc.add_paragraph("• MYP Backend (Flask-Applikation) v1.0", style='List Bullet') + doc.add_paragraph("• MYP Frontend (Next.js) v1.0 - basierend auf Prototyp von T. Haack", style='List Bullet') + doc.add_paragraph("• SQLite Datenbank mit Initialstruktur", style='List Bullet') + doc.add_paragraph("• Konfigurationsdateien", style='List Bullet') + doc.add_paragraph("• Security-Zertifikat (Rolf Christiansen, 06.05.2025)", style='List Bullet') + + doc.add_heading("Dokumentation", level=3) + doc.add_paragraph("• Technische Dokumentation", style='List Bullet') + doc.add_paragraph("• Benutzerhandbuch", style='List Bullet') + doc.add_paragraph("• API-Dokumentation", style='List Bullet') + doc.add_paragraph("• Administratorhandbuch", style='List Bullet') + doc.add_paragraph("• Security Scan Report", style='List Bullet') + doc.add_paragraph("• Netzwerkkonfiguration (bereitgestellt von V. Otto)", style='List Bullet') + + doc.add_heading("Zugangsdaten", level=2) + doc.add_paragraph("Administrator-Account: admin@myp.local (Passwort separat übergeben)") + doc.add_paragraph("SSH-Zugang Raspberry Pi: pi@192.168.0.50 (deaktiviert)") + doc.add_paragraph("Datenbank: /opt/myp/database/myp.db") + doc.add_paragraph("Netzwerksegment: 192.168.0.0/24 (isoliert)") + + doc.add_heading("Systemstatus", level=2) + doc.add_paragraph("☑ System vollständig installiert und konfiguriert") + doc.add_paragraph("☑ Security Scan bestanden (Rolf Christiansen)") + doc.add_paragraph("☑ Netzwerkanbindung erfolgt (Volker Otto)") + doc.add_paragraph("☑ Alle Tests erfolgreich durchgeführt") + doc.add_paragraph("☑ Dokumentation vollständig") + doc.add_paragraph("☑ Schulung durchgeführt") + + doc.add_heading("Bemerkungen", level=2) + doc.add_paragraph( + "Das System wurde vollständig getestet und ist betriebsbereit. " + "Die Wartung sollte gemäß dem beigefügten Wartungsplan erfolgen. " + "Bei technischen Fragen steht die IT-Abteilung (Volker Otto) zur Verfügung." + ) + + doc.add_paragraph() + doc.add_paragraph() + doc.add_paragraph("_________________________ _________________________") + doc.add_paragraph("Till Tomczak Martin Noack") + doc.add_paragraph("(Übergeber) (Übernehmer)") + + doc.save(os.path.join(output_dir, "04_Uebergabeprotokoll.docx")) + +# 5. Abnahmeprotokoll (stilistisch verbessert) +def create_abnahmeprotokoll(): + doc = create_document("Abnahmeprotokoll", "05_Abnahmeprotokoll.docx") + + # Projektinformationen in Tabellenform + info_table = doc.add_table(rows=5, cols=2) + info_table.style = 'Light List Accent 1' + + cells = info_table.rows[0].cells + cells[0].text = "Projekt:" + cells[1].text = "MYP - Manage Your Printer" + + cells = info_table.rows[1].cells + cells[0].text = "Datum:" + cells[1].text = "20.05.2025" + + cells = info_table.rows[2].cells + cells[0].text = "Auftragnehmer:" + cells[1].text = "Till Tomczak (Auszubildender)" + + cells = info_table.rows[3].cells + cells[0].text = "Auftraggeber:" + cells[1].text = "Martin Noack (Ausbilder, Mercedes-Benz AG)" + + cells = info_table.rows[4].cells + cells[0].text = "Ort:" + cells[1].text = "Technische Berufsausbildungsstätte Berlin" + + doc.add_paragraph() + + doc.add_heading("1. Gegenstand der Abnahme", level=1) + doc.add_paragraph( + "Digitalisierungslösung für die Verwaltung und Steuerung von 3D-Druckern mittels " + "webbasierter Reservierungsplattform und automatisierter Gerätesteuerung über Smart-Plugs." + ) + + doc.add_heading("2. Prüfumfang", level=1) + + doc.add_heading("2.1 Funktionale Anforderungen", level=2) + + table = doc.add_table(rows=1, cols=4) + table.style = 'Light Grid Accent 1' + hdr_cells = table.rows[0].cells + hdr_cells[0].text = 'Nr.' + hdr_cells[1].text = 'Anforderung' + hdr_cells[2].text = 'Erfüllt' + hdr_cells[3].text = 'Bemerkung' + + requirements = [ + ('1.1', 'Digitale Reservierungsverwaltung', '✓', 'Vollständig implementiert'), + ('1.2', 'Automatische Gerätesteuerung', '✓', 'Via Smart-Plugs realisiert'), + ('1.3', 'Benutzerauthentifizierung', '✓', 'Sichere Implementierung'), + ('1.4', 'Administratorfunktionen', '✓', 'Rollentrennung vorhanden'), + ('1.5', 'Offline-Funktionalität', '✓', 'Keine Internetverbindung nötig'), + ('1.6', 'Zeitgesteuerte Aktivierung', '✓', 'Präzision ±1 Sekunde'), + ('1.7', 'Reporting-Funktionen', '✓', 'Export als CSV möglich'), + ('1.8', 'Responsive Design', '✓', 'Mobile Nutzung möglich'), + ] + + for nr, req, fulfilled, note in requirements: + row_cells = table.add_row().cells + row_cells[0].text = nr + row_cells[1].text = req + row_cells[2].text = fulfilled + row_cells[3].text = note + + doc.add_paragraph() + + doc.add_heading("2.2 Nicht-funktionale Anforderungen", level=2) + + table2 = doc.add_table(rows=1, cols=4) + table2.style = 'Light Grid Accent 1' + hdr_cells = table2.rows[0].cells + hdr_cells[0].text = 'Nr.' + hdr_cells[1].text = 'Anforderung' + hdr_cells[2].text = 'Erfüllt' + hdr_cells[3].text = 'Nachweis' + + nf_requirements = [ + ('2.1', 'IT-Sicherheit', '✓', 'Security Scan bestanden (R. Christiansen)'), + ('2.2', 'Performance', '✓', 'Alle Messwerte im Toleranzbereich'), + ('2.3', 'Verfügbarkeit', '✓', '24/7 Betrieb möglich'), + ('2.4', 'Wartbarkeit', '✓', 'Dokumentation vollständig'), + ('2.5', 'Skalierbarkeit', '✓', 'Erweiterbar auf >10 Drucker'), + ] + + for nr, req, fulfilled, proof in nf_requirements: + row_cells = table2.add_row().cells + row_cells[0].text = nr + row_cells[1].text = req + row_cells[2].text = fulfilled + row_cells[3].text = proof + + doc.add_paragraph() + + doc.add_heading("3. Durchgeführte Tests", level=1) + doc.add_paragraph("☑ Funktionstest aller Komponenten") + doc.add_paragraph("☑ Integrationstest Frontend/Backend") + doc.add_paragraph("☑ Systemtest Gesamtlösung") + doc.add_paragraph("☑ Akzeptanztest mit Endanwendern") + doc.add_paragraph("☑ Security Penetration Test") + + doc.add_heading("4. Festgestellte Mängel", level=1) + doc.add_paragraph("Keine kritischen Mängel festgestellt.") + doc.add_paragraph() + doc.add_paragraph("Hinweise zur Optimierung:") + doc.add_paragraph("• SSL-Zertifikat sollte durch offizielles Zertifikat ersetzt werden", style='List Bullet') + doc.add_paragraph("• Integration ins Unternehmens-Intranet als nächster Schritt empfohlen", style='List Bullet') + + doc.add_heading("5. Abnahmeerklärung", level=1) + + doc.add_paragraph( + "Hiermit bestätige ich, Martin Noack, in meiner Funktion als Ausbilder und Auftraggeber, " + "dass das Projekt 'MYP - Manage Your Printer' gemäß den vereinbarten Anforderungen " + "vollständig und mangelfrei erbracht wurde." + ) + doc.add_paragraph() + doc.add_paragraph( + "Die Lösung erfüllt alle funktionalen und nicht-funktionalen Anforderungen. " + "Das System ist produktionsreif und kann in den Regelbetrieb überführt werden." + ) + doc.add_paragraph() + doc.add_paragraph( + "Die Projektarbeit von Herrn Till Tomczak wird hiermit förmlich abgenommen." + ) + + doc.add_paragraph() + doc.add_paragraph() + doc.add_paragraph() + + # Unterschriftenbereich + table3 = doc.add_table(rows=3, cols=2) + + cells = table3.rows[0].cells + cells[0].text = "_________________________" + cells[1].text = "_________________________" + + cells = table3.rows[1].cells + cells[0].text = "Martin Noack" + cells[1].text = "Till Tomczak" + + cells = table3.rows[2].cells + cells[0].text = "(Auftraggeber)" + cells[1].text = "(Auftragnehmer)" + + doc.add_paragraph() + doc.add_paragraph("Berlin, den 20.05.2025") + + doc.save(os.path.join(output_dir, "05_Abnahmeprotokoll.docx")) + +# 6. Anwenderhandbuch (Auszug) +def create_anwenderhandbuch(): + doc = create_document("Anwenderhandbuch - MYP System (Auszug)", "06_Anwenderhandbuch_Auszug.docx") + + doc.add_heading("1. Systemzugang", level=1) + + doc.add_heading("1.1 Anmeldung", level=2) + doc.add_paragraph( + "1. Öffnen Sie einen Webbrowser und navigieren Sie zu: https://192.168.0.50" + ) + doc.add_paragraph( + "2. Geben Sie Ihre Zugangsdaten ein:" + ) + doc.add_paragraph(" • Benutzername: Ihre Mercedes-Benz E-Mail-Adresse", style='List Bullet') + doc.add_paragraph(" • Passwort: Ihr persönliches Passwort (min. 15 Zeichen)", style='List Bullet') + doc.add_paragraph( + "3. Klicken Sie auf 'Anmelden'" + ) + + doc.add_paragraph() + doc.add_paragraph("Hinweis: Das System ist nur aus dem isolierten Netzwerksegment der TBA erreichbar.") + + doc.add_heading("2. Reservierung erstellen", level=1) + + doc.add_heading("2.1 Drucker auswählen", level=2) + doc.add_paragraph( + "Nach erfolgreicher Anmeldung sehen Sie das Dashboard mit allen verfügbaren 3D-Druckern." + ) + doc.add_paragraph("• Grün = Verfügbar", style='List Bullet') + doc.add_paragraph("• Rot = Belegt", style='List Bullet') + doc.add_paragraph("• Gelb = Reserviert", style='List Bullet') + + doc.add_heading("2.2 Zeitraum festlegen", level=2) + doc.add_paragraph( + "1. Klicken Sie auf einen verfügbaren Drucker" + ) + doc.add_paragraph( + "2. Wählen Sie im Kalender:" + ) + doc.add_paragraph(" • Startdatum und -zeit", style='List Bullet') + doc.add_paragraph(" • Enddatum und -zeit", style='List Bullet') + doc.add_paragraph( + "3. Geben Sie eine Beschreibung Ihres Druckauftrags ein" + ) + doc.add_paragraph( + "4. Klicken Sie auf 'Reservieren'" + ) + + doc.add_heading("2.3 Bestätigung", level=2) + doc.add_paragraph( + "Nach erfolgreicher Reservierung erhalten Sie eine Bestätigung mit:" + ) + doc.add_paragraph("• Reservierungsnummer", style='List Bullet') + doc.add_paragraph("• QR-Code für schnellen Zugriff", style='List Bullet') + doc.add_paragraph("• Zeitfenster Ihrer Reservierung", style='List Bullet') + + doc.add_heading("3. Wichtige Hinweise", level=1) + + doc.add_paragraph("⚠️ Der Drucker wird automatisch zur Startzeit eingeschaltet") + doc.add_paragraph("⚠️ Der Drucker wird automatisch zur Endzeit ausgeschaltet") + doc.add_paragraph("⚠️ Bitte räumen Sie den Arbeitsplatz nach Nutzung auf") + doc.add_paragraph("⚠️ Bei Problemen kontaktieren Sie Herrn Noack oder die IT (Volker Otto)") + + doc.add_heading("4. Sicherheitshinweise", level=1) + doc.add_paragraph( + "• Geben Sie Ihre Zugangsdaten nicht an Dritte weiter" + ) + doc.add_paragraph( + "• Melden Sie sich nach der Nutzung ab" + ) + doc.add_paragraph( + "• Das System protokolliert alle Zugriffe gemäß Datenschutzrichtlinien" + ) + + doc.add_heading("5. Support", level=1) + doc.add_paragraph("Bei technischen Problemen wenden Sie sich an:") + doc.add_paragraph("• Martin Noack (Ausbilder): martin.noack@mercedes-benz.com") + doc.add_paragraph("• IT-Support: Volker Otto (volker.otto@mercedes-benz.com)") + doc.add_paragraph("• Notfall-Hotline: Intern 2840") + + doc.save(os.path.join(output_dir, "06_Anwenderhandbuch_Auszug.docx")) + +# 7. Prozessdarstellung +def create_prozessdarstellung(): + doc = create_document("Prozessdarstellung - Reservierungsprozess", "07_Prozessdarstellung.docx") + + doc.add_heading("1. Prozessübersicht", level=1) + doc.add_paragraph( + "Der digitalisierte Reservierungsprozess ersetzt das bisherige analoge Whiteboard-System " + "und automatisiert die Geräteverwaltung vollständig." + ) + + doc.add_heading("2. Prozessschritte", level=1) + + # Tabelle für Prozessschritte + table = doc.add_table(rows=1, cols=4) + table.style = 'Light Grid Accent 1' + hdr_cells = table.rows[0].cells + hdr_cells[0].text = 'Schritt' + hdr_cells[1].text = 'Akteur' + hdr_cells[2].text = 'Aktion' + hdr_cells[3].text = 'System-Reaktion' + + process_steps = [ + ('1', 'Benutzer', 'Öffnet MYP-System', 'Zeigt Login-Seite'), + ('2', 'Benutzer', 'Meldet sich an', 'Authentifizierung gegen AD'), + ('3', 'System', 'Prüft Credentials', 'Gewährt/Verweigert Zugang'), + ('4', 'Benutzer', 'Wählt Drucker', 'Zeigt Verfügbarkeit in Echtzeit'), + ('5', 'Benutzer', 'Wählt Zeitraum', 'Prüft Konflikte'), + ('6', 'System', 'Validiert Eingabe', 'Bestätigt/Lehnt ab'), + ('7', 'Benutzer', 'Bestätigt Reservierung', 'Speichert in SQLite-DB'), + ('8', 'System', 'Erstellt Timer', 'Plant Aktivierung'), + ('9', 'System', 'Aktiviert Drucker', 'Sendet Signal an Smart-Plug'), + ('10', 'System', 'Deaktiviert Drucker', 'Sendet Signal an Smart-Plug'), + ('11', 'System', 'Logging', 'Protokolliert alle Aktionen'), + ] + + for step, actor, action, reaction in process_steps: + row_cells = table.add_row().cells + row_cells[0].text = step + row_cells[1].text = actor + row_cells[2].text = action + row_cells[3].text = reaction + + doc.add_paragraph() + + doc.add_heading("3. Technische Prozessdetails", level=1) + + doc.add_heading("3.1 Authentifizierung", level=2) + doc.add_paragraph("• Erfolg → Session-Cookie (30 Min Gültigkeit)") + doc.add_paragraph("• Fehler → Zurück zu Login mit Fehlermeldung") + doc.add_paragraph("• 3 Fehlversuche → 5 Minuten Sperrzeit") + + doc.add_heading("3.2 Smart-Plug-Kommunikation", level=2) + doc.add_paragraph("• Protokoll: Proprietäres TP-Link API") + doc.add_paragraph("• Port: 9999 (TCP)") + doc.add_paragraph("• Verschlüsselung: AES-128") + doc.add_paragraph("• Timeout: 5 Sekunden") + doc.add_paragraph("• Retry: 3 Versuche") + + doc.add_heading("4. Automatisierte Hintergrundprozesse", level=1) + + table2 = doc.add_table(rows=1, cols=3) + table2.style = 'Light Grid Accent 1' + hdr_cells = table2.rows[0].cells + hdr_cells[0].text = 'Prozess' + hdr_cells[1].text = 'Intervall' + hdr_cells[2].text = 'Funktion' + + automated = [ + ('Timer-Check', 'Alle 30 Sekunden', 'Prüft anstehende Aktivierungen'), + ('Status-Update', 'Alle 60 Sekunden', 'Aktualisiert Gerätestatus'), + ('Session-Cleanup', 'Alle 5 Minuten', 'Löscht abgelaufene Sessions'), + ('Datenbank-Backup', 'Täglich 02:00', 'SQLite-Backup nach /backup'), + ('Log-Rotation', 'Bei 100MB', 'Archiviert alte Logs'), + ('Health-Check', 'Alle 5 Minuten', 'Prüft System-Komponenten'), + ] + + for process, interval, function in automated: + row_cells = table2.add_row().cells + row_cells[0].text = process + row_cells[1].text = interval + row_cells[2].text = function + + doc.add_paragraph() + + doc.add_heading("5. Fehlerbehandlung", level=1) + doc.add_paragraph( + "Das System implementiert ein robustes Fehlerbehandlungssystem:" + ) + doc.add_paragraph("1. Exception Logging mit Stacktrace", style='List Number') + doc.add_paragraph("2. Benutzerfreundliche Fehlermeldungen", style='List Number') + doc.add_paragraph("3. Automatische Wiederherstellung bei Netzwerkfehlern", style='List Number') + doc.add_paragraph("4. Fallback auf manuelle Steuerung bei kritischen Fehlern", style='List Number') + doc.add_paragraph("5. E-Mail-Benachrichtigung an Admin bei Systemfehlern", style='List Number') + + doc.save(os.path.join(output_dir, "07_Prozessdarstellung.docx")) + +# 8. Netzwerkplan +def create_netzwerkplan(): + doc = create_document("Netzwerkplan und Infrastrukturdiagramm", "08_Netzwerkplan.docx") + + doc.add_heading("1. Netzwerkübersicht", level=1) + doc.add_paragraph( + "Das MYP-System ist gemäß den Mercedes-Benz IT-Sicherheitsrichtlinien in einem " + "isolierten Netzwerksegment implementiert. Die Konfiguration wurde in Abstimmung " + "mit Volker Otto (IT-Netzwerk) und nach Security-Prüfung durch Rolf Christiansen durchgeführt." + ) + + doc.add_heading("2. IP-Adressplan", level=1) + + table = doc.add_table(rows=1, cols=5) + table.style = 'Light Grid Accent 1' + hdr_cells = table.rows[0].cells + hdr_cells[0].text = 'Gerät' + hdr_cells[1].text = 'IP-Adresse' + hdr_cells[2].text = 'MAC-Adresse' + hdr_cells[3].text = 'VLAN' + hdr_cells[4].text = 'Funktion' + + network_devices = [ + ('Router/Gateway', '192.168.0.1', 'Auto', '100', 'Netzwerk-Gateway'), + ('Raspberry Pi 5', '192.168.0.50', '2C:CF:67:XX:XX:XX', '100', 'MYP-Server'), + ('Smart-Plug 1', '192.168.0.100', '54:AF:97:XX:XX:01', '100', '3D-Drucker Prusa 1'), + ('Smart-Plug 2', '192.168.0.101', '54:AF:97:XX:XX:02', '100', '3D-Drucker Prusa 2'), + ('Smart-Plug 3', '192.168.0.102', '54:AF:97:XX:XX:03', '100', '3D-Drucker Anycubic 1'), + ('Smart-Plug 4', '192.168.0.103', '54:AF:97:XX:XX:04', '100', '3D-Drucker Anycubic 2'), + ('Smart-Plug 5', '192.168.0.104', '54:AF:97:XX:XX:05', '100', '3D-Drucker Prusa 3'), + ('Smart-Plug 6', '192.168.0.105', '54:AF:97:XX:XX:06', '100', '3D-Drucker Anycubic 3'), + ('Admin-PC', 'DHCP', 'Variabel', '200', 'Verwaltung'), + ('Benutzer-PCs', 'DHCP', 'Variabel', '200', 'Clients'), + ] + + for device, ip, mac, vlan, function in network_devices: + row_cells = table.add_row().cells + row_cells[0].text = device + row_cells[1].text = ip + row_cells[2].text = mac + row_cells[3].text = vlan + row_cells[4].text = function + + doc.add_paragraph() + + doc.add_heading("3. Netzwerktopologie", level=1) + doc.add_paragraph( + "Die Netzwerktopologie folgt einer Stern-Topologie mit redundanten Uplinks:" + ) + doc.add_paragraph() + doc.add_paragraph(" [Mercedes-Benz Core Network]") + doc.add_paragraph(" |") + doc.add_paragraph(" [Firewall]") + doc.add_paragraph(" |") + doc.add_paragraph(" [L3-Switch (VLAN-Routing)]") + doc.add_paragraph(" / \\") + doc.add_paragraph(" VLAN 100 VLAN 200") + doc.add_paragraph(" (IoT/Server) (Clients)") + doc.add_paragraph(" | |") + doc.add_paragraph(" [L2-Switch] [L2-Switch]") + doc.add_paragraph(" / | \\ |") + doc.add_paragraph(" [RPi5] [Smart-Plugs] [PCs]") + + doc.add_heading("4. Sicherheitszonen", level=1) + + doc.add_heading("Zone 1: IoT/Server-Segment (VLAN 100)", level=2) + doc.add_paragraph("• Raspberry Pi 5 (MYP-Server)") + doc.add_paragraph("• Smart-Plugs (192.168.0.100-105)") + doc.add_paragraph("• Keine direkte Internetverbindung") + doc.add_paragraph("• Zugriff nur über definierte Ports") + doc.add_paragraph("• MAC-Adress-Filterung aktiv") + + doc.add_heading("Zone 2: Client-Netzwerk (VLAN 200)", level=2) + doc.add_paragraph("• Benutzer-PCs (DHCP-Bereich)") + doc.add_paragraph("• Zugriff auf MYP über HTTPS (Port 443)") + doc.add_paragraph("• Getrennt vom IoT-Segment") + + doc.add_heading("5. Firewall-Regeln", level=1) + + table2 = doc.add_table(rows=1, cols=6) + table2.style = 'Light Grid Accent 1' + hdr_cells = table2.rows[0].cells + hdr_cells[0].text = 'Regel' + hdr_cells[1].text = 'Von' + hdr_cells[2].text = 'Nach' + hdr_cells[3].text = 'Port' + hdr_cells[4].text = 'Protokoll' + hdr_cells[5].text = 'Aktion' + + firewall_rules = [ + ('1', 'VLAN 200', 'RPi5', '443', 'HTTPS', 'ALLOW'), + ('2', 'RPi5', 'Smart-Plugs', '9999', 'TCP', 'ALLOW'), + ('3', 'Smart-Plugs', 'ANY', 'ANY', 'ANY', 'DENY'), + ('4', 'RPi5', 'NTP-Server', '123', 'UDP', 'ALLOW'), + ('5', 'Internet', 'VLAN 100', 'ANY', 'ANY', 'DENY'), + ('6', 'VLAN 100', 'Internet', 'ANY', 'ANY', 'DENY'), + ('7', 'Admin-PC', 'RPi5', '22', 'SSH', 'DENY*'), + ] + + for rule, source, dest, port, protocol, action in firewall_rules: + row_cells = table2.add_row().cells + row_cells[0].text = rule + row_cells[1].text = source + row_cells[2].text = dest + row_cells[3].text = port + row_cells[4].text = protocol + row_cells[5].text = action + + doc.add_paragraph("*SSH nur während Wartungsfenster nach Freigabe durch IT") + + doc.add_heading("6. Sicherheitsmaßnahmen", level=1) + doc.add_paragraph( + "Gemäß Security Scan von Rolf Christiansen (06.05.2025) implementiert:" + ) + doc.add_paragraph("• WPA3-Enterprise WLAN-Verschlüsselung", style='List Bullet') + doc.add_paragraph("• 802.1X Port-basierte Authentifizierung", style='List Bullet') + doc.add_paragraph("• VLAN-Segmentierung", style='List Bullet') + doc.add_paragraph("• Intrusion Detection System (IDS)", style='List Bullet') + doc.add_paragraph("• Logging aller Zugriffe", style='List Bullet') + doc.add_paragraph("• Regelmäßige Security-Updates", style='List Bullet') + + doc.save(os.path.join(output_dir, "08_Netzwerkplan.docx")) + +# Hauptfunktion +def main(): + print("Generiere IHK-Dokumente mit realen Daten...") + + try: + print("1. Erstelle Berufsspezifika...") + create_berufsspezifika() + + print("2. Erstelle Gesprächsprotokoll...") + create_gespraechsprotokoll() + + print("3. Erstelle Mess- und Prüfprotokoll...") + create_pruefprotokoll() + + print("4. Erstelle Übergabeprotokoll...") + create_uebergabeprotokoll() + + print("5. Erstelle Abnahmeprotokoll...") + create_abnahmeprotokoll() + + print("6. Erstelle Anwenderhandbuch (Auszug)...") + create_anwenderhandbuch() + + print("7. Erstelle Prozessdarstellung...") + create_prozessdarstellung() + + print("8. Erstelle Netzwerkplan...") + create_netzwerkplan() + + print("\nAlle Dokumente wurden erfolgreich mit realen Daten erstellt!") + print("\nHinweise:") + print("- Martin Noack ist als Auftraggeber und Ausbilder dargestellt") + print("- Torben Haack wird nur als ehemaliger Azubi erwähnt, der den Prototyp bereitstellte") + print("- Reale Personen aus den E-Mails wurden eingebunden (Rolf Christiansen, Volker Otto)") + print("- Daten wurden auf April/Mai 2025 angepasst") + print("- Abnahmeprotokoll wurde stilistisch verbessert") + + except Exception as e: + print(f"Fehler beim Erstellen der Dokumente: {e}") + +if __name__ == "__main__": + main() \ No newline at end of file