SecondaryUse開発日記

データベース参照ツールを開発しています。そのツールの開発、利用方法秘話などなどの紹介

データベース参照ツール、SecondaryUse(二次利用)

SecondaryUseとは任意のデータをデータベースからSQLで取得し表示します
SQLをサーバに保存すれば、利用者全員で共有が出来ます。またローカルファイルとして登録すれば端末ごとに任意のSQLを実行することも可能です

表示したデータはエクセルへのエクスポートも簡単にできますし、ワードへの差し込み印刷も可能です

エクセルへのエクスポートでは自動でグラフ表示も可能です

CSVXMLへの出力も可能です

 

SecondaryUseはデータの二次利用を簡単に実現します

 f:id:syskobo:20190422155018j:plain

本来DBBrowserはエディタ上に入力したSQLを実行しデータを表示していましたが、誰でも簡単にデータ抽出出来るようにSQLを外部に保存し実行できるようにしたのがSecondaryUseです

DBBrowser同様、サーバとの通信はSOAPを利用していますので、ORACLEなどはClientのインストールが不要です。

さらに、SSLを利用してインターネット経由でもデータベースとの接続が可能です。

また、ODBCでの接続も出来るのでローカルネットワーク環境ではサーバなしでも利用できます

syskobo.hatenablog.com

令和2年度診療報酬改定対応 - 看護必要度の再構築 - 地域包括ケア病棟

syskobo.hatenablog.com

 

地域包括ケアの看護必要度はA項目とC項目の評価になります

なので、B項目の入力を待たずに利用可能です

f:id:syskobo:20200326083839j:plain

 

必要度Ⅰ:満たしているか否か A項目点数 - B項目点数

 ※A項目点数のA7⑤⑩⑪は入力データから取得

必要度Ⅱ:満たしているか否か A項目点数 - B項目点数

 ※A項目点数は全て医事から取得

 

★機能強化

医事側で算定した項目を右クリックメニューから表示できるようにしました

f:id:syskobo:20200326083850j:plain

 

令和2年度診療報酬改定対応 - 看護必要度の再構築6

syskobo.hatenablog.com

看護必要度診療明細データ作成の最終章です

区分ごとに分かれたデータを患者、日付毎に結合します

 

SELECT
PTNO --患者番号
,YMD ーー日付
,min(BTOCD) BTOCD --病棟コード

, max(decode(kbn,'A11',1,'A12',1,0)) +
sum(decode(kbn,'A21',1,0) +
decode(kbn,'A31',1,0) +
decode(kbn,'A41',1,0) +
decode(kbn,'A51',1,0) +
decode(kbn,'A61',1,0)) +
max(decode(kbn,'A71',2,'A72',2,'A73',2,'A74',2,'A75',2,'A76',2,'A77',2,'A78',2,'A79',2,'A710',2,'A711',2,0)
) aten  --A項目点数

,sum(decode(kbn,'C16',1,0) +
decode(kbn,'C17',1,0) +
decode(kbn,'C18',1,0) +
decode(kbn,'C19',1,0) +
decode(kbn,'C20',1,0) +
decode(kbn,'C21',1,0) +
decode(kbn,'C23',1,0) +
decode(kbn,'C24',1,0)) +
max(decode(kbn,'C221',1,'C222',1,'C223',1,0)
) CTEN --C項目点数

,sum(decode(kbn,'A11',1,'A12',1,0) + decode(kbn,'A31',1,0)) eten --???予備

,count(*) cc  --データ数

,sum(decode(kbn,'A11',1)) A11 -- それぞれの項目
,sum(decode(kbn,'A12',1)) A12
,sum(decode(kbn,'A21',1)) A2

~~~~ 省略 ~~~~

 ,sum(decode(kbn,'A711',1)) A711
,null A8  -- 救急はまだ未対応
,sum(decode(kbn,'C16',1)) C16
,sum(decode(kbn,'C17',1)) C17

~~~~ 省略 ~~~~ 

,sum(decode(kbn,'C223',1)) C223
,sum(decode(kbn,'C23',1)) C23
,sum(decode(kbn,'C24',1)) C24

from (   --算定しているデータを取得
select * from MV_EFA11 WHERE TANITEN <> '00000000' union  
select * from MV_EFA12 WHERE TANITEN <> '00000000' union
select * from MV_EFA2 WHERE TANITEN <> '00000000' union

~~~~ 省略 ~~~~

select * from MV_EFC223 WHERE TANITEN <> '00000000' union
select * from MV_EFC23 WHERE TANITEN <> '00000000' union
select * from MV_EFC24
) a

group by PTNO, YMD

 

f:id:syskobo:20200313111049p:plain

 

言葉足らずの所が多々ありますので気になる方はご質問ください

最終的には上記データとB項目を結合することになります

その内容は診療報酬改定対応が済んでからになると思いますのでしばらくお待ちください

