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 4541
>>
stream
Gb!Sp>Beg[&q801^sglj;q&5g,eHjP`5LrGAOVdVm+Jr\MThm=OX3M^ZL,Ea!D-NE&i@]e8p=(j`6\`t#(mFB^^pW7)#fW`hpiB,5:t74COug\Mt`$HO/'Z'MANH[]com>`]_<F(FY)mkB"Z$HN<(7hLBbR/J-_d2"LhZ;A<^0&_U>%H8NP`#C,cp/maTof.jjb@"aKY_nf'+7PU@N_u"\+K1>TK3ZBWi_f7e)_n4#qIe[l%ga;7`HM(KoSsOd\]>&dhrd2$IL_bJ1Qf[?qosaFg:Ak`.lBel<4C@AJ6JpfCLNuOdeG\Yi6UIO9Om4X3Gdr!+*2CE#\P8]Z_dT11jUjX=0V:HSX7[5k*mnYKMjC!%gB1XH[]<qg=<?&*D4u-M2t=CR"%!@$b`h&kD%a3O<kHE6LBO`OSsQL1CgjY<n);mY5&16HklGO9dq&Dc.qNHgOH=`b(m5[e&Ps"ELeCCn'kjNqplV^U*pJV63#c(*@>]ToY8T?p7$JXSU>WtS^k0Jph.E4Ta\r7hrA!Vt'U.([5f9)]AGl-B=Rt9U2B3./mj>'PPo`gU]SQ0X],n/rPB]9p8nSP7D^ZArR4Jb0!>b&TF0n%TkY[Au]44<o_u>2n%NMFG6.cpL<tpk&7ZX2#k@65=ZT#(<XoE[SPmT5;KR=P]IRjQDg7W]q@/G"MqA>]J<fO\&.*&m#-*.ImAg,FD,%4b*i4#WEVMW?FI`.Fk[%mFE%oe&ir,)9%>[qa9GXk/:aF`.9Q4D4mnRh_Pfkf`"(LeJMk$]?D[0ZU@V=Ih4GK5,hQ@DGtn<g"b[G6C=ON;mA*nHsDo!@0$'6q]"qj@iXWuu>mrg\MFU55N(J2hl/D0OF%3r@+:(M%Ei[u'S1%'*YIFYh1ZA4g\G6E(]`FhN)JCDa^55,&\@"V#OFjT^gN/eme(PDtWWh^IW<gW*3d.stVE45-Oq3n^:+jn@/C=m';"F7]bL]RWl1cb$#/&o.EraQ6Lm(YkI@!L.%nqTCiY_F`U4$1!2\Mj^gt^?7;e&mr3<Z$\#)6<EsSb)9*q(PZ:sa<K\TmeK1;&CU`;p#uA3/%'nXJpL,+s-N5==6`,I`cYO^eo=#7&BGU5%156l.)F?0b8&36\'<JGfeBHM$U#\%;*g8U=eQ+^"O71.#kS$li<=[oFsLFuaWB14q%.(U(oW/N"2jauU1K\=.ap+S1C/=8kKl"XpcSB.Lb<1;d7eeqcY50^Vd`([N*&++PZV1<[U$%7cdKf36<0?PHQ5BUm\($]6<F[7?&nf@*iJj6Bi4k=F]esUJQ&37d0\Sck!l9'h4ki'Lub#K8J[%4D*]TmdfuYa=hnVml=VLXR&2O6qq^Gr;@3&M@!^mAlVOmMhk1O^lFAQoZ)GK20V:]iE4c'WD=h8PU]poU/3G!#?;+g9+A8==CjFUc5aU,5/CGl.H_Rr,Jo.!t_lsr@!mlcASL3eVThuL<+'VC;CtadOAHHiAYh81,EX:;@Zo(1Fl.BH(CRS5,ch2YuoqDhVHC"bIF*afr1Q+**i3]WXiLK%MOk/sKV()Q/XKcK5O4MW.5GmZeQ6ekp@T&_EHL\J:rmB:YEuD'-dQ]9Ko9P.9`R)\q>@]'T-4pg&gPVgTOWif(7-i<m[aff<Shhc.g*5uaXR)Zj^(<(801*@n]IY;Q8DI?WjC)J"g*B/1J33an@ZOG,&AQ]pAm,"o!Hc!O;@A.p/YIaLQV,2u-)tX$[Q`u$FLFBuBN)r%mJZ?9m@7rXjX"\.jfRf5E$kO2$,POF\4TcHMA2n,YVtkA+D5m@kOp!HPP[>SpGfeV34nW=]B_GckGVgRFrWB,p)A.AEZ9.gnerguQ#cuZ:F8L2V,GT-I=@W+dIjRZeRgpEb5!L9b4uWY"&R,@Pmie7Wo(5*#UX3r7"0mUJqaTLT$@?$Jq4*OkAUX+Jq9[NT5Y[L$6#e#k0kPJPcKCeKuhB+_5a/:L2fu%/<?q@#%ftF8d;>JJ\h(m>fgARcnG\pRF*<RD5r2==coT(?r\m7\@.>Q)6=/KlqEEGW#,k-S;C+Y@.XT$:QEOeFZN<B.8-3f?]C9%'`a(<6=6ZsB.<LbVp@$>(#;Xrg*q$Im0[BkeOj@&qD<\RFBG\).@O%l*i6G*Bcbnt"^tUub/U+0K7,=P>@+B)A]4OpY*W*i]*PF5No/(.f^*e)B[reKH[r<`,oHQ2:X.N.Bs#gfQg<.;[]('pcg!IUn9JP*5$8qe_"mWtr4MQ9hH?+Y2R1I6M"(9j!#o92MurGt_FkVIAF8Kk[IW^jfICfX.b6!8'ja:jqBnA%&\0mEAjPRi<PdVdcSu@D'/3ork$<o&/JJ7\2Wu$[$3oZ;aN#RtT;nQ'k;-#P,0N2onU#-H4k*ZK'[Q5ukG\6I*g%uI6W1c<7"^;;heNhd0uCfmMQ%"@34,h$.J5ARm,f,oc*T*3%K<H8ci>84TS8hPQ3"H:lRWTJG#g8um6hh3T5WpEncD-fLF7JO_K.M+e]+sR43p[IDnsW//OZ(ApiT."FZK(G%M7hE9>3..c]H\sKYWhtfTl[Y<R>U7`ukiCLEI&X73D]`T##^:jFVp8+X1%23#Cd(e.ntkFCMH"8WVtYOnsiHM:>>K1e&H3)NgbhU><:q(3;cjJ1mP3nn9!8eREE`qhrJtD8(('aNNJ?Y,rP_Q"na;@+a"_Ib8"KfJs.eH+70P_NjXL7jgoE0[atJ7[dCd)MUt*DO#$\UC-(Y`=3;.DZ*_-\sfQ`j<d*%q?c33:1d[#FgSI`Ms-c"!e3q4$2MKN^infT<"0opb.6!SHS2s8:EH^Q)5&oI,7dKRZb+2$'Y@.f.5#fZ`Mpmk&?-B60X0!5AZQ=slTOK*bTtHW,dt>IZl$fQSn^s,e!:SORQU2aWh<c*\OeTfIFnXlMqf$DHCZg[g#TRQ2nA60fntK+q*RT?<r'Z5fAWQ#ED_C4>U8.c+t2*'"gGuS#ik2(a_3B;*[004!tE+rc\j4A,'e:a7+oN(e6&*mg%CU>'ZARTPNg@45:Am!d6@03>\<[E9dl4)@hk`_H!`B-8i>DlpDXt+a0;6KXLIC!^(uBjDRSBE:sGTX-T+(VOg+84CicBuck2J6*!VOD)Z_m.-oLl_$U&db6X)c;<2Ah20otbSj&mpCr#FP;U%KV`hql=22_f\:O726`_L6VI1Ck.:ClGLH9F5b1XL$!3h)B2_qZbO/#("*rlqB&^YckVZF,k*`=dY[bSV<Z^MfkmuB8IG6K:C!]@Q%POmj;]T$cdKS\\!eJna&u_aBm!!]c4qs\-9SBfXUAa<rD56ZTl3<eA*`kkY1<?(+bbohg^ZB4gci^9s;ht^Y!mUQ?X!;#F"+hHlGisBR1?LcNZ=AnBZ?8J9O5N+oDbg2`KU:jQ^X@rY&CrX0^"`Ej>?!,%1Sa8Bn250D1n56MLH94s>+,/Z`A"g/[>Q40QpB0BP!n.sn[GGWib]h^u"kfjHk$dIcjUL)0Nm/Vqs5\@lOXi`0WRrLI!95cYesO+&+H`i6,cPO-p^R&WNhq'N(fL,ocH75Whk7][`$3%o3^@0^Q7Q_DoDgTBelDn?BZ-c'4b//1^V2:s$U!0e258ngh.dZB][ZL-G;!-5dE<R11$c$WeH5^07m'jtDjjC=@f!EKmk>b<H!E$Va:ajB&A!d*S^ICXg(JT0c/jk2"]TdKd\I:8_@-9]nHB(3Ka7OHA6=</$$a)-Is6ppV6ndIZMrs<CoSs',d/Aq:cY2!#Qa^:3@W4\"'U7FBs\KdZo79:&Nk6_2ffr7n;qUMQD6X&';;p>nok2%OKFfHX3gY'4\E(96p^$nXg;H/NWB!nDrXS0c8fMVu6&\Jf^9kZ*^:u3QnC@rPao;FB;C=nYFNuGk\H/T_lO!#M?@>-6n9_-Q^'u')Dp2@+q!@e&&MbL>l@a:LUNmfrS>K:(^5Bhsf]d+on4W9GhJo9!,=e:)\WO\qH/W#Yk(+N#MlV]f9hr7sm@Q$,N%Nl:*8%G2^KAAs^_jlhD3#Us\iMERYGR-*h1ABd)Sg.2L3jHET[8,9i:%uiKHF6MVnd^j?=`7WDFu:,8F0V:4hjW;c7cV)79>8BELLt!PT*oe3N%cJ0\0jW;W>lDZ'R7*"bAB";-.C1H]V3L8'(j;Pc?IA=<ib'Un^OQ;Jpp/-B>le^7ZnYRZF9U$eR/=KCVrHV?=%E\rHM!HlhB`3R\,oU;0km]H$l_.hl1;0=^B?nHqg+N?`Wpg[3s2:$X@7,OIA,HAr:_bYNr#3]-mE3`q-19JuFhr_ljV-'3V#)M"uq"`-KFSA,f5g)su&FDB>S35ith^PIedsIg+:<em[p-Y^4r%i@GZM5B/eo^=s(GNIUrlNIUI6^#*[.R<+QNDiJ@1URAb[CFQS1^njE(4f6ooKKuI"n->2L?K_(XS\2m;IX-0"!!I%Ti%*5MCm*,`b=)0^?F&R:]37EGgQd06,AU72^?!Og=g@=2AY[ot)6t!fqQk,?9(pHVD1Nb>hX+5u)id^Aeadde.f,A,IRs1e,gEr`B%lCgC9pT4ck-C-qqY:Z7(>:pFP9hubS9t?YPnq'$?Ma~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1444
>>
stream
Gb!#[gN)%,&:N/3m$m*39EPE9nj@"o4&+P9j2=glU_e];A9^XA+\9SEhd,^qags<PV_]?Q/WdSHS3;37J2f7\E;)RK!.LKUq/77_&(<Q.^^FOr$Ql7@mj$\7MSKlk'LWL.+tj@X^j0U*c<Mqj(kE2`0hd-!I@.NhS>(!H][19mc-m*@=8/>i5!2LlV`4@BJ=l]moDKLYX$or8;bLCFa;QI=,35.a[=P\AFYsh0OK56>L$97EIt=rnW/13VIeKI1Hr%\>'C,N+Yo"Ipn&]0.3D`=&V:;CPj(hdJ\8Z\K6"_3j0?uTD5or<,"^Vg17o4oui:)e<]<r[)nJ70%563$?*hPiaQU(JEF,8h#E7bBSFMh@Sr>jFApc/C=N*>Rq"8`u-=QBi37IpW$S5%oCDC*M<=uV_JF_OA`++O:t93FQ0640^R[p3.<-tP([b1:75,aip\'aeOs@-B)@>,SpJV).3S;,<lm;Zr!"-SVIgWm[mKTCEJM1=L=#43XP(+ZjBHR*qL)at?\O09cVI`"k@n0QL?/E^>VXFEQlc/)/[+\[4,+/0Q]:4Y+%Qfae?KaCq*DiZ$Hg"-LMap\=X?$*_@#>BL)8ZE-m9[Qtt>h6^FSdNV,aXL(Rl;W]YP?[nZ<;G(g=UqBK6]SH>A/`g$k[OGBf8=49L(*+b8I:hMp5OW3^%cR*DI8uKUo3PlTLG`2X7kU,XDe\W-0bF3ldRUjt2:D6N4#4q^\j*2<$]aeHNFubB?UW.2]qV%ZHI5\_B:g-;#$Wu$>*'a\aJ-gSR^n)_hR"84h$h_9B\P!*WC3V_dLnX=@qhdAPI,[`PtPnt]P4EfNRKE<`l&_U?-$8_H7^L4IW]^U`YfQ6C$<978>C#@TI:8HjJGh"Mm@>F:j!9b6`T<Q)$45T=GtTdVPCNCHoJ<qWbg:IGLA;tG6f!bfdu[jYq4$$<R8%kF3'X>L92ElS5#.lF:BrDH_-!QTGS$4F5#Z2=p:]/9YddDC_t]?Q)X,KhnHY/;b`ajHUZC6&)P'Vb6D","%VsR;Fms=5jQF<IBsPZ5kT#6Q!0sM*PHW(>,kFt,utJeVemDQmm^Zk%=WD+qD\6:fusE2^Sbt)IJ>em6MN8j30".V&;nC6'0KIg.>P+P^c()VXk.CV\)FS2k0'H^,`78qHk@A]d\>)1*+!c;8=1466*ftYi:lu$l]+dcD6?IPl^PcBr52$5,[rD5=`F-ao_lVb'h;[8ijEt<3oi-cS_1fk=,\C1%\DuK$/0.-Bh>k0irupN<)n&k^n'"9O2U!m"_rQX@IU_e?/7cWk$[n"3"E>!*M@1"j3pf3`8J,>,mH/d2pB1W?l!2+dR**TTedd...0R`5s9sdal)[Gl>a/BFt3$TC>'3Sp.qT.0APl_]DkHR%T49AR$RsT%`N4=KF\Qrrc-jK0#of-58KVGa4jnjJg_K7%CJl`l2~>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
0000005900 00000 n
trailer
<<
/ID
[<5f966b9fccc853292c327990e310f686><5f966b9fccc853292c327990e310f686>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 12
>>
startxref
7436
%%EOF