{
  "base_url": "http://127.0.0.1:8109",
  "cases": [
    {
      "case_id": "W12-POS-SUBMIT-APPROVE-PO",
      "detail": {
        "approve": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "action": "approve"
            },
            "success": true
          }
        },
        "confirm": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "action": "confirm"
            },
            "success": true
          }
        },
        "receive": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "action": "validate"
            },
            "success": true
          }
        },
        "rfq": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "result": 1
            },
            "success": true
          }
        },
        "save": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "id": 12
            },
            "success": true
          }
        },
        "snapshot": {
          "commitment_count": 1,
          "id": 12,
          "po_count": 1,
          "requester_id": 1163,
          "state": "rfq",
          "total_amount": 150000.0
        },
        "submit": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "action": "submit"
            },
            "success": true
          }
        }
      },
      "matrix_id": "RT-W12-POS-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-NEG-VIEWER-SELF-APPROVE",
      "detail": {
        "self_approve": {
          "error": {
            "code": 200,
            "data": {
              "arguments": [
                "Pembuat request tidak boleh menyetujui sendiri (STAB-012 / DEC-004)."
              ],
              "context": {},
              "debug": "Traceback (most recent call last):\n  File \"/home/scola/odoo/odoo/http.py\", line 1764, in _serve_db\n    return service_model.retrying(self._serve_ir_http, self.env)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/service/model.py\", line 133, in retrying\n    result = func()\n             ^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1791, in _serve_ir_http\n    response = self.dispatcher.dispatch(rule.endpoint, args)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1995, in dispatch\n    result = self.request.registry['ir.http']._dispatch(endpoint)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_core/models/ir_http.py\", line 590, in _dispatch\n    return super(Http, cls)._dispatch(endpoint)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/addons/website/models/ir_http.py\", line 235, in _dispatch\n    response = super()._dispatch(endpoint)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/addons/base/models/ir_http.py\", line 222, in _dispatch\n    result = endpoint(**request.params)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 741, in route_wrapper\n    result = endpoint(self, *args, **params_ok)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/controllers/procurement_admin_api.py\", line 210, in procurement_requests_action\n    getattr(record, method_name)()\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 163, in action_approve\n    raise UserError(_(\nodoo.exceptions.UserError: Pembuat request tidak boleh menyetujui sendiri (STAB-012 / DEC-004).\n",
              "message": "Pembuat request tidak boleh menyetujui sendiri (STAB-012 / DEC-004).",
              "name": "odoo.exceptions.UserError"
            },
            "message": "Odoo Server Error"
          },
          "http_status": 200,
          "result": null
        },
        "snapshot": {
          "commitment_count": 0,
          "id": 13,
          "po_count": 0,
          "requester_id": 1163,
          "state": "submitted",
          "total_amount": 150000.0
        },
        "viewer_list": {
          "error": null,
          "http_status": 200,
          "result": {
            "capability": "inventory.purchase_requests.view",
            "error": "capability_denied",
            "message": "Insufficient permissions for this API route.",
            "path": "/api/v1/procurement/requests/list",
            "success": false
          }
        },
        "viewer_save": {
          "error": null,
          "http_status": 200,
          "result": {
            "capability": "inventory.purchase_requests.view",
            "error": "capability_denied",
            "message": "Insufficient permissions for this API route.",
            "path": "/api/v1/procurement/requests/save",
            "success": false
          }
        }
      },
      "matrix_id": "RT-W12-NEG-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-SCP-FOREIGN-REQUEST",
      "detail": {
        "foreign_detail": {
          "error": null,
          "http_status": 200,
          "result": {
            "error": "access_denied",
            "message": "Anda tidak memiliki akses untuk mengelola data konseling.",
            "success": false
          }
        }
      },
      "matrix_id": "RT-W12-SCP-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-STA-INVALID-TRANSITIONS",
      "detail": {
        "approve_early": {
          "error": {
            "code": 200,
            "data": {
              "arguments": [
                "Hanya request submitted yang dapat disetujui."
              ],
              "context": {},
              "debug": "Traceback (most recent call last):\n  File \"/home/scola/odoo/odoo/http.py\", line 1764, in _serve_db\n    return service_model.retrying(self._serve_ir_http, self.env)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/service/model.py\", line 133, in retrying\n    result = func()\n             ^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1791, in _serve_ir_http\n    response = self.dispatcher.dispatch(rule.endpoint, args)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1995, in dispatch\n    result = self.request.registry['ir.http']._dispatch(endpoint)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_core/models/ir_http.py\", line 590, in _dispatch\n    return super(Http, cls)._dispatch(endpoint)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/addons/website/models/ir_http.py\", line 235, in _dispatch\n    response = super()._dispatch(endpoint)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/addons/base/models/ir_http.py\", line 222, in _dispatch\n    result = endpoint(**request.params)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 741, in route_wrapper\n    result = endpoint(self, *args, **params_ok)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/controllers/procurement_admin_api.py\", line 210, in procurement_requests_action\n    getattr(record, method_name)()\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 160, in action_approve\n    raise UserError(_(\"Hanya request submitted yang dapat disetujui.\"))\nodoo.exceptions.UserError: Hanya request submitted yang dapat disetujui.\n",
              "message": "Hanya request submitted yang dapat disetujui.",
              "name": "odoo.exceptions.UserError"
            },
            "message": "Odoo Server Error"
          },
          "http_status": 200,
          "result": null
        },
        "rfq_before_approve": {
          "error": {
            "code": 200,
            "data": {
              "arguments": [
                "Purchase request harus disetujui terlebih dahulu."
              ],
              "context": {},
              "debug": "Traceback (most recent call last):\n  File \"/home/scola/odoo/odoo/http.py\", line 1764, in _serve_db\n    return service_model.retrying(self._serve_ir_http, self.env)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/service/model.py\", line 133, in retrying\n    result = func()\n             ^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1791, in _serve_ir_http\n    response = self.dispatcher.dispatch(rule.endpoint, args)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1995, in dispatch\n    result = self.request.registry['ir.http']._dispatch(endpoint)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_core/models/ir_http.py\", line 590, in _dispatch\n    return super(Http, cls)._dispatch(endpoint)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/addons/website/models/ir_http.py\", line 235, in _dispatch\n    response = super()._dispatch(endpoint)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/addons/base/models/ir_http.py\", line 222, in _dispatch\n    result = endpoint(**request.params)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 741, in route_wrapper\n    result = endpoint(self, *args, **params_ok)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/controllers/procurement_admin_api.py\", line 208, in procurement_requests_action\n    result = getattr(record, method_name)(vendor_id)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 274, in action_create_rfq\n    raise UserError(_(\"Purchase request harus disetujui terlebih dahulu.\"))\nodoo.exceptions.UserError: Purchase request harus disetujui terlebih dahulu.\n",
              "message": "Purchase request harus disetujui terlebih dahulu.",
              "name": "odoo.exceptions.UserError"
            },
            "message": "Odoo Server Error"
          },
          "http_status": 200,
          "result": null
        }
      },
      "matrix_id": "RT-W12-STA-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-TEN-CROSS-COMPANY",
      "detail": {
        "item_count": 3,
        "t2_leak": false
      },
      "matrix_id": "RT-W12-TEN-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-VAL-EMPTY-LINES",
      "detail": {
        "save": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "id": 15
            },
            "success": true
          }
        },
        "snapshot": {
          "commitment_count": 0,
          "id": 15,
          "po_count": 0,
          "requester_id": 1163,
          "state": "draft",
          "total_amount": 0.0
        },
        "submit": {
          "error": {
            "code": 200,
            "data": {
              "arguments": [
                "Tambahkan minimal satu item pada purchase request."
              ],
              "context": {},
              "debug": "Traceback (most recent call last):\n  File \"/home/scola/odoo/odoo/http.py\", line 1764, in _serve_db\n    return service_model.retrying(self._serve_ir_http, self.env)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/service/model.py\", line 133, in retrying\n    result = func()\n             ^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1791, in _serve_ir_http\n    response = self.dispatcher.dispatch(rule.endpoint, args)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1995, in dispatch\n    result = self.request.registry['ir.http']._dispatch(endpoint)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_core/models/ir_http.py\", line 590, in _dispatch\n    return super(Http, cls)._dispatch(endpoint)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/addons/website/models/ir_http.py\", line 235, in _dispatch\n    response = super()._dispatch(endpoint)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/addons/base/models/ir_http.py\", line 222, in _dispatch\n    result = endpoint(**request.params)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 741, in route_wrapper\n    result = endpoint(self, *args, **params_ok)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/controllers/procurement_admin_api.py\", line 210, in procurement_requests_action\n    getattr(record, method_name)()\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 146, in action_submit\n    self._validate_lines()\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 140, in _validate_lines\n    raise UserError(_(\"Tambahkan minimal satu item pada purchase request.\"))\nodoo.exceptions.UserError: Tambahkan minimal satu item pada purchase request.\n",
              "message": "Tambahkan minimal satu item pada purchase request.",
              "name": "odoo.exceptions.UserError"
            },
            "message": "Odoo Server Error"
          },
          "http_status": 200,
          "result": null
        }
      },
      "matrix_id": "RT-W12-VAL-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-IDM-DOUBLE-APPROVE",
      "detail": {
        "second_approve": {
          "error": {
            "code": 200,
            "data": {
              "arguments": [
                "Hanya request submitted yang dapat disetujui."
              ],
              "context": {},
              "debug": "Traceback (most recent call last):\n  File \"/home/scola/odoo/odoo/http.py\", line 1764, in _serve_db\n    return service_model.retrying(self._serve_ir_http, self.env)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/service/model.py\", line 133, in retrying\n    result = func()\n             ^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1791, in _serve_ir_http\n    response = self.dispatcher.dispatch(rule.endpoint, args)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 1995, in dispatch\n    result = self.request.registry['ir.http']._dispatch(endpoint)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_core/models/ir_http.py\", line 590, in _dispatch\n    return super(Http, cls)._dispatch(endpoint)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/addons/website/models/ir_http.py\", line 235, in _dispatch\n    response = super()._dispatch(endpoint)\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/addons/base/models/ir_http.py\", line 222, in _dispatch\n    result = endpoint(**request.params)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/odoo/http.py\", line 741, in route_wrapper\n    result = endpoint(self, *args, **params_ok)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/controllers/procurement_admin_api.py\", line 210, in procurement_requests_action\n    getattr(record, method_name)()\n  File \"/home/scola/odoo/custom_addons_scola/gcgscola/scola_bos_rkas_procurement/models/purchase_request.py\", line 160, in action_approve\n    raise UserError(_(\"Hanya request submitted yang dapat disetujui.\"))\nodoo.exceptions.UserError: Hanya request submitted yang dapat disetujui.\n",
              "message": "Hanya request submitted yang dapat disetujui.",
              "name": "odoo.exceptions.UserError"
            },
            "message": "Odoo Server Error"
          },
          "http_status": 200,
          "result": null
        },
        "snapshot": {
          "commitment_count": 1,
          "id": 12,
          "po_count": 1,
          "requester_id": 1163,
          "state": "rfq",
          "total_amount": 150000.0
        }
      },
      "matrix_id": "RT-W12-IDM-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-REC-CANCEL-COMMITMENT",
      "detail": {
        "after": {
          "commitment_count": 1,
          "id": 16,
          "po_count": 0,
          "requester_id": 1163,
          "state": "cancel",
          "total_amount": 150000.0
        },
        "before": {
          "commitment_count": 1,
          "id": 16,
          "po_count": 0,
          "requester_id": 1163,
          "state": "approved",
          "total_amount": 150000.0
        },
        "cancel": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "action": "cancel"
            },
            "success": true
          }
        }
      },
      "matrix_id": "RT-W12-REC-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-XRP-READER-BOUNDARY",
      "detail": {
        "approver_detail": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "budget_line_id": 3,
              "budget_line_name": "scola.budget.line,3",
              "id": 12,
              "lines": [
                {
                  "id": 13,
                  "name": "",
                  "price_unit": 75000.0,
                  "product_id": 20,
                  "product_name": "[W12-PROD-0831T140257Z] W12 Harness Product 0831T140257Z",
                  "product_uom_id": 1,
                  "qty": 2.0,
                  "subtotal": 150000.0,
                  "uom": "Units"
                }
              ],
              "location_id": null,
              "location_name": "-",
              "name": "PR-NEW",
              "note": "",
              "purchase_order_count": 1,
              "purchase_order_ids": [
                1
              ],
              "reason": "W12 harness PR",
              "request_date": "2026-08-31",
              "requester": "w12.requester.0831T140257Z",
              "requester_id": 1163,
              "required_date": false,
              "state": "rfq",
              "total_amount": 150000.0
            },
            "success": true
          }
        },
        "viewer_detail": {
          "error": null,
          "http_status": 200,
          "result": {
            "capability": "inventory.purchase_requests.view",
            "error": "capability_denied",
            "message": "Insufficient permissions for this API route.",
            "path": "/api/v1/procurement/requests/detail",
            "success": false
          }
        }
      },
      "matrix_id": "RT-W12-XRP-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-XMD-ENTITLEMENT-OFF",
      "detail": {
        "list_off": {
          "error": null,
          "http_status": 200,
          "result": {
            "error": "feature_disabled",
            "feature_flag": "scola_bos_rkas",
            "message": "Feature is disabled for the current tenant.",
            "path": "/api/v1/procurement/requests/list",
            "success": false
          }
        },
        "save_off": {
          "error": null,
          "http_status": 200,
          "result": {
            "error": "feature_disabled",
            "feature_flag": "scola_bos_rkas",
            "message": "Feature is disabled for the current tenant.",
            "path": "/api/v1/procurement/requests/save",
            "success": false
          }
        }
      },
      "matrix_id": "RT-W12-XMD-01",
      "status": "PASS"
    },
    {
      "case_id": "W12-UIA-API-ALIGNMENT",
      "detail": {
        "list": {
          "error": null,
          "http_status": 200,
          "result": {
            "data": {
              "items": [
                {
                  "budget_line_id": 3,
                  "budget_line_name": "scola.budget.line,3",
                  "id": 16,
                  "name": "PR-NEW",
                  "purchase_order_count": 0,
                  "request_date": "2026-08-31",
                  "requester": "w12.requester.0831T140257Z",
                  "required_date": false,
                  "state": "cancel",
                  "total_amount": 150000.0
                },
                {
                  "budget_line_id": 3,
                  "budget_line_name": "scola.budget.line,3",
                  "id": 15,
                  "name": "PR-NEW",
                  "purchase_order_count": 0,
                  "request_date": "2026-08-31",
                  "requester": "w12.requester.0831T140257Z",
                  "required_date": false,
                  "state": "draft",
                  "total_amount": 0
                },
                {
                  "budget_line_id": 3,
                  "budget_line_name": "scola.budget.line,3",
                  "id": 14,
                  "name": "PR-NEW",
                  "purchase_order_count": 0,
                  "request_date": "2026-08-31",
                  "requester": "w12.requester.0831T140257Z",
                  "required_date": false,
                  "state": "submitted",
                  "total_amount": 150000.0
                },
                {
                  "budget_line_id": 3,
                  "budget_line_name": "scola.budget.line,3",
                  "id": 13,
                  "name": "PR-NEW",
                  "purchase_order_count": 0,
                  "request_date": "2026-08-31",
                  "requester": "w12.requester.0831T140257Z",
                  "required_date": false,
                  "state": "submitted",
                  "total_amount": 150000.0
                },
                {
                  "budget_line_id": 3,
                  "budget_line_name": "scola.budget.line,3",
                  "id": 12,
                  "name": "PR-NEW",
                  "purchase_order_count": 1,
                  "request_date": "2026-08-31",
                  "requester": "w12.requester.0831T140257Z",
                  "required_date": false,
                  "state": "rfq",
                  "total_amount": 150000.0
                }
              ],
              "total": 5
            },
            "success": true
          }
        },
        "route_meta": {
          "capability": "inventory.purchase_requests.view",
          "feature_flag": "scola_bos_rkas",
          "module": null
        }
      },
      "matrix_id": "RT-W12-UIA-01",
      "status": "PASS"
    }
  ],
  "database": "scola_t6g_bos_audit_20260831T140257Z",
  "executed_at": "2026-08-31T14:06:14.163951+00:00",
  "overlay_version": "gt-w12-1.0",
  "schema": "t6g-w12-runtime-v1",
  "summary": {
    "fail": 0,
    "pass": 11,
    "total": 11
  }
}
