[
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:customer",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "return row.balance <= row.credit_limit;",
    "rule_text2": "Customer {name}'s balance: {balance|#,##0.00} exceeds their credit limit: {credit_limit|#,##0.00}",
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "validation_pbkbt",
    "title": "Validation return row.balance <= row.credit_limit;",
    "is_auto_title": true,
    "verbs": null,
    "comments": "balance cannot exceed credit limit, else throw exception",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 5,
    "default_name": "validation_2035",
    "default_title": "Validation return row.balance <= row.credit_limit;",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2035",
      "checksum": "A:f40d6e3be14b09f9"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:customer",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "var detail = {\n        filter: \"{_id: \\\"32751\\\"}\" ,\n        order: \"\",\n        pagesize: 30,\n        offset: 0,\n        verbose: false\n};\n\nvar response =  SysUtility.getResource('zipcodes', detail);\nlog.debug(JSON.stringify(response,null,2));\nlog.debug(response[0].state);\nlog.debug(response[0].city);\n//log.debug(response[0].loc);",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "Lookup city and state from zip code",
    "title": "Event: var detail = {\n        filter: \"{_id: \\\"32751\\\"}\" ,\n        order: \"\",\n        pagesize: 30,\n        offset: 0,\n        verbose: false\n};\n\nvar response =  SysUtility.getResource('zipcodes', det",
    "is_auto_title": true,
    "verbs": "INSERT,UPDATE,",
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 7,
    "default_name": "event_2036",
    "default_title": "Event: var detail = {\n        filter: \"{_id: \\\"32751\\\"}\" ,\n        order: \"\",\n        pagesize: 30,\n        offset: 0,\n        verbose: false\n};\n\nvar response =  SysUtility.getResource('zipcodes', detail);\nlog.debug(JSON.stringify(response,null,2));\nlog.debug(response[0].state);\nlog.debug(response[0].city);\n//log.debug(response[0].loc);.null",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2036",
      "checksum": "A:69e0e5fa60096e85"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:customer",
    "attribute_name": "balance",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "PurchaseOrderList",
    "rule_text2": "paid = false",
    "rule_text3": "amount_total",
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "sum_balance",
    "title": "Derive balance as sum(PurchaseOrderList.amount_total where paid = false)",
    "is_auto_title": true,
    "verbs": null,
    "comments": "A rule is like a spreadsheet cell formula... it *reacts\" to changes in referenced data...\n* increased when order placed\n* decreased when order deleted... or paid\n* adjusted when order changed... or assigned to a new customer",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 1,
    "default_name": "sum_balance",
    "default_title": "Derive balance as sum(PurchaseOrderList.amount_total where paid = false)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2037",
      "checksum": "A:35ec85e21c934e72"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:LineItem",
    "attribute_name": "amount",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "if (row.qty_ordered <= 6)  // discount (using conditional JavaScript logic)\n   return row.product_price * row.qty_ordered;\nelse\n   return row.product_price * row.qty_ordered * 0.8;\n",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "Discounted price*qty",
    "title": "Derive amount as if (row.qty_ordered <= 6)  // discount (using conditional JavaScript logic)\n   return row.product_price * row.qty_ordered;\nelse\n   return row.product_price * row.qty_ordered * 0.8;\n",
    "is_auto_title": true,
    "verbs": null,
    "comments": "Reactive Logic is expressed in JavaScript, so you use...\n- conditional logic (as above),\n- standard JavaScript services (e.g., moment date functions - enable in Project > Libraries),\n- SQL / external services.... whatever is required.",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 3,
    "default_name": "formula_amount",
    "default_title": "Derive amount as if (row.qty_ordered <= 6)  // discount (using conditional JavaScript logic)\n   return row.product_price * row.qty_ordered;\nelse\n   return row.product_price * row.qty_ordered * 0.8;\n",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2038",
      "checksum": "A:244d26177b157b42"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:LineItem",
    "attribute_name": "product_price",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "product",
    "rule_text2": "price",
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "parentCopy_product_price",
    "title": "Derive product_price as parentcopy(product.price)",
    "is_auto_title": true,
    "verbs": null,
    "comments": "Parent copy means order unaffected by product price changes",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 4,
    "default_name": "parentCopy_product_price",
    "default_title": "Derive product_price as parentcopy(product.price)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2039",
      "checksum": "A:654b93b13ddb26de"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:PurchaseOrder",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "if (row.amount_total != oldRow.amount_total) {\n  var newPurchaseorder_audit = logicContext.createPersistentBean(\"purchaseorder_audit\");\n  newPurchaseorder_audit.amount_total = oldRow.amount_total;  // set attributes from old values\n  newPurchaseorder_audit.paid = oldRow.paid;\n  newPurchaseorder_audit.customer_name = oldRow.customer_name;\n  newPurchaseorder_audit.order_number = oldRow.order_number;  // set the foreign key\n  logicContext.insert(newPurchaseorder_audit);                // saves (fires logic)\n}\n// better: re-use alternative using Loadable Libraries\n// if (row.amount_total != oldRow.amount_total)\n//   SysLogic.insertChildFrom(\"purchaseorder_audit\", logicContext);",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "Audit Purchase Order amount changes",
    "title": "Event: if (row.amount_total != oldRow.amount_total) {\n  var newPurchaseorder_audit = logicContext.createPersistentBean(\"purchaseorder_audit\");\n  newPurchaseorder_audit.amount_total = oldRow.amount_tot",
    "is_auto_title": true,
    "verbs": "UPDATE,",
    "comments": "row, logicContext passed in from engine; initialVerb is *client* action (e.g., POST), irrespective of subsequent updates (e.g., from item adjustments)\nearly events execute before reactive expressions, events execute after reactive expressions, commit events execute after all rows are processed",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 7,
    "default_name": "event_2040",
    "default_title": "Event: if (row.amount_total != oldRow.amount_total) {\n  var newPurchaseorder_audit = logicContext.createPersistentBean(\"purchaseorder_audit\");\n  newPurchaseorder_audit.amount_total = oldRow.amount_total;  // set attributes from old values\n  newPurchaseorder_audit.paid = oldRow.paid;\n  newPurchaseorder_audit.customer_name = oldRow.customer_name;\n  newPurchaseorder_audit.order_number = oldRow.order_number;  // set the foreign key\n  logicContext....",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2040",
      "checksum": "A:7af5dc80af142490"
    }
  },
  {
    "ts": "2017-12-19T23:07:02+00:00",
    "entity_name": "demo:PurchaseOrder",
    "attribute_name": "amount_total",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "LineItemList",
    "rule_text2": null,
    "rule_text3": "amount",
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "sum_amount_total",
    "title": "Derive amount_total as sum(LineItemList.amount)",
    "is_auto_title": true,
    "verbs": null,
    "comments": "sum of line item amounts",
    "active": true,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 1,
    "default_name": "sum_amount_total",
    "default_title": "Derive amount_total as sum(LineItemList.amount)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2041",
      "checksum": "A:296575fb0c311d8b"
    }
  },
  {
    "ts": "2017-12-19T23:35:49+00:00",
    "entity_name": "demo:customer",
    "attribute_name": "balance",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "PurchaseOrderList",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "count_klloo",
    "title": "Derive balance as count(PurchaseOrderList)",
    "is_auto_title": true,
    "verbs": null,
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 2,
    "default_name": "count_balance",
    "default_title": "Derive balance as count(PurchaseOrderList)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2042",
      "checksum": "A:b73d5b31363c0720"
    }
  },
  {
    "ts": "2017-12-19T23:36:05+00:00",
    "entity_name": "demo:customer",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "return true",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "commitValidation_okqdp",
    "title": "Commit validation return true",
    "is_auto_title": true,
    "verbs": null,
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 6,
    "default_name": "commitValidation_2043",
    "default_title": "Commit validation return true",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2043",
      "checksum": "A:0752d67131cb4903"
    }
  },
  {
    "ts": "2017-12-19T23:36:18+00:00",
    "entity_name": "demo:customer",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "//test",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "earlyEvent_itltg",
    "title": "Early event: //test.null",
    "is_auto_title": true,
    "verbs": "",
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 8,
    "default_name": "earlyEvent_2044",
    "default_title": "Early event: //test.null",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2044",
      "checksum": "A:12f2524c18998db1"
    }
  },
  {
    "ts": "2017-12-19T23:36:38+00:00",
    "entity_name": "demo:customer",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "row.name = \"foo\";",
    "rule_text2": null,
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "preinsertEvent_uplqp",
    "title": "Pre-Insert event: row.name = \"foo\";.null",
    "is_auto_title": true,
    "verbs": "",
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 10,
    "default_name": "preinsertEvent_2045",
    "default_title": "Pre-Insert event: row.name = \"foo\";.null",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2045",
      "checksum": "A:b86bc65ba6bfd478"
    }
  },
  {
    "ts": "2017-12-19T23:36:55+00:00",
    "entity_name": "demo:customer",
    "attribute_name": "balance",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "PurchaseOrderList",
    "rule_text2": null,
    "rule_text3": "amount_total",
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "minimum_zwlfb",
    "title": "Derive balance as min(PurchaseOrderList.amount_total)",
    "is_auto_title": true,
    "verbs": null,
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 11,
    "default_name": "minimum_balance",
    "default_title": "Derive balance as min(PurchaseOrderList.amount_total)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2046",
      "checksum": "A:819132a99a00ed6a"
    }
  },
  {
    "ts": "2017-12-19T23:37:11+00:00",
    "entity_name": "demo:customer",
    "attribute_name": "balance",
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": null,
    "prop5": null,
    "rule_text1": "PurchaseOrderList",
    "rule_text2": null,
    "rule_text3": "amount_total",
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "maximum_jrbdt",
    "title": "Derive balance as max(PurchaseOrderList.amount_total)",
    "is_auto_title": true,
    "verbs": null,
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 12,
    "default_name": "maximum_balance",
    "default_title": "Derive balance as max(PurchaseOrderList.amount_total)",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2047",
      "checksum": "A:4b434c2180830f7a"
    }
  },
  {
    "ts": "2017-12-19T23:37:44+00:00",
    "entity_name": "demo:PurchaseOrder",
    "attribute_name": null,
    "prop1": null,
    "prop2": null,
    "prop3": null,
    "prop4": "javascript",
    "prop5": null,
    "rule_text1": "",
    "rule_text2": "customer",
    "rule_text3": null,
    "rule_text4": null,
    "rule_text5": null,
    "predicate": null,
    "name": "managedParent_phivv",
    "title": "Create parent customer if it does not exist.",
    "is_auto_title": true,
    "verbs": null,
    "comments": null,
    "active": false,
    "sqlable": false,
    "jit": false,
    "ruletype_ident": 13,
    "default_name": "managedParent_customer",
    "default_title": "Create parent customer if it does not exist.",
    "@metadata": {
      "href": "http://localhost:8080/rest/abl/admin/v2/admin:rules/2049",
      "checksum": "A:c90be85417b55e2b"
    }
  }
]