また、ここまで作成してから気付いたのですが、看護必要度2では歯科は除外との事です

令和2年度診療報酬改定対応 - 看護必要度の再構築5

syskobo.hatenablog.com

月単位の診療明細データを日単位に分割します

また、必要日数分のデータを展開します

 

SELECT
trim(PTNO) PTNO --患者番号
,KACD --診療科コード
,SHINKBN --診療区分
,TAISHOYM --対象年月
,trim(BTOCD) BTOCD --病棟コード
,DT AS YMD --日付(modelで生成)
--,TAISHOYM || TO_CHAR(MAP0,'FM00') YMD ーー日付(1日のみのデータのとき)
,KBN  --必要度区分
,nm  ーー名称
,KIKINCD --基金コード
,NAIBUCD --内部コード
,INPCD --入力コード
,map99 --MAP1~MAP31の値
,TANITEN --点数

from (
select a.*, 1 map0, map1 map99 from V_EFC223 a WHERE map1 <> 0 union all
select a.*, 2 map0, map2 map99 from V_EFC223 a WHERE map2 <> 0 union all

~~~~ 中略 ~~~~ 

select a.*, 29 map0, map29 map99 from V_EFC223 a WHERE map29 <> 0 union all
select a.*, 30 map0, map30 map99 from V_EFC223 a WHERE map30 <> 0 union all
select a.*, 31 map0, map31 map99 from V_EFC223 a WHERE map31 <> 0
)

model
partition by ( KBN, nm, KIKINCD, PTNO,KACD,SHINKBN,TAISHOYM,BTOCD, NAIBUCD, INPCD, map0 , TANITEN, map99 )
dimension by ( 0 as ind )
measures ( TAISHOYM || TO_CHAR(MAP0,'FM00') as DT )
rules(
DT[for ind from 0 to 4 increment 1 ] = to_char(to_date(DT[0],'YYYYMMDD')+cv(ind),'YYYYMMDD')
)

 

model句ついては検索して下さい

codezine.jp

 

意図したデータが出来るか確認します

f:id:syskobo:20200313101321p:plain

MAP3=当月3日を先頭に7日まで展開されました

f:id:syskobo:20200313101414p:plain

次回はたぶん看護必要度診療明細データ作成の最終章です

 

syskobo.hatenablog.com

令和2年度診療報酬改定対応 - 看護必要度の再構築4

syskobo.hatenablog.com  

看護必要度診療明細データの作成(マテリアライズド・ビュー)

 

看護必要度入力コードコード一覧と看護必要度の再構築3で作成した医事システム診療明細データを外部結合します。このとき複数レコードに分かれている診療データを一つに纏めます

 

SELECT

m.KBN  --必要度区分
,s.PTNO  --患者番号
,s.KACD --診療科コード
,s.SHINKBN --診療区分
,s.TAISHOYM --対象年月
,s.BTOCD --病棟コード
,s.TANITEN --点数
,s.KOMOKU NAIBUCD -- 項目コード
,s.INPCD --入力コード
,m.KIKINCD --基金コード
,m.nm --名称
,s.NYGKBN --入外区分

,sum(MAP1) MAP1  --対象年月 1日
,sum(MAP2) MAP2  --対象年月 2日
,sum(MAP3) MAP3

~~~ 省略 ~~~ 

,sum(MAP29) MAP29
,sum(MAP30) MAP30  --対象年月 30日
,sum(MAP31) MAP31  --対象年月 31日

from V_MASTER m  ーー看護必要度入力コードコード一覧
left join MV_SHINRYOVIEW s on m.NAIBUCD = s.KOMOKU  --医事システム診療明細データ
where s.PTNO is not null

group by m.KBN , s.PTNO,s.KACD,s.SHINKBN,s.TAISHOYM,s.BTOCD,s.KOMOKU,s.INPCD,s.TANITEN, m.nm, s.NYGKBN ,m.KIKINCD


f:id:syskobo:20200312171016p:plain

 

また、データを扱いやすくするため区分ごとにデータを分けますビューを作成します

CREATE OR REPLACE VIEW V_EFA11

SELECT * from MV_SHINRYODATA where KBN = 'A11'

 ~~~ 省略  ~~~  

CREATE OR REPLACE VIEW V_EFC223

SELECT * from MV_SHINRYODATA where KBN = 'C223'

 ~~~ 省略  ~~~  

 

ビューはA1~C24まで行います

f:id:syskobo:20200313092421p:plain

次回は月単位の明細データを日単位に分割します

 

syskobo.hatenablog.com

令和2年度診療報酬改定対応 - 看護必要度の再構築3

syskobo.hatenablog.com

「医事システム診療明細データ」はそのままでは使いにくいので使いやすくします

・現在の医事システムの明細データは月毎のテーブルに保存されますので、UNION で繋いで一つのデータにします

