feat: extraction OGC et génération de PDFs propres

Pipeline complet pour extraire les données structurées des fiches OGC
scannées (recueil praticien conseil + concertation) et générer des PDFs
propres et lisibles à partir des JSON extraits.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-26 10:12:21 +01:00
commit 0c0f62fbf1
41 changed files with 6184 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
>>
endobj
8 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260318161808+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260318161808+01'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
9 0 obj
<<
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
>>
endobj
10 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4382
>>
stream
Gb"/+>BAOW(4Q"]^sc?O1c0(QamP?:.?7S9E?ogBBBhZ/17]m>99(E3gOHsC+E=*"&]lkMB4iSd.d2M(%Lt[mK*-WL#f@aYr`q]2oQlNMh[i1(RQi"54c\[VBJdL!HpP',N-gKk/l3)ccf^8'mf:?7hL3%e(5QZ=RX'Jh.>h)O7(*kb*Y!,1!M2NKhOF&nm0MP'1I?iV62u7aL*JMq%IQ^GCG`[k\'t>(4;a,+B^fmpP@*2@%\":uY*QiCk]sF#e%;+Hn%VBa:MB_0HBiCi<.>F.b1$s,UOGu(aRc7b,kO7FEL=0K9&2/X0I.q?LieDLn%O"l3(Ef$@Zrpnqu&-:MZ\::B0LTsQ`CRA32#7*"tdP?2LDgdDO0g1^Y#`uRnR[q2t=CR"%"cLbi6MYX^e_rQeR;7`u(qMSeoS`Cgk"BO7;\D;f/0efgDl9'!FK:UeG8)&i)*I6ZUTf!VJ.)\?ponJVLaf+.3K3O]G`'C2@U8.0>7=BO!u_-oE>?_3$0t"oH8oodWPmV\o:,PNn,AUMBMLi-IL'^V9l:I+Ou#qLc9G-G%*K*`=W'M"@RY*cK&^d;2jJc56cB:b4)-Z7tnR=L>cciF3n(#<@AX%Z2V1h)uDk3)EG(YY.YC.4/J[*^@R":Y@-jY:b@-s1-cQ"W2PP4psM<Uk()!d7aSnr>t.9`jVI;UT>?UEGB7qRt?2o85licfG$+9rUIB8ij#-qn`1[,C&Z4;(#T1D?T^K<(qan%,9f!U60WVeLK?(tHM&FfYN::I@NXV+@3;FO"T<udq5[<G__+655G_/#L_I.#m(b2DA@G2)X3V%Hh=g(>]ObRM9[EM`aP3f1`8I^F@OU(XNh3\KX`UM,rT2rFPhYP@iceIVAd5C^18QT*U""n>VHu9F%1Gur*Dd'3Jq:JYdf)nl'JfHNaO\>I-]31Gm:%M!'u$f.*H%'O(%9Mu@e9E".!)Z'EpsAG]RWl1c+,,U&/tD1E'Rr?:!!*$n0M\HoXF@1KTie?&iPFN-YCDjpn#h06?qV+a3p@i#ZK^RKbpHT58\jK,)_PD\`X>45tDM/e>(&+$FPD7JpL,+s'NV"Zr.h]eLol+]o3W1JNti<Y#4Ck64&r1>qT66gPoBcW+"7E(4&B)XF_=8]0HrL#qFOS,#%l$KbsN,g6$Kf-@=tAk<k3E@A)5?pC,N3Z&tSIMbM0!bol@(S3tUBiNr:i.lr_+75No!5,ZMi*/bO4Z!ugrdpd=jh.Eoa4@^4^#=Vo"lu<F7\:ZE`$Xkc#FZJe&4c]1adN\_/ii3K#"/e?MU(b%PbcOW!gBTek&BG<K@hj\<D*]Tmdi,'u=[9,$FYa^<Ct$)Ph=aM>8dk?G?tSIBF3%M+Y>GQ@p"U@S=B&cVR*VHI\F"1KZMH7_;N65E(*4!"-RLQ%OJC,517jaccn"H;()[e-Pc1R@+D^Rn(j9@d!'2j8e)Z-+1l?nOCM+riVS/p*-3,D(MiH"7LO^C3=!KQ7*BWV"Fd!0\>gFcp-b9kgG>>B2dgIas3MZZ[-V^-Bk;80VZnt@@WX+uueu"j!7R+N_\4usE/.jWXP=FilhEP?HZ`/0210FFLHWYm^*=iU:TqODda@tkm+s;1j'haT36cb+Df#NWUds\]3APa_\_7!.JZAZ$a6L7\<"d+q77k,a'CPe1/Kk"h3GDL9)Fo3OgMGkE)^X`CL2)To@G@,+ddF84ER%7$IN`Kd3AJ:-=<[)E4;+I*2?5`3="rcZ0$>M4s$>OKZ#(eYqk">sa-c,INjYY_cZjtZ@X$+PW*QYeiLL94.cL3pAmQAe_43m7TcL!Va(hF[W$"j*))5c4Z)5b):%]e<)!SL7lMZQM]4W"(qnXbZ<kL:n<j0@C2T15A75=/TT8h$Dl6Y)tgZOn(k":]t(=/[PbQn[lp*C*Q-Yi+ac<j42Y3""+@VdNda0P*)3*bq<P(G%+*8nJ7mJq4fZ.J;1K\h7*PnWYF/eccG6mo<UiYV$c[K;2Cf;-TO$?t#@<;^kfb/.A[UO[d0uOMR3O@fe-76BK?L;8?T3"=`4JP:(KbTC.sq[GL_ZS]"M/OE_uAL!D`#>@6gdq5\n^lGJ6d8fX[5JIJkS$+6L'dK?<D@^StXm+1HaX';mS",Ttg2Us$j%*C`SCU$W[S_iOllJoEM;ISr:W0'-TR\@"2G4TCpTh9Z^YNR5Kr..Z2fOrrB\REh9.7ptI(P9uu2XKp]A32tXljpo-jRE)[p0?H7PtI3Ajon0Jh%YCX<tMFJLP###Ka,0_Eo&kSmBYAXhqhBbhmh9_(.HAAG&/CDEMd?!o%^fana[o"Mo,ZsXA[n4qs9seB[i\*=;NO67?EOdnt3Ldn]E(S_'6oa[de]=nfI(t?F&TQi&N8.dj&m9I7?gGK4kgYp:1rI*[<3eY*ecFNC.J3OYRF\DV4?_JXt=OW5bC9Q5Mr\%ZF*9b</Vg```b'KcRX$fZ>K28G2A)efoGP)-\*M22]]P,h70S@re03S*-\]=TZtr(4I24I9R&l`:X.pYG>lh3C251$%WtraJM:_/ss)j,ERK""-A)Wif=790ArA3[if(!L^4bOQ-44]RL7$q3H8-`Ur21Sg\?P+M=f],BoG$q1Eo7X=hF-l/EMKUp0Ke4jh3S;l_WAZFVbQC>(9Va5G%mLEFm*[W`5PO"@GotqI+Tm+`@bjHaI,3K$31K/l(J.@&2`_N7>&G$k+S(C)+.bd04Q*BnHMC>CTXF<t[?G9^tJ^c51ETX\8sKNjdYK&af>(jD>uiII0.H&O(AZ(C)IF%hb`"C$e*&8(7#+h./ViU&OheqM(?6E*E?`7u:]]0:_?-*c"*`EX-oJOJJJ0`:_QKAtt]u;@fVoeM<.X6RufN$O3cl1o]ZF%h&DYELL@oXA4LKQdZFBc0;P$CX'Pu9g_XE7[o/4X2E,4RW&O0_[2*oI5p:6]W#HC/F<MU\@t6am*D2C!uIu7!KXf4&qM![jE5/U>[uC)3EW\IlREi%Ln3"XgTA/1OGA^fIHGO[]'Lo8^f$[kk(8/tj(mgbY"#hrI0%7_R!Ml=cD'FHK$_lh[<irEan4X&/bg#S65G#UJ:/FEd5o(O(4():_],3bC=9MUfR)ErN3BGRB'@LHIl4q]c[J97rnU727!$hlp<_a/5F[X%1GnGoB(DXP]D3.5K=Ce`n+77NC[L!A`,BC79to16NtQHh1_Bt>P8_`oP0;Kpo()n$:%NEn\^iMt+&Zms[?fI7HT.OD0P`]fbj-;acl?e=a6n"MF/ZLjmMqt2L-oA,epZ_q0R]RKKY)YVYaWM'XjA:*Z.:18/[77+]E.kRW.->2dG4ru#P6?(BJSd1a@f\U[I_>dHtk8(LekB<T;!5bQ!e4Rb:l(CASmmtqY:u.Xk?b9OYKuH#@G0=W&/#s1#][kL]t^"Z][s_e_[#uV]oTI?DUC#`/se:HKI_8?KF]%dPFh*4?`:smW@sF7A6M]@t>"Q8HVrQp0<<b"]DaV`H*5>6b.A6b#al_RSK+qN#(PA3[3h+6!;%>jnY^+,GE+HU"O)Y`8(`l_0FBn<,U"XTVS_eZ8qfifkB,NeFs"_fjqJ)grF;=k(;.JkR2!t0:.X3GV8i5WTX_#U4oL%%J^?eiC4F,@omJ@)mt4[4r43MWn.A2RrjoVSQH>#`pE^1f=rN>P$DrP%>-11&$FtA\E78$%B[/@.fR:=8a=2=W=P2g5"q-N0M,#n8K<!!%guo&@?O.9<;<oJ?=1C2GA$geYIMC-#"PaM&*j-*p=7o#"7_V3l6jA]i-R:)SV5mn`O!3.LD0PcPOd#jl6MGoYbY]uCd2\Z+*ui,>m0'UJb*\1f04=0D[]/#LnltaZ\!`g+fW<-PgP1`c`H^Dii9(^3G7CfnZ5'X3Rd>;611`6DR!P#=7Jbo)^C2@ldHNB(eXFSbLY*[ls"jlj0Hq4QT.gF-V"&g_hpg*47WFD6s+lrK7f:B]\WBplaMRA:VQY'`G8Z$/Z707oU!bgmbq8G<mGISIf9"Z-Ya&9Oci.IA&"bqC9G?pnoUqWVaIas4g*<#AQlb+6Q7NL]NF8qWiCHZr[O23-$]^LX&S15[e."l3'hH-@2A@$V#ZKKKl?;.-JKpDYe]k8GD"8,4MsYpdBTd7Mc2:tH7D_)3T4VVgi/."^.&&??VUB@IoECM_VrQ\@I_X>``_A<r+Lh?BjMbB\'FfiDk.had,T;U</sehrFn7)"O"`1[#k/75bib?3@*knH,-61_2g!)I\ki;GOe1Ko#HBP4s3[K%6ot-@i^'@SnL^Q0-r-O2TsW<]NNCT%90*C8LNCZVi#cO//qTM"isa*3n&KZ<P2PshH8s7\(b2?VM"E$hcbDaQW\gt5PFVb'.7KQ&uBH&/D#e*!?FI6]\@>bbOCf&Qq;)V4XV+3d)CJ82)6?+~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1216
>>
stream
Gau`R?#uJp'Rf_Z\8QP6&u#m^E8Ill\!rqqSL32WnY1VSeM5u+8Gi#Q8f2$hfSM]=fjX4Zk]1gk\R//UGZ"L5('&h:i:8N.PeeOK)?q?9mbuE"nng]PQ95S#-pn<g>QuD5*8eYNij\78"?k,J.CptT+bR?"8"DT]Gp!s_\@oskG4X\kc'sL-p#>DWH_?]6'#l-*Y*X"!b=7n'6e4SdE'Z:NRM+&KD!H\sE2D=c$l32YnHW=cH:>aonJXb8Z[bQ!3n30o&K_FqNNeg4%ZXHJ..srUG,lMj=!!E$d-o81MG(f>).?s7oE[8k#-jC_TF!=i]Vr=Fi5*]^`4UC"&4$@YQh-i#Y]sY#k@--t"lb`$pgCGAe.HpGJ^39c45InO$%jb<=-0JiBku7dWcSR;p?tLRWu>#;QPkeZ]JA&Q`tHOo[LI+XQR[8\(E*o-&i<U2A($X^dk^</0olHQS-S5@c67DtVqU>Q(nh"g.PnX"%<?"uaJNe\AQ<&%XmK;ipdA>*T#br+.s.=_R9Jl!2b?8FbW+2%GF81o2Q8pj=f]t3-tTB-BXkYn8&k&UX]&MQ`Y`SZ;b2/OT'\9VE<,b0)!Z6DA,b2j#%X&<[4Ehd@Y(hn8im'T=dF;AMD<0qRGD16->,J3ijg4NDg<HZ*EVW(V7%s:Zm_j:J/9/A'\Xh=LO\2-B*$e$^luciWnJP)Z?p',%$78gYOuY*G6_uHq]+$;C2Fk'p$U:ScXqo4C5MD-6*16H$(*E_iI7fM=tbk(o,U.'eal%"H&gUi*)3Kf.:&4,$W37@Wf(>(OKm,AQV*:/j&VjO9@["E8/$_`#d.BVC-<U3Q=o-9[4]=!AZ^kB0%UpOI!grF"p2IPe(n]/"A8K"]?jN2Ym8,aN&6cKnFq'(jpuAXJUm3Q'%[36('K[#&S%$F]+mI)%C5r&loZW@G$>aZDE]+VB/6=b@9al?X"klO_+BhA-:&?"n^o*sr?T#JF_e(B(,].=6+Y]ss):2gY3u`2*q%&l)%9:(`tJ0H;pMdVT."H^5O95PjPY-RES-!2Qd/Q+/n)$W;dD?<&30'%/pT^Y#_25d+#m)4heqf(39UZ+6$I'q^9T*LnX:<'Bsb92g^MqB7%GlHHaob&<>9(`,n;:JN<Y$mRulCd[24[Db*9%fDMIEip96`+?h$kd5KE2rqDca[OR9#3(l8!80KAkAf$D`Rl.pj;deG2`@.GD!9+[?~>endstream
endobj
xref
0 12
0000000000 65535 f
0000000061 00000 n
0000000112 00000 n
0000000219 00000 n
0000000331 00000 n
0000000446 00000 n
0000000650 00000 n
0000000854 00000 n
0000000922 00000 n
0000001202 00000 n
0000001267 00000 n
0000005741 00000 n
trailer
<<
/ID
[<7caa1cb59d7b67fdd1ed79b8ead21174><7caa1cb59d7b67fdd1ed79b8ead21174>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7049
%%EOF