Skip to content

Commit 8c5ec73

Browse files
committed
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
1 parent d9bb320 commit 8c5ec73

File tree

3 files changed

+54
-4
lines changed

3 files changed

+54
-4
lines changed

pydifact/parser.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,15 @@ def parse(
5252
# If there is a UNA, take the following 6 characters
5353
# unconditionally, strip them, and make control Characters()
5454
# for further parsing
55-
una_found = message[0:3] == "UNA"
55+
idx_una = message.find("UNA")
56+
una_found = idx_una != -1
5657

5758
if una_found:
58-
characters = Characters.from_str("UNA" + message[3:9])
59+
characters = Characters.from_str("UNA" + message[idx_una + 3 : idx_una + 9])
5960

60-
# remove the UNA segment from the string
61-
message = message[9:].lstrip("\r\n")
61+
# remove the UNA segment from the string,
62+
# ignore everything before UNA because it should be the first segment if una_found.
63+
message = message[idx_una + 9 :].lstrip("\r\n")
6264

6365
else:
6466
# if no UNA header present, use default control characters

tests/data/sage_coala.ped

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +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/[email protected]+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'

tests/test_sage_coala.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# pydifact - a python edifact library
2+
# Copyright (C) 2017-2024 Christian González
3+
#
4+
# This program is free software: you can redistribute it and/or modify
5+
# it under the terms of the GNU Lesser General Public License as published
6+
# by the Free Software Foundation, either version 3 of the License, or
7+
# (at your option) any later version.
8+
#
9+
# This program is distributed in the hope that it will be useful,
10+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
# GNU Lesser General Public License for more details.
13+
#
14+
# You should have received a copy of the GNU Lesser General Public License
15+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
import os
17+
from pydifact.segmentcollection import Interchange
18+
from pydifact.segments import Segment
19+
20+
21+
path = os.path.dirname(os.path.realpath(__file__)) + "/data"
22+
23+
24+
def test_sage_coala_file():
25+
"""test parsing a file generated by SAGE COALA"""
26+
interchange = Interchange.from_file("{}/sage_coala.ped".format(path))
27+
assert interchange
28+
assert interchange.get_header_segment() == Segment(
29+
"UNB",
30+
["UNOL", "3"],
31+
["99999999800028", "5", "I"],
32+
["9215001", "146"],
33+
["240704", "1032"],
34+
"20241861032cor",
35+
"",
36+
"",
37+
"",
38+
"",
39+
"TDT-PED-IN-TD2401",
40+
)
41+
assert interchange.get_segment("RFF") == Segment(
42+
"RFF", ["AUM", "SAGE Experts Comptables"]
43+
)
44+
45+
46+
if __name__ == "__main__":
47+
test_sage_coala_file()

0 commit comments

Comments
 (0)