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:20260318161809+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260318161809+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 4441
>>
stream
Gb!Sp>Beg[&q801^sg<jWG1,nP2.KcOr`qpAOho1p9a7?+u?3=AB>F[D#<[F!"p**(QieaGP@nI"FUhn!.:0M$pbGXi=Afc?T]M(dgTMe&k".:I7/a8*6kY6E;&G;)j8`^ggaT.JV$F;5%b:Q#;B3Jp<ssoJXAp#R3u[0U.D[^A8>'+d1D'Qi7T>9],^M$%FNE&,@iLnpTB9b0LV+5s*cr=7Y?&02sJRVrR#SCqR>Lar:8f_^Q-^^jl6"O4jUTNEe!]Mh03Q+)9olckP=7+p%RsR9`5MalK>O74C@AJ6JpfCLM9DTeG\Bi+X,6o89YoA4e+YhNmV`+?RJY>DRYVQI#jj?Qqnd``H$qZpLl7l61_;OoaWQ3lUAJBc$.@U3`B8I9g%jmJ<4SLVX]+h<\`=JMp:;[;iI#<ch#+N[]l3qO77/(<GeBgfg2`_&hcJOV+`ZX,\13qL?.Ph"Ot=?ic6="$8g6Ir5_jYca;[=<c^nA9G&uW`PGQ=Lsj,8-o`&9@)6a[@C8dlpaLs3rht,f`Mf5<W.-rKO5Aar9A]@hrEfN[m9"SBcpPs0(NCM(fAgm.*_rV%l&9'/%E5&>-4<1:^kfFc3LK8EoI+AA_d:`$[s_Y9!s]0J&9`Wh"iV`<dGnU'pN&5cPH-XXf)NBc9*H/Y69Yc?5GWi]XjC#Jf_llS^;dUQ;kpE3b&KJn&iKmqZ]M'%,%4Eki:i#uAr+KZDT%`S[,pe<+/f/Yq"t!R\R`K+k;skc6Pbp3[kr?['!IWDimgXrGUE,=Y+PF%W^Y9q.$;:@]\.3:2#gM.KZ?&<Mtn.4Jjd&jA@MKBQeuYOT"nMV`m1)756Z>ujjt?.'h&PM42fOqB"a<2[BdOeCk4@2SVR"6WaG*raBL?d;O;u3C;aX]YFN]=#-4BAW.[m]^t`Se!(b`V1AHsQf#GQSMKr$8@js,I^9*A8Cm&<HDpd$]rFJ2HZa%#\p'D8BJ5OnB\g>c<)ZH#C%5'?$Akbf$8q\hqD2]In,ji=!9qfF]fsrKEk;0m2?b,X1F=@C1<;?%(Mbs6l9YXPh7EEO)o7`"9V[)/GdDt\`[=EdZH;),hkO:F4e:pH#qm]2cj+M4kO?9+N'RH-CJu)2.4-m]pXnEiORe;o!*YBTs?tS9`:kV>japj46e,E2&"b*"c,i,ZG*kM4Di+-dDk`+^,_t6lDAEV>adkQen&9\i7TkBDTC&E`$S]?V^RIF+Ddpu2``JT1JZ#\B/YrMVu4^TP-UPo#%U+QK?3!KoK5o8g?YT'mZm'hinL\_^!OoJj0>6h3[;kJ6\$-Y9h<i;G3UR`1ijG(m`El3pGTTkLONDa.8+BXH2%29+bdq<mZc.D_q$hf6]B'(4XaGl?iUCceW\M$"KW+M9%4bn@C2V['9lGJ-D2$:e$n9@2[0o<^H3Vj.,jB7oP3l`:OOVo>\'/^dT#hqH_L7O\GJ54>R2#cD=NM7Qmg=])tAM7e_$,FX"Atu]S+YXD"Wt?9*N?!,J\jZdBY32"I'4$FD4"".4l+*,)*7=h>PGZ?TF.2qo=rO51<<TC+4/SE07R+N`\4cgC7NuBs-OnV8BE.bkT1uFDQd4;4h;&]#moX7"$k9kK6Y94T,QbW&;mGu11PD9#Dg`I:45G,H<B=\X)ruFQSR%J^(Li`j)%V\E4AtF#>>'o;/=_j2M30nsm=.\Cj-2UCQ`:]V<QDV]dn/''luWlJZ[/T=gf1"f8#MQLSP:!(N:AP'NGU9O[?3!D[BV1`_3T1!,m8j[i&XdsaYK+3^:J9k!BI^h348SOl`A.KNQ9.Xa2q&raXtQ4%7^_uN85nuN7fVs[+-SB[*cs'<>cU7rF?QU:s*?So_4+Y(K8YZ;/F6^\W!.MSW"X6/c_^^d&@T0W;^U$7^,(/+S$7^$3hgcHRAc*$5OC>?,?s""Udh/]&4:($O3JeVTV?'a`YG:6DS-mYV$c[@@U4kA^PY:_MkB\;6VZT(eh-mMLoue^`;^:U5MW[l@O^mQD@E_/m&rARj*iDFWlAf;e#kYL-h!EZm]<9H\.K[`oMb5PGL@-V:Kpqg-o9.s+i$h?g*k5QhYTbkNDYue^"_o.<,o@"k(R4-.IB-8Y7*lk0$bVVKZ(%>htPg%tmeGfMmq0?r68W</Yn7lh!B%<'Qr>,Sda?Jf:V`X!nt?=>u9V%B:BYYSE]3K0A_'Sbjt;Q(.JpSWZg=H6LqBDUT*Q8%.I<q/-_5:\N,\/'m=J;lM$qAR7WThb=+WHNgY]Hmf9H<G7K#Qg<5E[``-TXM(`<T!m6qk!dFble"\fhFt$QA[us"ioNrq/Ii.bYtA0Nm'D=rUJ[5X?sTur(I:)0b'rW-`[d[C$5PYqZ&RRT')#.7pQ@\Q".l:I;gLhaWZR?9`kWN]Uj]11R)]I?M`[du:h.l+8u0tSgp3DZe@3U^LXk%`ej9K.e:A3H]9ro(mFVdM7Z@T:_[W^oSq1NjnT_7"GHN<m%SIb)oAn\S"_s>l&5A\R2rW,mV9iut*\d+V)O?cRa#Yap0K+f)b/NRrBtN.&)7\H&)7[oj=KqGqc*:1T!Z$QI?mAU\4XZr&:u%WUGBZeCCsKAo5PRjHs(4u8`*o2K.6>W*IG\Qc(Sli\dM4<o[8C:LjnbseG`:&8D.RlQs-r#nMNLl;3m@tcQmVICm[?Mu(^0QKH6EBWa."'<aR-c6_[RH^hgZL\6JurbeD<Y2aK_iV%NKBb<?YY)di^Ea&".^SGirZo*Mb[L._d1]kIMd"_+r5(VgdRD0"<6C+s]e&e(T2p]GjY<R_57eL/W3GS'4@kY<67J)tt_thR(^$)HO>4af4(8RS<6)54S#]VB"0?UZFE,(e7.\7u;#k3R&m--*!PBA%ndTQXd5cZS!*)K'&l#k!$]bVkQ2j^=f_!-8*O`UmgFW$#NDWZ94kY9qsi1s6K=*3Y*Z+f0b_p*YK0'`rao["b^lDUh!l"rHTHaTg@>uYn:*H804G4r\er%SqC$I]rnYlK%P?pFLSN1&FrXp[*Lie2k4/B'?Xhm=Z^DGlIW2R>`ELiq[*Go@u)Z=lRY)KT*:p^Rlg%`W$M008Vp0h,V2#+gWJ]rf"/98D(YD<OUl=,$rN4k[D^S>O%,>,-[kmRm:ZdMUS#5li7md<dX*pco8\1o(CtGB/WJmpCRGDN3,KRc_m&,=C;E5a;;]D>Lg!`X[Eo"jZ.@E>/b*X6T&*h#BJLRNf<fk!/+3^"m>[.4l(oWYB!H)/[?fL:9f/kY'<O-]AUS24-J\6A@UJ[dcU65nC+]%rG,hsgZei&RRLP=!kChlnWRG$]GNt9oL,u-k`MYW;B#4jl+'5lcqI8m"Q?Y;):2_MTiHWqCNGccGNR0+E;_tD\bjJ.3l9&8ISo\96]'$W64ce,Q[$1Bn[Odm(JjVnL^$FtrnE@/DrhF"_oh:];=bpCT0riObPcp:n!5!aurZ.'3+TuohAgfNo]1p!0\3#=;4rieGTMX(=6%nS):so?eAL*\g85c$P]Q8E6W9Vp:I)=c/o4>H4e#i1GJ;&91c:RjV=B7+pH)eZsO\iBZd-PfX<i4l)l+:UO.T>m.&<s=oP)><,QtRni:Y"SFHnV.Tbqnu-]@[S'?*HB=&A;DETqghd+OAD3nm@_q3;odkF4F.Y99K^;2f]B'$AdY1&^bZ$CsBJM9#jeN)qBt]-N@8K;b^T,8uE;'`p,K!eQ[Q=?X<WgX>HOGhfQ%Ib'Bh^@9Pam:MV$lO3P4SlbRYVe[j>%"6EhDUf"<>AKKC58HW%)e>!p@8WFc=jUq8T5:ho8\4Ib<VS]fjci34#4=TA6\^(B`2peaHnA>.S]4hB;e>Lj[DeS'U1a8KDhk9eO4;s%iH\G0k3r9*0?`NkV,_.HUlSS=a-Lud;U*\5pj)T]e/_Ai5+O>g5l&;G$_m=rG3?dX;W?n;Ia6k>5+foJ%Wje;b323S&C<\TI)p/K/m^D`CEj:STnfj;D?ET;AN1qiMa(nmP^Tgiu%7Xo1TY/;7M0`X\+"s`U@UWnUE)2/;a*Tf0P2YdL9t.hTAodO4WtopMQm6IMe`\S#S*f70Uo^*:55Y$1^E':.O@2_'V2bG2I]GKufZDPnf:VfZDY\:OmLj8SSVnPfgrk86#Np-^#qDC+gsiAa3%#1GcBXmOd^*fM#e??6X+8f<"Xl8D^9(NWDk?$j+jYqp%9uj&$m3;Sa0J%W:VFL,WBA\GZ%&L1)beW)UT8D'rbjhCQ>IIc,V5OieMmqj`XeAZQj0sL^0f5O]O,Wf7NXSTKsH=$T!,uk!er#XTt*js!/GafHCq.:&:m;pr?"jVG^86->BseSr,Mb6#7/gc_,$l?=N+XRQ^?-i`+6jKHEhjVf*hC`M/$#XkN"dYWgL9=Z;L9!LhoLt1>TR^ipAjP2kc#`D70b>oLB-UC]61tAGqAbfYuTfS>=t3PdW$H=O!$4F9I0bG-dLd*\R/jN)n5X2Ana+S,WO_</Ad~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1435
>>
stream
Gau`SgN)%,&:N/3m$m*s9]JJ/iePghG+(I%kMiFgWVV.,OFdmZ#"ce+hZYE*;FERSB0%'e)N_R9S?mPX!%AJlW;B;0JD]L.r]:;+@(ld/HToYliQZc@0VKF]mX*_"quFSnn:]+J^5$=[b[r`K#db,"@<)dt+Em:RNCGr&"="o2o+\''+5UA<\Y!6SDa(f=HHop7=9t7*e`NlFUc&S.(@hVF1f]Ab+=W5g/9p)cW\p\.rs&(%i9W-I,6!8I&F,'s4=&FN*d.g7n*i$H-FOmFV9i,odY@"oC_U,64>qi;3X$.g'7N]O/^>_o"hkcV_%XV;kT,,@D`>@^3^$$q`A<#MimB`AIg!W_NC+83]u)!)-QV2=c&RH%n9P/I#Wh<o&,R778AI2Ph0au,jT/W%Xb<NERb#PLQ\Eu0gHRkh,n4B4<[<\&P3KPYQ80.%Wc$0c>Lb8tP:KaST:i5AND;6_;l@doU8.p-C]k]@`iui1[F*+s,?-p7VL#5N%SNc?85Iq@MR#2tWif<Q%o`ur&6WR(_T5<:b*AM3eZ0?"?IddK&4\797;WVNKmH^;F#+41F-,*qU@Ks>a#ug'Gn0VU6NSP(i)VuA[OM^n\8F$^fPt)tMR(596"P/#kXoHkQsP8IS6AO&&kmT.I97lbLB2UP#3sQT<,Oa#[s<`AZ_on#q'JB?I2:</5OTAc%ds#1Tb>NAEA5S%cji(!P?"Hb0'=1-oN@bOnl8`%_-Htn2e\I,o`(p$MaKX^(S>gY&nS;,$B/$OVKDr^o/?m(cnRs]&$=P11]pa.H;%<"o\.D_p@r'-4U_-sOT!C8$!CKX3j6][V<@=(HVWfi*aE.p)_A%\$"N'PPH!ESE-1LE>9[!G(q%e7@ldOdk4q;sNQO:b@n(:QAZ9GRIA/K$YtcjK%+tr+WNg-X`.MFUZA!GedV^Whdl%N"m&n]Q]WHTcf!X$PMR11LTksuh.o"jI30@p8HEfJn/t?G"PK:p:Y<)ecM'?dE[4B,?C&j7R@NTbfAC.^h2Bi:Ve:,l-]Cmdm_`?*n\@T44_\MX5>dGLDi//eNQr0:iU3(\<QNJ#5,FIk/h4c++JVEtArdWZRVtY*WSq-9n!llI>*!D<b&`HcJG8YdO#."9!*'>Q0^HIY<0V?@nN?I.#@CS^dm9bEP]u,cR$PDpGd#Wq,$Z(/r\9;H6:-PUQm%iIZi8FS(I4sNP(CB)^msC#d%PQK/!oP^p9@t90[2DU2kX`Mm$V#>[)Ym[L?8\WcgW]lQ=gubgc8qCXN+4bpLd2R!5kqOPhA$M^__jg[3ZMWm@COFNR.9TI4jj-9pI&qsiL[Tpl-3Id?!=>?^Y,!p4,UV3(_rj&j5/b0($'gj*ED)/[m[j"D\gJQmN,U&53(`'5M'd0q][@njKkWJmi3P*41t>U_&Z^NOuIhIi#a$3If+;<ahQ[ZKm3~>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
0000005800 00000 n
trailer
<<
/ID
[<1bba9d85a9d59ebd094a6eb509ab2125><1bba9d85a9d59ebd094a6eb509ab2125>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7327
%%EOF