Skip to content

stagira13/receparser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Receparser: レセ電パーサライブラリ

ReceparserはPythonで電子レセプトファイルを読み込むためのパーサです。
電子レセプトファイルを読み込み、人間に読み取れる形へ変換します。
現在は医科レセプト・DPCレセプトに対応しています。

電子レセプトファイルはこのような形をしています。

RE,1,1127,42806,サンプルDPC01,1,3160822,,,,,,,1111,,,,,0,,,,,59,,,,
HO,06132013,1234567,1,5,57706,,3,2072,,,44400,,,,1080
KO,80137045,2222222,,5,57706,,,,,0,0,0
BU,110290XX99X00X,4280617,4280621,6,
SB,5849004,,,N178,01,,
SB,5849004,,,N178,11,,
SB,5849004,,,N178,21,,
SB,4280005,,,I500,31,,
SB,4280005,,,I500,41,,
SB,8843935,,,I352,42,,
SB,8836695,,,I050,43,,
KK,,,2,4280429,1,74,,,,,,,

とても人間に読み取れる形式ではありませんし、Pythonでそのまま扱うことも出来ません。
Receparserはこれを、Pythonでも扱いやすいディクショナリ・ライクなオブジェクトに変換します。

各行の先頭にRE,HO,SBのようなアルファベットが付いています。これをレコードと呼び、その行にどのようなデータが格納されているか決めています。
Receparserで読み込んだ、上記ファイルのRE行は以下のような形になります。

{'レコード識別番号': 'RE', 
'レセプト番号': '1', 
'レセプト種別': '1127',
'診療年月': '42806', 
'氏名': 'サンプルDPC01', 
'男女区分': '1',
'生年月日': '3160822'...}

Overview

receparser.Rece

1件単位でレセプトデータを読み込み、並び順に保存したリスト構造です。ただし、レコードをキーにすると、ディクショナリように振る舞い、該当レコードの一覧を返します。

receparser.MontlyRece

ファイル全体を読み込み、カルテ番号をキーにしたディクショナリ・ライクなオブジェクトに変換して返します。
それぞれのキーには、対応する患者のレセプトリストReceオブジェクトのリスト)が格納されます。
(出来高レセプトでは同一月に入外の混在、DPCレセプトでは出来高・DPCの混在等で、一患者に複数レセプトが紐づくケースがあるためです)
第一引数にはファイルを指定し、第二引数にはcodesオプションで読み込む電子レセプトの形式を指定します。
医科レセプトの場合はcodes="ika"、DPCレセプトの場合はcodes="dpc"を指定して下さい。

Usage

from receparser import MonthlyRece,Rece
# 解説用にインポートしています。
# 通常はreceparser.codesを明示的にインポートする必要はありません。
from receparser.codes import dpc_codes,ika_codes
# 例えばdpcレセプトファイルのRE行は、このような構造です。
dpc_codes['RE']
['レコード識別番号', 'レセプト番号', 'レセプト種別', '診療年月', '氏名', '男女区分', '生年月日', '給付割合', '入院年月日', '病棟区分', '一部負担金区分', 'レセプト特記事項', None, 'カルテ番号等', '割引点数単価', None, None, None, 'レセプト総括区分', '明細情報数', '検索番号', '記録条件仕様年月情報', '請求情報', '診療科名', '診療科_人体の部位', '診療科_性別等', '診療科_医学的処置', '診療科_特定疾病']
# サンプルファイルを読み込みます。
# 読み込みの際には、codesオプションに"dpc"か"ika"を指定します。
dpc = MonthlyRece('dpcsample.csv',codes="dpc")
# .keysでカルテ番号の一覧を見ることが出来ます。
# ディクショナリのように動きます。.items(),.values()も使えます。
dpc.keys()
dict_keys(['1111', '', '2222', '3333', '4444', '5555', '6666', '8888', '9999', '101010'])
# レコードを指定すれば、その内容を見ることが出来ます。ディクショナリのリストが返ります。
dpc['1111'][0]['RE']
[{'レコード識別番号': 'RE', 'レセプト番号': '1', 'レセプト種別': '1127', '診療年月': '42806', '氏名': 'サンプルDPC01', '男女区分': '1', '生年月日': '3160822', '給付割合': '', '入院年月日': '', '病棟区分': '', '一部負担金区分': '', 'レセプト特記事項': '', 'カルテ番号等': '1111', '割引点数単価': '', 'レセプト総括区分': '0', '明細情報数': '', '検索番号': '', '記録条件仕様年月情報': '', '請求情報': '', '診療科名': '59', '診療科_人体の部位': '', '診療科_性別等': '', '診療科_医学的処置': '', '診療科_特定疾病': ''}]
# 複数のレコードが記録されている場合は以下のようになります。
dpc['1111'][0]['SB']
[{'レコード識別番号': 'SB', '傷病名コード': '5849004', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'N178', '傷病名区分': '01', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '5849004', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'N178', '傷病名区分': '11', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '5849004', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'N178', '傷病名区分': '21', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '4280005', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'I500', '傷病名区分': '31', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '4280005', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'I500', '傷病名区分': '41', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '8843935', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'I352', '傷病名区分': '42', '死因': '', '補足コメント': ''}, {'レコード識別番号': 'SB', '傷病名コード': '8836695', '修飾語コード': '', '傷病名称': '', 'ICD10コード': 'I050', '傷病名区分': '43', '死因': '', '補足コメント': ''}]
import pandas as pd
# レコードに対してpandasを使えば、簡単にDataFrameやSeriesへ変換出来ます。
pd.DataFrame(dpc['1111'][0]['SB'])
<style> .dataframe thead tr:only-child th { text-align: right; }
.dataframe thead th {
    text-align: left;
}

.dataframe tbody tr th {
    vertical-align: top;
}
</style>
ICD10コード レコード識別番号 修飾語コード 傷病名コード 傷病名区分 傷病名称 死因 補足コメント
0 N178 SB 5849004 01
1 N178 SB 5849004 11
2 N178 SB 5849004 21
3 I500 SB 4280005 31
4 I500 SB 4280005 41
5 I352 SB 8843935 42
6 I050 SB 8836695 43
pd.Series(dpc['1111'][0]['RE'])
カルテ番号等             1111
レコード識別番号             RE
レセプト特記事項               
レセプト番号                1
レセプト種別             1127
レセプト総括区分              0
一部負担金区分                
入院年月日                  
割引点数単価                 
明細情報数                  
検索番号                   
氏名            サンプルDPC01
生年月日            3160822
男女区分                  1
病棟区分                   
給付割合                   
記録条件仕様年月情報             
診療年月              42806
診療科_人体の部位              
診療科_医学的処置              
診療科_性別等                
診療科_特定疾病               
診療科名                 59
請求情報                   
dtype: object
# 医科ファイルの読み込みも同様です
ik = MonthlyRece('ikasample.csv',codes="ika")
ik.keys()
dict_keys(['1111', '', '2222', '5555', '666', '7777', '8888', '9999', '101010'])

動作環境

現在のところ、Python 3.x系の標準ライブラリのみに依存します。

About

receipt data parser

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published