AI×医療事務(カナダ)

今は医療事務しているので医療事務関連、IT関連をのんびりと備忘録も含め記載していきます カナダ・歯科助手のことも復習がてら記載中 

AI python ITを扱う個人情報データ等についての取り扱いについて

はじめに

病名チェッカー兼 算定チェッカーを作るにあたり 診療録とUKEファイルにて個人情報が含まれるため 今後 活用していくために調べるに至りました

 

記事の概要

個人情報を使うにあたって 気になる部分 のpickupと自分なりにまとめました

 

 

内容

匿名加工情報

加工すれば一定のルールの下で利用目的による規制をなくし、本人の同意を得ることなく第三者提供を可能とする

というものであるらしい

 

atmarkit.itmedia.co.jp

 

 

個人情報の種類⇓

  1. まずは、当該情報に含まれる氏名、生年月日、その他の記述などにより特定の個人を識別できるもの。すなわち、当該情報に含まれている記述だけで、「誰々のことだ」と個人を識別できてしまうもの
  2. もう一つは、当該情報に含まれている記述だけでは個人を識別できないが、他の情報と容易に照合することができ、それによって「誰々のことだ」と個人を識別できてしまうもの
  3. 法律上で定義されている「個人識別符号」、具体的には「指紋認証データ」「顔画像データ」「マイナンバー」などに該当するもの

 

「誰の目から見て個人情報なのか」という観点で考える必要がある

 

 

 

 

仮名加工情報  の部分の内容が勉強になった

一部 の個人情報に当たる部分を加工することで使用していくものであった

URL内ではクレジット情報 等の情報であった

www.ppc.go.jp

 

 

www.komon-lawyer.jp

 

まとめ

恐らく  レセプトであれば 仮名加工情報 に変換する必要がありそうだ

患者番号がわかればいいので 名前については使用するデータで削除が必要そうだ

(住所、年齢、電話番号 等は元々 UKEファイルに情報がないので削除が必要ない)

 

 

flask Heroku エラー内容がほぼ(途中?)

はじめに

今作成中のflaskアプリをとりあえず 上げるためにHerokuへのデプロイを行いたいと思い、備忘録も兼ねて今回記事を書きました

 

参考サイト

 

[Python] プログラム初心者のためのWebアプリ簡単作成法

 

- Qiita

Herokuのapp作成手順(buildpack-multiを使う場合も含む) - Qiita

Herokuへのデプロイ方法【Heroku+Rails+MySQL】 - Qiita

 環境:

Git管理

コマンドライン上で、作成したプロジェクトのディレクトリに移動

cd  ◎◎

以下をコマンドを実行すると、プロジェクトがGitで管理(1個ずつしないと作動しない)

git init


Initialized empty Git repository in /◎◎/◎◎/flask/flask2/.git/

git add . 

何も出ない

git commit -m "<適当なコミットメッセージ>"

(おそらく今現在 位置するディレクトリ内にあるディレクトリ、ファイル等の名前が表示される)

[master (root-commit) (英数字)] <適当なコミットメッセージ>

0 files changed, 462 insertions(+)
 create mode 100644 css/style.css
 create mode 100644 flask.py
 create mode 100644 main.py
 create mode 100644 static/javascript/sample2.js
 create mode 100644 static/javascript/sample.js
 create mode 100644 templates/form.html
 create mode 100644 templates/index.html
 create mode 100644 templates/index2.html
 create mode 100644 templates/layout.html
 create mode 100644 test.py

または

[master 43b15f] newsample
 1 file changed, 1 insertion(+)
 create mode 100644 runtime.txt

git log

commit (英数字の羅列  おそらくgitのIDかなにか) (HEAD -> master)
Author: Sample <herokuにて登録しているメールアドレス>❗
Date:   Fri Jun 17 19:28:48 2022 +0900

 

またはcommit (英数字の羅列  おそらくgitのIDかなにか) (HEAD -> master)
Author: Sample <herokuにて登録しているメールアドレス>
Date:   Fri Jun 17 20:59:02 2022 +0900

    newsample

commit (英数字の羅列  おそらくgitのIDかなにか) (HEAD -> master)
Author: Sample <herokuにて登録しているメールアドレス>
Date:   Fri Jun 17 19:28:48 2022 +0900

    <適当なコミットメッセージ>
(END)

Herokuのアカウント作成

https://jp.heroku.com/

Herokuのtoolbelt    インストール

https://devcenter.heroku.com/articles/heroku-cli

MACコマンドラインにて  

brew tap heroku/brew && brew install heroku

を実行

コマンドライン上でherokuコマンドが使えるようになる

brew tap heroku/brew && brew install heroku

Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

You have 29 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.

To link this version, run:
  brew link heroku

 

Herokuのバージョンを確認

heroku -v

heroku/7.53.0 darwin-x64 node-v12.21.0

 

SSHキー

SSH キーの管理 | Heroku Dev Center

  

ssh-keygen -t rsa

実行