・小児は看護必要度から除外ですので14歳以下のデータは除外します

放射線治療以外の外来のデータは除外します(これは運用によります)

 ・毎月何十万となるのでマテリアライズド・ビューで作成

 

select

k.PTNO --患者番号

,KACD --診療科コード

,SHINKBN --診療区分

,TAISHOYM --対象年月

,KOMOKU --項目コード
,trim(BTOCD) BTOCD  --病棟コード
,trim(INPCD) INPCD --入力コード
,SANTEIKBN --算定区分

,TANITEN --点数

,NYGKBN, --入外区分

MAP1,MAP2,MAP3,MAP4,   --MAP1=当該月の1日 、MAP2=当該月の2日
MAP5,MAP6,MAP7,MAP8,MAP9,MAP10,MAP11,MAP12,MAP13,MAP14,MAP15,MAP16,
MAP17,MAP18,MAP19,MAP20,MAP21,MAP22,MAP23,MAP24,MAP25,MAP26,MAP27,MAP28,
MAP29,MAP30,MAP31,

to_number(to_CHAR(TRUNC(MONTHS_BETWEEN(sysdate,to_date(i.BIRTH)) / 12),'FM999')) age  -- 患者年齢

from (

-- ★ 2020/04 H 32/04 0176
SELECT
s.PTNO,s.KACD,s.SHINKBN,s.TAISHOYM, s.BTOCD, d.KOMOKU , d.INPCD, d.SANTEIKBN, d.TANITEN, s.NYGKBN,
MAP1,MAP2,MAP3,MAP4,
MAP5,MAP6,MAP7,MAP8,MAP9,MAP10,MAP11,MAP12,MAP13,MAP14,MAP15,MAP16,
MAP17,MAP18,MAP19,MAP20,MAP21,MAP22,MAP23,MAP24,MAP25,MAP26,MAP27,MAP28,
MAP29,MAP30,MAP31
from SHINRYOKEYVIEW0176 s
left join SHINRYODATAVIEW0176 d on d.PTNO = s.PTNO and d.KEYRECNO = s.KEYRECNO
where s.NYGKBN in ('1','3') or ( s.KACD in ('18') and s.SHINKBN in ('82'))

 

union

-- ★ 2020/05 H 32/05 0177
SELECT
s.PTNO,s.KACD,s.SHINKBN,s.TAISHOYM, s.BTOCD, d.KOMOKU , d.INPCD, d.SANTEIKBN, d.TANITEN, s.NYGKBN,
MAP1,MAP2,MAP3,MAP4,
MAP5,MAP6,MAP7,MAP8,MAP9,MAP10,MAP11,MAP12,MAP13,MAP14,MAP15,MAP16,
MAP17,MAP18,MAP19,MAP20,MAP21,MAP22,MAP23,MAP24,MAP25,MAP26,MAP27,MAP28,
MAP29,MAP30,MAP31
from SHINRYOKEYVIEW0177 s
left join SHINRYODATAVIEW0177 d on d.PTNO = s.PTNO and d.KEYRECNO = s.KEYRECNO
where s.NYGKBN in ('1','3') or ( s.KACD in ('18') and s.SHINKBN in ('82'))


union
-- ★ 2020/06 H 32/06 0178
SELECT
s.PTNO,s.KACD,s.SHINKBN,s.TAISHOYM, s.BTOCD, d.KOMOKU , d.INPCD, d.SANTEIKBN, d.TANITEN, s.NYGKBN,
MAP1,MAP2,MAP3,MAP4,
MAP5,MAP6,MAP7,MAP8,MAP9,MAP10,MAP11,MAP12,MAP13,MAP14,MAP15,MAP16,
MAP17,MAP18,MAP19,MAP20,MAP21,MAP22,MAP23,MAP24,MAP25,MAP26,MAP27,MAP28,
MAP29,MAP30,MAP31
from SHINRYOKEYVIEW0178 s
left join SHINRYODATAVIEW0178 d on d.PTNO = s.PTNO and d.KEYRECNO = s.KEYRECNO
where s.NYGKBN in ('1','3') or ( s.KACD in ('18') and s.SHINKBN in ('82'))

 

~~~ 省略 ~~~ 

-- ★ 2020/06 H 32/06 0178

-- ★ 2020/07 H 32/07 0179

-- ★ 2020/08 H 32/08 0180

    

) k

left join kihonview01 i on i.ptno = k.ptno --患者情報

where to_number(to_CHAR(TRUNC(MONTHS_BETWEEN(sysdate,to_date(i.BIRTH)) / 12),'FM999')) > 14   ーー年齢 

 

f:id:syskobo:20200312170050p:plain

 

また、上記データと点数マスタを外部結合すれば、院内統計などの資料作成に利用できると思います

f:id:syskobo:20200313091404p:plain

 

syskobo.hatenablog.com