---
# System prepended metadata

title: RxPrime Embed Tutorial
tags: [RxPrime as IFrame]

---

---
title: RxPrime Embed Tutorial
tags: RxPrime as IFrame
disqus: hackmd
---
{%hackmd BJrTq20hE %}
# RxPrime As IFrame
## **Trigger RxPrime**

**"POST" input JSONs to url: https://ehr.aesoptek.com/RxPrime-IFrame, the format of the JSON is explained [below](https://hackmd.io/SBucutWUQVu4-Pr1nRC3FQ?view#Complete-Input-Format).**


Note: 
* **Please provide me the domain name that will host RxPrime**, I need to add it to the "allow-iframing" list. Otherwise, RxPrime may refuse to render.
* RxPrime includes two states, which requires the host to expand/shrink the iframe width in certain scenarios. More details explained in the [last section](https://hackmd.io/SBucutWUQVu4-Pr1nRC3FQ?view#Signal-to-ExpandShrink-IFrame) of this doc.

---

## Complete Input Format

```json=
{
  "DoctorSerial": "DoctorCode", //※醫生代碼
  "PatientGender": 0, //※性別：1 = M, else = F
  "Location": "zh-TW", //語系代碼：default = en-US
  "PatientSerial": "A6CFB65C-433E-4317-90B1-35C6F0205C8C", //※看診處方唯一代碼
  "PatientAge": 9, //※年齡
  "DivisionCode": "04", //健保科別代碼
  "Detail": true, //輸出進階資訊 *1 
  "PreDraw": false, //預先繪製InfoGraph *2
  "DiseaseContent": [ //診斷陣列
    {
      "Code": "E11.21", //※診斷代碼
      "Name": "Type 2 diabetes mellitus with diabetic nephropathy" //診斷名稱
      "ResourceId": "{99534C56-A0B1-4D56-9CC5-8125C3566678}",  //※項目代號 *3
      "Rules": "icd10" //診斷代碼編碼種類 *4
      "Date": "1909-02-02T00:00:00.0000000" //※年-月-日T時-分-秒
    }
  ],
  "MedContent": [ //藥品陣列
    {
      "QuantityPerDose": 1, //每次使用劑量
      "QuantityPerUnit": "mg",
      "Frequency": "QD", //使用方式
      "Route": "-", //使用途徑
      "Duration": 28, //使用天數
      "TotalQuantity": 28, //※總劑量
      "TotalQuantityUnit": "d", //單位
      "Code": "BC24131100", //※藥品代碼
      "Name": "Crestor *10mg/tab", //藥品名稱
      "ResourceId": "{8F506951-C566-4A91-BC10-C8F531FAF79A}", //※項目代號
      "Rules": "nhi" //藥品代碼編碼種類 *4
      "Date": "1909-02-02T00:00:00.0000000" //※年-月-日T時-分-秒
    }
  ]
}
```
* **※項目，為必要輸入項**
* *1 預先輸出完整資訊，默認true較好
* *2 預先繪製InfoGraph圖片，默認false較好
* 3 用於識別每一個項目的***唯一***代碼，***不得重複***，否則會視為同一項目。
* *4 如果輸入編碼種類，可以增加資料搜尋速度，內容皆為小寫。但輸入錯誤編碼種類，則會影響搜尋結果 (如混投或是未知)。

---
## **Sample JSON**
### **Sample 1 JSON**
#### ==Request== 

```json=
{
  "Detail": true,
  "DivisionCode": "02",
  "Patientserial": "768be7ac-743f-4c24-aa0f-fed5a3a38b6a",
  "PatientGender": 0,
  "PatientAge": 88,
  "DiseaseContent": [
    {
      "Code": "C18.7",
      "Name": "Malignant neoplasm of sigmoid colon",
      "Rules": "ICD10",
      "ResourceId": "C18.7.ICD10",
      "Date": "1909-02-02T00:00:00.0000000"
    }
  ],
  "MedContent": [
    {
      "Code": "AC22908100",
      "Name": "spironolactone",
      "Rules": "nhi",
      "ResourceId": "AC22908100.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 40.0,
      "QuantityPerUnit": "MG",
      "Frequency": "0900, 1800",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "A023521100",
      "Name": "magnesium oxide",
      "Rules": "nhi",
      "ResourceId": "A023521100.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 200.0,
      "QuantityPerUnit": "ML",
      "Frequency": "0900, 1800",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AB46991157",
      "Name": "megestrol",
      "Rules": "nhi",
      "ResourceId": "AB46991157.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 4.2,
      "QuantityPerUnit": "MG",
      "Frequency": "0900, 1800",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AB307491G0",
      "Name": "furosemide",
      "Rules": "nhi",
      "ResourceId": "AB307491G0.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 202.0,
      "QuantityPerUnit": "MG",
      "Frequency": "0900, 1800",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "BC030771G0",
      "Name": "clonazepam",
      "Rules": "nhi",
      "ResourceId": "BC030771G0.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 0.42,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "BC21571100",
      "Name": "amlodipine",
      "Rules": "nhi",
      "ResourceId": "BC21571100.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 402.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AC44248100",
      "Name": "calcium folinate",
      "Rules": "nhi",
      "ResourceId": "AC44248100.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 403.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AC43698100",
      "Name": "tegafur, combinations",
      "Rules": "nhi",
      "ResourceId": "AC43698100.nhi",
      "Date": "1909-02-02T00:00:00.0000000",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 404.0,
      "QuantityPerUnit": "MG",
      "Frequency": "0900, 1800",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    }
  ]
}
```

### **Sample 2 JSON**
#### ==Request== 
```json=
{
  "Detail": true,
  "DivisionCode": "02",
  "Patientserial": "768be7ac-743f-4c24-aa0f-fed5a3a38b6a",
  "PatientGender": 0,
  "PatientAge": 60,
  "DiseaseContent": [
    {
      "Code": "N39.41",
      "Name": "Urge incontinence",
      "Rules": "ICD10",
      "ResourceId": "N39.41.ICD10",
      "Date": "2011-03-12T12:21:10.4310233Z"
    },
    {
      "Code": "K59.09",
      "Name": "Other constipation",
      "Rules": "ICD10",
      "ResourceId": "K59.09.ICD10",
      "Date": "2011-03-12T12:21:10.4310233Z"
    },
    {
      "Code": "N39.0",
      "Name": "Urinary tract infection, site not specified",
      "Rules": "ICD10",
      "ResourceId": "N39.0.ICD10",
      "Date": "2007-07-07T17:21:10.4310233Z"
    },
    {
      "Code": "R35.0",
      "Name": "Frequency of micturition",
      "Rules": "ICD10",
      "ResourceId": "R35.0.ICD10",
      "Date": "2007-07-07T17:21:10.4310233Z"
    }
  ],
  "MedContent": [
    {
      "Code": "BC22783100",
      "Name": "tolterodine",
      "Rules": "nhi",
      "ResourceId": "BC22783100.nhi",
      "Date": "2011-03-12T12:21:10.4310233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 25.0,
      "QuantityPerUnit": "MG",
      "Frequency": "0900",
      "Route": "Oral",
      "Duration": 0
    },
    {
      "Code": "A020444100",
      "Name": "paracetamol",
      "Rules": "nhi",
      "ResourceId": "A020444100.nhi",
      "Date": "2007-07-07T17:21:10.4310233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 0.8,
      "QuantityPerUnit": "ML",
      "Frequency": "2 times daily as needed",
      "Route": "Oral",
      "Duration": 0
    },
    {
      "Code": "NC017831G0",
      "Name": "phenazopyridine",
      "Rules": "nhi",
      "ResourceId": "NC017831G0.nhi",
      "Date": "2007-07-07T17:21:10.4310233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 8,
      "QuantityPerUnit": "MG",
      "Frequency": "when needed",
      "Route": "Oral",
      "Duration": 0
    },
    {
      "Code": "AC29172100",
      "Name": "cefalexin",
      "Rules": "nhi",
      "ResourceId": "AC29172100.nhi",
      "Date": "2007-07-07T17:21:10.4310233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 100,
      "QuantityPerUnit": "MG",
      "Frequency": "",
      "Route": "Oral",
      "Duration": 0
    }
  ]
}
```

### **Sample 3 JSON**
#### ==Request== 
```json=
{
  "Detail": true,
  "DivisionCode": "02",
  "Patientserial": "768be7ac-743f-4c24-aa0f-fed5a3a38b6a",
  "PatientGender": 0,
  "PatientAge": 86,
  "DiseaseContent": [
    {
      "Code": "J06.9",
      "Name": "Acute upper respiratory infection, unspecified",
      "Rules": "ICD10",
      "ResourceId": "J06.9.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    },
    {
      "Code": "L30.9",
      "Name": "Dermatitis, unspecified",
      "Rules": "ICD10",
      "ResourceId": "L30.9.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    },
    {
      "Code": "M19.90",
      "Name": "Unspecified osteoarthritis, unspecified site",
      "Rules": "ICD10",
      "ResourceId": "M19.90.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    },
    {
      "Code": "K59.9",
      "Name": "Functional intestinal disorder, unspecified",
      "Rules": "ICD10",
      "ResourceId": "K59.9.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    },
    {
      "Code": "G47.09",
      "Name": "Other insomnia",
      "Rules": "ICD10",
      "ResourceId": "G47.09.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    },
    {
      "Code": "F41.9",
      "Name": "Anxiety disorder, unspecified",
      "Rules": "ICD10",
      "ResourceId": "F41.9.ICD10",
      "Date": "2021-08-27T02:46:01.4010233Z"
    }
  ],
  "MedContent": [
    {
      "Code": "AC59035157",
      "Name": "opium derivatives and expectorants",
      "Rules": "nhi",
      "ResourceId": "AC59035157.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 12.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "A012876100",
      "Name": "multienzymes (lipase, protease etc.)",
      "Rules": "nhi",
      "ResourceId": "A012876100.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 21.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AC433061G0",
      "Name": "cetirizine",
      "Rules": "nhi",
      "ResourceId": "AC433061G0.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 20.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "BC187411G0",
      "Name": "lorazepam",
      "Rules": "nhi",
      "ResourceId": "BC187411G0.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 200.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "A023521100",
      "Name": "magnesium oxide",
      "Rules": "nhi",
      "ResourceId": "A023521100.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 20.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AC33664100",
      "Name": "trazodone",
      "Rules": "nhi",
      "ResourceId": "AC33664100.nhi",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 70.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    },
    {
      "Code": "AC46729100",
      "Name": "fludiazepam",
      "Rules": "nhi",
      "ResourceId": "AC46729100.nhi",
      "Date": "2021-08-27T02:46:01.4010233Z",
      "TotalQuantity": 1.0,
      "QuantityPerDose": 120.0,
      "QuantityPerUnit": "MG",
      "Frequency": "QID",
      "Duration": 1,
      "TotalQuantityUnit": "Table",
      "Route": "Oral"
    }
  ]
}
```

---

## Signal to Expand/Shrink IFrame

### Two states of RxPrime (Examples below)
#### **State One** 

![](https://i.imgur.com/0f98QY3.png)

#### **State Two** 

![](https://i.imgur.com/XemSS2O.png)


> As we can see, state two requires the host to provide double-width on the IFrame, we may call it the "expanded" state.

### My suggestions on signaling host to switch to "expanded" state
1. **RxPrime makes a "GET" request** to https://hostexample.com?expanded=true (Host creates and determines this endpoint. expanded=true: expand the IFrame width, aka [state two](https://hackmd.io/SBucutWUQVu4-Pr1nRC3FQ?view#State-Two); expanded=false: shrink the IFrame width, aka [state one](https://hackmd.io/SBucutWUQVu4-Pr1nRC3FQ?view#State-One)). (More straightforward)
2. Or we can try **using the function "postMessage"** to build communication between RxPrime and the parent site. Details are available here: https://stackoverflow.com/questions/9153445/how-to-communicate-between-iframe-and-the-parent-site (More efficient, less data transferring)
