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 4416
>>
stream
Gb"/+>BAOW(4Q"]^sc?Oe22%GamP?B.CM:Glpu/p]6,20R80$0,tF3Jp>><>8:[@(cm08dS_]hnNPH(A3<VO9)^,iIi=Afc?To\+iuFW'+c&rOImA[6*6g.aBR]OBKOd4`pD=]OTHFl=cP_B(!K7c+H[c)A&2P^Co*>Fr'WLVY*%_L\)WHh\4MOD"2rh`n#[Q7@6AFMds)NdI,;^DMDF`_[1qZ79e,F_W(lp"WE'9W2Mg)kP-:SNHjmOpM>3sW.p?M)#DpeIbRX^)fMo124DrFKWqB<;s05)AO^=8X*^;i5Dductrqq2pCKL?oD^1#O'leO:Ud=/RW,`hJE^PgM!J0+0H:[[9)C4kpbBK3^mMbf8U*\FjjA\?bNp8dR-;d8K\4RU[KODJ*4nR7F.1"sUimJZ$mN)l!8Mre9*Y[3t-pitGj0i4D,U":WJ=78(GVO7`'1+ru%o'B$QeAEisE[L,_1t3QDaE/i5[,MEnCJ.;o&[;2pa]4R]d`J:531<HI_1(ol]h4I_0nt&R6/@M7UO)X\i,Upt^V'f:I++\tqLa^lM8%rs*E"N&M"@RY*cK&^d;2jLc56cB:b8+l=VuGdB!f7qiF3n(Hb"as%Z2V1h&R.K3)EM*YVSu!-miAV*^@Ku&(rF,cVK(nJ"1>N!Xq49T7rjYdQk7lBVkcG?cRlD3:CMQW#CD2SBeNq9uFatV!56WfJGAYmI@b*ij#-qn`1a.3W5.'._l8f^3G%*QuM577mq+5K$*bP#1"mkEqM%kYN:@K@di@RAKRjW"T<i`q5k1^__+65^SFT6Nt\m*m(b/CA@G2)X,dL2D>X)6ehSt'VIt;ljD@qi@PCgs0bj'g7uuEL<Z4s#rGo+Gb%u6mip62%`<<YY18Ql4U"+t@VI)3E%1H9%>u:otL4Qn]dKu#>Bk6]fPB.ZNT.&iQgW!-#3kVPR*H%'O(%9N0@e9,oW3W\\\b^sa?GIuTB&+*a#n?najG%<78[Bb>"/SDpr\d6+E0B(lKMB?m`U^Da^?7;ejBoIdZ#hK"_K>Qti^G9o&!gS&a<K\TmeK1;i6qetp#tAH;D0/cTH4d9mj\0/411bZD&aAV3)7Nq!Z;#EU<pf2&hIn2N*(hhNJ]sM1@$4o4X*;F_5r#*Ta6\^c2^:dl2=H;"b*"c,`UF:*SUAci+-dDkWna"@JW/GZAWCaknn"g#WiFWE+bL+=o;nb\qlV?1Z>/gVobAIM\Q97`QDJa`T$7<B!Frj9,II5AR,B(E=<nuK.bX]+WALG3U@GCNqFjMUA2]J=9lHh;kJ6\$-Y9h\P?5\qg;P^P8c9taphS/Jl4e02+iG)J7Khg2Gka@L[O!b[\)PX/_C_gR?`ESTeK,gNC"3,F'j#u;9^Z.ILc%fD0PkWXq(U]eP$Ol_W([a`$>O#AEbn'P\4PSkS/B&7:qEf:=OBG+Dp^p(j9@d!'7AiVo_"nBG:X'ALj!CgKrAX'7c4#@&('M+YXG#XUuK.N%K4Z\kN?RY32"I'4$FD]-(5Cl%PGJ/CFNNPGZ?TF.2qo>+)3[<<V[AHqlJGN.-'IEKg<3bs]X[:E$45]motTc_f9]95!XUmVW>c[k'?aL5+R/+u?3f&cpk$WE=K-)+%)=Dge-i>ISPFF#ml!)q9;Aa=bX/$d#ke:RJ*K["p\)EGLDnLP7V7H"!KS\G\)&Eh#aWpph&'=ORR1rpFi?+Da(@`gON37.%*?=!DN3dJ0J<j-B-m<P1*<^Bug;\J!CmZ4b[<WX8l=d`n'h$q>j7;WT_c;<A)6L><X+eIBT8gCM'EI([2dG]i':lF,a'9uh$RNXA5n_bkt&]2=8rZVcEjX&6Z;2&DAQR$T4o<N*Illc1k!e'I;V*l_]DR\*'ORNE\2!3Hs^`=P&.rbOtlYX*maneGmX"ssb*V?1EL3@oEdLD?m03?3b;L/Y<o(mm(ID@]_qf8Uac+sjRIFi2!'j-4kiNij<]b]l_o"m\VfKC)ZD;6XpTR"M)3FA\l/h8j#jQ)PJ!)`\>(9p%o]\rjhSig>7VTb,.F(^1=K:QXl$R!_kGl?&r0e[k<O]89f'OE_uAL!D^eV(]H.ITl+%IX9@7M5.F.OD`VtTd'=YI=eh5XO[]Hh;ikrqGri++H[#JVKrq(K5qLn>-(Y/lgB[eqtXJEW=ZZIC8?m9B5!fJ]1')C;!!(TXlq#Im"%t([Em!!Kk2q2WCXIs(P9os[d7rrb&;[5fH5Y8al2JumFf.Y3`RH1bR96r].!`:Y9:@Wmn1G)*?%oEjhA.fmBYEDDP)-S0&15)o-2^\G4Iq0E2If0ZJ<$Rj42I8Eu[*2@[47%fk1Zr8#$i*_7Gch>Qj;[./Tt_)L"@i'eHZW@iN&3,k%F-oTDAP".l:YF*^7"g^cs_A)Ie?dQZ8,b[Z<[jUeO"e/5R$&h3K-ce6Pt)W]YaJCW;Yej9K.e:A4#he!I>gTf<2+gSHBdRkmEM#2QeCQUc!N@gak20.%9/CfSk@s5RI3PPVSX&=a#hXG)IoWfJ5)@$OA`f_Yqjr(I"9F,HK`AZggFMj&Cm=PgPm=GaOjahHVndNfb-PlpP%M:uTisa:+BKD@[FCN;RUdKBuQ2\U(,5jG>)C#_2NC_Go2X]<H_-E'Ci(LP`4PE8Q*R"sjHZ:.&of(/'H1<uXfSYejWB/91L9)`o_sWs\jqn6s_t?n>Y)#"s3`1^L8Ac!te43mNL*SaL'c#Qg#'hi2_1BS-09t$eGRYj\r/d<oN&Po7dmD3XXXYlrIC4tgO(.'`j#Q+bodi@>pHbO<40>XJ<W@)[4.hPrj6I#_R9n30j2puYBJQ$JO65_,jnZ:`oB:NXl]7V)ddXlNGg8H)KIIkpG?ffiOL<fP5"AXO:KCq/E)*a)9c:!ug":</jQ.j>6`h:3G4;'PoA,2/i3i>TZ#;sqiRI#%KmZ2#6cr'm.`(h+@tuZPjQ:ehV6Vlp0s!AiA=R!;Y&cK:YlA,iE`(lMI;F7Rdb_<Oglf#UV$;TmI2lkOT32[jCrjk)=P?MG]I<:oH2&>H3$G_G9bulgDcbUWHYbkA\_6*M.#Li([*Lie"6H\[$+M/pRF;fEM<3Mt'RI9[`E/FO+%&XG=D-"nHn>U5h<]D?65<Y(9IWWC8s>?;f_9^H$'@@Ebp<3$$>`LiKt5mg>3OAO.c0sjV^>\bM7oC.?-b1,Vu9s66m2[)AiuR??B1V<7(Q&?p[d<Y%MNAKW.d67eQV*4[=C0;('s.ch.._gleQn/H+"H66mgWV9W]W7#1lp8QfEWEInqD$h$`[u1knZmchV\T"r`[cI%CcC%78msSE,1sKX<%-CRIZqA'G<,T,'Bm<q2B,Qb%=WYI63Ikf$`SX0'1oCt,'ce8H',(ZVPNctbK*hi*,$f=+[8^V01VYc;0dc0AA<&<StSWI3.47*R#Ghm>J6G,eQ9'6EG<6B"ZN7-denX\_cld]!@[l&[uDEG*bN[\l=TW*I("O%oD'B]$kTOp9C=3bcZC;hRijAn][TRmFqYm4uo3;Zqe",VXbQY7#E>gR!1LIURJbL/]HRk*E$2QlP6S\fU+>DmG+KX)jdNL=@-"lt9PUk6uI`5(-0g9EX7TIJU87Soq!1I7Bis+Z0Q\libH)!ZL/,;Lc6<m9II3h'l7ooeN>'U;&sFe5>e'bE#tZf!VLB./@qiUXII2Mnt-0,]NYKb"40.qOU?qs'=r?PA;HJY=G=Aosgs7*d;]MZ/@mbQZnW_4\)V-WcaL0G*E'')E16Z3Q("niA!PJOX548R$eF;qr?i1$[F_NJ*&$i"CI:Q3s5-C^N)NQQo,H$U;6^@CDushNCYGU=(q+L:SZkoIr@mNbqjQe637F,=Jr^%23H48Dh!sXFD#s2p1N4P88aZp89uO?CD`EPP"qCu1:m#2O2?=(4^WASm26uAVF.CIe*McNG1CH=fWUUAGU)*0Oi4<no,FIk9([t[f$^bmpZ)b'<UZLR)UGJMM,Abscga]`X?;gs01,DY$LS:][sJ81qL'@4BAY;ji^G9X&5d4#qTIuDGCM1.=7dHSY%?MS%4,#;7:l4gY.su,>KrSA:8Vm9q/AmuX+usd@nV`HB'>X3quY&e1oV$N:sk6PVOum^OuPLk<,GPa:Ci:pfF3mIk]=6%k9*6<GZd*dffmR=pJ8il%"(qC"<YH-a0J(K0n"ISj*^dI.=7nZ)c"f,j7>kBp2;u<3SR*gOg'4`dGUC-r+LG4BbhZO\%)7SDfH_5d)1%5<+\q?9kcRMK5$2:BHaE)^nH1h3@*mDF$QLi_=o?<IRW#i2tFq0o#lZd4s84!%:>7k@NBs@INXffY=WnBD3h7"GdEWipXPolJ<Onm;pD$[Q@l29p2Uib<SDA5MKauq)rNi#Z/$^>3Z&qVXi72_RGC[:k<@a>iZu3s6tr,7bOm&N5XuA&n$X22Ek194[aEfTD+MYWFRgN&S,f/~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1501
>>
stream
Gau`S9lJcG&A@sBbUq*a<ChO@cCmK]l#p"$/XgqYj9m202?SeV8BL8Fh\jS&m9%LX!>Z'ZL85[skIl..;B-N[h#4,s_!a'=s+:FJ@?q!+]b"ebn7ae,)Y&f"&:-VZLG;K"Ynr*[JE,##SCoG_(kHls0hdE)I@.TjS>,Nrn04J.BV&ch^A@irlI4SUEd%'Q)t7njk.X'29=&;(WGA2dKWK`F*^i,SWR?l/\i0.&%L^sW;j]_blo4]Y(_nk+JQH40M=1T]`[U5&LIoiQ4S>A8&dEqE+\5hi0YS=1KF=+W1$G]Kn:Pf-c@+g[gItsF/IoH>NaG=/ME6NBA_\TiOrYX+H1?b[,3JE04FNfWT55M,39_Cm'63#?Y1W`9F<\A(83N!eh"cEeS4.At[fUT4er:9LW\b%Ao:Pc]&dF4,;FW5Z$>$=bPb:gJXjLfR.X>St$1f9MkUK9.dR)r0R<4LgUWBVf!la5!aQ\.jPVh;S*^Nq?.T]i0>c8RHP=C2-oER(uY%3E.U]lXo('WQ'kd8LN6?_'n*fC[r^g?jD@jbfP\k1"JBM5=</Up@%\`qGaa+(ZrAbgj6ge1?ai#[CJ&.(ul\<S^Y]rDM+f/<gE?)GP,<u/mZ@;V:<"B`(Y3+Ih'aC.9H^:^)1DD<o%%<4I*.Z?Bf9++b.(>G'jZH/nXo.DuO#kXOGn,E/E5P<r,!`%6H;pkO.A)6+t!C2TQ[?AL`mT)(`gLlU#`Ce\%l-8*u>;0RZ&do\g7&iD1qO<Q/A%8Y"I;5_W/#7\,M7T!F[uuhLMF(h\o2qGRX/AERe[TX#HI:(hk($*d["^HXj]iah<(d`&>ZMWH&]e+uA(B-t1mDEO+n92ALuXo7bQhaucrsiSaJ*>q_k9Qd=kad)V6D]\NQapNWLTo9T[B5-Yj/5=Q]oNpWhL%c`S`Tb<f;C:LPB7t"h7u3Ou0$c<t27,cCAQf#h^72UPAu!Si8l&OkL;'EeSZWD]RB:VLaD].!Vi%Wr[@%bgG)]X[A;o2*'i7JZ);@]r\N*>%4Be%mGGqb6HOW;\$Kb@NcGOH>,GDD`;h-Y<cC[0)Ofhf^snK5:LntnIkf5M^Bb8=%:kD6;(`Xm9?E*18pQ#O4okYHZoZt[:Hg-qa;HYEj^$nlVNC"a0btOp3O0,0DKnL/EV/K7pZ<_7iLh0+%h?@`/>8`b42H]HY6a`n(GNm[e&8F3"GOiB[_j6d)0]Y*o&p=0^'M5FC%P+2jo=jhg*2uSl`)NlDuQ$0io9[YhdF^@/TMs)rpX\6nB>7Fa;=o]OBEO+aE<UL,N+ebH_c"nW>/c:>"JBJgXu2Y'8,>>gMC:T1W%kc.t1(4<6W&`.>s+$1FA?'b81)m4.gXGms?KD:gp)j3t&TU@[^>M9a<mHfjai1C)='V1m.L_o=go;(SHRBMaf<P][K9XW[Aml_kG'"`?!'/oQbFCLoTt^>d>pJ$.TMqbb5D,kR/Mh`4C.cJd"i.djh=P.^%s-$dKBN;`k(=1A;~>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
0000005775 00000 n
trailer
<<
/ID
[<8a2fe4b579dbe728cdce81466e03d56e><8a2fe4b579dbe728cdce81466e03d56e>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7368
%%EOF