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 4352
>>
stream
Gb"/+h/h=/&qBX_JZ"F[\M3e&8G8Vp8P+$aY=S@]DX'D617]m>99(F^gAh-f+Rq`0Ue*UE3]B!3;Lq%<]A-]Y/f#!(_XN>ZIhrV$]tQt>h@N(']"U[f#97$AU%.ftQP39hA3=7)E.O`O"<hCd^'?>mnFk<;N'PU[0['V-85Z,$,BC.:%VUf2%e0-3)SDIHhi6%Z/L+d_)4mFZd:eK9j5J7-Ee[%Bk\>Ei4W.#7(MJ&=0p<,d#Q&Y$m[&jh;tN',U?Tqum8#s?ld+ekBCrJl4L"f+rqP-,Z,;$IlQc`^h]r[6c>fA8'MI:i]jXH&oH*657YBI3/`R]8[e"Y8OR@;H'[?C9iKf2Y/mU$[k\cGNPB/S\3a_@&@^BC:gYI7dgoLml(#L:p+cQaV`%k![/$qpr2I1.ek+>PYI!D/7G&i8d*8SNQrDno/dVK0%elfT^[$EP.,Y6.2,`^!1P)*e%=i.!\g^Z0l*Q#a:-u3#>$<Fa7'h].3ri0q&8L1i#.>eU'$!+:"Ip=S3/:C(J?%5^i,KZmU"#N-0>YO#3J<dc,SISGNmk-9c$Wl2HEY0Re-f+TC1V"@KAl\,T@B^].74h4La+45IG,I?hmo"6T2>D0pb[e2rAV,OD<7i>['rJ/_-F&>eJ&:*hKpJTS:V^06F0_)?0_Bl^('e8A,M?7oR0'Vi*1%^VgX#-C)hrC'b?Dc[@:0l">V$LGN<4QYW&J42/F$kmEfP;Ws2?Q)hueJ$5<O5p?E<OJ8.Je`e[KXFob>`<+4Jb4._HmNQStmmW-T'J$d.P>5&^/L%*eg:52e-=csj]m[igh#1>=Cqm,bRu_ZP/,bkRTWo2VHm?@GVb=]*+6\jIH#Ct9Qi:i"sTK.g&=ZaY`Dh[Z]j7\^HZ9W;fZct[.6VOub/%1HQ-f;O?s_n\BF\H!mk)?kM%ak"ML-]31Kmpde$*PS_<*Gr)uR;UEiI/RV@p\@orX*qj[+C^T.o59tTKZ=#hDN.5s-=d*&6FZqL:6':V^V5@qUW/3ph30Mu=]gNa4:G=UPp0WtHoVKGPlD!RQRoEFKpW+=&.-;I#\#s.s1-Pc$rG<$$2FNnpmZKm@Rc?&>b^gL+U<g6#'>UZ!#%u/o]\,@)/[qSs%mI].Z4BQ7+&hahI\/[+Am!-,3&NKW!K-%M*$m`C[qp?r^$lG30&*TH-7o?PT&7eZtehBU`%.bM0!ntL\NG!_icW^<ROPD\^+ubP=)W",*o=#Fdaj6Suq2!/9#iR^JO#<_?%[gJU?lQK,Cm;bKG@8bi=eWW`bS$=AA*h2K0S_5!4D.`n^-,^:CRbJOj[;3E9M?i>.df0l:;*S-:GZP(&!,OWAae[G?4)?Y[H/&BnetQ4>2iKaeGV<mO.\bDI46"S4Y)MVDrk9?RhJ955"L_]n"Nm:Ait"Q]&.JgJak#j<QE(e]gDjI3$LN*t<Sn2TiI8J1I1/5I'(*MQ+<'p"nb8kjZ[^e=l+*g2N>/r+rs@[A;r\sbV0c'fsoXE0#U,e_EU8A7`MeXW4Hg<;8iYi)UboAQ5%EKPQKl&lb^F4SL@i5b>"duUQr:Ic$PdkPR<SdtbnqB'Rf1RGp=,lPUn%.AFS?jr$HR:FI:8L+A3G?_BF+>Um*fP#]CdWSsSm8k6k$#NQ6.5JN2QnQBQ`Bb=ZMIiSA&pL4?"B[XHVRAll!p\f!.FpK8JG<Am=BfrB\9fjI\2?\qbDo(i#HR#c`,-rlE-+4"3nX5OauFkmBRI-&e5"F"C1lW1_3ae8,m8j]i4;fH/Lm"9^UeBt"$*sm34A\iS%QehS]B-+a3e25d65OT*J_\.N8O,4`bkK)m599YFrD[.Y2TMi+)HK0>,@+7IXYC=1&[U`eR8M[Wq^;XWV@(b!mo'j>mc^HlHb2q!qS4*P#.jL@:6rk@-W6=@:@"D.BHq5Y](6<'2HBT@:75k5!;l5>W42b6uL3UedV^;N-!HH<HR'$0]T^;-s/DZ%'E[bMLoug^`<9J1)EsCe-uelU.D+gh68SX2J"]Per9a6/WC)#(^iWEbG'N<p&soP`oKU[WRAJEXj2'm`^sDOs%"9l;!9cLWUT!bcX2u"f'aWdA)^nD(!.k>Qr*U+QL>p_k0$bZAlk:Z;I<4^#F84agm4#,0IRH><K$O%f6R6K;SP<FM^kMTJf:YQ[kfkGCY^aLFf81Zi%'*c#(I1^X8AWi<Dn1SO(YFdK,Au:5IJE#`4l#cI('?Mch<E\X2),)Vita"bCYP+YTEtOlkRGon?G<me=f=U?HucQg+JksWqNlr^ML+D,)Z0iFmL5+2cI%JH#DHB\:9:_i\1Cu<@RB?I!/<l1eR!>ed[OY&`l&Nr_ka4?FrQS=Q9+r/q1"KZA1Ko9<igKG)iT7oSC/[h]aA*5r;,'pSAX6!@'.uAkZd/_4c"J80R0Tf"+5<BU=hcDq:=e"E?IX,je6jJU0!C9S0?'6%-,61W9C5`=AAaX^Z@XM<[NDCXYDWAKKY]IB/,]Jag9Rd.]Dj+)u88XB"g;M:juA9+h<3;5U5-Mf+oerR&[$rnq9o?gP%jp[$.'-PchY%?Wmg;k'5>fQ='hk/>Ng8WUg&./?6#7/CgV1e&Hs)3L_Y@bg]pd^U\i\<kNKH)-FS3fP*@cJgHFWu&1/na^n(=VW/A;b`bq%-s<@N;IZ+CW7d.S*H:(>8_@#A>5<:Od=**C!OC#%*RO5.OqXL%J!J%K-SFF^=@8L'/GAKhT*k,/7,ke9F%P3>LcbBpGs+l9a"7Nmt<6Q]'C+:Ws0)tjMo[%IEo"9(RHq#[.`k*l1@#%_pdl3ojfn^5Nnrg\LTC0K*94$n\&<JCL`l`BDRj4P%N`"Y/f\3ct%$f>-5e_bD7d)XrOcc(q@T"8[Ei#YQ-YKI8_,S4Cp?lmFsqlmFt^]eop7-*br#q<BU1d<Gr^4KLS_lcq&J9`i`>B=^FK5fB5[oV__uW`.dL$JG%\J!gf4o;q!YOVQROPY^1NFQSt3RG.*@42YQ2t)6/i0=hnUGfp=Oh9\,2GPdX)1mJJL-BZMN\0DH+-!"7AIF95g-@Uj;Ygrkdlbt#=bVe@<N\9kIATa8%;hJc@"[LQ>VI@Z5ghDj"Sf9tXVqXn!A:+ne)`]"uI@#4DUe+"tSkE?G./OI*Gkh6;iR#pXkH8Tubg/D1l:'l3g,N<GE2\_C6QFbLl[Z\37*/sk[K?WZ;F>B.#3kZp[/J9auXL35!Qp?pHk!h3C`!ET)kVoW(VE(\"R]Qns0sR%BLA[d3VhVjZN[KmX==m;``!2u?SuSQN<eOcil^:n`4B7L6HGI^&FgP%Mmkq)Bdl(N)gN^oKNAmbPS<W=fXFr>j)G*QST&"CHh<2%g/DS:_4Q[sLk&Iq"AC<_M'$6W,8.5#;f1,bGJYKuMF%ctZ=ojQ@pEmjlmS?)BnKnZaJ8$9DM`2e5WB5?REY(Ai6`$C3Yr$'k@1^i)AuMVc?0WbP/m+a@dcea5W-rB0K,h9Pl#2o`rW'd(oV<l!BB?)%+o*:UlW+(B4Oa^Hr;+YeG1+kqge\[L9(sG1,+UN_c4gMFn6DR"^)UL=+ScmBnh[qm4GS;t2EAN5)l)#K2`K3ZWD*OeTe4\oO$8MNGVGib<?'DLj6Nm!f`Up;cKa^fn9\lqUC41d&+omtX`)Vl6/Be`U39+tl/tjr$J6EL.j\ELAm;[T%*q_e%#b*Abei3nbeX37befr.X8qS80H:6IN%5*BdP.83e"P*kITtu:K=C=1\W+s[]0_u/qK=#=lU$Cs@6bLSMpOJQ5K`"f34%4Ie5P?PJs;VpP232cV'#66jC7O7r\doN/5:.Fk9io\L4M?.\T!dYlc)l<Cuu%7=0c><IESD(7>FY3h<n;]7n6Y8q/3`FVJCI26C'6*:RcOXp$76USZ/79b?dXOhrP//@e7"\0U`NLeSNT9bss;rEW+hr%RMf;DYmY/09qngGsP3uZ3eArWBV)-:;q>;j`Ic[D!qkU(%%aii7ALS4jdabXXT`d#Q#87eo5)uQYTg.5OYr7np[R@,,odZ=tZYD'%J&2WCmA_O4oCZ__,>DeAgrX]r,;W'*c]A=?^X/eMK!$^99'!fK@6-jH#';%73ka#Tk4oVQrR]3:n6I:$lgH-i?Mu)bn_p->tP4DuQITZ.=YnJAg"0GT(3dW:9ui'BeJ98DclP*o9@E?DIDBHD*Hn]G5*:I0F(OGA&UEC1'E@FM6#M`G&^L=2VeJm-q$[],1$i2>Q@mq'dH5HNdc=mU;B0/UluHh`E)F0%Z$C?+O@`A*@Z(R@20$a],V5MrgVs]XSqMVM=N`7-Sl$]#cKgml&o/9o"o7+#X(e/rKBps4F1&FdhEqOXY0hA?hS9)=Rn7e*Ua!01fC7@2c8<lRrVB5UZR8)mdBF~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1449
>>
stream
Gau`Sb>R@[']%q&mZ&t)7^Dq!MlpN^VhZ^7WZfhADq)4)7+lV7ZI=4#>fi$P':VL99arO:QEIF:3VV_L$3WTCr_3`Mhj8<U#6jD0EWss64BUIUa5u[bN-:?-F-mbg!JHBHnNFn]4WGel\B8ENJIY7+9n<UV=P/#NA>>)D^.T:Q02n6FhL3-9Ge^mn?Jg/8HKIQ\\fk<X=]5T+F'/f?)^o1Xdo7Sj5uO_oMHSm!U8a/]q#nmui,h16,6!1d1";?OY`M\6H9<<\6brF.2@IF=:^RZ.Si4frGV.k/i\:eod5_b]7f5'/d&9J2!joaaU*+[]RdUafY:=Dj=KqB[1!e_W`$Z%#"H.a3EMG-/#f@fn+,DcbZ,LksXQ/@("mCE^@]-ij.3WX?2]Pj\WLJdsZ;egTTDj4g26S,e1<uio[p3Z"$qjDe6J"2qNE'"j<="DK7kg0/[7kUlZ_bN&U5s]22Ao1`\q$&[D^m1c^nUX$Pc7p05%)?@%I$`b5aCUK.\YH<_&f;dA0P0:/PM_".F5rj:#_6WEZ)$V+#(/nQAM0^7!#16'W&aSJEuN@A1mj=m6hZGY_G6d3"d9hGP@MeaFP<#''aUBTmq2`!O>?EcW$l@/Ds]u8Lo=WRDKgTXMG8'q:3GOI,&cgQ5fD'OV<F_\I(DKeP4Gc76+oe]]c`](_b6as1XJR*Olf61Q<-72pZ!>>@Le@8<U1.,4G/ATac%75k<"JZ:7^+T(HRU(rS4XmEo%t*3mG'P]&d%>0;gJ[?=ZkTu]AWKFPM/1peAe8PiTQUN:Jdlb$qca(d*R]TB]\kYm?/S,.226_-miWNG2tmq%O@kXpAr&mqi,D&^TYpV<H[3DUqfNoub\\#5J/a/u]9Wf/I-gB9sEOHP%BUt99,>6n+#E%uuiY(\VR1^nFCqF^-XplO,t<4Z;9[p1d7\!>(8Z<?5fa0I*L;a"]M\%>aEJ/aG)PbfP1K/=SG0n)A,(II7ro/GY90YTdZG4p&?]km"N$BMX`=22,VBpm^.o6TN6LC\@O^o"C+bkosA`j'qYD;0Jmdh7RH.c0)7[D]<`dqupofXUl+O!U)$f@9MEC)9FtRebKnlW<k?m-fG_mo-^]hLCtS55^csCkiE+n6+iI&Y?Q.Pf&+o+M7S_YFB@gFs7FFI$m$$Jq,l"A\mF^(\mD0n?.[<7%>t'U9TW1gKuM73^Ja=.quZ/]gD)!5CGWu/9E).Ggj^.lOEsa3$&00n%Eh1;c)KIM2V/um_ShCURjq]>HFHcO`/ICKDTU3Wk.l\iT/kf4Tc-Y"5j!da_fFUgQb(sCFI1JQs's]9\nD>TAHpnL:Hd(0FZELB6\Y<L7'-lU6souTc9S09@UEJ8LsXq`=VOr>&eap*Rs&6j&q'tATtc&6Z''p)_UmbF6t=)pD:c)4SM,>D*ULEJ9QL0YSWapbY?nLr-EAPblVMW!7^_,DZ~>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
0000005711 00000 n
trailer
<<
/ID
[<c2d09e26ebd32524e45b09cf461b9c66><c2d09e26ebd32524e45b09cf461b9c66>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7252
%%EOF