Generating public/private rsa key pair.
Enter file in which to save the key (/Users/◎◎/.ssh/id_rsa):         
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/◎◎/.ssh/id_rsa.
Your public key has been saved in /Users/◎◎/.ssh/id_rsa.pub.
The key fingerprint is:
(英数字の羅列+++++++++++++++++++++++)
The key's randomart image is:
+---[英数字でなにか]----+
|英語と記号の羅列 が何行か|
|英語と記号の羅列  |

|英語と記号の羅列  |

|英語と記号の羅列  |

|英語と記号の羅列  |
+----[英数字でなにか]-----+

 

作成したHerokuアカウントにキーを追加

herokuにログイン

heroku login
SSHキーがherokuのアカウントに追加
heroku keys:add ~/.ssh/id_rsa.pub
 実行
(どのようなディレクトリに入っているとしても上記で実行される)

Uploading /◎◎/◎◎/.ssh/id_rsa.pub SSH key... done

 

追加に成功していれば、以下のコマンドで追加したSSHキーが確認

heroku keys

 実行


 (登録しているメールアドレス ❗現在のもの❗) keys
(英数字と記号の羅列)= (use名)@(PCの機種).local

 

(違うアカウントやE-mailが出た場合)

(directory : ~/.git/config)

git config --global user.name 'Your Name' git config 
--global user.email '<your_email>'

(何も出ないが他Herokuアカウントが追加される)

Herokuにアプリケーション を作成

コマンドライン上で、プロジェクトのディレクトリに移動

cd ◎◎

Herokuにアプリケーションを作成

(※Herokuのアプリ名には英数字とハイフンしか使えない。)

heroku apps:create  ** (Herokuのアプリ名。英数字とハイフンのみ)

(Creating ⬢ flask1... !)
( ▸    Name flask1 is already taken ) →※この意味はすでに使われているという意味

                    そのためまだ作れていない     

Creating ⬢ (Herokuのアプリ名)... done
https://(Herokuのアプリ名).herokuapp.com/ | https://git.heroku.com/(Herokuのアプリ名).git

 

 

Herokuのリモートリポジトリを確認

git remote -v

heroku  https://git.heroku.com/newsample.git (fetch)
heroku  https://git.heroku.com/newsample.git (push)
origin  https://github.com/(Gitのアカウント名)/flask2.git (fetch)
origin  https://github.com/(Gitのアカウント名)/flask2.git (push)

 

 

=========

Herokuのアプリケーション名変更

git:remote -a sampleflask1    

›   Error: Couldn't find that app.
 ›
 ›   Error ID: not_found

===========

 

 

Herokuへデプロイ

 

ローカルリポジトリをHerokuへpush

git push heroku master(main)

(※master以外のローカルブランチをpushする場合は、以下のコマンドを実行)

git push heroku <ブランチ名>:master

今現在のpythonのver ⇛Python 3.8.5 (default, Sep  4 2020, 02:22:02) 

 

