sample 08 surgery - mbot-dev/1000_builder GitHub Wiki

5-8. 手術記録

データ形式 エンドポイント
simpleSurgery /mml/api/v1/surgery
// 手術記録
var postSurgery = function (callback) {                     // 手術記録情報

    // simpleSurgery
    var simpleSurgery = {
        surgeryItem: []                                     // [surgeryItem]
    };

    // 手術日 昨日とする
    var now = new Date();
    now.setDate(now.getDate() - 1);
    var opDate = dateAsString(now);

    // 開始時刻 xs:time => 09:00:00
    var startTime = '09:18:00';

    // 手術時間 3時間20分 => P3H20M
    var duration = timesAsDuration(3, 20);

    // 手術記録項目
    var surgeryItem = {
        context: {                                          // 手術ヘッダー情報 -> surgicalInfo
            type: 'elective',                               // 手術区分 MML0021 待期手術
            date: opDate,                                   // 手術施行日 CCYY-MM-DD
            startTime: startTime,                           // 手術開始時刻 ? hh:mm
            duration: duration                             // 手術時間 ? PTnHnM 5時間25分=PT5H25M
            // surgicalDepartment: simpleSurgicalDept,         // 手術実施診療科情報 ?  xsd
            // patientDepartment: simpleInternalDept           // 手術時に患者の所属していた診療科 ?  xsd
        },
        surgicalDiagnosis: [],                              // 外科診断情報 simpleDiagnosis -> [mmlRd:RegisteredDiagnosisModule]
        surgicalProcedure: [],                              // 手術法情報 [procedureItem]
        surgicalStaffs: [],                                 // 麻酔を除く手術スタッフの情報 ? [staff]
        anesthesiaProcedure: [],                            // 麻酔法名情報 ? [titleItem]
        anesthesiologists: [],                              // 麻酔医情報 ? [staff]
        referenceInfo: {}                                   // 手術記録に用いる図や写真を外部参照 ? mmlCm:extRef
    };
    simpleSurgery.surgeryItem.push(surgeryItem);

    // 傷病名
    var diagnosis = {
        diagnosis: 'Lung cancer',                           // 疾患名
        code: 'C349-.007',                                  // 疾患コード
        system: 'ICD10',                                    // 疾患コード体系名
        category: 'mainDiagnosis'
    };
    // 配列へ追加
    surgeryItem.surgicalDiagnosis.push(diagnosis);

    // 手術法1
    var procedureItem1 = {
        operation: 'coronary artery bypass grafting'       // 手術法
    };
    // 手術法2
    var procedureItem2 = {
        operation: 'cardio-pulmonary bypass'               // 手術法
    };
    // 配列へ追加
    surgeryItem.surgicalProcedure.push(procedureItem1);
    surgeryItem.surgicalProcedure.push(procedureItem2);

    // 執刀医 オプション sample-common で定義
    var operator = asSurgicalStaff(simpleOperator, 'operator');
    surgeryItem.surgicalStaffs.push(operator);

    // 麻酔法1
    var titleItem1 = {                                       // 分割された手術要素名
        title: 'general anesthesia'
    };
    // 麻酔法2
    var titleItem2 = {                                       // 分割された手術要素名
        title: 'tracheal intubation'
    };
    // 麻酔法3
    var titleItem3 = {                                       // 分割された手術要素名
        title: 'G+O+Ethrane'
    };
    // 配列へ追加
    surgeryItem.anesthesiaProcedure.push(titleItem1);
    surgeryItem.anesthesiaProcedure.push(titleItem2);
    surgeryItem.anesthesiaProcedure.push(titleItem3);

    // 麻酔医 オプション sample-common で定義
    var anesthesiologist = asSurgicalStaff(simpleAnesthesiologist, 'anesthesiologist');
    surgeryItem.anesthesiologists.push(anesthesiologist);

    // 外部参照
    surgeryItem.referenceInfo = {
        contentType: 'image/jpeg',
        medicalRole: 'surgicalFigure',
        title: 'Skin incision',
        href: 'surgicalFigure001.jpg',
        base64: fileAsBase64('surgicalFigure001.jpg')     // ファイルコンテンツのBase64
    };

    // コンポジション
    var simpleComposition = {                   // POSTする simpleComposition
        context: {                              // context: 手術時の文脈
            uuid: generateUUID(),               // UUID
            confirmDate: confirmDate(),         // 確定日時 YYYY-MM-DDTHH:mm:ss
            patient: simplePatient,             // 対象患者
            creator: simpleCreator,             // 担当医師
            accessRight: simpleRight            // アクセス権
        },
        content: [simpleSurgery]                // content: 臨床データ=simpleSurgery
    };

    //------------------------------------------------------------------
    // 共通設定 患者とcreatorに自施設の情報を設定する
    //------------------------------------------------------------------
    simpleComposition.context.patient.facilityId = simpleFacility.id;
    simpleComposition.context.creator.facility = simpleFacility;
    //------------------------------------------------------------------

    // POST
    post('surgery', simpleComposition, function (err, mml) {
        // コールバック
        callback(err, simpleComposition, mml);
    });
};