Skip to content

Instantly share code, notes, and snippets.

@nzpr
Last active July 15, 2022 12:57
Show Gist options
  • Save nzpr/5affacc0b8103143c6e7e65175b0ffb4 to your computer and use it in GitHub Desktop.
Save nzpr/5affacc0b8103143c6e7e65175b0ffb4 to your computer and use it in GitHub Desktop.
extended rules
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