Counting objects: 26, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (26/26), 9.40 KiB | 283.00 KiB/s, done.
Total 26 (delta 2), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Python app detected
remote: -----> Using Python version specified in runtime.txt
remote:  !     Python has released a security update! Please consider upgrading to python-3.8.13
remote:        Learn More: https://devcenter.heroku.com/articles/python-runtimes
remote: -----> Installing python-3.8.5
remote: -----> Installing pip 22.1.2, setuptools 60.10.0 and wheel 0.37.1
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote:        Collecting absl-py==0.9.0
remote:          Downloading absl-py-0.9.0.tar.gz (104 kB)
remote:          Preparing metadata (setup.py): started
remote:          Preparing metadata (setup.py): finished with status 'done'
remote:        Collecting astor==0.8.1
remote:          Downloading astor-0.8.1-py2.py3-none-any.whl (27 kB)
remote:        Collecting bleach==3.1.5
remote:          Downloading bleach-3.1.5-py2.py3-none-any.whl (151 kB)
remote:        Collecting bottle==0.12.18
remote:          Downloading bottle-0.12.18-py3-none-any.whl (89 kB)
remote:        Collecting click==7.1.2
remote:          Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
remote:        Collecting certifi==2020.6.20
remote:          Downloading certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
remote:        Collecting chardet==3.0.4
remote:          Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
remote:        Collecting flask==2.0.1
remote:          Downloading Flask-2.0.1-py3-none-any.whl (94 kB)
remote:        Collecting future==0.18.2
remote:          Downloading future-0.18.2.tar.gz (829 kB)
remote:          Preparing metadata (setup.py): started
remote:          Preparing metadata (setup.py): finished with status 'done'
remote:        Collecting gast==0.3.3
remote:          Downloading gast-0.3.3-py2.py3-none-any.whl (9.7 kB)
remote:        Collecting grpcio==1.31.0
remote:          Downloading grpcio-1.31.0-cp38-cp38-manylinux2014_x86_64.whl (3.4 MB)
remote:        Collecting gunicorn==20.0.4
remote:          Downloading gunicorn-20.0.4-py2.py3-none-any.whl (77 kB)
remote:        Collecting h5py==2.10.0
remote:          Downloading h5py-2.10.0-cp38-cp38-manylinux1_x86_64.whl (2.9 MB)
remote:        Collecting html5lib==1.1
remote:          Downloading html5lib-1.1-py2.py3-none-any.whl (112 kB)
remote:        Collecting itsdangerous==2.0
remote:          Downloading itsdangerous-2.0.0-py3-none-any.whl (18 kB)
remote:        Collecting idna==2.10
remote:          Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
remote:        Collecting Jinja2==3.0.1
remote:          Downloading Jinja2-3.0.1-py3-none-any.whl (133 kB)
remote:        Collecting line-bot-sdk==1.16.0
remote:          Downloading line_bot_sdk-1.16.0-py2.py3-none-any.whl (59 kB)
remote:        Collecting Markdown==3.2.2
remote:          Downloading Markdown-3.2.2-py3-none-any.whl (88 kB)
remote:        Collecting MarkupSafe==2.0
remote:          Downloading MarkupSafe-2.0.0-cp38-cp38-manylinux2010_x86_64.whl (30 kB)
remote:        Collecting numpy==1.18.0
remote:          Downloading numpy-1.18.0-cp38-cp38-manylinux1_x86_64.whl (20.6 MB)
remote:        Collecting oauthlib==3.1.0
remote:          Downloading oauthlib-3.1.0-py2.py3-none-any.whl (147 kB)
remote:        Collecting pillow==7.2.0
remote:          Downloading Pillow-7.2.0-cp38-cp38-manylinux1_x86_64.whl (2.2 MB)
remote:        Collecting protobuf==3.12.4
remote:          Downloading protobuf-3.12.4-cp38-cp38-manylinux1_x86_64.whl (1.3 MB)
remote:        Collecting PyYAML==5.4.1
remote:          Downloading PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl (662 kB)
remote:        Collecting python-dotenv==0.14.0
remote:          Downloading python_dotenv-0.14.0-py2.py3-none-any.whl (17 kB)
remote:        Collecting requests==2.25.1
remote:          Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
remote:        Collecting scipy==1.4.1
remote:          Downloading scipy-1.4.1-cp38-cp38-manylinux1_x86_64.whl (26.0 MB)
remote:        Collecting six==1.15.0
remote:          Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)
remote:        Collecting tensorboard==2.3.0
remote:          Downloading tensorboard-2.3.0-py3-none-any.whl (6.8 MB)
remote:        Collecting tensorflow-cpu==2.3.0
remote:          Downloading tensorflow_cpu-2.3.0-cp38-cp38-manylinux2010_x86_64.whl (137.4 MB)
remote:        Collecting termcolor==1.1.0
remote:          Downloading termcolor-1.1.0.tar.gz (3.9 kB)
remote:          Preparing metadata (setup.py): started
remote:          Preparing metadata (setup.py): finished with status 'done'
remote:        Collecting urllib3==1.26.5
remote:          Downloading urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
remote:        Collecting Werkzeug==2.0.0
remote:          Downloading Werkzeug-2.0.0-py3-none-any.whl (288 kB)
remote:        Collecting packaging
remote:          Downloading packaging-21.3-py3-none-any.whl (40 kB)
remote:        Collecting webencodings
remote:          Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
remote:        Collecting tensorboard-plugin-wit>=1.6.0
remote:          Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)
remote:        Collecting google-auth<2,>=1.6.3
remote:          Downloading google_auth-1.35.0-py2.py3-none-any.whl (152 kB)
remote:        Collecting google-auth-oauthlib<0.5,>=0.4.1
remote:          Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB)
remote:        Collecting tensorflow-estimator<2.4.0,>=2.3.0
remote:          Downloading tensorflow_estimator-2.3.0-py2.py3-none-any.whl (459 kB)
remote:        Collecting wrapt>=1.11.1
remote:          Downloading wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)
remote:        Collecting google-pasta>=0.1.8
remote:          Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
remote:        Collecting opt-einsum>=2.3.2
remote:          Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)
remote:        Collecting keras-preprocessing<1.2,>=1.1.1
remote:          Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
remote:        Collecting astunparse==1.6.3
remote:          Downloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
remote:        Collecting pyasn1-modules>=0.2.1
remote:          Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
remote:        Collecting rsa<5,>=3.1.4
remote:          Downloading rsa-4.8-py3-none-any.whl (39 kB)
remote:        Collecting cachetools<5.0,>=2.0.0
remote:          Downloading cachetools-4.2.4-py3-none-any.whl (10 kB)
remote:        Collecting requests-oauthlib>=0.7.0
remote:          Downloading requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB)
remote:        Collecting pyparsing!=3.0.5,>=2.0.2
remote:          Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
remote:        Collecting pyasn1<0.5.0,>=0.4.6
remote:          Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
remote:        Building wheels for collected packages: absl-py, future, termcolor
remote:          Building wheel for absl-py (setup.py): started
remote:          Building wheel for absl-py (setup.py): finished with status 'done'
remote:          Created wheel for absl-py: filename=absl_py-0.9.0-py3-none-any.whl size=121939 sha256=28e42f7ac416ae3cdb1b7baf75c41647b007b5761703273c73b034d9806be73b
remote:          Stored in directory: /tmp/pip-ephem-wheel-cache-nw5e4f9c/wheels/1d/10/8e/2f79b924179ff1e6510933d63eb851bea01054fff262343b7a
remote:          Building wheel for future (setup.py): started
remote:          Building wheel for future (setup.py): finished with status 'done'
remote:          Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491070 sha256=a6907538bffc20ab8b8167ca380437922a7c8eb58c64125d802046ce5ee3b35e
remote:          Stored in directory: /tmp/pip-ephem-wheel-cache-nw5e4f9c/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4
remote:          Building wheel for termcolor (setup.py): started
remote:          Building wheel for termcolor (setup.py): finished with status 'done'
remote:          Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4848 sha256=60791da2a76c3b8f01238054e2602f5c38d4a788022003ba8000f2b37d9500fb
remote:          Stored in directory: /tmp/pip-ephem-wheel-cache-nw5e4f9c/wheels/a0/16/9c/5473df82468f958445479c59e784896fa24f4a5fc024b0f501
remote:        Successfully built absl-py future termcolor
remote:        Installing collected packages: webencodings, termcolor, tensorflow-estimator, tensorboard-plugin-wit, python-dotenv, pyasn1, chardet, certifi, bottle, wrapt, Werkzeug, urllib3, six, rsa, PyYAML, pyparsing, pyasn1-modules, pillow, oauthlib, numpy, MarkupSafe, Markdown, itsdangerous, idna, gunicorn, gast, future, click, cachetools, astor, scipy, requests, protobuf, packaging, opt-einsum, keras-preprocessing, Jinja2, html5lib, h5py, grpcio, google-pasta, google-auth, astunparse, absl-py, requests-oauthlib, line-bot-sdk, flask, bleach, google-auth-oauthlib, tensorboard, tensorflow-cpu
remote:        Successfully installed Jinja2-3.0.1 Markdown-3.2.2 MarkupSafe-2.0.0 PyYAML-5.4.1 Werkzeug-2.0.0 absl-py-0.9.0 astor-0.8.1 astunparse-1.6.3 bleach-3.1.5 bottle-0.12.18 cachetools-4.2.4 certifi-2020.6.20 chardet-3.0.4 click-7.1.2 flask-2.0.1 future-0.18.2 gast-0.3.3 google-auth-1.35.0 google-auth-oauthlib-0.4.6 google-pasta-0.2.0 grpcio-1.31.0 gunicorn-20.0.4 h5py-2.10.0 html5lib-1.1 idna-2.10 itsdangerous-2.0.0 keras-preprocessing-1.1.2 line-bot-sdk-1.16.0 numpy-1.18.0 oauthlib-3.1.0 opt-einsum-3.3.0 packaging-21.3 pillow-7.2.0 protobuf-3.12.4 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-3.0.9 python-dotenv-0.14.0 requests-2.25.1 requests-oauthlib-1.3.1 rsa-4.8 scipy-1.4.1 six-1.15.0 tensorboard-2.3.0 tensorboard-plugin-wit-1.8.1 tensorflow-cpu-2.3.0 tensorflow-estimator-2.3.0 termcolor-1.1.0 urllib3-1.26.5 webencodings-0.5.1 wrapt-1.14.1
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 257.9M
remote: -----> Launching...
remote:        Released v3
remote:        https://clinic-checker.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/clinic-checker.git
 * [new branch]      master -> master

