From 8c5ec73ac55f2fc61447f2802fcfdcee9997874b Mon Sep 17 00:00:00 2001 From: fravetier Date: Wed, 16 Oct 2024 20:27:22 +0200 Subject: [PATCH 1/4] Allow EDI file to have something before UNA or UNB. It can happens with files generated by the software SAGE COALA. Added a unit test with a file --- pydifact/parser.py | 10 +++++---- tests/data/sage_coala.ped | 1 + tests/test_sage_coala.py | 47 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 tests/data/sage_coala.ped create mode 100644 tests/test_sage_coala.py diff --git a/pydifact/parser.py b/pydifact/parser.py index f1c7c93..fddcc70 100644 --- a/pydifact/parser.py +++ b/pydifact/parser.py @@ -52,13 +52,15 @@ def parse( # If there is a UNA, take the following 6 characters # unconditionally, strip them, and make control Characters() # for further parsing - una_found = message[0:3] == "UNA" + idx_una = message.find("UNA") + una_found = idx_una != -1 if una_found: - characters = Characters.from_str("UNA" + message[3:9]) + characters = Characters.from_str("UNA" + message[idx_una + 3 : idx_una + 9]) - # remove the UNA segment from the string - message = message[9:].lstrip("\r\n") + # remove the UNA segment from the string, + # ignore everything before UNA because it should be the first segment if una_found. + message = message[idx_una + 9 :].lstrip("\r\n") else: # if no UNA header present, use default control characters diff --git a/tests/data/sage_coala.ped b/tests/data/sage_coala.ped new file mode 100644 index 0000000..db0d22c --- /dev/null +++ b/tests/data/sage_coala.ped @@ -0,0 +1 @@ +DOC+01=serveur\grps\dossiers\BLABLApatr+02=9215001+03=04/07/2024+04=FD2401+05=24+06=DGFiP+07=EDITDFC+08=32489+09=99999999800028+10=BLABLApatr+11=BLABLA PATRIMOINE+12=99999999900017++14=FR96999999999+15=corinne+16=isrn+17=01/01/2023+18=31/12/2023+19=240315+++++24=103200+25=JDC+26=contact@BLABLADEXPERT.com+27=++29=++++++35={55D57981-DA87-426D-911E-464844992C9C}'UNA:+,? 'UNB+UNOL:3+99999999800028:5:I+9215001:146+240704:1032+20241861032cor+++++TDT-PED-IN-TD2401'UNG+INFENT+NON_SECURISE_NON_SIGNE+MULTI_DISTRIBUTION+240704:1032+1+UN+D:00B:FD2401'UNH+00001+INFENT:D:00B:UN:FD2401'BGM+IDF:71:211+INFENT BLABLApatr BI RN IS'DTM+242:20240704:102'RFF+AUM:SAGE Experts Comptables'RFF+AUN:COALA EXPORT EDI::1.0:240315'RFF+AUO:2012.01.0310'NAD+DT+999999999:100:107++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'RFF+AWR:20241861032cor'RFF+ACD:IS1'NAD+FR+99999999800028:100:107++CEC_EDI_TDFC:BLABLADEXPERT::::3+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE SAGE COALA'NAD+MS+99999999800028:100:107++BLABLADEXPERT+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE'NAD+MR+9215001:100:268++SAGE+0000 10 traoe de transpor+La petropa taratata++92250'RFF+CU:BLABLApatr BLABLA PATRIMOINE'NAD+HP+++DGI_EDI_TDFC:::::3'SEQ++1'IND++F-IDENTIF 2400000000AANAD'NAD+ZZZ+999999999:100:ZZZ++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'SEQ++2'IND++F-IDENTIF 2400000000ABRFF'RFF+ZZZ:7022Z'SEQ++3'IND++F-IDENTIF 2400000000BACCI'CCI+++TCF:LIS:211'CAV+BI:TCF:211'SEQ++4'IND++F-IDENTIF 2400000000BBCCI'CCI+++TRF:LIS:211'CAV+RN:TRF:211'SEQ++5'IND++F-IDENTIF 2400000000BCCCI'CCI+++TBS:LIS:211'CAV+IS:TBS:211'SEQ++6'IND++F-IDENTIF 2400000000BFCCI'CCI+++TDP:LIS:211'CAV+NOR:TDP:211'SEQ++7'IND++F-IDENTIF 2400000000CADTM'DTM+ZZZ:20230101:102'SEQ++8'IND++F-IDENTIF 2400000000CBDTM'DTM+ZZZ:20231231:102'SEQ++9'IND++F-IDENTIF 2400000000CCDTM'DTM+ZZZ:12:802'SEQ++10'IND++F-IDENTIF 2400000000CDDTM'DTM+ZZZ:20221231:102'SEQ++11'IND++F-IDENTIF 2400000000CEDTM'DTM+ZZZ:12:802'SEQ++12'IND++F-IDENTIF 2400000000DACUX'CUX+3:EUR'SEQ++13'IND++F-IDENTIF 2400000000KDRFF'RFF+ZZZ:IS1'SEQ++14'IND++2050 2400000000ATMOA'MOA+ZZZ:1387'SEQ++15'IND++2050 2400000000AUMOA'MOA+ZZZ:870'SEQ++16'IND++2050 2400000000BJMOA'MOA+ZZZ:265563'SEQ++17'IND++2050 2400000000BKMOA'MOA+ZZZ:870'SEQ++18'IND++2050 2400000000BXMOA'MOA+ZZZ:85899'SEQ++19'IND++2050 2400000000CFMOA'MOA+ZZZ:18439'SEQ++20'IND++2050 2400000000CJMOA'MOA+ZZZ:104338'SEQ++21'IND++2050 2400000000COMOA'MOA+ZZZ:369901'SEQ++22'IND++2050 2400000000CUMOA'MOA+ZZZ:264176'SEQ++23'IND++2050 2400000000DSMOA'MOA+ZZZ:517'SEQ++24'IND++2050 2400000000DWMOA'MOA+ZZZ:264176'SEQ++25'IND++2050 2400000000EBMOA'MOA+ZZZ:264693'SEQ++26'IND++2050 2400000000EJMOA'MOA+ZZZ:85899'SEQ++27'IND++2050 2400000000ENMOA'MOA+ZZZ:18439'SEQ++28'IND++2050 2400000000EQMOA'MOA+ZZZ:104338'SEQ++29'IND++2050 2400000000GHMOA'MOA+ZZZ:870'SEQ++30'IND++2050 2400000000GJMOA'MOA+ZZZ:369031'SEQ++31'IND++2051 2400000000DAMOA'MOA+ZZZ:1000'SEQ++32'IND++2051 2400000000DDMOA'MOA+ZZZ:100'SEQ++33'IND++2051 2400000000DGMOA'MOA+ZZZ:31367'SEQ++34'IND++2051 2400000000DIMOA'MOA+ZZZ:231509'SEQ++35'IND++2051 2400000000DLMOA'MOA+ZZZ:263976'SEQ++36'IND++2051 2400000000DVMOA'MOA+ZZZ:72970'SEQ++37'IND++2051 2400000000DXMOA'MOA+ZZZ:4046'SEQ++38'IND++2051 2400000000DYMOA'MOA+ZZZ:28040'SEQ++39'IND++2051 2400000000ECMOA'MOA+ZZZ:105056'SEQ++40'IND++2051 2400000000EEMOA'MOA+ZZZ:369031'SEQ++41'IND++2051 2400000000EGMOA'MOA+ZZZ:105056'SEQ++42'IND++2051 2400000000FAMOA'MOA+ZZZ:1000'SEQ++43'IND++2052 2400000000FGMOA'MOA+ZZZ:111403'SEQ++44'IND++2052 2400000000FHMOA'MOA+ZZZ:85399'SEQ++45'IND++2052 2400000000FIMOA'MOA+ZZZ:196801'SEQ++46'IND++2052 2400000000FJMOA'MOA+ZZZ:111403'SEQ++47'IND++2052 2400000000FKMOA'MOA+ZZZ:85399'SEQ++48'IND++2052 2400000000FLMOA'MOA+ZZZ:196801'SEQ++49'IND++2052 2400000000FQMOA'MOA+ZZZ:157'SEQ++50'IND++2052 2400000000FRMOA'MOA+ZZZ:196959'SEQ++51'IND++2052 2400000000FWMOA'MOA+ZZZ:43075'SEQ++52'IND++2052 2400000000FXMOA'MOA+ZZZ:78'SEQ++53'IND++2052 2400000000FZMOA'MOA+ZZZ:22'SEQ++54'IND++2052 2400000000GAMOA'MOA+ZZZ:552'SEQ++55'IND++2052 2400000000GEMOA'MOA+ZZZ:203'SEQ++56'IND++2052 2400000000GFMOA'MOA+ZZZ:43930'SEQ++57'IND++2052 2400000000GGMOA'MOA+ZZZ:153029'SEQ++58'IND++2052 2400000000GJMOA'MOA+ZZZ:109756'SEQ++59'IND++2052 2400000000GPMOA'MOA+ZZZ:109756'SEQ++60'IND++2052 2400000000GVMOA'MOA+ZZZ:109756'SEQ++61'IND++2052 2400000000GWMOA'MOA+ZZZ:262784'SEQ++62'IND++2053 2400000000HEMOA'MOA+ZZZ:460'SEQ++63'IND++2053 2400000000HHMOA'MOA+ZZZ:460'SEQ++64'IND++2053 2400000000HIMOA'MOA+ZZZ:460:::65'SEQ++65'IND++2053 2400000000HKMOA'MOA+ZZZ:30816'SEQ++66'IND++2053 2400000000HLMOA'MOA+ZZZ:306714'SEQ++67'IND++2053 2400000000HMMOA'MOA+ZZZ:75205'SEQ++68'IND++2053 2400000000HNMOA'MOA+ZZZ:231509'SEQ++69'IND++2053 2400000000LLMOA'MOA+ZZZ:120'SEQ++70'IND++2053 2400000001MAFTX'FTX+ZZZ+++Charges non d�ductibles'SEQ++71'IND++2053 2400000001NAMOA'MOA+ZZZ:459'SEQ++72'IND++2054 2400000000LBMOA'MOA+ZZZ:1387'SEQ++73'IND++2054 2400000000LNMOA'MOA+ZZZ:1387'SEQ++74'IND++2054 2400000000LQMOA'MOA+ZZZ:264176'SEQ++75'IND++2054 2400000000MTMOA'MOA+ZZZ:1387'SEQ++76'IND++2054 2400000000MUMOA'MOA+ZZZ:1387'SEQ++77'IND++2054 2400000000NHMOA'MOA+ZZZ:1387'SEQ++78'IND++2054 2400000000NIMOA'MOA+ZZZ:1387'SEQ++79'IND++2054 2400000000NKMOA'MOA+ZZZ:264176'SEQ++80'IND++2054 2400000000PDMOA'MOA+ZZZ:264176'SEQ++81'IND++2054 2400000000PNMOA'MOA+ZZZ:265563'SEQ++82'IND++2054 2400000000QWMOA'MOA+ZZZ:264176'SEQ++83'IND++2054 2400000000QXMOA'MOA+ZZZ:264176'SEQ++84'IND++2054 2400000000RHMOA'MOA+ZZZ:264176'SEQ++85'IND++2054 2400000000RLMOA'MOA+ZZZ:265563'SEQ++86'IND++2054 2400000000RMMOA'MOA+ZZZ:265563'SEQ++87'IND++2054BIS 2400000000HDCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++88'IND++2055 2400000000QLMOA'MOA+ZZZ:317'SEQ++89'IND++2055 2400000000QMMOA'MOA+ZZZ:552'SEQ++90'IND++2055 2400000000QOMOA'MOA+ZZZ:870'SEQ++91'IND++2055 2400000000QUMOA'MOA+ZZZ:317'SEQ++92'IND++2055 2400000000QVMOA'MOA+ZZZ:552'SEQ++93'IND++2055 2400000000QXMOA'MOA+ZZZ:870'SEQ++94'IND++2055 2400000000TAMOA'MOA+ZZZ:317'SEQ++95'IND++2055 2400000000TBMOA'MOA+ZZZ:552'SEQ++96'IND++2055 2400000000TDMOA'MOA+ZZZ:870'SEQ++97'IND++2056 2400000000ZECCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++98'IND++2057 2400000000UXMOA'MOA+ZZZ:85899'SEQ++99'IND++2057 2400000000VIMOA'MOA+ZZZ:72970'SEQ++100'IND++2057 2400000000VTMOA'MOA+ZZZ:85899'SEQ++101'IND++2057 2400000000VUMOA'MOA+ZZZ:85899'SEQ++102'IND++2057 2400000000VYMOA'MOA+ZZZ:105056'SEQ++103'IND++2057 2400000000VZMOA'MOA+ZZZ:105056'SEQ++104'IND++2057 2400000000WBMOA'MOA+ZZZ:85899'SEQ++105'IND++2057 2400000000XDMOA'MOA+ZZZ:4046'SEQ++106'IND++2057 2400000000XGMOA'MOA+ZZZ:28040'SEQ++107'IND++2057 2400000000XRMOA'MOA+ZZZ:4046'SEQ++108'IND++2057 2400000000XUMOA'MOA+ZZZ:28040'SEQ++109'IND++2057 2400000000YAMOA'MOA+ZZZ:72970'SEQ++110'IND++2058A 2400000000AEMOA'MOA+ZZZ:5488'SEQ++111'IND++2058A 2400000001BCFTX'FTX+ZZZ+++Quote part frais & charges 5%'SEQ++112'IND++2058A 2400000002BCFTX'FTX+ZZZ+++Charges non d�ductibles'SEQ++113'IND++2058A 2400000003BCFTX'FTX+ZZZ+++Dons'SEQ++114'IND++2058A 2400000001BDMOA'MOA+ZZZ:5488'SEQ++115'IND++2058A 2400000002BDMOA'MOA+ZZZ:459'SEQ++116'IND++2058A 2400000003BDMOA'MOA+ZZZ:3520'SEQ++117'IND++2058A 2400000000VGMOA'MOA+ZZZ:30816'SEQ++118'IND++2058A 2400000000WAMOA'MOA+ZZZ:231509'SEQ++119'IND++2058A 2400000000WQMOA'MOA+ZZZ:9467'SEQ++120'IND++2058A 2400000000WRMOA'MOA+ZZZ:271792'SEQ++121'IND++2058A 2400000000XAMOA'MOA+ZZZ:109756'SEQ++122'IND++2058A 2400000000XHMOA'MOA+ZZZ:109756'SEQ++123'IND++2058A 2400000000XIMOA'MOA+ZZZ:162036'SEQ++124'IND++2058A 2400000000XNMOA'MOA+ZZZ:162036'SEQ++125'IND++2058B 2400000000ZXCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++126'IND++2058C 2400000000ABMOA'MOA+ZZZ:31467'SEQ++127'IND++2058C 2400000000ALMOA'MOA+ZZZ:31467'SEQ++128'IND++2058C 2400000000SSMOA'MOA+ZZZ:5523'SEQ++129'IND++2058C 2400000000STMOA'MOA+ZZZ:33811'SEQ++130'IND++2058C 2400000000XQMOA'MOA+ZZZ:3742'SEQ++131'IND++2058C 2400000000YWMOA'MOA+ZZZ:78'SEQ++132'IND++2058C 2400000000YXMOA'MOA+ZZZ:78'SEQ++133'IND++2058C 2400000000ZGMOA'MOA+ZZZ:31467'SEQ++134'IND++2058C 2400000000ZHMOA'MOA+ZZZ:31467'SEQ++135'IND++2058C 2400000000ZJMOA'MOA+ZZZ:43075'SEQ++136'IND++2058C 2400000000ZRCCI'CCI+++T01:LIS:211'CAV+0:T01:211'SEQ++137'IND++2059A 2400000000GMCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++138'IND++2059B 2400000000NBCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++139'IND++2059C 2400000000XMCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++140'IND++2059D 2400000000KFCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++141'IND++2059E 2400000000DBCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++142'IND++2059F 2400000001BANAD'NAD+ZZZ+++grobi blerot:NS:M+0000 55 Boulevard grbbaf:FRANCE+Bibor++75016'SEQ++143'IND++2059F 2400000001BDQTY'QTY+ZZZ:1000'SEQ++144'IND++2059F 2400000001BEDTM'DTM+ZZZ:19730622:102'SEQ++145'IND++2059F 2400000001BGNAD'NAD+ZZZ+++++Bibor++75016+FR'SEQ++146'IND++2059F 2400000001BRPCD'PCD+ZZZ:100,00'SEQ++147'IND++2059F 2400000000GVQTY'QTY+ZZZ:1'SEQ++148'IND++2059F 2400000000GWQTY'QTY+ZZZ:1000'SEQ++149'IND++2059G 2400000000GSCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++150'IND++2065 2400000000AHCCI'CCI+++TON:LIS:211'CAV+OUI:TON:211'SEQ++151'IND++2065 2400000000AJFTX'FTX+ZZZ+++SAGE GENERATION EXPERT'SEQ++152'IND++2065 2400000000AQFTX'FTX+ZZZ+++Conseil pour les affaires et autres conseils de gestion'SEQ++153'IND++2065 2400000000BFMOA'MOA+ZZZ:3331'SEQ++154'IND++2065 2400000000CANAD'NAD+ZZZ+++BLABLADEXPERT+0000 323, rue Saint-Martin+ Bibor++75003'CTA+ZZZ+:BLABLADEXPERT'COM+0140411003:TE'SEQ++155'IND++2065 2400000000HAMOA'MOA+ZZZ:119536'SEQ++156'IND++2065 2400000000LCMOA'MOA+ZZZ:42500'SEQ++157'IND++2065BIS 2400000001CANAD'NAD+ZZZ+++blerot grobi+0000 55 Boulevard grbbaf+ Bibor++75016'SEQ++158'IND++2065BIS 2400000001CGQTY'QTY+ZZZ:1000'SEQ++159'IND++2067 2400000000NAMOA'MOA+ZZZ:7204'SEQ++160'IND++2067 2400000000NBMOA'MOA+ZZZ:12477'SEQ++161'IND++2067 2400000000NCMOA'MOA+ZZZ:19681'SEQ++162'IND++2067 2400000000PAMOA'MOA+ZZZ:19681'SEQ++163'IND++2067 2400000000PBMOA'MOA+ZZZ:12248'SEQ++164'IND++2067 2400000000PCMOA'MOA+ZZZ:162036'SEQ++165'IND++2067 2400000000PDMOA'MOA+ZZZ:37020'SEQ++166'IND++2067 2400000000QADTM'DTM+ZZZ:20240704:102'SEQ++167'IND++2067 2400000000QBNAD'NAD+ZZZ+++BLABLA PATRIMOINE:Pr�sident++Bibor'SEQ++168'IND++2069RCI 2400010001BACCI'CCI+++CR5:LIS:211'CAV+MEC:CR5:211'SEQ++169'IND++2069RCI 2400010001BBMOA'MOA+ZZZ:2112'UNT+542+00001'UNE+1+1'UNZ+1+20241861032cor' diff --git a/tests/test_sage_coala.py b/tests/test_sage_coala.py new file mode 100644 index 0000000..daddc41 --- /dev/null +++ b/tests/test_sage_coala.py @@ -0,0 +1,47 @@ +# pydifact - a python edifact library +# Copyright (C) 2017-2024 Christian González +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +import os +from pydifact.segmentcollection import Interchange +from pydifact.segments import Segment + + +path = os.path.dirname(os.path.realpath(__file__)) + "/data" + + +def test_sage_coala_file(): + """test parsing a file generated by SAGE COALA""" + interchange = Interchange.from_file("{}/sage_coala.ped".format(path)) + assert interchange + assert interchange.get_header_segment() == Segment( + "UNB", + ["UNOL", "3"], + ["99999999800028", "5", "I"], + ["9215001", "146"], + ["240704", "1032"], + "20241861032cor", + "", + "", + "", + "", + "TDT-PED-IN-TD2401", + ) + assert interchange.get_segment("RFF") == Segment( + "RFF", ["AUM", "SAGE Experts Comptables"] + ) + + +if __name__ == "__main__": + test_sage_coala_file() From fd4c5044f897b8f551a4cd692707c13675a73c54 Mon Sep 17 00:00:00 2001 From: fravetier Date: Fri, 18 Oct 2024 08:54:29 +0200 Subject: [PATCH 2/4] Reduce the size file of sage_coala.ped --- tests/data/sage_coala.ped | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/sage_coala.ped b/tests/data/sage_coala.ped index db0d22c..e92f70a 100644 --- a/tests/data/sage_coala.ped +++ b/tests/data/sage_coala.ped @@ -1 +1 @@ -DOC+01=serveur\grps\dossiers\BLABLApatr+02=9215001+03=04/07/2024+04=FD2401+05=24+06=DGFiP+07=EDITDFC+08=32489+09=99999999800028+10=BLABLApatr+11=BLABLA PATRIMOINE+12=99999999900017++14=FR96999999999+15=corinne+16=isrn+17=01/01/2023+18=31/12/2023+19=240315+++++24=103200+25=JDC+26=contact@BLABLADEXPERT.com+27=++29=++++++35={55D57981-DA87-426D-911E-464844992C9C}'UNA:+,? 'UNB+UNOL:3+99999999800028:5:I+9215001:146+240704:1032+20241861032cor+++++TDT-PED-IN-TD2401'UNG+INFENT+NON_SECURISE_NON_SIGNE+MULTI_DISTRIBUTION+240704:1032+1+UN+D:00B:FD2401'UNH+00001+INFENT:D:00B:UN:FD2401'BGM+IDF:71:211+INFENT BLABLApatr BI RN IS'DTM+242:20240704:102'RFF+AUM:SAGE Experts Comptables'RFF+AUN:COALA EXPORT EDI::1.0:240315'RFF+AUO:2012.01.0310'NAD+DT+999999999:100:107++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'RFF+AWR:20241861032cor'RFF+ACD:IS1'NAD+FR+99999999800028:100:107++CEC_EDI_TDFC:BLABLADEXPERT::::3+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE SAGE COALA'NAD+MS+99999999800028:100:107++BLABLADEXPERT+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE'NAD+MR+9215001:100:268++SAGE+0000 10 traoe de transpor+La petropa taratata++92250'RFF+CU:BLABLApatr BLABLA PATRIMOINE'NAD+HP+++DGI_EDI_TDFC:::::3'SEQ++1'IND++F-IDENTIF 2400000000AANAD'NAD+ZZZ+999999999:100:ZZZ++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'SEQ++2'IND++F-IDENTIF 2400000000ABRFF'RFF+ZZZ:7022Z'SEQ++3'IND++F-IDENTIF 2400000000BACCI'CCI+++TCF:LIS:211'CAV+BI:TCF:211'SEQ++4'IND++F-IDENTIF 2400000000BBCCI'CCI+++TRF:LIS:211'CAV+RN:TRF:211'SEQ++5'IND++F-IDENTIF 2400000000BCCCI'CCI+++TBS:LIS:211'CAV+IS:TBS:211'SEQ++6'IND++F-IDENTIF 2400000000BFCCI'CCI+++TDP:LIS:211'CAV+NOR:TDP:211'SEQ++7'IND++F-IDENTIF 2400000000CADTM'DTM+ZZZ:20230101:102'SEQ++8'IND++F-IDENTIF 2400000000CBDTM'DTM+ZZZ:20231231:102'SEQ++9'IND++F-IDENTIF 2400000000CCDTM'DTM+ZZZ:12:802'SEQ++10'IND++F-IDENTIF 2400000000CDDTM'DTM+ZZZ:20221231:102'SEQ++11'IND++F-IDENTIF 2400000000CEDTM'DTM+ZZZ:12:802'SEQ++12'IND++F-IDENTIF 2400000000DACUX'CUX+3:EUR'SEQ++13'IND++F-IDENTIF 2400000000KDRFF'RFF+ZZZ:IS1'SEQ++14'IND++2050 2400000000ATMOA'MOA+ZZZ:1387'SEQ++15'IND++2050 2400000000AUMOA'MOA+ZZZ:870'SEQ++16'IND++2050 2400000000BJMOA'MOA+ZZZ:265563'SEQ++17'IND++2050 2400000000BKMOA'MOA+ZZZ:870'SEQ++18'IND++2050 2400000000BXMOA'MOA+ZZZ:85899'SEQ++19'IND++2050 2400000000CFMOA'MOA+ZZZ:18439'SEQ++20'IND++2050 2400000000CJMOA'MOA+ZZZ:104338'SEQ++21'IND++2050 2400000000COMOA'MOA+ZZZ:369901'SEQ++22'IND++2050 2400000000CUMOA'MOA+ZZZ:264176'SEQ++23'IND++2050 2400000000DSMOA'MOA+ZZZ:517'SEQ++24'IND++2050 2400000000DWMOA'MOA+ZZZ:264176'SEQ++25'IND++2050 2400000000EBMOA'MOA+ZZZ:264693'SEQ++26'IND++2050 2400000000EJMOA'MOA+ZZZ:85899'SEQ++27'IND++2050 2400000000ENMOA'MOA+ZZZ:18439'SEQ++28'IND++2050 2400000000EQMOA'MOA+ZZZ:104338'SEQ++29'IND++2050 2400000000GHMOA'MOA+ZZZ:870'SEQ++30'IND++2050 2400000000GJMOA'MOA+ZZZ:369031'SEQ++31'IND++2051 2400000000DAMOA'MOA+ZZZ:1000'SEQ++32'IND++2051 2400000000DDMOA'MOA+ZZZ:100'SEQ++33'IND++2051 2400000000DGMOA'MOA+ZZZ:31367'SEQ++34'IND++2051 2400000000DIMOA'MOA+ZZZ:231509'SEQ++35'IND++2051 2400000000DLMOA'MOA+ZZZ:263976'SEQ++36'IND++2051 2400000000DVMOA'MOA+ZZZ:72970'SEQ++37'IND++2051 2400000000DXMOA'MOA+ZZZ:4046'SEQ++38'IND++2051 2400000000DYMOA'MOA+ZZZ:28040'SEQ++39'IND++2051 2400000000ECMOA'MOA+ZZZ:105056'SEQ++40'IND++2051 2400000000EEMOA'MOA+ZZZ:369031'SEQ++41'IND++2051 2400000000EGMOA'MOA+ZZZ:105056'SEQ++42'IND++2051 2400000000FAMOA'MOA+ZZZ:1000'SEQ++43'IND++2052 2400000000FGMOA'MOA+ZZZ:111403'SEQ++44'IND++2052 2400000000FHMOA'MOA+ZZZ:85399'SEQ++45'IND++2052 2400000000FIMOA'MOA+ZZZ:196801'SEQ++46'IND++2052 2400000000FJMOA'MOA+ZZZ:111403'SEQ++47'IND++2052 2400000000FKMOA'MOA+ZZZ:85399'SEQ++48'IND++2052 2400000000FLMOA'MOA+ZZZ:196801'SEQ++49'IND++2052 2400000000FQMOA'MOA+ZZZ:157'SEQ++50'IND++2052 2400000000FRMOA'MOA+ZZZ:196959'SEQ++51'IND++2052 2400000000FWMOA'MOA+ZZZ:43075'SEQ++52'IND++2052 2400000000FXMOA'MOA+ZZZ:78'SEQ++53'IND++2052 2400000000FZMOA'MOA+ZZZ:22'SEQ++54'IND++2052 2400000000GAMOA'MOA+ZZZ:552'SEQ++55'IND++2052 2400000000GEMOA'MOA+ZZZ:203'SEQ++56'IND++2052 2400000000GFMOA'MOA+ZZZ:43930'SEQ++57'IND++2052 2400000000GGMOA'MOA+ZZZ:153029'SEQ++58'IND++2052 2400000000GJMOA'MOA+ZZZ:109756'SEQ++59'IND++2052 2400000000GPMOA'MOA+ZZZ:109756'SEQ++60'IND++2052 2400000000GVMOA'MOA+ZZZ:109756'SEQ++61'IND++2052 2400000000GWMOA'MOA+ZZZ:262784'SEQ++62'IND++2053 2400000000HEMOA'MOA+ZZZ:460'SEQ++63'IND++2053 2400000000HHMOA'MOA+ZZZ:460'SEQ++64'IND++2053 2400000000HIMOA'MOA+ZZZ:460:::65'SEQ++65'IND++2053 2400000000HKMOA'MOA+ZZZ:30816'SEQ++66'IND++2053 2400000000HLMOA'MOA+ZZZ:306714'SEQ++67'IND++2053 2400000000HMMOA'MOA+ZZZ:75205'SEQ++68'IND++2053 2400000000HNMOA'MOA+ZZZ:231509'SEQ++69'IND++2053 2400000000LLMOA'MOA+ZZZ:120'SEQ++70'IND++2053 2400000001MAFTX'FTX+ZZZ+++Charges non d�ductibles'SEQ++71'IND++2053 2400000001NAMOA'MOA+ZZZ:459'SEQ++72'IND++2054 2400000000LBMOA'MOA+ZZZ:1387'SEQ++73'IND++2054 2400000000LNMOA'MOA+ZZZ:1387'SEQ++74'IND++2054 2400000000LQMOA'MOA+ZZZ:264176'SEQ++75'IND++2054 2400000000MTMOA'MOA+ZZZ:1387'SEQ++76'IND++2054 2400000000MUMOA'MOA+ZZZ:1387'SEQ++77'IND++2054 2400000000NHMOA'MOA+ZZZ:1387'SEQ++78'IND++2054 2400000000NIMOA'MOA+ZZZ:1387'SEQ++79'IND++2054 2400000000NKMOA'MOA+ZZZ:264176'SEQ++80'IND++2054 2400000000PDMOA'MOA+ZZZ:264176'SEQ++81'IND++2054 2400000000PNMOA'MOA+ZZZ:265563'SEQ++82'IND++2054 2400000000QWMOA'MOA+ZZZ:264176'SEQ++83'IND++2054 2400000000QXMOA'MOA+ZZZ:264176'SEQ++84'IND++2054 2400000000RHMOA'MOA+ZZZ:264176'SEQ++85'IND++2054 2400000000RLMOA'MOA+ZZZ:265563'SEQ++86'IND++2054 2400000000RMMOA'MOA+ZZZ:265563'SEQ++87'IND++2054BIS 2400000000HDCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++88'IND++2055 2400000000QLMOA'MOA+ZZZ:317'SEQ++89'IND++2055 2400000000QMMOA'MOA+ZZZ:552'SEQ++90'IND++2055 2400000000QOMOA'MOA+ZZZ:870'SEQ++91'IND++2055 2400000000QUMOA'MOA+ZZZ:317'SEQ++92'IND++2055 2400000000QVMOA'MOA+ZZZ:552'SEQ++93'IND++2055 2400000000QXMOA'MOA+ZZZ:870'SEQ++94'IND++2055 2400000000TAMOA'MOA+ZZZ:317'SEQ++95'IND++2055 2400000000TBMOA'MOA+ZZZ:552'SEQ++96'IND++2055 2400000000TDMOA'MOA+ZZZ:870'SEQ++97'IND++2056 2400000000ZECCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++98'IND++2057 2400000000UXMOA'MOA+ZZZ:85899'SEQ++99'IND++2057 2400000000VIMOA'MOA+ZZZ:72970'SEQ++100'IND++2057 2400000000VTMOA'MOA+ZZZ:85899'SEQ++101'IND++2057 2400000000VUMOA'MOA+ZZZ:85899'SEQ++102'IND++2057 2400000000VYMOA'MOA+ZZZ:105056'SEQ++103'IND++2057 2400000000VZMOA'MOA+ZZZ:105056'SEQ++104'IND++2057 2400000000WBMOA'MOA+ZZZ:85899'SEQ++105'IND++2057 2400000000XDMOA'MOA+ZZZ:4046'SEQ++106'IND++2057 2400000000XGMOA'MOA+ZZZ:28040'SEQ++107'IND++2057 2400000000XRMOA'MOA+ZZZ:4046'SEQ++108'IND++2057 2400000000XUMOA'MOA+ZZZ:28040'SEQ++109'IND++2057 2400000000YAMOA'MOA+ZZZ:72970'SEQ++110'IND++2058A 2400000000AEMOA'MOA+ZZZ:5488'SEQ++111'IND++2058A 2400000001BCFTX'FTX+ZZZ+++Quote part frais & charges 5%'SEQ++112'IND++2058A 2400000002BCFTX'FTX+ZZZ+++Charges non d�ductibles'SEQ++113'IND++2058A 2400000003BCFTX'FTX+ZZZ+++Dons'SEQ++114'IND++2058A 2400000001BDMOA'MOA+ZZZ:5488'SEQ++115'IND++2058A 2400000002BDMOA'MOA+ZZZ:459'SEQ++116'IND++2058A 2400000003BDMOA'MOA+ZZZ:3520'SEQ++117'IND++2058A 2400000000VGMOA'MOA+ZZZ:30816'SEQ++118'IND++2058A 2400000000WAMOA'MOA+ZZZ:231509'SEQ++119'IND++2058A 2400000000WQMOA'MOA+ZZZ:9467'SEQ++120'IND++2058A 2400000000WRMOA'MOA+ZZZ:271792'SEQ++121'IND++2058A 2400000000XAMOA'MOA+ZZZ:109756'SEQ++122'IND++2058A 2400000000XHMOA'MOA+ZZZ:109756'SEQ++123'IND++2058A 2400000000XIMOA'MOA+ZZZ:162036'SEQ++124'IND++2058A 2400000000XNMOA'MOA+ZZZ:162036'SEQ++125'IND++2058B 2400000000ZXCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++126'IND++2058C 2400000000ABMOA'MOA+ZZZ:31467'SEQ++127'IND++2058C 2400000000ALMOA'MOA+ZZZ:31467'SEQ++128'IND++2058C 2400000000SSMOA'MOA+ZZZ:5523'SEQ++129'IND++2058C 2400000000STMOA'MOA+ZZZ:33811'SEQ++130'IND++2058C 2400000000XQMOA'MOA+ZZZ:3742'SEQ++131'IND++2058C 2400000000YWMOA'MOA+ZZZ:78'SEQ++132'IND++2058C 2400000000YXMOA'MOA+ZZZ:78'SEQ++133'IND++2058C 2400000000ZGMOA'MOA+ZZZ:31467'SEQ++134'IND++2058C 2400000000ZHMOA'MOA+ZZZ:31467'SEQ++135'IND++2058C 2400000000ZJMOA'MOA+ZZZ:43075'SEQ++136'IND++2058C 2400000000ZRCCI'CCI+++T01:LIS:211'CAV+0:T01:211'SEQ++137'IND++2059A 2400000000GMCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++138'IND++2059B 2400000000NBCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++139'IND++2059C 2400000000XMCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++140'IND++2059D 2400000000KFCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++141'IND++2059E 2400000000DBCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++142'IND++2059F 2400000001BANAD'NAD+ZZZ+++grobi blerot:NS:M+0000 55 Boulevard grbbaf:FRANCE+Bibor++75016'SEQ++143'IND++2059F 2400000001BDQTY'QTY+ZZZ:1000'SEQ++144'IND++2059F 2400000001BEDTM'DTM+ZZZ:19730622:102'SEQ++145'IND++2059F 2400000001BGNAD'NAD+ZZZ+++++Bibor++75016+FR'SEQ++146'IND++2059F 2400000001BRPCD'PCD+ZZZ:100,00'SEQ++147'IND++2059F 2400000000GVQTY'QTY+ZZZ:1'SEQ++148'IND++2059F 2400000000GWQTY'QTY+ZZZ:1000'SEQ++149'IND++2059G 2400000000GSCCI'CCI+++TBX:LIS:211'CAV+X:TBX:211'SEQ++150'IND++2065 2400000000AHCCI'CCI+++TON:LIS:211'CAV+OUI:TON:211'SEQ++151'IND++2065 2400000000AJFTX'FTX+ZZZ+++SAGE GENERATION EXPERT'SEQ++152'IND++2065 2400000000AQFTX'FTX+ZZZ+++Conseil pour les affaires et autres conseils de gestion'SEQ++153'IND++2065 2400000000BFMOA'MOA+ZZZ:3331'SEQ++154'IND++2065 2400000000CANAD'NAD+ZZZ+++BLABLADEXPERT+0000 323, rue Saint-Martin+ Bibor++75003'CTA+ZZZ+:BLABLADEXPERT'COM+0140411003:TE'SEQ++155'IND++2065 2400000000HAMOA'MOA+ZZZ:119536'SEQ++156'IND++2065 2400000000LCMOA'MOA+ZZZ:42500'SEQ++157'IND++2065BIS 2400000001CANAD'NAD+ZZZ+++blerot grobi+0000 55 Boulevard grbbaf+ Bibor++75016'SEQ++158'IND++2065BIS 2400000001CGQTY'QTY+ZZZ:1000'SEQ++159'IND++2067 2400000000NAMOA'MOA+ZZZ:7204'SEQ++160'IND++2067 2400000000NBMOA'MOA+ZZZ:12477'SEQ++161'IND++2067 2400000000NCMOA'MOA+ZZZ:19681'SEQ++162'IND++2067 2400000000PAMOA'MOA+ZZZ:19681'SEQ++163'IND++2067 2400000000PBMOA'MOA+ZZZ:12248'SEQ++164'IND++2067 2400000000PCMOA'MOA+ZZZ:162036'SEQ++165'IND++2067 2400000000PDMOA'MOA+ZZZ:37020'SEQ++166'IND++2067 2400000000QADTM'DTM+ZZZ:20240704:102'SEQ++167'IND++2067 2400000000QBNAD'NAD+ZZZ+++BLABLA PATRIMOINE:Pr�sident++Bibor'SEQ++168'IND++2069RCI 2400010001BACCI'CCI+++CR5:LIS:211'CAV+MEC:CR5:211'SEQ++169'IND++2069RCI 2400010001BBMOA'MOA+ZZZ:2112'UNT+542+00001'UNE+1+1'UNZ+1+20241861032cor' +DOC+01=serveur\grps\dossiers\BLABLApatr+02=9215001+03=04/07/2024+04=FD2401+05=24+06=DGFiP+07=EDITDFC+08=32489+09=99999999800028+10=BLABLApatr+11=BLABLA PATRIMOINE+12=99999999900017++14=FR96999999999+15=corinne+16=isrn+17=01/01/2023+18=31/12/2023+19=240315+++++24=103200+25=JDC+26=contact@BLABLADEXPERT.com+27=++29=++++++35={55D57981-DA87-426D-911E-464844992C9C}'UNA:+,? 'UNB+UNOL:3+99999999800028:5:I+9215001:146+240704:1032+20241861032cor+++++TDT-PED-IN-TD2401'UNG+INFENT+NON_SECURISE_NON_SIGNE+MULTI_DISTRIBUTION+240704:1032+1+UN+D:00B:FD2401'UNH+00001+INFENT:D:00B:UN:FD2401'BGM+IDF:71:211+INFENT BLABLApatr BI RN IS'DTM+242:20240704:102'RFF+AUM:SAGE Experts Comptables'RFF+AUN:COALA EXPORT EDI::1.0:240315'RFF+AUO:2012.01.0310'NAD+DT+999999999:100:107++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'RFF+AWR:20241861032cor'RFF+ACD:IS1'NAD+FR+99999999800028:100:107++CEC_EDI_TDFC:BLABLADEXPERT::::3+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE SAGE COALA'NAD+MS+99999999800028:100:107++BLABLADEXPERT+0000 323, rue Saint-Martin+Bibor++75003'RFF+ACD:BLABLApatr BLABLA PATRIMOINE'NAD+MR+9215001:100:268++SAGE+0000 10 traoe de transpor+La petropa taratata++92250'RFF+CU:BLABLApatr BLABLA PATRIMOINE'NAD+HP+++DGI_EDI_TDFC:::::3'SEQ++1'IND++F-IDENTIF 2400000000AANAD'NAD+ZZZ+999999999:100:ZZZ++BLABLA PATRIMOINE+0000 55 Boulevard grbbaf+Bibor++75016'SEQ++2'IND++F-IDENTIF 2400000000ABRFF'RFF+ZZZ:7022Z'SEQ++3'IND++F-IDENTIF 2400000000BACCI'CCI+++TCF:LIS:211'CAV+BI:TCF:211'SEQ++4'IND++F-IDENTIF 2400000000BBCCI'CCI+++TRF:LIS:211'CAV+RN:TRF:211'SEQ++5'IND++F-IDENTIF 2400000000BCCCI'CCI+++TBS:LIS:211'CAV+IS:TBS:211'SEQ++6'IND++F-IDENTIF 2400000000BFCCI'CCI+++TDP:LIS:211'CAV+NOR:TDP:211'SEQ++7'IND++F-IDENTIF 2400000000CADTM'DTM+ZZZ:20230101:102'SEQ++8'IND++F-IDENTIF 2400000000CBDTM'DTM+ZZZ:20231231:102'SEQ++9'IND++F-IDENTIF 2400000000CCDTM'DTM+ZZZ:12:802'SEQ++10'IND++F-IDENTIF 2400000000CDDTM'DTM+ZZZ:20221231:102'SEQ++11'IND++F-IDENTIF 2400000000CEDTM'DTM+ZZZ:12:802'SEQ++12'IND++F-IDENTIF 2400000000DACUX'CUX+3:EUR'SEQ++13'IND++F-IDENTIF 2400000000KDRFF'RFF+ZZZ:IS1'SEQ++14'IND++2050 2400000000ATMOA'MOA+ZZZ:1387'SEQ++15'IND++2050 2400000000AUMOA'MOA+ZZZ:870'SEQ++16'IND++2050 2400000000BJMOA'MOA+ZZZ:265563'SEQ++17'IND++2050 2400000000BKMOA'MOA+ZZZ:870'SEQ++18'IND++2050 2400000000BXMOA'MOA+ZZZ:85899'SEQ++19'IND++2050 2400000000CFMOA'MOA+ZZZ:18439'SEQ++20'IND++2050 2400000000CJMOA'MOA+ZZZ:104338'SEQ++21'IND++2050 2400000000COMOA'MOA+ZZZ:369901'SEQ++22'IND++2050 2400000000CUMOA'MOA+ZZZ:264176'SEQ++23'IND++2050 2400000000DSMOA'MOA+ZZZ:517'SEQ++24'IND++2050 2400000000DWMOA'MOA+ZZZ:264176'SEQ++25'IND++2050 2400000000EBMOA'IND++2069RCI 2400010001BBMOA'MOA+ZZZ:2112'UNT+542+00001'UNE+1+1'UNZ+1+20241861032cor' From 3724dc113831adc755bda54fc9df1662fc023c56 Mon Sep 17 00:00:00 2001 From: fravetier Date: Fri, 18 Oct 2024 08:54:48 +0200 Subject: [PATCH 3/4] Improve syntax quality --- pydifact/parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydifact/parser.py b/pydifact/parser.py index fddcc70..169ea3b 100644 --- a/pydifact/parser.py +++ b/pydifact/parser.py @@ -56,7 +56,7 @@ def parse( una_found = idx_una != -1 if una_found: - characters = Characters.from_str("UNA" + message[idx_una + 3 : idx_una + 9]) + characters = Characters.from_str("UNA" + message[idx_una + 3: idx_una + 9]) # remove the UNA segment from the string, # ignore everything before UNA because it should be the first segment if una_found. From 303cfd52a8de2ccb5abc3e993c685f293f56e00d Mon Sep 17 00:00:00 2001 From: fravetier Date: Fri, 18 Oct 2024 18:32:55 +0200 Subject: [PATCH 4/4] Improve algo to find UNA when the file does not start by UNA --- pydifact/parser.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pydifact/parser.py b/pydifact/parser.py index 169ea3b..9d2f74d 100644 --- a/pydifact/parser.py +++ b/pydifact/parser.py @@ -52,15 +52,25 @@ def parse( # If there is a UNA, take the following 6 characters # unconditionally, strip them, and make control Characters() # for further parsing - idx_una = message.find("UNA") + + # If it starts by UNA + una_pattern = "UNA" + if message.startswith(una_pattern): + idx_una = 0 + # Otherwise we look for UNA, so to avoid finding "lorem ipsum UNA lorem ipsum" we look for the segment separator following by UNA. + else: + una_pattern = "'UNA" + idx_una = message.find(una_pattern) una_found = idx_una != -1 if una_found: - characters = Characters.from_str("UNA" + message[idx_una + 3: idx_una + 9]) + idx_begin = idx_una + len(una_pattern) + idx_end = idx_begin + 6 + characters = Characters.from_str(f"UNA{message[idx_begin: idx_end]}") # remove the UNA segment from the string, # ignore everything before UNA because it should be the first segment if una_found. - message = message[idx_una + 9 :].lstrip("\r\n") + message = message[idx_end:].lstrip("\r\n") else: # if no UNA header present, use default control characters