電子レセプトとは? UKEファイルとは?
電子レセプトってそもそもなに? レセプトってなに?レセプトの仕組みって?はこちら参考に
ざっくらばんに言うと レセプトは 国への7〜10割分の医療費請求用紙です
支払基金(大まかに言うと社保)、国保 が審査をし これ駄目じゃない?これ違うんじゃない?このレセプト見てなにか感じませんか?というのを 返戻してくる
全然駄目じゃん、こんなの受け付けませんよというのを 増減点 突合で返してくる(これに対して異議申し立て等あるが詳細はいつか)
支払基金、国保を通過したレセプト分を保険者に請求しその分 医療機関にお金が振り込まれる
支払基金、国保は医療機関の味方と言われますが正直 チェックミスやこちらの知識漏れでした等もあったり保険証間違えの返戻出してこなかったりで完全味方の感じは若干感じない
教えてくれたり相談してくれるのは有り難い
担当によっても態度も変わるので変な担当だと精神的ストレスがあります 担当は言えば変更してくれると思われる
電子レセプトについて
さて電子カルテをオンライン送信する際にUKEファイルというデータ様式で保存します
UKEファイルについて
その際のUKEファイルの中身について下記記事参照
UKEファイルの中身を見ると大量に文字や,で区切られていてある意味苦行です
検索ワードが決まっているならCommand(Ctrl)+Fで検索ワードを検索すると該当場所に移動してくれるのでまだ読みやすい
UKEをCSV(Comma-Separated Values カンマで大量に区切られているファイル)形式に変えます
下記 「レセプト電算処理システム電子レセプトの作成手引き」から分かるように カルテというのは人間の域を超えています このようなルール化も医療に関わる現場に負担を強いてます
支払基金等のレセプトチェック担当部署等も残業等をしていたりそれが当たり前になっている環境・人間たち
このようなルールを作るのもあり得ないなと思います
だからこそIT化必要ですね
https://www.ssk.or.jp/seikyushiharai/rezept/iryokikan/iryokikan_02.files/jiki_i01.pdf
時代に追いつけないと生き残れないのは当たり前なので仕方ないですが、医療の現場をもっと知ってからにしてほしいとつくづく思います
話戻してUKEをCSV形式に変えた後、普通にクリックしちゃうとEXCELで開かれちゃうので
右クリックして→このアプリケーションで開く→テキストエディットで開きます(今回 UI(見た目や操作性)がいいのでMACで操作しています Windows操作は
レセプト電算データの中身|レセプトまるみえ君ブログ|note
参考)
下記サイトを参照にコードを記載
途中で下記エラーが出たので下記URL参考に,encoding="shift-jis"を追加
読み込めました
◎CSVファイルのコード等の読み解き
「ハッシュ関数」を用いることで、個人の直接的な識別情報を削除(「匿名 化」)
https://www.mhlw.go.jp/stf/shingi/2r9852000002ss9z-att/2r9852000002ssf5.pdf
https://www.mhlw.go.jp/stf/shingi/2r98520000025pcd-att/2r9852000002624j.pdf
★こちら下記のURL様にとても助けていただきました
http://www.resept.com/BENKYOKAI/reseptseminartext2013.pdf
https://www.ssk.or.jp/seikyushiharai/rezept/iryokikan/iryokikan_02.files/jiki_i01.pdf
https://bijicom.co.jp/karte-equipments
KO⇛公費レコード
公費情報。負担者・受給者番号。
IR
<医療機関情報レコード : 医療機関コード 医療機関名称 点数表コード(医科、歯科・・・)
請求年月日 等>,1,01,1,0710696,,病院名,202103,00,011-700-2233
RE
<レセプト共通レコード :1つのレセプトに対する共通情報。主に患者情報を記載(氏名、性別、生年月日など)、レセプト番号(このデータ内の連番)
>
●RE(レセプト共通)
RE,55<厚生労働病院にこの月提出された 55 番目 のレセプト>,1116<レセプト種別(医科・医保単独・家族・入院外)>,41711<平成 17 年 11 月診療分>,樋口 一葉(姓名間に空 白挿入),2<女(2)、男(1)>,3220725<昭和 22 年 7 月 25 日生>,,,,,,199<199 床病院>,1116 55,,,,01 とは,,
RE,レセプト番号,レセプト種別,診療年月,氏名,性,生年月日,給付割合,入院年月日,病棟区分,一部負担金,特記事項, 病床数,カルテ番号(14番目),割引単価,予備,予備,個別診療科(基金と協議の上,必要に応じ診療科コードを記録)
HO
<保険者レコード:保険者情報を記載。保険者番号、保険証の記号・番号),01010016<保険者番号>,25370741<保険証の記号>,29,1,907,,,,,,,,,<保険証の番号>
SY
<傷病名レコード:傷病名情報。傷病名コード、診療開始日、転記区分 等。
>,3671002,20210120,1,,,01,
SY<傷病名レコード
>,8847607,20210120,1,2049,,,
SY<傷病名レコード
>,3628025,20210120,1,,,,
S Y , 2 5 0 0 0 1 4<1 型 糖 尿 病> , 4 1 7 1 0 0 5<平 成 1 7 年 1 0 月 5 日 診 療 開 始> , 1 <転 帰 は 継 続 ( 1 ) >, 8 0 0 2<修 飾 語 は「 疑 い(8002)> , ,
SY,傷病名コード,診療開始日,転帰修飾語コード,傷病名称,主傷病
SI
<診療行為レコード:診療識別・行為コード、数量、点数、算定日1-31日の情報 等
>,12,1,112007410,,,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,,1,112015770,,74,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,60,1,160081610,,112,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,60,1,160081130,,112,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,60,1,160081550,,400,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,12<診療識別 12(再診)>,1<負担区分 1(医療保険のみ)>,112007410<診療行為コード 112007410(再診(病 院))>,,58<58 点>,1 <1 回>
IY
<医薬品レコード
診療識別コード、医薬品コード、使用量、点数、算定日1-31日の情報 等。
>,60,1,620005210,1,,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
IY,,1,643310225,1,127,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,80,1,199000610,,7,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,80,1,120002910,,68,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SI,80,1,120004270,,7,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
IY,21<診療識別 21(内服)>,1,610443013<医薬品コード 610443013(リピトール錠 5mg)>,2.000<2 錠
>,16< 16 点>,56 <56 回>
特定材料(TO),コメント(CO)の4レコード識別は合わせて摘要欄情
レセプトデータの中のレコード識別はアルファベット2文字で表されるが,マスターファイルはアルファベ ット一文字で表される点に留意。B(ビ)はビョウメイ,Y はヤクザイ
マスタについて
電子点数表
https://www.ssk.or.jp/seikyushiharai/tensuhyo/ikashika/index.files/tensuhyo_01.pdf
(社会保険表章用疾病分類(内容例示表・索引表) [1,236KB]
https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/iryouhoken/database/hokensippei.html)
<レセプト共通レコード :1つのレセプトに対する共通情報。主に患者情報を記載(氏名、性別、生年月日など)、レセプト番号(このデータ内の連番)
>
●RE(レセプト共通)
RE,55<厚生労働病院にこの月提出された 55 番目 のレセプト>,1116<レセプト種別(医科・医保単独・家族・入院外)>,41711<平成 17 年 11 月診療分>,樋口 一葉(姓名間に空 白挿入),2<女(2)、男(1)>,3220725<昭和 22 年 7 月 25 日生>,,,,,,199<199 床病院>,1116 55,,,,01 とは,,
RE,レセプト番号,レセプト種別,診療年月,氏名,性,生年月日,給付割合,入院年月日,病棟区分,一部負担金,特記事項, 病床数,カルテ番号,割引単価,予備,予備,個別診療科(基金と協議の上,必要に応じ診療科コードを記録)
===診療行為マスタについて===
マスタ CSVファイル形式
SI
区分番号 | 診療行為名称 | 点数 | 施行日 | 請求コード |
A000-00 | 初診料 | 288点 | 令和2年4月1日 | 111000110 |
A000-00 | 乳幼児加算(初診) | 75点 | 令和2年4月1日 | 111000370 |
A000-00 | 時間外加算(初診) | 85点 | 令和2年4月1日 | 111000570 |
A000-00 | 休日加算(初診) | 250点 | 令和2年4月1日 | 111000670 |
A000-00 | 乳幼児時間外加算(初診) | 200点 | 令和2年4月1日 | 111011970 |
A000-00 | 乳幼児休日加算(初診) | 365点 | 令和2年4月1日 | 111012070 |
A000-00 | 夜間・早朝等加算(初診) | 50点 | 令和2年4月1日 | 111012470 |
区分番号 | 診療行為名称 | 点数 | 施行日 | 請求コード |
D256-02 | 眼底三次元画像解析 | 200点 | 令和2年4月1日 | 160183310 |
SY
=====
①マスク化について
CSVのマスク化あると思うがMAC用、見つからず とりあえず手作業で「RE」検索 行にある 患者様の名前を消していった(カルテ番号があるので名前なくても判別できる)
②padasを利用
データの確認や加工が簡単になるpandas形式で読み込むのがスタンダード
レセプトUKEファイルはCSVなので .read_csv() 関数 (タブ区切りの場合は read_table())
CSVファイルについて==
またExcelと比べ互換性が高い
「,」で区切られている
Comma Separated Valueの略で、Comma(カンマ)で Separated (区切った)Value(値)
CSVファイルフォーマットの解説:CodeZine(コードジン)
====
===
彷徨いましたが上記サイト様で解決しました
✔'utf-8' でなくshift-jisで
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 19: invalid start byte
今回は 斜視病名がある際に 輻輳を算定しているかをt
にて、REが先頭にきている 行のみ出力される
だと 該当の「160083810」が含まれる行すべて(7個)出力される
or
print(s.find(3))
任意の文字列の位置を取得
これだと何も出力されない
===== その他諸々============================
pandasで特定の文字列を含む行を抽出(完全一致、部分一致) | note.nkmk.me
pandas.Series
の文字列メソッドstr.contains()
を使うと、要素が特定の文字列を含むとTrue
となるpandas.Series
を取得
print(df['name'].str.contains('li'))
# 0 True
# 1 False
# 2 True
# Name: name, dtype: bool
print(df[df['name'].str.contains('li')])
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
pandas.Series
の文字列メソッドstr.startswith()
を使うと、要素が特定の文字列で始まるとTrue
となるpandas.Series
を取得
print(df['name'].str.startswith('B'))
# 0 False
# 1 True
# 2 False
# Name: name, dtype: bool
print(df[df['name'].str.startswith('B')])
# name age state point
❌
pandasで任意の位置の値を取得・変更するat, iat, loc, iloc | note.nkmk.me
df[]
で行・列を選択できるが、以下の指定方法に限られる。
- 行の選択 : 行名・行番号のスライス
- 列の選択 : 列名、または、列名のリスト
print(df['Bob':'Ellen'])
# age state point
# name
# Bob 20 CA 92
# Charlie 30 CA 70
# Dave 40 TX 70
# Ellen 24 CA 88
print(df[:3])
# age state point
# name
# Alice 24 NY 64
# Bob 20 CA 92
# Charlie 30 CA 70
print(df['age'])
# name
# Alice 24
# Bob 20
# Charlie 30
# Dave 40
# Ellen 24
# Frank 30
# Name: age, dtype: int64
print(df[['age', 'point']])
# age point
# name
# Alice 24 64
# Bob 20 92
# Charlie 30 70
# Dave 40 70
# Ellen 24 88
# Frank 30 57
import numpy as np
import scipy as sp
from pandas import Series, DataFrame
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mlp
import seaborn as sns
import sklearn
mydata = pd.read_csv('sample.csv')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 0: invalid start byte
PythonでCSVファイルの読み込み時、UnicodeDecodeErrorによるエラー【初心者向け】 - Qiita
↓, encoding="shift-jis" をつける
pandas.errors.ParserError: Error tokenizing data. C error: Expected 38 fields in line 10, saw 44
↓
pandasでread_csv時にUnicodeDecodeErrorが起きた時の対処 (pd.read_table()) - Qiita
↓
with codecs.open("sample.csv",sep=",",header=0 ,dtype = 'object', "r", "Shift-JIS", "ignore") as file:
SyntaxError: positional argument follows keyword argument
<テキストエディタにて>
with codecs.open("sample.csv",sep=",",header=0 ,dtype = 'object', "r", "Shift-JIS", "ignore") as file:
df = pd.read_table(file, delimiter=",")
print(df)
↓
File "1.py", line 23, in <module>
with codecs.open("sample.csv", "r", "Shift-JIS", "ignore") as file:
NameError: name 'codecs' is not defined
と
with codecs.open("sample.csv",sep=",",header=0 ,dtype = 'object', "Shift-JIS", "ignore") as file:
^
SyntaxError: positional argument follows keyword argument
<わかりやすい→>【Python】pandasでCSV/TSVファイルを読み込む方法
ValueError: header must be integer or list of integers
↓
pandasでデータを読み込むときに気を付けること(dtypeの指定) - Qiita
dtypeに何も指定せずにいると、勝手に型を判別 そのため指定する
dtype = 'object'
テキストエディタにて 下記コード記載 「1.py」という名前をつけ コマンドにて python 1.py で実行
import pandas as pd
import numpy as np
import csv
# ファイルを読み込みモードでオープン
with open('RECEIPTC.UKE', 'r') as f:
reader = csv.reader(f) # readerオブジェクトを作成
# 行ごとのリストを処理する
for row in reader:
print ' '.join(row) # 1行ずつスペース区切りで表示
<join
関数では複数のDataFrame(またはSeries)を結合することが可能
指定した軸の方向にDataFrameを結合するPandasのconcat関数の使い方 - DeepAge
>
PythonでCSVファイルの読み込み・書き込みを行う方法 | UX MILK
↓
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 19: invalid start byte
encoding="shift-jis" を追加した
PythonでCSVファイルの読み込み時、UnicodeDecodeErrorによるエラー【初心者向け】 - Qiita
出来た!
==CSVの読み込みとprint 全体コード====
import pandas as pd
import numpy as np
import csv
# ファイルを読み込みモードでオープン
with open('RECEIPTC.UKE', 'r', encoding="shift-jis") as f:
reader = csv.reader(f) # readerオブジェクトを作成
# 行ごとのリストを処理する
for row in reader:
print(' '.join(row)) # 1行ずつスペース区切りで表示
========
herok またtry
flaskまたtry
jkavascript必要あればtry
「レセプトまるみえ君」の誕生|レセプトまるみえ君ブログ|note
でファイルの読み込み、個人情報をマスクする処理、サーバーに送る、までやります。患者の保険情報、名前、クリニックの名称、電話番号、医療機関コードは消去してから送ら
ログインの機能と辞書ファイルをサーバーに置くために、データをサーバーに送っています。ただし、サーバーのデータベースには保存しないようになっています
マスターから作った辞書を使って傷病名、修飾語、診療行為、のコードを翻訳します。そして、ブラウザに送り返します。サーバーは heroku で PaaS
python, flask
受け取ったデータは javascript で使いやすく並べて、表示
CSVをドラッグ&ドロップ
https://www.google.com/search?q=CSV%E3%82%92%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%EF%BC%86%E3%83%89%E3%83%AD%E3%83%83%E3%83%97&client=ms-android-kddi-jp&sourceid=chrome-mobile&ie=UTF-8
◎ CSVファイルをドラッグ&ドロップでデータをtable表示 ...https://tokidoki-web.com › 2017/06 › csvファイルをドラ...
(【Javascript】ドラッグ&ドロップでCSVを読み込む | Local Biashttps://localbias.work › プログラミング › Javascript)
If
Print
If
Print
を繰返しコード文、書きまくる
行・列・要素を取得
マスターしよう!PythonでのCSVファイル操作方法を徹底解説! | TechTeacher Blog
③ データの整形(データ型変更、列名変更、並び替えなど)
- df.set_index()
- df.rename()
- df.sort_values()
- df.to_datetime()
- df.sort_index()
- df.resample()
- df.apply()
- pd.cut()
# datetime列をindexにする
④ データの欠損状態の確認
- df.isnull()
- df.any()
print(row.isnull().sum()) 付け加えると
↓
AttributeError: 'list' object has no attribute 'isnull'
'list'オブジェクトは 'isnull'属性を持っていない となる
そのままスルーする
⑤ 値(欠損)の置き換えや削除
- df.fillna()
- df.dropna()
- df.replace()
- df.mask()
- df.drop()
⑥ 集計
- df.value_counts()
- df.groupby()
- df.diff()
- df.rolling()
- df.pct_change()
for row in reader:
##print(' '.join(row)) # 1行ずつスペース区切りで表示
#print(row.isnull().sum())
#print(row.isnull())
#print(reader[reader.isnull().any(axis=1)].shape)
kazu= pd(row.groupby('SI' and 'SY').count())
#kazu2=pd.kazu
print(kazu)
↓
AttributeError: 'list' object has no attribute 'groupby'
一旦スルー
⑦ 可視化
- df.plot()
- df.corr()
- df.pivot()
⑨ 最後に、出来たデータをもう一度眺める
- df.to_csv()
https://www.itmedia.co.jp/news/spv/2105/26/news087.html
文章をプログラミング言語に変換 Microsoftがローコード開発ツール「Power Apps」に「GPT-3」活用
Microsoft、自社製RPAツールhttps://www.itmedia.co.jp/news/spv/2103/03/news096.html
===電子カルテ(EMR)等のオープンソースについて=========
##電子カルテ=EMR
今まで検索で電子カルテで調べることが多かったのですが「電子カルテ」と検索すると電子カルテの広告エンジンに引っかかるのか同じような電子カルテの広告や電子カルテの宣伝ばかり出てきました
最近 英語で調べる機会があり 電子カルテは英語でelectronic medical recordといい略称で EMRというようです
EMRで調べてみると英語のサイトがいっぱい出てきました
#英語の記事
オープンソース健康医療ソフトウェアのリスト
どちらも同じものかな?
英語バージョンはリスト化されており見やすい
しかし英語バージョンを日本語訳に変更すると同じような記事になるので同じ記事と思われる(まだ詳しく見れていない)
↓
* 日本語バージョン
* 英語バージョン
http://bots.sourceforge.net/en/index.shtml
http://www.cottagemed.org/cottage-med/
あまり関係ない&詳しく読めてないですが電子カルテで使われているコード等・仕組みについて記載されていると思われます
レセプトデータ作成の際にUKEファイルが作られます
そのUKEファイルをテキストエディタ等でコードを読み解きます。その際のコードを読み解くのですがそれらのことを海外版で記載しているのかなと思われる
それ以外も記載していると思われる
↓
* Feature Engineering of Electronic Medical Records | by Jill Cates | Medium
Medical Free/Libre and Open Source Software
オープンソース健康医療ソフトウェアのリスト と重なるソフトもあると思うがpythonに絞って表示されていると思われる
↓
Python × EHR は良い組み合わせだよね!デザイン性にもいいし!等記載がある
どのような観点が問題か等 主観?で記載しているイメージ
今後参考になるかな?
↓
Site Offline
電子カルテの仕組みがアバウトに分かる
英語でおおよそ読んでわからない単語を調べるだけでも勉強になった
www.quora.com
↓
HIPAA(Health Insurance Portability and
Accountability Act of 1996;
* 米国のHIPAA法における 個人情報等の保護に関する規定
* 医療保険の携行性. と責任に関する法律
HL7
FHIR
http://www.hl7.jp/docs/69seminar_2_HL7.pdf
M/MUMPS
アプリケーション開発手法としてMUMPS/M言語そのものは医療業界以外に広く普及しなかった。
MUMPS - Wikipedia
__↓____________________
Caché(キャシエ)
MUMPSベースのデータベース管理システム
主な顧客はアメリカの大病院が多く、電子カルテ (EMR) システムをCachéで実現
RESTful API(REST API)
Webシステムを外部から利用するためのプログラムの呼び出し規約
WebAPI
_______________________
OLAP database
無償トレーニング
https://education.oracle.com/learning-explorer#startLearning
OLAP分析 DWH OLTP BIツール
5NF 第5正規形
===================================
参考になるか?
[Python]CSVに保存したワイン1600本分のデータを使ってDeepLearingを実装 - Qiita
====
===========
Streamlit を用いたデータ分析アプリ制作 - Qiita
https://www.salesanalytics.co.jp/datascience/datascience017/
*1:"SY"and"3789001")and