アプリケーションにアクセス

heroku open

 

(Homebrew をアップデート)

brew update

 

(python をアップデート)

brew upgrade python3

 

アプリを実行  上手く行けばアプリが出る

heroku open

 

<<私のコード自体が パスが相対パスだったりエラーが有ったのと そもそもHerokuは使わないほうが良かったので一旦ここまで>

================

エラー1:

fatal: Not a git repository (or any of the parent directories): .git

 

エラー2;

remote: !       Your account(Herokuの登録しているメールアドレス) does not have access to newsample.
fatal: unable to access 'https://git.heroku.com/newsample.git/': The requested URL returned error: 403

 

git push heroku master をすると403エラーが発生する - スタック・オーバーフロー

 

エラー3; 

error: failed to push some refs to 'https://git.heroku.com/clinic-checker.git'

 

**

Counting objects: 26, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (20/20), done.

Writing objects: 100% (26/26), 9.40 KiB | 137.00 KiB/s, done.

Total 26 (delta 2), reused 0 (delta 0)

remote: Compressing source files... done.

remote: Building source:

remote:

remote: -----> Building on the Heroku-22 stack

remote: -----> Using buildpack: heroku/python

remote: -----> Python app detected

remote: -----> Using Python version specified in runtime.txt

remote: ! Requested runtime (python-3.8.5) is not available for this stack (heroku-22).

remote: ! Aborting. More info: https://devcenter.heroku.com/articles/python-support

remote: ! Push rejected, failed to compile Python app.

remote:

remote: ! Push failed

remote: !

remote: ! ## Warning - The same version of this code has already been built: 4309db9e87801c563af9e7776c083d43d6561fc3

remote: !

