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 4382
>>
stream
Gb"/+>BAOW(4Q"]^sg<je26S=]2,FP45/DG,<7j?WVaKPFK19N3MMaTs8=!h":0l$PB<O@G'DB1Jj'J'nDN6[!.l=%Iu+)JnVGOf\*3aA+@=KC"!ZO\kk5@CDbiQfOK9hi*oiDVjG2.sS2'dZ^f\M/%js%4Z%KnIO"_\FTcT8ndDE\o!=h*)\+f+Y@PW<o7b;jCOO7Su\/M-i(sU(<GN6d[)SJKsZbc$>3#PN>nBH'X^:ZP`Y@I4/>l5Y<VeD!#n#l,nq[VG27(;'KZf:JiqHN_n`I<=Xp'Y,\Sksfu5^8gZ+<;n-]UrOb,Sg0+bQFWh]@/j]1"pK>Fn-C<G2!j&Hh;R'"M'R0b;HlgUXA-@7A$@J%P9U)7D.GF]B*XqZ*!gK*Z*<R,SS?`hQP9U7b`0m\W8qmB_hE;/Ttl^<J2FOj*n&L5]O)^?L&kCITS+h<Y?Zc?5Nh+=\8D<_^sk@&oIpmQjt=I*JuYTFTq*AV'Siu0`>SAC6]''@8c/.L_@(&(VO0-P9bU9iE:Z[:SZ"pSu67H2474r^&os424+gX_q/h(k(-0$8@e@ZcGT't>YM$Tq7KCl0ar@qZ)jeDK#!QmdI&h]d4Ro_C'NSa[@6HjG>*&(JJ&oTSRZt@0aT?)p]p`qR*F(GncZ>mh^<3Y!(2f<YeUnQoi5d]jr2&'pUK]McMKUbWeR2eVm9@-D-3//1_kq#D'O\j*mU6T4QcB:4LIX?MLTqB-.p#jUW98>J_/1k8/-j'YFKNBnEMH//`4ULQ(%3$m![YOm6f]fTH@%*Ie@]eh^0cJ;qZj$3'iI9$YD[JgL[ZpIbLjk2NNo,/JDo4:7\!Y^%Lr;%*"/KL>j65k]*rc."b_#]Gta=2OhBKr8r$%IPf_HP::WS&6c1mg%MJtA.+%?:M3YC[UESs==O:SgI;AhC3"3%i=j2cYICd$fFD9?`f;rKZAc9V0j9(\7o_G_f?QS=^?7;pqH:9qGs\Q]'m0Cqb`u=pb(117>(7D77lX'^?bs0JA&\#L-c-NjPl*$J*_Vi_05ZJ?-XMVWs'Y[<M_%6tF&,=EJku-Wf;",i9>*Rk-2!XYs.@-bZr7buC5h1>'?<[%J?L/i.hm5q:kFs,<tWVhZe"Z%Sn9ciJOcN[3nTkH,8BAS^G\?>62E]CHG4(PNhl36H:!r_!DWh(^'QXb(oABa9=p"G2'%<+rLc)h%Su3uT>uHBUl/?C1m;6\F5"j[+^+&nS?,n:L+LWa>=ZlTF*M\S;!,a;*lm2iHgjA8!2?0WQi0sca!!ZY[4)$Y*7hr@i)J&e4Ft&_4QksTF.Z59G]Kk/Z$+"p\%n6D["0Y[(6C)#r<,ReI-B%KmH/J;AdE`]1-9Q=3Y\A8)An()SdX4EM]/AolT$X4\(U283Bmp/WBicX998tWQR4EuOMfBM;P'^"cl)No$a#4a:=N<6OLBEs#^U3J%m7+eVs/P`BGgU!f1m`jQb@3C`Wm_!_+&@,6U2-4b7PZK9H<G39oBAL>YgHcQb!aIGCcu)dug?K*2NZF:>-U.c=uP[Bk<U5=HTh"F.$Y<=T7m\j!OTNO[R!D:E&P;:]L.;hqM=IY+2mBrS8(pmoX72%#qp1UWfN*,SIb6>I*n:1Ba6/hYJqTFroQ.=6l(WD,L&L,.fO50-jn^Vik2?7ASKJGGZ4'=?;Vj$R8*5hZ&`ia/O0:04fpJA]MBoQW!H[;`)5TBHjq2lD527>DguP*KQq72H=L'NIM[VD0%":N+=5JN)^Su[\TNE+W,"u2jMNg<h[b)WsdMuOJCQkA"+"VA3Grj4H=;@Nc$n<DE3_o3%>Wbg5QH`RZ/f@=H+fS(l\St=)e8pO*Q9X>(qilq>RVX@f&/Kb/8J*;"6??;t2*N"e_+^VA,a/24lJB&D!cJLI.cE@:@$WBBt&UOi*?[93B*/Oi(Uh/iX<0L4q(Ol1324Emr*<.8sg/Y\@4,@@X?hY+hCT%Ps\+MM=hMLV`Ut?.#lj=I=`3eEWb9S#2=c/1XV4fJIUc/=TZY%@]fkf9XE%F:=rj[:N4N@.kkF/rcii3a8FB;m">fYJs"9kPp>c"!LCa=X\[.`UgEFa83K%G"`l$?,#m8Q3eSX-gCWX/m>Cj1r%0...jVinj",T#As8b$A3@0Z<D&W?K^R28H%s]0<,Sp88>,!0'?o2kIO*hCf$BZ^fL(O%/)s5I.">8<aj^?I4A-3l31S%qFs&!+6F(tNHTZqq.0Nt[.7J8F#m<sYfu]q'`Al!Zr`E\JbLJMKao\Lp1iDEeTTJZ<OL.7<gW1_Sp?I`I@Y`s'q=GfTImWejEU>-B9'k2e68]NC\HFI_9qI<f<AuM31#(T-ea$<L;@YL80nWaqq/mU[7P_D'>7qgGG+,t]M"=,H2SL-@19e78@k^&KR&N\TH#[$JHgbXPp0c\-JW>pa2<:)(SCtResWBGNnVfnjqJ1g]brmM6$'K.1W<:3N#d*9=ukbX*Apu6CY_+aC*$_<X7D$(Y4/Kjd+?g@DfKm7Ah.Rn@X!l-;F3W,>1^-60b$3f[K!LN[JR4JQ1rD:b0r;qSQV&Y2Im)%9Pn`D!o'CgS.dh>-TsffXQU1d&t-Mfckpb)AjhakZZ4m2$0;$Vk[(iNeY+lN9HZ8fXi5^I<j-7Rj2Ko?j!mMrVOBIl(c%OF"T:?9XO6e6D=pg*XbaGH1f9(D8B^L\1e1mgL'0K$MN2LHK00t&@,KA609smap^El0r.*J6`>c:Hkof*@f$tMg^![);$$J)$R2";u>]<'U6qE[p:M98Zs(+7^ctn*)%ah#mo\sV)m@j>/o32a=R8#:];uQ*.#jqFq3_,t8`F*_/24+lod,D;05aYFFXt6OZ'ZIM>r,[sl!BVf@D,e%!j?BKYUfiD.CY(Skju_+'1\oV5/'"ij7[n>FY].i:+O-rP5b`5!<C!gniQPutXo\k(JubO]6,[Ub#eL5>.[Mg8`=N9JdD[NfY?bFUYlA-;jKcVV$g`1ddbWZ!gehW+E:jOtk&AOXODgj0TmE8`.&tl'(g-$!*<eqkG)0E3mU5_QgQsgs4a-P8DDq<1MBZ"H/XXRYnD'?eJOG-Ep?Y1rIQ9>&Kc]p$iYr/0?ja'%od1]rchtSYRk+4W<0>5$,dV$^N"XPGleWq:(^V1(NZU:q4kREAX`m-ldWMF33gbr2-f[4u)9gHH0H7&`A3<9sj4OrV3ZL7(OW7<*7_Lk34=DK%[Y4jG-uI<\&p34;1kTaUSp_UR,(KA3fFX?lV>=Z/l:ga?oe/8ag!>;OM:O;]8n`/O61:U<N-e6t)O9S_['rZ,NItE"Wd$J]\^a(o[a/7cn;CD^6?T.#@X[N6nFV$Gje80sGj+D$'d6qQN<f'@(91!`G1nH#Lr*o)VgR.87`m$q4DfKL?-?7P:TTk[&n6,9,DN,eBSE`a'i-+u97Z:@Q27;fg<)6b)O8eGr6YgJM!tRcQRLL8eVQTsgL=]>5/X&=q$\/UC7%;9VSXu3*khfRqn9@DF8'IAO'`a\VB/`oMg_Dd`$L2LT?]t'r_:tJE-5KN_iRQ%RD$+qIEoX^)Q;TPp8K]\CS1aAYj"t]!tAV)'t&lFgn[Jc4q7+ZBX$..DLUMqok@:umBWIXUq]/me<BHibDD64F^qFt;LV2,<-f.^(hM4;!qf=#;Q(n[4ECi(^MEddEil.qogm`@"rB2Li!rL.(*%#Wp"cETYGT#M2S)Hff9H<P"uf,F3QEM'oU#nVb*'A.b\W'<qg.kqCNVm24EHJb$*H"\[/kURpREmDcWcKt^<^PN;dXc+,e]"@UZb:?8Ae#JF%F8sf%5T)5<L;WKJ]csm,r6L;^&/I1&i$XFD#C"n\oBg/2p78,X%H_2(ZrX8HkuXN+kEK>.DB#'<5QuRc/h%*BL<jG$"5o3UG!Kg+=,aGcgD+8E/arq1V[h-0A0:BBn+E9f\t?e]ecb@c+b"0q(o2ea./-RHNi<7SnT;JdZ;^DOZ*GDrd9KHb3+0X&/.cU<[Q`(5pH2rfC%/c?c,^qQJeJkqQ(nPXLdhrJH&>3,$mddOj&mpW7=KYgcaaFLXcW#cdAh<pba?69%8B4!hB7C/->%K+go.-FWJAOaKX/+g;=WY7CdrO>.ciY$%63*n?,FVaKbSXsnXJO5QaBeY1p!^:id1h1=[P*D(:H)>`OWE]SI>(DTNED'\UA:d3HDEQel@Ye5TFWV+NDDW:.h\+(A"Ct8u2"kE9<UY.Y`-/P=d'idMSG4BmNkSr_NNGaJ8T]GUf[ej.kVE4D1iUm0^ke2S?.!r4V5A0GDU_c"iNm%*)Gos4+l9)g&<5iqDH8jY2g1<.?5'X8#;*h(+`DaF/$<P)ikk/PWT\4:)@'lZSnKN=OplA^n?,oP5(l@B572DpP8Us;R(iM?KFkb\\&'JYJg`r!H#<MYk1].?p~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1424
>>
stream
Gb!#[9lo&I&A@C2m*0PuV?)8k.GnAl:#3)7`)1m0"X,$,*YMuh;Xr)Z!rS-j;0J1!B0$r8+Ek;?qt;TA;'>Y-mXLB%r'#o-5:B>Mk"D@u(VoqahTmS,-FEATJ]E?r#U,Xj*Y0+*pWuU(\QV]]!Zcl%QlH5)0QZc_NCFfW\5*s1k:'*.mQY$kJ!aTgDsfgk4niCDq[m(6X!X1E(93OZ2NTR/Vl<@SL8<1=[:!F)aeh+Qq%Lu%K<sC4M"icT`_a^ia!*i%l>_T8%1_8bZC0AcCeBgaWD=J1f:nRMiUBqRSTP8r4=BKcL-<g`J;&OjLZ'c!3$0-sjP)9TTMB^0]_DdUS9T,kc<^SBj3Ag,U;:7SLm&<gV=sY:_t!=*F<7mCkn`tKifVT#53h8l9IZCG"l'GeMPP,>;6*#fD1)-M$^@B;m)4dW(1/k/N3k$d5*;^3UTph%(0)tq_#f4kU8h4V8R+<AmL^barRs`F1$K+4G.auBXM?3J6XHR'WHs>r:c5$rN<W\PZV$Za-9*.XfK`u4i<UYU74M>];,j_k>^0uZ)A&69.^ZGd[$K#NDJmGp+U=te-Sk^ZFkf;/0[C>\Il@B@HZ1KB!F$<S$J72V,BfRi.pX!f#g,d(7$SsK`Us#Uimajd(.$+?7&D3Y[qSFC!]<^/!^jh(M_XZ[&a6Qg55]i<3->M15E/Z;1s_r8g)N"Y0cs8Y12CUl6no8M%['=ZWZ(.!kFFJf'tQWP+Ua1u>54URp*+6TW3slaWE)`IFS<6gC+r(dTEX"'K.P.RV3qW<Z_lh$l_]g$>a\?<:B`Lj.kRu83gS@>3(^a8X%X@_j\8pL.t#%YDJU2sH06@bWS5F-\sQg[gmq;o7<0<XY?!t?dg!l$N@DD>D0U]=EHR@c%i7UUk?;U._SECA9jd4HdPg^q`7D4L>s$mLh8me`>ZF3kiqHrF(Fr]Qh%n<[Qc@cHmWfkj`qnjrATh^qCeCou5g4,VZ<^86Ksd18anG\7S5@p=h3<?$o!"\tK?FJMNC.5$3-eVcp*#D7pI.dajP:T^_0'LH[WcoK_.i^6*>M[+Cmh_9:pP!r_a`&R-CL"0q_.kol?:[4%hk#ApPHmE-Ck6OZ,^?::%9Zb0?uhkkK2"+g%]E0m"bCaki<":jq45>#EQ*Nqh)d`=,*)e;&$rY<sHFS10f$V>1/_Z.X,qofQmMdd20+0M`D(R++:jf3#lr1Ktr_^:=qp.iEh?m]76ls':9e&aCuX$jnbf2`S-n2\F1cMW`oWJ[ld"id#\LI[_++1#hL*8]Rdu`S/foip;GaB)4uAX-O.?USf#[.g+j0LK:28.V8\mYLX(:WUSo.%K7`0jg#2AW$?Eblp+#STCV(CorSAU=]lL;pmf"R;3_1ut&MFXl4c20.0c_6or^#I[.^*Qrqgf<nTEur0!9O'/_Z~>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
0000005741 00000 n
trailer
<<
/ID
[<81c14c56cfaa9f892b9ce19cd6d971ce><81c14c56cfaa9f892b9ce19cd6d971ce>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7257
%%EOF