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 4321
>>
stream
Gb"/+>BAOW(4Q"]^sc??=jsmEloqD3P%`Hj*6I(%9\fqCVGh&JEC;81rqehY#nRe(-L""fFEZ*.!^?tRnDN6[!.c7$Iu+)JYt!rt>BKCi+@=KC,9kq'kk5W`DU6%eOfTqj*oiDVjG2.sS2'd[^f\Ld:M2?_Z%KnICD`/-:le,rBOTiH!!aM%gBTQ[1EF/uTW<E/aET`a?;AjlJnC4oh.1hg`cpWY2S>T@VNYdPH@J(Z&+9aY9oL-[MdKud'^a96mcsfKn'UN8FSg9(?5t"grr@PKfFP4(IY$h3'8g]@#`j$HUa$&#pPUs=8VK>Po>50[5Ib>GU\uh!,jT]iho.!)T_1G]j<7h\2sB4N`mZFPI>p.3[+K73nSTH9QeP6S[cX'(>Yq&S9J#f1YX5B-mGc+Y+o2nJjn^E0m*uBB#X-&F_bQ8Dia`S52G(RZZr&Z^,Y5_`0F5b+P45H+=icjRg^Z.p*COR&'PCV8$J'8k9:@&5qTHb+.M8PpUrYb5-"t+YqRB]U8\C)B?%:4>UWDYj"#RTZ?;Ef@JX1[BS;i8uGOM`[$^]_3Ep8:JLY_cN1VKC(k@Nq;@F,sNAM$Ul"J,aQG,I?\p+^ki1\gL5eRZG,B9IlWPh7,F!n.O78Pm7D^YnSDCmJ[OcTk_7HaZc[0XO<$"eH!uY?EG5f)Tudj2,;rpN(X[%7<-NAZ]@pYV6Gu.M`3B7L"?%Si<]pbjVHSC5mBNs7JO??itn<ek["^YFY-D-k;YP3T&!;ePj+cIZ.>Y2;oG+LU_W`8%KL&5G1DmlgshS92P8mZ3_%]Jel`Db^r0)b@JBcE_t)jlSVef`7gW1o2VHm=al@H=Ad"5]LNsD\!sKTW3u*;_%p^jfiuD`hi>j_-:A)5VUSU3BXQ9!gTOeE/IYZESP]RFL5!0GW;mWK)]=%)agmCb:D@lbhSrH&4+(6O45M=+1>\^I[/"`uWba5hSUJA'cY&L8ZYkWjKNA,qFK'b@R5/PU3D`C%0\<EkNKGHUUp$t0gShAdq:lYB#pr:DPm`YL9?EO/_j</47-T1TrJF#Z,([9PU^Y);qr$efj53MC5QN2(R"YL3_r%h"(H#rdj$FF"8Mu%%,+qRCGaM<ZPtb<lbBUYHnV<]J1M),-Us(mPREm)lkn1Zg5`nA/5#cjBB]>&JnX=bkQTkLG"p_jK2")<ZT41I*LmBn=K/EP"2fT=Gjq+0*^ZD8L=ID"0?>=Q8bfMSBl'%X=>'5QNcCSmIA`>__\6gZUia\$ZnA%23Tj@`H:sR6mVq'gpT<_W7^K;!3?o;mQBHNh]>[sAsFL?P<VZf2n<T[Dq@>A&p8mpAg'Gq3K(;bNP,(;`Ji+BIs)P7tcSs7IE*2F&J.>\7`+KFTkp<oZ>.D^<?bf"@Bqdn%`"&3MA&AurV54,1<$j>Y\1PV-,Ba&U=4iTf=,*`hLPnBg/*Y3j/RcFQH/Ec9oUI-jHrTpd&9'Kn?)jp03a@!2ZgZ/p-6f<!<`]$gd]33UWJiqWu,j_?[7.FP*XOhQ)BJW.m5_G9/`eSW(qF+SUV(5RlXP$jU)*aG%4T)]\IWm%L0]S?DqWZpV5Q8!kFlphL$e!oa_=3J=#0,$BRlebdRRA@9Hab:oO$#eF8a`^A1Mu=Jh0ub,REu^lT.I8UZh6ZUV)[s]l?Zc)C-?QLMP5g%,O)ip;?Z:`0?J7)8r*1>G!oPXXLig.7DC]Kj3(1EEpKf58hk!PdCQ*>;T,[d)J<!F<n@%IJ^u_\K#U>^K#UnmJRD.IR1b+f7W;;*S7NGXgqL@=]`C.(rA_4\&5Ca9jMp6@[c?GGj5cNde:s_bTrd(K^oZ4f_Mm$D_Mlkj@!*2#TY8VY'[S=/>g2g"MMplboI(71YsQFUTMEIe&/Tjt$CF_I)Us/C,XY\+^)m]Ag4k:f_k+"1fgZHESh=F\RmmmC6+Yu2C`4(dN2FccQcVrHLS[\0=i7+F@>8d%HFeuO)EH#dW[JcDN>r/OX*$kKVI<mCG#GB!/o6tG%^W6-V.%io@BaQOBf'WE)-gAaPL)%GP15dd!JB'hUq/C[2X5+DmTd.\f=`(=ELm+SSd^9/3G5&TjVH1gM]M-X%b`XWP]Z`Db??674J/GH8,Hu19$mJ_kG-D5U<!FNPTR9oUF6Pn4ihBC8U-f80-^)$F1nM=kT["&3dj([dlc56U1JtWj8l]`(LaNQK'%-H't"Ct?L1UQC/ZbcS(2H2iH^g*piWr.JBfNtVl,gClCHD',)'U":Sd3p!2R;kj:$De&MJ6>;6s?ieu?*YAuhq[hQaY.Dt(u/<:B/6K;dErY6&RO9d@]ZG;sX`(805.D-aKo%LS4c:V)9T,KI@edlGhLdkhJ>]0e&Nkh*p.G-=Wo6_3EegV!\P8*+$&6n[c68-rea%78K+eKW4IKE^InW<b<t[&t)loe=_"Rq":tQZW=EY\0M`qV\?$9/M.C,#E3u?:[o"->3lJFJ_"tce)ZQYEa<L<`5-I[T:\;lfK^rAlT&_`Yj4=*W!2ooGWJiCqc(0-$K=@Ua6.SUQnQc(t5^!=*l%t=$%N4=8AI.X?;"(go1G`MaN41aOGt-,d8<3iAknQF4)9mccZ7F/!9Xs%?1sTF[d)00H9aRRo%C+&+?>F=<21P_Lus)e6G,SB_>YJFhIL?Eb*-[b#B&;"@GotLnHuqO>m#b^9M"E^_QAta!M-*(hjk<OllG^_N4hs;UMb/BoqLE)sfYtogbj#'i'C['L,uKGO`\TA3*8,[WR!eG-?%fZT]!0@ls]b.!'GG#:mCs&uNh#fmI,^NG^--a1IHpA6XPtb@kkHnPql3@TsR"]MfDXUQ<t!o/V4Ec2't9,L'p\H)X]1RC&hp\T&p.D2V-+_DNf;RT3NVgj^f=VHDL/A3=p5g-P"(\uL!l<3N<6B[inZc1%nt]j*I?6\/N]8@j.8N]UtV"Elt;g`.CR&*M60M$qk7!CRg=[YV_VL$GmamTX2Q_Dt`3L$MAN<"M,Q75s!!^d/P^P8;C&._+h<)N:7;(E:DbTCC+W?_L!'q0`F_$Og0kAA(Qin23G7lK67&#ZW-r.LRc['Vg>g_I,Rj?a3On*;Q:IKn(,BP#hH@'0Y(+Trn%sNRDsH34SXa4S3MLn^)M98+5Up\GGmBjUb_2T3P\ti6cpm2fI[B:FTbJB:W`XV;/Fpat6W]>d%HZGhK]i,pAi0X#&-Jp#;OmX#%`2nE+aNT2*b`A:/TH3LnCea6@8^jgBmd4%kiaR.+@\^/G7e5d^sLR:Lf$;AJn/KrR,NhaO/LP2X^_e<T0SX]8GSKAlM#g#T&F$Y+9Fq&.`I9!Z4oe>l;2^g0:N/2RLha,##kMK;%aQDY@)Gq(%nVt+MTW^mk#,p5j+lEfmSS@I;Jeac[+X>P8eNtI'K7,W66N9s];a(2EV-)Lnu%-eh:TL#7S)<?Psr'F`N><odGV1$SDa#kHY0YGYhWq%Y:9%A2e%Wak*O7WZ6=i8,,Bibd3qM]"ZbH'uN#1f(o"U>,pI9Bdk'WQ>JFf6]sL+c6Sg;Gsgc6bZGL3_'&>jPrZI<!+"X=\h5Uoc$/59OV)8bnE?fhO2CA#aiQIS%CWqB]W+qPfNQl@Xri=J45Ts516`<F%+(GWc\J/.mW]-,QEeK`q]"I![edfrHPdL5g*!_DTlcYea%sB+Eo-,!@9)P-X.d&i8;$g\sD4m5oI-6p,N$"D1_gnCh-ArstCP^72SS+%TF*S,1!s+mDGm$:RbU6lAbjRm3q1S^ut$`.s/'ob.59%K/OmSYp^lT4DRb\aamsl;VVf:.T]22JZE^'9^L20,W/_mT83G@o'%`FXr1O_KP.M@bTY:j(-_"]4era/E;`$4sGiMX65g<fo_XhM4LVQjVQa3Vc=O']Z-giZXPa5b,a3_[PQ7[nVNq<:]qT_i8$<e3a\g?HhMKQ%QBg.K0Z!\(bQTYh8:tDXI]#*r;>"sch&&)77s;s_1"kg1`R1pAa#GLc\H&GHsGqU=?9]=@0@n2Cj"/m0L983-+EhfNZ6*8j$qQG[dlhJHq(XiX:#07%g4kR0ce!1=hEOneUdRpA*X>j.=$N+i1OT1U#;eSht5E9%s,lg,e<FRrFbtM35#0QMBpe3&pPZMT1QCLjp"%RhEdUYqW:g:EI9:kA:kr4Rt\;&l?8unliP*<mnolQ.\K0+G]QFJ"`g8*2ktkqjS6m*L[W_]F6^rDX!&V4HNdbRp0nbdc$o5GhS5jI/iS^M6bHR#j7mps(!`f5flXQ6Qdqc*gq4OoKp_9;:%9hch!!moGM?DTAu"UQd>GZXMsPlOhtHSX'.<$[,b!I%=fe>C!?Qf"]\@>RAT<V1/>JJO%7m?<kj3eX;t8Q~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1445
>>
stream
Gb!#[gJ[&k&:Ml+oG_BMN+Db,)[j!YCr&pMfmV#$``@[>?S[qlnG1Nb?]n)&AmfDTQ4uWNg9#Ek+'mg?nAFX;=oeIaLU03)E"D)(i4eNpr!#@/B4#;aNtf;Yr6Prt8jYK+Ku!G%R+^GE28]iM9T!Nk9^"cOo5VpmKl@-T#ooOLi*>,e])6M3^R/BcI0+l[_8>df\>WJGTuoji>!^_+Yn-r^<2rS^X0S]@,4os,f#KIoK)'>(\sjEHJ&]eKlI^/H`&OH^%Z&%?n9'=W66(eZ7$Io0i*=An_7@NP$JJ>^=E;F"RE'P7+FODskdtgO^&fkl`dj[2D?3kDcAn:T^AoNe/l0@F7j)-n#D>r2#4)Drk$b^NhO\ikr4E(o#WqC#$i;Ao=m-/&Sb!:1c5<(hNJ+-%S$nWBY"E`Ta$1YR/SiFga<loEP&"PA;24X4R0Em*q.<d[Kn>$J)2?;Fd:ob&l:fl$1f`HkP_!lG"I@PdY-k81.i:NKAU:>2J>La)A4LJCAQ>>Qb,eU#*Qe@.@]LJQQoV9(\Y;[C^H/dePo4>PL_atEM,3c+@jXi9E6;(l.(I!_7YcS+e4s$6"cKqq:Eo%[G]/oXMd<hiY971R2>Z"52'B_/b>h[_e-i',<SD.poW#h9;_5g!(=(IL_r@'Ig-I:1%S:<-2B>e/BB?!B3j>Q]mViuUBG+ejcMcY0MdmPU(#VbaFd;@;V"@&k_Z39NoigH_+aVn%C7dcf.+c$r:&d3k#WNYH=8:Jo]&anjW'I##]1K>$580rk?F;X_4E*[;@&hdCLU!0NPuThj2j^bogJ2soAVlQdg@Q//W_e,D^;M>JX7WKQot9\*bcr(7"gCqclZHprUfb(1R8_13Af;gGSBL6Q;pMUFelR(g8s\1Q$&Y`N9(l7WDpV+b%]UE)@KuMRW00C_)!<+>A_ATf1#FAPXD64ff3;Cd.^t+7eQ'6$^Q2AlXf-K@XkbUMAR%XkiX\$LI9S+je+QR`.Ng)]C-1CcRo+BpV,F(NLF'.+;`_4mMdESA[hf@\B]6M0QmdU[#J"qIBl&,ECK@/"<9=tZBf(j@:q).2$KDnh5#tc9>Xt8Nb/la6rcG4;2e48DpV64lWS_gd5L/$a^<K8d,O#72&\C>f7kR!en6cLRG!FaGAt-<4M#B0&%im92-sYnknDG`3#2U3dVL(bUgaMaRWI'=XgafOR5tSG[-LYhi&3K>&4rm!&\T,F__l'9mN<*rW*CCBV]lVQ2VfB2a7D"'BLdQ1OW9:GC<U3phb%EbGE8OAih/ijkR%5>5BV5NR)#3Qhh3JMG>oV##$c\kD6&4[DanYL$$Y#'a?4c-NO1'e`LN-E!;5Xa1Nt;3YiT8!p.lcb4+A'S's431aCMU*bpSsqIb\m/s-kEc"]"\-8'^24.6,MF0p\#lh"N5ZrGk8ZYp7CiDKt2EIOrlN4flp0%MhD~>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
0000005680 00000 n
trailer
<<
/ID
[<56505e2557d57a1d80465ffa553e36a9><56505e2557d57a1d80465ffa553e36a9>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7217
%%EOF