remote: ! We have detected that you have triggered a build from source code with version 4309db9e87801c563af9e7776c083d43d6561fc3

remote: ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.

remote: !

remote: ! If you are developing on a branch and deploying via git you must run:

remote: !

remote: ! git push heroku <branchname>:main

remote: !

remote: ! This article goes into details on the behavior:

remote: ! https://devcenter.heroku.com/articles/duplicate-build-version

remote:

remote: Verifying deploy...

remote:

remote: ! Push rejected to clinic-checker.

remote:

To https://git.heroku.com/clinic-checker.git

! [remote rejected] master -> master (pre-receive hook declined)

error: failed to push some refs to 'https://git.heroku.com/clinic-checker.git'

**

heroku のアップグレードをしたので 

Anaconda内のpythonのverが合っていなかった

(   Heroku Python Support | Heroku Dev Center)


しかしAnacondaのアップグレードがとても時間がかかったので下記URLを実行

Anaconda navigatorのアップデートが終わらないときの対処方法メモ

MACの場合、Command + スペース キーにて Spotlight検索を出す

 

Anacondaを起動

AnacondaNavigater   の仮想環境にて(ここではbaseにて) ▶を左クリック(右クリックにするとロード?になりしばらく触れなくなるので左クリック)

Open Terminal をクリックし Anaconda Promptを開く

 

conda update --all 

 をコマンドにて実行

にて

yを入れてエンター(リターンキー)

AnacondaPromptを閉じる

 

conda update --all 

 をコマンドにて実行

# All requested packages already installed.

 

pythonのverを該当のものをインストール

conda install python-3.10.5 



 

終了

============

 

 

python で レセプトの病名チェック・算定漏れ等(一部)

(令和4年6月9日 改良部分が多々あるので  参考程度にお願い致します)

 

はじめに

環境

記事の概要

作成したプログラム

今後の活用

終わりに

 

 

 

はじめに

現役で医療事務をしています

医療業界には様々な 

「非効率」  「複雑化」「情報のばらつき」

等問題点が多いため上げるときりがないです が

まずは、

医療事務の仕事はルーティンワークが多く 且つ 患者様等とのコミュニケーションを取りながらの大量の事務作業が多いため 

「自動化」「簡素化」

出来ないかということがpythonを学び始めたきっかけです

今回 Aidemyさんを受講したのは 無料版をした際に「見やすい」

progate等 基礎を固めたぐらいの「初心者にもわかりやすい」と以前から思っていたからです

また職業訓練給付金の対象になっていたということもあります

 

環境

Python 3.8.8 

pandas           : 1.1.3

python           : 3.8.5.final.0

glob2                                             0.7

pip              : 21.3.1

IDE: Visual Studio Code 

(pipコマンドで確認: pip list)

記事の概要

▶対象者

どのような方にも読んでいただきたいですが

医療業界で働いている方  医療業界に関わりがある業者の方  に少しだとしても為になるのではないかと思っています

▶どのようなことをしていくか

データ分析 。

詳細に記載すると、

診療録である.txtデータ→私が使用している電子カルテであれば診療録が .txtの拡張子として保存が常にされています

請求書になる.UKEファイル(形式は.csv)→国に提出するレセプトという ある意味 請求書の情報が記載されているデータ

 

 

レセプトは 患者様の自己負担金以外の金額を国に請求するための いわゆる請求用紙です

それぞれの 検査等に対し 様々な項目があり 各々に点数が割り当てられています

該当の検査等の項目をレセプトに記載し、国に請求することを算定する(以下、算定するという言葉を使用) といいます

 

診療録である.txtデータにて

該当の検査をしているか 該当のキーワードを分析

請求書になる.UKEファイル(形式は.csv)  にて

該当のキーワードとなる行にて 該当となる 傷病名コードと診療コード(コードについてはHPに著作権があるので 傷病名コード(医科)等調べると該当HPが出ます)があるか分析

各々の分析を照合し 

算定しているが 

算定する際に必要 且つ 検査しており所見として見られる病名があるかチェックする

「病名漏れ」  

検査を行っている 且つ  検査しており所見として見られる病名がある   が

算定していない

「算定漏れ」

を出力する

 

レセプトは1日30人患者様がいらっしゃっているとして 30人×31日でおおよそ900件ほどあるので 人間の力ではどうしても漏れが発生します

患者様への未収金分の回収、返金処理等 迷惑をかけることも増えます

そのため 患者様への負担を軽減する。医療事務の仕事量を軽減する という意味で良い点があります

 

最終目標としては医療事務が一人一人の患者様の会計前に その日に行った検査に対する算定を請求しているか、算定に伴う患者様ごとの病名を目視にて確認しています

作業についてはルールに沿って確認しています ルーティン作業になります

人間が行うと効率化すれば5分、人によっては30分チェックにかかります

人間一人一人の能力によって患者様が支払いに待つ時間が変わってしまうので患者様に待たせることなく早い時間で支払いを行えるようにし病院にいるのはただでさえ疲れるので早めに病院を終え薬などもすぐに受け取れるように、ストレスを軽減する というのが目標です

 

