Last active
July 15, 2022 12:57
-
-
Save nzpr/5affacc0b8103143c6e7e65175b0ffb4 to your computer and use it in GitHub Desktop.
extended rules
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
new claim3n, processRecord in { | |
// return channel, map {"LOCAL": <list of keys in local map>}, contract to process a single record | |
contract claim3n(ret, processRecord) = { | |
let | |
// these two values are parsed from gentran mapping rules file from branching and input records section | |
branching <- [("", "LOCAL"),("", "CLAIM3N"),("CLAIM3N", "EDI_DC"),("CLAIM3N", "E1EDK01"),("CLAIM3N", "E2EDK14"),("CLAIM3N", "E2EDK03"),("CLAIM3N", "TEMP_E2EDK03"),("CLAIM3N", "E1EDKA1"),("E1EDKA1", "E2EDKA1"),("CLAIM3N", "TEMP_KA1"),("CLAIM3N", "E2EDK02"),("CLAIM3N", "E2EDK17"),("CLAIM3N", "E2EDK18"),("CLAIM3N", "E2EDP01"),("E2EDP01", "E2EDP01:2"),("E2EDP01", "Z2EDP01"),("E2EDP01", "E2EDPO3"),("E2EDP01", "TEMP_E2EDPO3"),("E2EDP01", "E2EDP20"),("E2EDP01", "E1EDP19"),("E2EDP01", "TEMP_E1EDP19"),("CLAIM3N", "E2EDS01:2")]; | |
records <- {"LOCAL": ["INP", "OUTP", "ORT02", "LIFNR"]}.union({"E2EDPO3": ["HLEVEL_colon_13", "PSGNUM_colon_13", "DATUM_colon_2", "DOCUM_colon_13", "IDDAT_colon_4", "UZEIT_colon_2", "MANDT_colon_30", "SEGNUM_colon_13"], "E2EDK14": ["PSGNUM_colon_15", "MANDT_colon_32", "ORGID", "DOCUM_colon_15", "HLEVEL_colon_15", "QUALF_colon_6", "PSGNUM_colon_24"], "E2EDP01:2": ["GEWEI", "GRKOR", "HLEVEL_colon_17", "BMNG2", "VPREI", "TEMP_BELNR", "EINKZ", "CURCY", "MENEE", "KZABS", "NETWR", "BPUMN", "BPUMZ", "PSGNUM_colon_17", "PSTYP", "NTGEW", "MANDT_colon_34", "ACTION", "PREIS_colon_3", "UEPOS", "POSEX", "PEINH", "ABGRT", "MATKL", "ANETW", "MENGE", "SKFBP", "KZAZU", "PMENE", "DOCUM_colon_17", "ANTLF", "ABFTZ", "ABGRU", "EVERS", "FIXMG", "SEGNUM_colon_17"], "E2EDK03": ["PSGNUM_colon_14", "UZEIT_colon_5", "DOCUM_colon_14", "MANDT_colon_31", "DATUM_colon_3", "IDDAT", "HLEVEL_colon_14", "PSGNUM_colon_23"], "E2EDKA1": ["PFACH_colon_3", "LAISO", "ILNNR", "PSGNUM_colon_8", "LAND1", "PSGNUM_colon_10", "ANRED_colon_5", "NAME3_colon_3", "PAGRU", "ABLAD_colon_4", "STRS2_colon_3", "PFORT_GP", "KNREF", "ISOAL_colon_3", "MANDT_colon_25", "NAME1", "TELF2_colon_3", "PARVW", "NAME2_colon_4", "TELFX_colon_4", "DOCUM_colon_8", "STRAS_colon_4", "LIFNR_colon_3", "PAORG", "TELBX_colon_3", "ORGTX_colon_2", "PARNR_colon_3", "ANRED_colon_3", "TELX1_colon_3", "ORT01", "PSTLZ", "STOCK_colon_3", "HLEVEL_colon_8", "ORT02_colon_3", "IHREZ_colon_3", "SPRAS", "TELF1", "HAUSN_colon_3", "PARGE_colon_3", "FCODE_colon_3", "BNAME", "NAME4_colon_3", "PSTL2_colon_3", "PARTN", "TELTX_colon_3", "ISONU_colon_3", "COUNC_colon_3", "PERNR_colon_3", "REGIO_colon_3"], "TEMP_KA1": ["TEMP_ORT02"], "E2EDS01:2": ["SUNIT_colon_2", "PSGNUM_colon_26", "SEGNUM_colon_37", "WAERQ_colon_2", "SUMME_colon_2", "DOCUM_colon_55", "HLEVEL_colon_55", "MANDT_colon_72", "SUMID_colon_2"], "TEMP_E2EDK03": ["DATUM_colon_4"], "E2EDP20": ["EDATU_OLD", "HLEVEL_colon_10", "PSGNUM_colon_10", "AMENG", "SEGNUM_colon_10", "WMENG", "MANDT_colon_27", "EZEIT", "ACTION_colon_100", "DOCUM_colon_10", "EDATU", "EZEIT_OLD"], "E1EDK01": ["LIFSK_BEZ", "PSGNUM_colon_16", "LIFSK", "CURCY", "FKART_RL", "KZABS", "HWAER", "ABRVW", "GEWEI_colon_3", "EIGENUINR", "EDIKURS", "ACTION", "ABRVW_BEZ", "DELCO", "BSART", "ZTERM", "DOCUM_colon_16", "AUGRU_BEZ", "BSTZD", "AUTLF", "AUGRU", "PSGNUM_colon_25", "VSART", "VSART_BEZ", "BRGEW", "KZAZU", "RECIPNT_NO", "MANDT_colon_33", "HLEVEL_colon_16", "ABTNR", "BELNR", "KUNDEUINR", "FKTYP", "NTGEW_colon_2", "ABLAD_colon_2", "WKURS", "EMPST"], "Z2EDP01": ["PSGNUM_colon_16", "TOS_SUPPLY_QUAN", "SEGNUM_colon_16", "DOCUM_colon_16", "INITIAL_SUPP", "MANDT_colon_33", "HLEVEL_colon_16", "NET_SALE_QUAN", "RETURN_SUPP"], "E2EDK17": ["LKOND", "QUALF_colon_7", "HLEVEL_colon_56", "LKTEXT", "PSGNUM_colon_27", "DOCUM_colon_56", "PSGNUM_colon_28", "MANDT_colon_73"], "TEMP_E1EDP19": ["TEMP_IDTNR", "TEMP_IDTNR_colon_2", "TEMP_IDTNR_colon_3", "TEMP_IDTNR_colon_4"], "EDI_DC": ["CREDAT_colon_2", "ARCKEY_colon_2", "REFINT_colon_2", "IDOCTYP", "SNDPOR_colon_2", "STD_colon_2", "MESTYP", "RCVPRT_colon_2", "REFGRP_colon_2", "RCVPRN_colon_2", "DOCREL_colon_2", "SNDPRN_colon_2", "OUTMOD_colon_2", "CRETIM_colon_2", "REFMES_colon_2", "SNDSAD_colon_2", "STATUS_colon_2", "MANDT_colon_18", "SERIAL_colon_2", "SNDLAD_colon_2", "RCVPOR_colon_2", "TEST_colon_2", "SNDPFC_colon_2", "STDMES_colon_2", "RCVPFC_colon_2", "CIMTYP", "EXPRSS_colon_2", "RCVLAD_colon_2", "DIRECT_colon_2", "STDVRS_colon_2", "MESFCT_colon_2", "SNDPRT_colon_2", "DOCNUM_colon_18", "MESCOD_colon_3", "RCVSAD_colon_2"], "E2EDK18": ["PRZNT", "MANDT_colon_74", "PSGNUM_colon_30", "ZTERM_TXT", "HLEVEL_colon_57", "QUALF_colon_8", "TAGE", "DOCUM_colon_57", "PSGNUM_colon_29"], "E2EDK02": ["POSNR", "HLEVEL_colon_11", "MANDT_colon_28", "DATUM_colon_2", "QUALF_colon_2", "UZEIT_colon_2", "PSGNUM_colon_11", "BELNR_colon_2", "PSGNUM_colon_20", "DOCUM_colon_11"], "TEMP_E2EDPO3": ["DATUM_colon_3"], "E1EDP19": ["PSGNUM_colon_9", "HLEVEL_colon_9", "DOCUM_colon_9", "KTEXT", "SEGNUM_colon_9", "QUALF_colon_2", "IDTNR", "MFRPN", "MFRNR", "MANDT_colon_26"]}); | |
initState <- {} // TODO make AMap available in rholang AMap(branching, records) | |
in { | |
new this, stateCh in { | |
ret!(*this) // spit out the contract | |
| stateCh!(*initState) // init state | |
| contract this(ret, @"getResult") = { | |
for (state <<- stateCh) { ret!(*state) } | |
} | |
| contract this(record, @"processRecord") = { | |
for (state <- stateCh) { | |
for (newState <- processRecord!?(*state, *record)) { | |
stateCh!(*newState) | |
} | |
} | |
} | |
} | |
} | |
} | |
| contract processRecord(return, @state, @(recKey, recValues)) = { | |
new processField, loop in { | |
contract processField(ret, s, fieldName) = { | |
new BELNR, RECIPNT_NO, IDDAT, PARVW, IDDAT_colon_4, QUALF_colon_2, TEMP_IDTNR_colon_3 in { | |
contract BELNR(ret0, s, recName) = { | |
let s <- *s.set("local", "INP", "EXPR") in { | |
let s <- *s.set("local", "OUTP", "EXPR") in { | |
let s <- *s.set(*recName, "BELNR", "EXPR") in { | |
ret0!(*s) | |
} | |
} | |
} | |
} | | |
contract RECIPNT_NO(ret0, s, recName) = { | |
let s <- *s.set(*recName, "RECIPNT_NO", "EXPR") in { | |
ret0!(*s) | |
} | |
} | | |
contract IDDAT(ret0, s, recName) = { | |
new ret1 in { | |
if("EXPR") { | |
let s <- *s.set("METHOD_VAR", "METHOD_EXPR") in { | |
ret1!(*s) | |
} | |
} | |
else { | |
ret1!(*s) | |
} | | |
for(s<-ret1) { | |
ret0!(*s) | |
} | |
} | |
} | | |
contract PARVW(ret0, s, recName) = { | |
new ret1 in { | |
if("EXPR") { | |
let s <- *s.set("CLAIM3N", "TEMP_ORT02", "EXPR") in { | |
ret1!(*s) | |
} | |
} | |
else { | |
ret1!(*s) | |
} | | |
for(s<-ret1) { | |
ret0!(*s) | |
} | |
} | |
} | | |
contract IDDAT_colon_4(ret0, s, recName) = { | |
new ret1 in { | |
if("EXPR") { | |
let s <- *s.set("METHOD_VAR", "METHOD_EXPR") in { | |
ret1!(*s) | |
} | |
} | |
else { | |
ret1!(*s) | |
} | | |
for(s<-ret1) { | |
ret0!(*s) | |
} | |
} | |
} | | |
contract QUALF_colon_2(ret0, s, recName) = { | |
new ret1 in { | |
if("EXPR") { | |
let s <- *s.set("E2EDP01", "TEMP_IDTNR", "EXPR") in { | |
let s <- *s.set("E2EDP01", "TEMP_IDTNR_colon_4", "EXPR") in { | |
ret1!(*s) | |
} | |
} | |
} | |
else { | |
ret1!(*s) | |
} | | |
for(s<-ret1) { | |
new ret1 in { | |
if("EXPR") { | |
let s <- *s.set("E2EDP01", "TEMP_IDTNR_colon_2", "EXPR") in { | |
let s <- *s.set("E2EDP01", "TEMP_IDTNR_colon_3", "EXPR") in { | |
ret1!(*s) | |
} | |
} | |
} | |
else { | |
ret1!(*s) | |
} | | |
for(s<-ret1) { | |
ret0!(*s) | |
} | |
} | |
} | |
} | |
} | | |
contract TEMP_IDTNR_colon_3(ret0, s, recName) = { | |
ret0!(*s) | |
} | | |
match *fieldName { | |
"BELNR" => { for(newS <- BELNR!?(*s)) { ret!(*newS) } } | |
"RECIPNT_NO" => { for(newS <- RECIPNT_NO!?(*s)) { ret!(*newS) } } | |
"IDDAT" => { for(newS <- IDDAT!?(*s)) { ret!(*newS) } } | |
"PARVW" => { for(newS <- PARVW!?(*s)) { ret!(*newS) } } | |
"IDDAT_colon_4" => { for(newS <- IDDAT_colon_4!?(*s)) { ret!(*newS) } } | |
"QUALF_colon_2" => { for(newS <- QUALF_colon_2!?(*s)) { ret!(*newS) } } | |
"TEMP_IDTNR_colon_3" => { for(newS <- TEMP_IDTNR_colon_3!?(*s)) { ret!(*newS) } } | |
_ => ret!(*s) | |
} | |
} | |
} | | |
contract loop(@keys, @s) = { | |
match keys { | |
Set(head ...tail) => { | |
new newState in { | |
for (newState <- processField!?(s, head)) { loop!(tail, *newState) } | |
} | |
} | |
_ => { return!(s) } | |
} | |
} | | |
loop!(recValues.keys(), state) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment