... 분명히 썼는데 어디갔지

 

 

 

[LECTURE] 보건의료정보원 FHIR 강좌 15차시 : SMART on FHIR 이론 : edwith

- 한국보건의료정보원

www.edwith.org

 

  • SMART on FHIR
    FHIR APPLICATION. 앱스토어 기반의 어플리케이션이다. 바로 다운받아서 사용할 수 있도록... 이식성 굿
  • 샌드박스
    여러 공개 범위의 샌드박스가 존재한다. EPIC, CERNER 등등

  • LAUNCH POINT : EMR 시스템을 가상환경처럼 구성해둔 시뮬레이터.
    FHIR - EMR 기반으로 돌아간다고 가정함.

  • CDS HOOKS
    CDS - 사람의 의사결정을 도와주는 것. ex) 약물 중복 처방
    일상생활에서 EMR을 쓰다가 인터럽션이 생긴다. 

의사 결정 지원을 호출하기 위한 Hook-pattern 기반의 서비스

(Hook - pattern : 인터럽트 해야 할 일을 해야 하는 것.) ..? 사용자가 어떤 행동을 하면 오는 것.

CDS card - 답을 주는 형태. 1) 단순한 형태의 답  2) 추천/권고안  3) 앱을 제공 (추천)

동작 방식 - 1) SMART on FHIR 아키텍처 위에서 굴러간다. 2) FHIR 정보가 바로 들어가기도 한다.

 

일단~

 


 

 

[LECTURE] 보건의료정보원 FHIR 강좌 16차시 : SMART on FHIR 실습 : edwith

- 한국보건의료정보원

www.edwith.org

실습 ( •̀ ω •́ )✧

0. 서버 준비

1) git hub에서 코드 다운 - https://github.com/cerner/smart-on-fhir-tutorial

 

GitHub - cerner/smart-on-fhir-tutorial: SMART on FHIR developer tutorial

SMART on FHIR developer tutorial. Contribute to cerner/smart-on-fhir-tutorial development by creating an account on GitHub.

github.com

2) Chrome Web Server 추가. - https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related

 

Web Server for Chrome

A Web Server for Chrome, serves web pages from a local folder over the network, using HTTP. Runs offline.

chrome.google.com

3) 웹서버 설정값 변경

choose folder 선택 후 아까 다운받았던 폴더 선택. -> example-smart-app 선택

Enter Port 8080으로 변경.

 

4) http://localhost:8080/health.html 으로 들어가서 잘 되는지 확인.

인데 왜 안 떠요. 아 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3번에서 잘못했네요 머쓱 잘 합시다.

 

1. SMART HEALTH IT

1) 런처 세팅 - https://launch.smarthealthit.org/?auth_error=&fhir_version_2=r4&iss=&launch_ehr=1&launch_url=&patient=&prov_skip_auth=1&provider=&pt_skip_auth=1&p : Smart on Fhir가 만든 퍼블릭 Smart on Fhir 플랫폼

 

SMART App Launcher

App Launch Options

launch.smarthealthit.org

2) 환자와 의사 선택

표시된 버튼을 누르면 환자와 의사를 선택할 수 있는데 아무나 골라본다.

무려 93세의 X가 들어가는 멋있는 환자분이 눈에 들어와서 픽했음. 이름에 X 개간지 ~,, 할아부지 건강하세요.

3) Launch 밑으로 내려 http://localhost:8080/launch.html 입력.

앱 기동된 모습 ~

 

4) 코드 추가.

/src/js/example-smart-app.js로 들어와서 var patient 와 var pt 사이 열심히 친다.

var enc = smart.patient.api.fetchAll({
        	type: 'Encounter'
        	});
        
        $.when(enc).fail(onError);
        $.when(enc).done(function(data){
        	alert(data.length);
        });

실행하면 숫자가 하나 나온다. 자신이 선택한 환자의 Encounter 횟수이다.

 

이젠 알림창이 아니라 제대로 화면에 보이게 해보자.

아까 친 부분을 이렇게 바꾸어준다.

var enc = smart.patient.api.fetchAll({
        	type: 'Encounter'
        	});
        
        $.when(enc).fail(onError);
        $.when(enc).done(function(data){
        	$('#enc').html(JSON.stringify(data));
        });

/index.html 에도 HDL table 다음에 추가해준다.

<h2>Ecountier Resource</h2>
      <table>
      <tr>
      <th>JSON:</th>
      <td id='enc'></td>
      </tr>
      </table>

다시 창을 닫고 런치했을 때 아래와 같이 뭔가 우두둑 나오면 성공.

FHIR 정보를 읽어왔다. 더럽다.

 

$.when(enc).fail(onError);
        $.when(enc).done(function(data){
        	data.forEach(function(result){
        	$('#enc').append('id: '+JSON.stringify(result.id)+'<br>');
        	$('#enc').append('Patient:'+JSON.stringify(result.patient.reference)+'<br>');
        	$('#enc').append('Provider:'+JSON.stringify(result.serviceProvider.reference)+'<br>');
        	$('#enc').append('Class: '+JSON.stringify(result.class)+'<br>');
        	$('#enc').append('<br>');
        	});
        });
        });

바꿔주자.

로 무언가 떠야했지만 나한테 있는 환자에게는 Provider 정보가 없는 것 같고 class도 위에 있어서 그런지 하나도 뜨지 않았다..ㅠㅠㅠ 왜 나만

 $.when(enc).fail(onError);
        $.when(enc).done(function(data){
        	data.forEach(function(result){
        	$('#enc').append('Class: '+JSON.stringify(result.class)+'<br>');
        	$('#enc').append('id: '+JSON.stringify(result.id)+'<br>');
        	$('#enc').append('Patient:'+JSON.stringify(result.patient.reference)+'<br>');
        	//$('#enc').append('Provider:'+JSON.stringify(result.serviceProvider.reference)+'<br>');
        	$('#enc').append('<br>');
        	});
        });

하지만 이렇게 바꾸어주었더니

깔끔하게 등장했다 ~ 기뻐랑 순서랑 있는거 없는거 잘 따져서 적어야할듯하다.

 

 

index.html에 아까 추가했던 코드 밑에 하나를 더 추가해본다.

<h2>Condition Resource</h2>
      <table>
      <tr>
      <th>JSON:</th>
      <td id='cond'></td>
      </tr>
      </table>

이제 계속 고치고 있던 그 파일로 들어가 추가해준다.

var cond = smart.patient.api.fetchAllp({
        	type: 'Condition'
        	});
        $.when(cond).fail(onError);
        $.when(cond).done(function(data){
        	$('#cond').append(JSON.stringify(data));
        	});

... 왜 안 뜨죠ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 오래걸린다. 대체 내가 무엇을 건들었는가

아니 잘 돌아가는데 왜...

var cond = smart.patient.api.fetchAll({
         	type: 'Condition',
 		});
 
 		$.when(cond).fail(onError);
         $.when(cond).done(function(data) {
 		    $('#cond').append(JSON.stringify(data));
 	    });

... 이기지 못하고 복붙했다. 어딘가 잘못쳤나보다.

이렇게 나오면 성공.

정신이 없죠

 

 var cond = smart.patient.api.search({
         	type: 'Condition',
 		});
 
 		$.when(cond).fail(onError);
         $.when(cond).done(function(data) {
 		    $('#cond').html(JSON.stringify(data.data.entry.length));
 	    });

이렇게 바꿔봅니다. 아까는 fetchAll을 사용했지만 이번엔 search를 쓴다.

fetchAll의 경우 다 가져옴. search는 조건에 맞는 것만 선별하여 가져온다.

condition 수가 11개인가봅니다.

count : 2라는 코드를 한 줄 추가하면 딱 2개까지만 가져온다. 

 

5) 환자 추가

이제 새로운 무언갈 추가해보자.

index.html에 추가

<h2>New Patient Resource</h2>
      <table>
      <tr>
      <th>JSON:</th>
      <td id='patient'></td>
      </tr>
      </table>

그 다음 js 파일도 고쳐주는데 어우 너무 기네요 더이상은 칠 수 없어요

var newpt = createNewPatient();
 	    smart.api.create({resource: newpt}).done(function(r) {
 
             var patient = r.data;
             patient["active"] = true;
             $('#patient').html(JSON.stringify(patient));
 		});
function createNewPatient () {
     var pt = {
                "resourceType": "Patient",
                "text": {
                    "status": "generated",
                    "div": "<div><p>Test Patient</p></div>"
                },
                "identifier": [
                    {
                        "use": "usual",
                        "type": {
                            "coding": [
                                {
                                    "system": "http://hl7.org/fhir/v2/0203",
                                    "code": "MR",
                                    "display": "Medical record number"
                                }
                            ],
                            "text": "Medical record number"
                        },
                        "system": "http://hospital.smarthealthit.org",
                        "value": "12345"
                    }
                ],
                "active": false,
                "name": [
                    {
                        "use": "official",
                        "family": [
                            "Lee"
                        ],
                        "given": [
                            "Test Jaehoon"
                        ]
                    }
                ],
                "gender": "male",
                "birthDate": "1977-03-20"
            };
            
    return pt;
    }

상대적으로 빡빡한 편이기 때문에 많은 정보가 들어갔다.

밑에 생겼다!!야호!!

 

2. BILIRUBIN CHART

1) logica로 갑니다. -> 자신의 샌드박스 안으로 들어가 오른쪽 상단의 (+)버튼 클릭. -> Manually 클릭

2) App Launch URL을 적어준다. 포트번호가 겹치면 안 되므로 8086으로 바꾸어 적는다.

3) BILIRUBIN 차트를 다운받기 위해 https://bitbucket.org/HSPCONSORTIUM/ 으로 이동... 이 아니라 다른 사이트인데 접근이 안 된다...!!!!!

https://bitbucket.org/hspconsortium/bilirubin-risk-chart/src/develop/ 된다 ~

왼쪽 옆의 다운로드 버튼을 눌러 다운받자. 압축도 풀고요

 

4) 웹서버 설정 변경

한 번 껐다 킨 후, 포트 번호를 8086으로 바꾸고, 폴더도 src로 바꾸어준다.

 

5) LAUNCH

아까 logica에 만들어두었던 것으로 돌아가보자.

LAUNCH 버튼 클릭. 의사와 환자를 골라 넘어간다.

왼쪽 버튼 누르고 지나간다. 보안 상의 이유로 물어본다고 함.

 

짜자잔. 엥 왜 기록이 없을까요? 그 이유는 환자의 나이에 있다. 61세!!!!!!!!!!!

이건 신생아 기록인데!!!!!!!!!!!!!!!!!!!!!!!!!! 있겠냐 어린 아이를 고르도록 하자...

 

6) 새로운 값 추가

옆 + 버튼을 누르면 새로운 기록이 추가되는 것을 알 수 있다.

1961년 생이시라... 예시에 나온것처럼 2016을 하면 뱉어낸다. 당연... 잘 계산해서 넣어보자.

 

 

드디어 끝... 그럼 안녕💨💨

'FHIR' 카테고리의 다른 글

FHIR 서버 구축  (0) 2022.03.21
FHIR - 서버 구하기 대작전  (0) 2022.03.11
FHIR - 프로파일  (0) 2022.02.25
FHIR - MAVEN  (0) 2022.02.23
FHIR - 서버 구축 ?  (0) 2022.02.23

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

https://tecoble.techcourse.co.kr/post/2021-08-14-docker/

 

docker 이해하기

tecoble.techcourse.co.kr

https://veiled-telescope-427.notion.site/Docker-9d8c9f59f30c4b578be3d8c9abbd0fcd

 

Docker 구조와 인프라

Docker란, 소프트웨어를 신속하게 구축하고, 테스트, 배포를 할 수 있도록 하는 플랫폼이다. 컨테이너라는 단위로 애플리케이션 실행에 필요한 라이브러리 등을 패키징하고 이를 독립적으로 실행

veiled-telescope-427.notion.site

https://velog.io/@ye1219/%EB%8F%84%EC%BB%A4Docker%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

도커(Docker)를 사용하는 이유는 무엇일까?

도커를 사용하면 개발 환경을 이미지화 시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화 시켜 구축할 수 있다. 이런 도커를 사용하는 이유에 대해 간단히 알아보자.개발을 하다

velog.io

 

1. Docker?

: 소프트웨어를 빠르게 배포, 관리할 수 있게 해주는 프로그램. 애플리케이션 컨테이너 런타임

컨테이너를 이용하여 툴을 가볍게 배포하고 이용할 수 있게 해준다.

또, OS를 가상화시켜 작동시키 때문에 어느곳에서도 잘 돌아간다! ! (컨테이너)

  • 팀워크에서 엄청난 이점을 가지고 있다.
    설치할 언어, 프레임 워크, 패키지 등 => 어느 컴퓨터에서든 동일한 환경에서 수행될 수 있다. 컨테이너가 각각 독립적으로 구동되기 때문.
    쉽게 자신이 사용하던 환경을 공유하고 이동할 수 있다.
  • 성능이 뛰어나다.
    가상의 OS라 하면 VM이 생각이 날 수 있다. 또, 그 외에 많은 컨테이너를 지원하는 기능이 있지만 왜 도커를 사용하는가? 라는 의문에서는 도커의 작동방법을 보게 된다면 해결이 될 것이다.
    - VM : 각 가상 환경마다 독립된 커널 OS가 존재. 무겁고 느리다.
    - 도커: 새롭게 커널 OS 생성 X. 기존의 커널 OS 자원을 계승하여 사용.
    새로운 컨테이너를 만드는 것도 굉장히 빠른 방법으로 만들게 된다.

2. 컨테이너?

: 격리된 공간에서 프로세스가 동작하는 기술 (가상화 기술의 하나)

하나의 서버에서 여러 개의 컨테이너를 실행할 수도 있으며, 서로 영향을 주지 않고 독립적으로 실행이 된다.

실행 중인 컨테이너를 시작하거나 멈추며 쉽게 관리하는 것이 가능하다. 

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

컨테이너라는 방식은 도커 전에도 리눅스 컨테이너 등 여러 가지가 있었다.

https://www.44bits.io/ko/keyword/linux-container

 

컨테이너란? 리눅스의 프로세스 격리 기능

리눅스 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술을 의미합니다. 하드웨어를 가상화하는 가상 머신과 달리 커널을 공유

www.44bits.io

컨테이너는 크게 두 가지로 나누어진다.

 

이미지랑 그 외에도 등등 레이어 ~

 


피드백 받은 것.

개발자들이 환경이 너무 다르다. 어떻게 맞출 수 있을까? 이식성 왕 중요했던 과거

이젠 그냥 틀을 데리고 오자. 서로 다른 개발환경에서도 같이 쉽게 개발할 수 있다.

 

코꾸했다. 코드블럭 꾸미기

허름한 코드블럭
정신없는 코드블럭

//히히
System.out.println("얏호");

레인보우~ gradient-light 적용했다.

가독성 최악인듯... 다른 테마를 적용해보아야할까요?

 

생각보다 마음에 드는게 없어서 슬프다. 다음에 좀 더 찾아봐야겠음.

 

22.03.11.

내가 봐도 진짜 저건 보노보노 피피티 같아서 바꿨음 Base16/Snazzy

 

https://highlightjs.org/static/demo/

 

highlight.js demo

 

highlightjs.org

 

'잡담' 카테고리의 다른 글

>충격< 자바 다 까먹어  (0) 2024.05.07

+ Recent posts