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 4345
>>
stream
Gb!Sp>BAOW(4Q"]^sgm%ChVTqG+W$]8^t!ca*)WLVXB'\e#>+6322XSs8=!h`.]C+PB<mJG1*/f57$HAi8EAjJKPANM#MV,7-KtAFRkkC6IG0&,!=lKp)KXZ*dp$mAP^;j`[-s":1Y\1A+2X3Z%b30NaN!!#DHTP0H`f`*fm8IdNkOn:,p%upZVDFAG#R(?/./$`fng7q&(*CU$K&4LU5)_)Lk"Rf;H*AdH'X,NS[stW/#T;]2aS,k-I9-oJk["lOOeU5Q6IV5GQu*d&ZI$_"rEQ'4O2B*r?\Tdmtn$8KoA(EDha[.,Ia+1F*_3JBSCrj1F>5`\H1bVQ5*4D7>uC9m:8r`rrs!B(HbKhkBT$!_pF)='ILcY@cI"45J36X-.>E2i5&;0d3AqDR/("/Ma]TB']?YV[Uh:O42c_NNeeE#Pbg`kV5o"DkYc4cfUj#MPcXA8Q_3($$fD]0o[k[\WVX'JL77H88X.I9P[qMH>[Fk;^>%d?+=&adR'<8`I"<^/_Ef_0'7GN/MhY'TCpqe1:lX')P'YV-gs9MQMb]J4ZXUsI<TC3\FtZAb:)I7mE`i=alV4#9q==T)"`Plfgq;Q8L-TrrFq:igC2o=)>q"nC9l[N1!)]dC2=H)K'<T\,RNu1/,]?NcI2BT,LG$A*j$+Y$n[TL8L+oeX4@@.BE7qUETJourOa2F@490MX;,Oj(1mk)`1gYo.,jpto4A_u`PWBcXjNa"^V$<SCu?Daj^UR6NUr\R`?C.lo;rF-1WAt]a)&"W'4-j8ce>:FUjE^G1Wn7W5-K1"*)6H22W6jCd;6ApZ_3E)4Q"H!m*rB7EXC;P[s$odq^Trsc+djuX=.O+gEMZDld]/VeAh7E?jj?p*%^)nDasD$97&'BV7m.#X-4a^IUP[R0Gsat65=;U(?U2`n#p-R.,fSCFs[tg;9\'4'2+2Ln?OBa][$+o[R&+$lH=&`19n?/nd1APQr,cc\E1jF>4i9M,q#'/X!X,3`//4,D/:3NUj.:kgI?f-F)t,F,abO@="Y[tXJAtP%UY6j'G^YaoIC\[M?N((O>7!+*eUL`%mSTjJHAF^0a[l0"b2G*IFP2QN(Zk^-e/4%$@pE!&n+*5<[M)U/E?CqLECi2c'0LdOg==]BANe?1*U^JHm4d6IAi*6dDd1U_DV"@5(<W]$r17FBAP@:5@p.('s274#&2*!@,`0_bThS#rTQjSYrZSGUVc/8R?N')1+&$_>'5QN/t]8Co/uSgn\7o`-,pP;i.)(%6DF[8+ihcDUX`kHT=S3*^K?Q^?o;mQkRa?$>\!2H\ldk%B`U_APr[<"f]*a7&t$*]"i^UaKli]T8F2'p^=o['B!2X%84mK,%PifsPXGmH&CbbE#AI%nP[HX%B&_C2mG.6L5a,@S`3>2F9F#8E!s*]FN$75L>62FS&S%dTO\1JAap>;]LaU:e9o=KLk'4K8kRgP<\:!X3;L7$>(1q#0ndoUG2E:p$OSBfhn^YS,DUu7p+O,lK8I)4&;1)FNlSUg_[$dgKTYYnTj23l/r#uRsl&$2^CY$V7jN$iS_N1bq02E2e1Ht%s5<]"d0E:<PS[idlJdcir0YD%lJMB!ADEMJWD'G,#]t9H(H_)D>`-L\I7,*':^L*a7-F?.nVi9ujEkN$n'TWoF.9;R#:Y_FK)I_l%g=8Wl5dUJ:AVq.CLsKW[m`LQ4GL*+A4&[uMm(!goc4l8E3Z(<ONXdC9lYJn&AW;0F['ht#)C$+&NNihA?qZ6B&q[qhE)W^J/dmoh^A;fT!BI[g34/JmD:[b*`oH!cj5?fpi0NEML*N?fentUECGnMHYo4e0(l\mR<,hrm937d:<i+ebT'o`cCd5*nI@,gj.XhTp.Xm'G!43*KPX<lmk-HA%_YT5O<+sc>/5-n@D#M[<*%ZB?KJdQa%Si3s_.hOY/5-p5QA;W+RtcQl/<j;TVI<nfEM7]iLi++@B"UqS%@`*)_=VJJdBI=eR"LsZlCnZUVVto`(9'-,)@ctpVNjWgVGY3iV(i8s'.HL_=VNQW4\<Me0sseiX)tOEX*<C#FV-S.58)(+8<\*q$=A8Lr)L.7o@?2d-MEV*=F"&mKT>6e@f'h#SM,#*F631qoF2L[+H;8BY'a3&6$WT9/N*p=p\%U_H#mj7<<ukU[8\MlDU?>`\lH+T:mF/Y<X^/\p-;G5pLR4&1@<UUJQ/+.$.u=fdgj]&pYqOgm1+5%h`X.U,%'fO:4X+F759p6(^#ln9&^]_=<h/:d%P'Teu`"j=3XK?He0uW[PrHq7Dep_D@dPPkuFB.[qRfa]YWiO=FaSUZumrbHRLil4m<kC%>T!B(NZ><VeI!\EJ%5re?b3als?$cLO.?@\TnF+Np<,+Ln$<jO:oRK)l09ZW^U%.#YXFp;\`t#BRM=-)I`'@>;.mSbIW;5fX'F&A+8!Q-0egC$8gMBB+g.b'/X>@H;cp1ce)`SYEO0J=&P6JG#ln@lfNCfbtnVl`>QCG%_\qNI?28J2I@o]'"`X0dLlVedE8=lN+pqL_]Hn9@0^?%OT0<.nG(7,V\UO/%[fX+dhn[?`-/)7kJWG,aai<^/Gk('7-8DJ1e&J9),[3YEnpCp6FjTc]2u(AFfLE.'?Z:AF)dhG`=IsYn`k>`OVK)E;f/$<$oq$+P2VouhAF:NA%booX5[EF9iN;jdP1_HmI?Ns+U'KoU15.k+A[\L3;.I[>GZEBVa4:>T.mmhGi`!^4et9r]"TBcf=EAg0]CT+Nhe0X<h[,!+DIN2]rgI7F:kL9[HFIOlMB>]mHO"@o,03V`dOh*)DN/.VDNZlQuF!;'s*<kL5kCq8kIa%P5(?3drGX#br!m`mBuNH9%quARtcV9oU</Q[=I38:jPj@YS#%Qg=L*NC"DTH"ktG5W,QG"VGlICs)iWtf&@;ko3EOX:p9/-gtppI8RfQH3C>Pc^%"!UI&P#sZ!mMtPXMK30^Tirk*KaDXMrHoU^\f0^$VPp[6&M-L$GH;Mn"WuLQWul_c^`8(q<MYDZ*R][$]ag$XR43,pXF'3eacVM,cKAmSt["mFCL;:'GEpduZV$B<XRm'l=DcDdGdVW^X^hYo7*IW[!8#qIkVa)If)6!><r.&mLrBLukUr(nU#f)4kT!iMd$3nS@3b`K<"JeDal)GRA8-ZUUO$LukUr(nU#f<C6Zr:GneejisK0F2Skqo4BRm<:Zsc1T_XnVB(^qe+TQd-0u9+8iBGWNP2>rG@V?dH"%jgs08ql\c8&Oa42)Yp%P.n_7i`*>&Z0VMqKN(L6i>WLP#m<6VrSMq4iQ41O\7f\W@-YU9SOYc35n93n-M/+eBR/n5fQ##Xq,qe's'qVmC7&HY":8%S!u'I_j*%g>="i)+sb["XDnjnA\W@-2j?A6nOC1cOoq@>'mZEX0$bXK^e<kFH!I`#8OaO!IN;O4*/9PpMW:7AGoe)%+aM\<XdQQp*O"GeaorOHE!q"c!&JC<;P^`TJt]C8(ih:"N=cUi4reU>0rmX<=;?A/I3E"Zk6O2>tlA3Sm$dAl^QM(QuN)u4h)do51k-o)eXoD?pi2VMSTM&ceMIeT`q-If?alo\'fgp]7[PlhdL(ma^e`-(GmF/U9\JW3c:CBp.Z2DWX0<AAhYik@?pJD\b)tCK<q90)GYW1S)L`p_83KKZu>n&30<iin@juWHZ0rZOjp[OS+c?9gC>n6;sH;[eR9<b`/PLbN\I@an=/]%Df7[uk:iUS2e9iNU+$sJquTS7e`f#_]1Yc]02G&j28;7$0r1aaOR-nsd-!gj\Q[o;Im78Bl.-r=X!>Do0dFXLi3Hd":.QN^]jsgsWLojT'J^raZ#S$e1Z)c!?>HG,G/Wq$B"FPZk1N@4Fcg>.`R>3i??7nM.!nn-E0p-S-_X0c^;g_/]4/.>+Df\!G;HG2UQXaQ*#sW:ir(b[HXHblrT$C:4`4Q1Vj;Y8EB9Sk2u!36IRClFnlbdJj0;LIHlD@cfCcWQr8)IMD3/J$Y<MFGmJLCqYD;@^7>I"!-!"rcnQ*f0<-H`*gTR<j/,*ek@@J/tY9]aeB$N^0H&M-hWU92\G3j7_<6+qZpWXTNUAPTeJksZkLPfU<rjJ\DhjP4-+N]VHdD%&I/l0gnVBU$6L=:r(ob3MnB;mT[hXXF!H=UipN"c(i`gs6Y_g42hAku^g1ql-SZ".&q<CLoSTl%6ljna-^:nt)=5>f.E+5Hf*l4uMTjjD$r+OGH9?W$N+OaSg2OA]<nV)ln'Zh]$XR].A:kWr2KVll'/c)MpfKBcD6C(qC_qU\5KRq^uq\HolSDfTq_Rd:ool.9`P^/+Ic2VY==]QfE@F'Bcn`AGnl7j+19egkm,h/!>>B]35p;X+KJqB)d-%fl~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1430
>>
stream
Gau`Shc&8h&:Vr4Z#>:70TtOi4EQ=1?B5S\QKJ%.(Y)Q<(gD/846=f'Q2Dj5EDiHNF-D0rhUUoGDnhPO$3WTCr_IQb5A+s/(Bs*@C]W%,4IFs?qq:&NKQ`s2F-mbg!JGINp`<p)&'`%]X5sI/cljflaYBFrZ&M7J1s23G]7cl'QGW:bmaL:pqq8sTqX,$D1Df2V)o>%OCiZ4a/h6s:"8SJ_1_kjHO;+^tjt-!Wd8\.?H\C&oE4R&)&V%XC)!]1b=@fAV4mile_;WF*2R1B?U_K8^qQs[W`G5M;(6;nN>,OpP)8W*SNI%B*TEUo#"i14Q^-=UTP&UlFJt6eAH2[jf5&k6U`6X"E;<JLDiS^pL`/9?&@_4_MnaUZ#\f\<3km$i[ifLre/h6$39IYhW*,[_eGZ$I8Y@XDd3^3K?'hVduG%>,]oC&*s>*tO?*=6#H;&e=BMCKDrB-'???I^gQ">65PqhV!;h:b7N0kh%(1L='Z<.G_U+YQa(OM/P`b8Sg(7Y*&=BdIjM&ptiZQp>2Mi<UYU7EUs/;:MdCCj;ZN)A&B=b*=jjPS-anY-5kH+U=ta-R/SNFkf7#1!^G]G<5g<3H-2QJ1ZZd-*/'H&UR:DV(+<""D&lZ,"nNDI!YI2IV_ofM]h,0,1@.hgU)W>Ja+S#JK\I-`L(k>E:fPon,Kqh+'XD"T?!tOS#9+m9b(sCQk(iCOgR#iU)8\LJ`MBKZ:=])SJWSYUAKQ[ZCiVLq/efSlrhiFO=QOD68"`7l0NIYe=_^h6OU20#$DWX8i,L(AkgH'ekI=$\^[/O*t)W5<17=;F=aPi[Z\(;0/KagQ8`N#/oc36m+="(o$2O#;n82-,/:e)4f&:>A2SI1/\.%U%?MA5;mK=rG`B#6FV&[+(IO(X=ssJ>_m#Fu?`B(62Y5bC<he#J45P#.Ls.&J<^fsHpHt&Z92e"((=+0@g=\aZ3/AKrT*q'TXkf'f^utbAgXXGi3SE!6'H._@\$NG&Bf!0#bk0&/GOOIaJQ64=R/'c%7\G/pD9%&ndfN*"'lIuU>,(E&]XD3OE`#4.ed;5MD&(Rd003MnkMJjBAE3ZFIuiE/HN.F5q!`@!E#^XS_.Snj7sLE\;[-U2JS`%J>Hc0&Do6'Dba3au7M%8/\1H9ZIKdGI35"Or&.p8u]kHcPi:]*aX,^"Dg-Q_2Y3uR!oCnl(!=PI>-f4iDcZKJJ=.FU<Yh._Yb_[ZdUVqW;]i95?NVB%(2"K@@]kL3T15?0R\r!BN<e7m+dpW4H$q3D`hg=,K[W'$!G7a^2*;b'!*1(Fqj3rp4@dk?*M8;m'%J0'CR$f&)Zl&E(d$aWP'X]08Y9<d'*ZY/`6#O-_:*jd<*_s4FFr(rW`<PkHi9pS/f5<8=IS?9QF*H8D4%+10GkFi9H\4=(Dp$?rKKgJ^qMZhir!Sr'MsL~>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
0000005704 00000 n
trailer
<<
/ID
[<94b7559a74725ab32d8d7e3b9a50bfb6><94b7559a74725ab32d8d7e3b9a50bfb6>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7226
%%EOF