shinryohoshu.mhlw.go.jp

developer.medley.jp

電子レセプトについて

www.kartemaker.com

 

 

 

作成したプログラム

 

①必要なものをimport 等していきます

#①必要なものをimport 等
from calendar import month
from dataclasses import dataclass
import os
from os import O_EXLOCK
from flask import g
import pandas as pd
import numpy as np
import csv
import glob
import re

from flask import Flask, request,redirect, url_for, Response,render_template

 

②診療録の記載がある 拡張子.txt(以降 診療録という単語を使って説明していく) が入っているパスをglobを使用し,

すべて読み取り datastoresに格納

(print関数にて目的のものが出力されるか確認もする)

 
datastores = glob.glob('/(該当のディレクトリ)/病名漏れと算定漏れチェッカー/(該当のディレクトリ)/*/*.txt')
#print(text_lists)

 

ディレクトリ構成は下記

(該当のディレクトリ)/*(年月日)/*.txt(.txtの拡張子のあるファイル   画像の場所では1つのみある)

③datastoresに格納されている 診療録が保存されているパス1件1件をfor文で取り出す

txtデータのファイル名は「 _ 」で区切られている  

_ で区切られている1番目が患者番号に該当するため (txtdirsp[0]) とし該当の患者番号を出力するために後々使用する

#後々使う変数の用意
exam3dpatients =
submitdatepatients =
 
#print(datastores)
for text_list2 in datastores:
#⭐datastores のパスを/で区切る
dirsp = text_list2.split("/")
#⭐ .text の拡張子ファイルすべてを出力
diralltextfiles = dirsp[-1]
#print(diralltextfiles)
#⭐ .text の拡張子ファイルを_で区切る
txtdirsp = diralltextfiles.split("_")
#(txtdirsp[0])
#print(txtdirsp)
 

 

④診療録のデータを1件openし content 変数に格納していく

 
with open(text_list2) as f:
content = f.read()

 

⑤診療録の中身に"3D" または "OCT" の文字列が存在すれば、exam3dpatients変数に txtdirsp[0](患者番号)を格納する


if "3D" or "OCT" in content:
#print(txtdirsp[0])
exam3dpatients += [txtdirsp[0]]
#print(exam3dpatients)

 

⑥点検用レセプト(私が使用しているカルテは点検用レセプトデータにしか薬の情報は入っていないため、院外処方となっているため提出するUKEファイルというものには薬の情報が全く入っていないため)を参照し

点検用レセプト(国保).UKE をopen、  kokuho変数に格納

点検用レセプト(社保).UKEをopen、syaho変数に格納

<当ブログでは  kokuho変数のデータのみ使用していく>

点検用レセプトは 1患者につき ここで使用するもので言うと  RE、SY、SI 行というもので構成されている

UKEファイルについては下記URL  P6〜P8  参照

http://www.resept.com/BENKYOKAI/reseptseminartext2013.pdf

RE,SY,SI は いづれかの行にいづれか1個のみが一番左の1列目に記載されている

RE がある行に 患者情報

SY がある行に  傷病名情報

SIがある行に 診療行為情報

RE、SY、SI 行のワンセットの1人目の患者の情報が終わるとき 次のRE行が出現する そのRE行から 2人目の情報となる

 
# 下記のfor文でline変数に格納する場合、同一患者で複数回line変数が繰り返される。
 
kokuho = open("/(ディレクトリ名)/(ディレクトリ名)/点検用レセプト(国保).UKE", encoding="shift-jis")

 
syaho = open("/(ディレクトリ名)/(ディレクトリ名)/点検用レセプト(社保).UKE", encoding="shift-jis")

 

 

⑦今回は 眼底三次元(D256-2 眼底三次元画像解析  200点)  という算定項目を対象とする

shirobon.net

三次元病名が 点検用レセプト内のSYが存在する行に存在するかどうかチェックする

そのため 三次元病名の 「傷病名コード」を sanjigen_byoumei変数に格納する

 該当病名は各都道府県ごとに違うことと個人情報となるためここでは  [1,2,3,4]と表すこととする

sanjigen_byoumei = [1,2,3,4]
 

国保の点検レセプトから1要素ずつ取り出しfor文で処理をしていく

line_RE = False
line_SY = False
line_SI = False

kokuhoARI3D = []
#文字列じゃないと出力できない
for line in kokuho:
#print(kokuho)
#print(sanjigen_byoumei)

 

⑨レセプトの1要素にREが出てくるたびに患者番号(splitしてインデックス番号13番めの内容)を格納、line_◯◯ の状況を更新

 
if 'RE' in line:
name = line.split(',')[13] #*
#print("ID:"+ name)
line_RE = True
line_SY = False
line_SI = False
 

 

⑩ レセプトの1要素に SYが出現し かつ 三次元病名の傷病名コードに当てはまる記述があれば line_SYをTrueにする

 
if "SY" in line and any (id in line for id in sanjigen_byoumei):
#print(name)
#▶ok
line_SY = True # SYの該当あり判定

⑪レセプトの1要素に SIが出現し かつ 眼底三次元の 診療行為番号(ここでは非公開とする ネットにて診療行為コードと検索すると対象のサイトが現れるので探せる)に当てはまる記述があれば ,line_SIをTrueにする

kokuhoARI3d という関数について ここでのif文の条件式に当てはまった患者番号を

⑨のname関数にて取得する

 
if 'SI' and "(ここでは非公開とする)" in line:
#print(name) # 患者名出力
 
line_SI = True
# listに追加していく形にする
kokuhoARI3D += [name] ###この条件にあてはまった患者番号をREに該当するline変数の中の記述(*上記)から取得する。
#print(kokuhoARI3D)
 

 

⑫line_SY が当てはまらない(レセプトの1要素に SYが出現し かつ 三次元病名の番号に当てはまる記述がない) 

かつ 

line_SI に該当する(レセプトの1要素に SIが出現し かつ 眼底三次元の診療行為コードに当てはまる記述がある)

<要約すると 検査はしているが病名がない>

ならば

 検査はしているが病名がない 患者番号(name)を出力

 
 
if not line_SY and line_SI:
print(name + ":kokuho三次元の病名がない") # 患者名出力
line_RE = False
line_SY = False
line_SI = False
# 初期化

 

 

 

検査を行っているが(exam3dpatients)が三次元を算定していない患者番号(nowmonth3dID)を出力していく

exam3dpatientsは⑤参照   kokuhoARI3D は⑪参照

exam3dpatients は重複しているデータを省くと260件

kokuhoARI3D は64件となる

出力されるのは248件の患者番号となる

結果 検査を行っているが 算定を行っていない患者は248件となる

<この部分にて該当の年月日を 指定する コードを記載していないため上記 248件となった 更に改良し使用する際は 該当年月日も条件として指定した件数が出力される予定である>

 
kokuho3dexamARInonSANTEI = {}
nowmonth3dID = {}
#64件 ARI3D  654件 exam
#リスク回避
if len(kokuhoARI3D) >len(exam3dpatients) :
kokuho3dexamARInonSANTEI = set(kokuhoARI3D) - set(exam3dpatients)
else:
kokuho3dexamARInonSANTEI = set(exam3dpatients) - set(kokuhoARI3D)


if submitdatepatients:
nowmonth3dID = kokuho3dexamARInonSANTEI
print("kokuho三次元を算定してない:" + nowmonth3dID)

 

 

 

今後の活用

「自動化」「効率化」をポイントに行いたいことは多数あるのですが

まず 直近の目標として

今回のコードについて

→一部なのでコードの完成後Flaskアプリ化し GUI形式で使用できるようにする

最終的には

診療録として扱える電子カルテアプリを作成し今回の病名チェカー兼算定チェッカーを使用できるようにする

そのため対象のサイトからデータを自動取得する等 更なる自動化を行いたい

 

Aidemy さんで今回 データ分析を学んでいるので、

時系列解析等も今現在作成中なので作成し発展させ来院患者数と月ごとの売上(診療報酬の総合)を予測する

 

データ分析に関係ないものとして興味があるものが

Twilio 等で電話対応 自動化 

ネット予約のサイト、自動受付 等  多々興味があるので

その他についてはゆっくり行っていきたいと思っています 

 

 

終わりに

自分の性格としては完璧主義な部分があり自分でどうにかしようとする面があるので

思い切って Aidemyさんのチュータの方にカウンセリングや質問をし

自分で調べ続ければわかるのでは?と思うものも積極的に聞けるチューターの方の存在はとても必須だと感じました

就職しOJT等で教えていただくのが一番環境としてはいいかもしれません

(その職場の教える方等が良さそうであれば)

私の場合は 医療事務を本業としてこれからも働いていく予定なので、 本業で使用できるものを作成しながら 副業としてどこかで働ければと考えているのでサービスを多用しながら模索していきたいと思います

 

 

 

Git  リポジトリ作成方法   アップロード方法

 

 

 
令和4年5月13日
Git リポジトリ 作成方法

 

今回、職場と自宅でコードの進捗状況をしっかり共有するためにGitにアップロードする方法を復習することになりました

 

コマンドにて⇓

…or create a new repository on the command lin

 

 
echo "# etc" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/ARL-art/etc.git
git push -u origin main 

 

とあるがGit上で  リポジトリを作ったほうが最初のうちは早いと思われる

 

ファイルアップロードについても下記 アップロード手順で 手動でしたほうが最初のわからないうちはいいかもしれない

 

 

 

下記興味のある記事があったのだが 逆に頭が混乱しそうなので今は上の方法のみで使用していきたいと思います

大まかの内容だけはあらかたつかめました

 

VSCodeでのGitの基本操作まとめ - Qiita

 

 

2020/08/10/155948

今更ながら Ai academyの無料テキストが終わり、paizaもレベルアップ(まだDレベル  お勧めのC☆を選んで難しそうだったので一旦挫折)し燃え尽き レセプト提出やらでバタバタ・新人指導の詰めでバタバタし(言い訳) 連休で疲れを癒してました

 

日曜日に復活しAI Academyのテキスト無料版が増えているのを発見し久しぶりに見たり、QUITTAでやる気アップし少しネットサーフィンし勉強

月曜日(本日・祝日)、面倒だけど基本に返り今まで 言語ばかりしてきたけどQUIITTAにあった下記の記事を参考にGit  Command Lineができないといけないと書いていたような気がして 久しぶりのprogateでCommand LineとGitを勉強

 

 

qiita.com

 

言語ばかり勉強していたのとprogateが易しめで分かりやすいからか2-3hほどでどちらも終了

なんだか分かっているつもりだったところとスルーしてきたところが分かってきた

今段階の認識ではGitは他の人と共有するためのものとしか認識していないけどまぁ良いかなと思います

 

医療事務を効率化したい! クラウドサービス作りたい! Webアプリ作りたい! にまだまだ遠いような気がするしスクールにお金払ったほうが早いのかなと思いながら仕事の忙しさを言い訳に自分のペースでできる独学で!と頑張り続けてはいます

 

どこに行けばいいのか方向性が時々分からなくなるのでガムシャラに分からないところをただただ調べて色々手を出して未だにアプリやら実用化は出来ていないけどコツコツ頑張るしかないと思っています

 

基礎固め頑張ります!

 

 

 

令和4年5月27日

上記、Gitとの連携を解除する方法

.git を削除

通常隠しファイルになっている


今現在作成しているファイルやフォルダが入っている対象ディレクトリにて

command + shift + .(コマンド + シフト + ピリオド)   と実行

上記のように.git フォルダが見える

 

 

 

算定  D261 屈折検査   

D261 屈折検査

  1.  1 6歳未満の場合
    69点
  2.  2 1以外の場合
    69点

注 1について、弱視又は不同視と診断された患者に対して、眼鏡処方箋の交付を行わずに矯正視力検査を実施した場合には、小児矯正視力検査加算として、35点を所 定点数に加算する。この場合において、区分番号D263に掲げる矯正視力検査は 算定しない。

通知

(1) 屈折検査は、検眼レンズ等による自覚的屈折検定法又は検影法、レフラクトメーターによる他覚的屈折検定法をいい、両眼若しくは片眼又は検査方法の種類にかかわらず、所定 点数により算定し、裸眼視力検査のみでは算定できない。

→解釈:普通に視力検査をしただけではとれない 検眼レンズ等による自覚的屈折検定法又は検影法、レフラクトメーターによる他覚的屈折検定法を行った場合のみ取れるということ

 

(2) 散瞳剤又は調節麻痺剤を使用してその前後の屈折の変化を検査した場合には、前後各1 回を限度として所定点数を算定する。

→解釈: 屈折病名がはじめてついた日に屈折(1)散瞳していない場合を算定

次に来院した場合に散瞳剤を使用し屈折検査を施行  

D261-00  屈折検査(薬剤使用前後)(1以外)  138点を算定

(ただし矯正視力は 屈折異常の疑いがあるとして初めて検査を行った場合又は眼鏡処方箋を交付した場合に限り併せて算定 ということで 併算定できない)

 

D261-00

屈折検査(薬剤使用前後)(6歳未満)

138点

D261-00

屈折検査(薬剤使用前後)(1以外)

138点

 

(3) 屈折検査と区分番号「D263」矯正視力検査を併施した場合は、屈折異常の疑いがあるとして初めて検査を行った場合又は眼鏡処方箋を交付した場合に限り併せて算定できる。 ただし、本区分「1」については、弱視又は不同視が疑われる場合に限り、3月に1回(散瞳剤又は調節麻痺剤を使用してその前後の屈折の変化を検査した場合には、前後各1 回)に限り、区分番号「D263」矯正視力検査を併せて算定できる。

→解釈: 屈折異常の疑いがあるとして初めて検査を行った場合又は眼鏡処方箋を交付した場合に限り併せて算定できる。 について 屈折異常の疑いがあるとは病名のこと 加齢黄斑変性等は屈折に関係ない 遠視性乱視 等 視力や屈折に関係ある病名がついいた場合が屈折異常の疑いがあると判定された日となる

 

(4) 「注」に規定する加算は、「1」について、弱視又は不同視と診断された患者に対して、眼鏡処方箋の交付を行わずに矯正視力検査を実施した場合に、3月に1回(散瞳剤又は調節麻痺剤を使用してその前後の屈折の変化を検査した場合には、前後各1回)に限り、所定点数に加算する。

(令和4年版)
 
 
 
 

D263 矯正視力検査

  1.  1 眼鏡処方箋の交付を行う場合
    69点
  2.  2 1以外の場合
    69点

通知

眼鏡を処方する前後のレンズメーターによる眼鏡検査は、矯正視力検査に含むものとする。

 

 

D265 角膜曲率半径計測

  1. D265 角膜曲率半径計測
    84点
 
 
算定本に基づくと上記算定解釈になります
屈折については同月に屈折病名がついたときと眼鏡処方を行った場合 屈折が引かれる都道府県もあります
結局、チェックする審査員(Dr)によってルールが変わるところもあり その部分は全国 統一してほしいとつくづく思います