UNPKG

@accordproject/cicero-engine

Version:

Cicero Engine - Node.js VM based implementation of Accord Protcol Template Specification execution

494 lines (490 loc) • 509 kB
/* Generated using ergo version 0.21.9 */ 'use strict'; /*eslint-disable no-unused-vars*/ /*eslint-disable no-undef*/ /*eslint-disable no-var*/ /** * Execute the smart clause * @param {Context} context - the Accord context * @param {org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest} context.request - the incoming request * @param {org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse} context.response - the response * @param {concerto.Event} context.emit - the emitted events * @param {org.accordproject.runtime.State} context.state - the state */ function orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty_latedeliveryandpenalty(context) { let pcontext = Object.assign(context, { 'request' : context.request }); return orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty.latedeliveryandpenalty(pcontext); } /* Generated using ergo version 0.21.9 */ 'use strict'; /*eslint-disable no-unused-vars*/ /*eslint-disable no-undef*/ /*eslint-disable no-var*/ const inheritance=[ { "sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"), "sup": ("org.accordproject.runtime.Response") }, { "sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"), "sup": ("concerto.Transaction") }, { "sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), "sup": ("org.accordproject.runtime.Request") }, { "sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), "sup": ("concerto.Transaction") }, { "sub": ("org.accordproject.latedeliveryandpenalty.TemplateModel"), "sup": ("org.accordproject.contract.Clause") }, { "sub": ("org.accordproject.latedeliveryandpenalty.TemplateModel"), "sup": ("concerto.Asset") }, { "sub": ("org.accordproject.time.PeriodUnit"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.time.TemporalUnit"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.time.Day"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.time.Month"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.ergo.stdlib.Error"), "sup": ("org.accordproject.runtime.ErrorResponse") }, { "sub": ("org.accordproject.runtime.State"), "sup": ("concerto.Asset") }, { "sub": ("org.accordproject.runtime.Obligation"), "sup": ("concerto.Event") }, { "sub": ("org.accordproject.runtime.Response"), "sup": ("concerto.Transaction") }, { "sub": ("org.accordproject.runtime.Request"), "sup": ("concerto.Transaction") }, { "sub": ("org.accordproject.money.CurrencyCode"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.money.DigitalCurrencyCode"), "sup": ("concerto.Enum") }, { "sub": ("org.accordproject.contract.Clause"), "sup": ("concerto.Asset") }, { "sub": ("org.accordproject.contract.Contract"), "sup": ("concerto.Asset") }, { "sub": ("org.accordproject.party.Party"), "sup": ("concerto.Participant") } ] class orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty{ static main(constants0) { { let ret0; { let __lstate; { ; __lstate = recDot(constants0, "__state");; { let __lemit; { ; __lemit = recDot(constants0, "__emit");; { let __this; { ; __this = recDot(constants0, "__contract");; { let $match0; { ; $match0 = recDot(constants0, "request");; { let stratify0; { ; if (either(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0))) { { let $case0 = toLeft(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0)); stratify0 = { "$left": ({ "$$main": ($case0) }) }; } } else { { let $case1 = toRight(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0)); stratify0 = { "$right": (null) }; } }; if (either(stratify0)) { { let $case0 = toLeft(stratify0); { let $4; { ; $4 = $case0;; { let $main; { ; $main = recDot($4, "$$main");; { let __contract; { ; __contract = recDot(constants0, "__contract");; { let __state; { ; __state = __lstate;; { let __emit; { ; __emit = __lemit;; { let request; { ; request = $main;; { let __lstate$0; { ; __lstate$0 = recDot(constants0, "__state");; { let __lemit$0; { ; __lemit$0 = recDot(constants0, "__emit");; { let __this$0; { ; __this$0 = recDot(constants0, "__contract");; { let agreed; { ; agreed = recDot(unbrand(recDot(constants0, "request")), "agreedDelivery");; { let stratify0$A; { ; { let p1; { ; p1 = agreed;; { let p2; { ; p2 = recDot(constants0, "__now");; stratify0$A = dateTimeIsBefore(p1, p2); } } } }; if ((!stratify0$A)) { ret0 = { "$right": (brand(array("org.accordproject.ergo.stdlib.Error"), { "message": ("Cannot exercise late delivery before delivery date") })) }; } else { if ((!((!recDot(unbrand(recDot(constants0, "__contract")), "forceMajeure")) || (!recDot(unbrand(recDot(constants0, "request")), "forceMajeure"))))) { ret0 = { "$left": (recConcat(recConcat({ "__response": (brand(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"), recConcat({ "penalty": (0.0) }, { "buyerMayTerminate": (true) }))) }, { "__state": (__lstate$0) }), { "__emit": (__lemit$0) })) }; } else { { let diff; { ; { let stratify0$9; { ; { let x; { ; x = recDot(constants0, "__now");; { let y; { ; y = agreed;; { let z; { ; z = { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$right": ({ "$right": ({ "$right": ({ "$left": ("days") }) }) }) }) };; { let du; { ; { let du$0; { ; { let p1; { ; p1 = x;; { let p2; { ; p2 = y;; du$0 = dateTimeDiff(p1, p2); } } } }; { let stratify0$0; { ; { let p0; { ; p0 = du$0;; stratify0$0 = dateTimeDurationAmount(p0); } }; du = brand(array("org.accordproject.time.Duration"), recConcat({ "unit": ({ "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$left": ("seconds") }) }) }, { "amount": (stratify0$0) })); } } } }; { let u; { ; u = z;; if (equal(u, recDot(unbrand(du), "unit"))) { stratify0$9 = du; } else { { let amount; { ; { let $3; { ; $3 = u;; { let stratify0$8; { ; if (equal($3, { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$left": ("seconds") }) })) { stratify0$8 = { "$left": ({ }) }; } else { stratify0$8 = { "$right": (null) }; }; if (either(stratify0$8)) { { let $case0 = toLeft(stratify0$8); { let $2; { ; $2 = $case0;; { let $1; { ; $1 = recDot(unbrand(du), "unit");; { let stratify0$3; { ; if (equal($1, { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$right": ({ "$left": ("minutes") }) }) })) { stratify0$3 = { "$left": ({ }) }; } else { stratify0$3 = { "$right": (null) }; }; if (either(stratify0$3)) { { let $case0 = toLeft(stratify0$3); { let $0; { ; $0 = $case0;; amount = natMult(recDot(unbrand(du), "amount"), { "$nat": (60.0) }); } } } } else { { let $case1 = toRight(stratify0$3); { let stratify0$2; { ; if (equal($1, { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$right": ({ "$right": ({ "$left": ("hours") }) }) }) })) { stratify0$2 = { "$left": ({ }) }; } else { stratify0$2 = { "$right": (null) }; }; if (either(stratify0$2)) { { let $case0 = toLeft(stratify0$2); { let $0; { ; $0 = $case0;; amount = natMult(natMult(recDot(unbrand(du), "amount"), { "$nat": (60.0) }), { "$nat": (60.0) }); } } } } else { { let $case1 = toRight(stratify0$2); { let stratify0$1; { ; if (equal($1, { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$right": ({ "$right": ({ "$right": ({ "$left": ("days") }) }) }) }) })) { stratify0$1 = { "$left": ({ }) }; } else { stratify0$1 = { "$right": (null) }; }; if (either(stratify0$1)) { { let $case0 = toLeft(stratify0$1); { let $0; { ; $0 = $case0;; amount = natMult(natMult(natMult(recDot(unbrand(du), "amount"), { "$nat": (60.0) }), { "$nat": (60.0) }), { "$nat": (24.0) }); } } } } else { { let $case1 = toRight(stratify0$1); { let stratify0$0; { ; if (equal($1, { "$class": (array("org.accordproject.time.TemporalUnit")), "$data": ({ "$right": ({ "$right": ({ "$right": ({