Compare commits

..

No commits in common. "master" and "v3.0.0" have entirely different histories.

370 changed files with 3809 additions and 10206 deletions

3
.gitignore vendored
View File

@ -15,6 +15,3 @@ stepfunctions/*/build
# python test
.coverage
.report/
# log
.log

View File

@ -1,62 +0,0 @@
# EC2インスタンス管理資材
## NLBゲートウェイ インスタンス 起動スクリプト
### 目的
Merck様のDB接続経路としてのNLBから、Auroraデータベースに踏み台アクセスを行うため、ゲートウェイの機能を提供するEC2インスタンスを稼働している。
EC2インスタンス内では、NLBからの任意のポートをAuroraデータベースのポートにフォワーディングするために、`socat`プロセスを動かす必要がある。
`socat`プロセスを動かすためのコマンドと、EC2インスタンス起動時にプロセスを実行するためのsystemdの設定を配置している。
### フォルダ構成
```txt
.
├── README.md -- 当ファイル
└── gateway
├── staging -- ステージング環境用設定
│ ├── public1-1 -- ap-northeast-1aのインスタンス要設定
│ │ ├── socat-dbconnection-1a.service -- systemdにsocatプロセスを登録するためのファイル
│ │ └── socat-portforwarding-1a.sh -- socatでAuroraデータベースにポートフォワーディングするためのシェルスクリプト
│ └── public2-1 -- ap-northeast-1dのインスタンス要設定
│ ├── socat-dbconnection-1d.service
│ └── socat-portforwarding-1d.sh
├── product -- 本番環境用設定
│ ├── public1-1
│ │ ├── socat-dbconnection-1a.service
│ │ └── socat-portforwarding-1a.sh
│ └── public2-1
│ ├── socat-dbconnection-1d.service
│ └── socat-portforwarding-1d.sh
```
### ファイル配置方法(両環境共通)
- 対象のゲートウェイEC2インスタンスにログインする
- セッションマネージャーでログインした場合は、`ec2-user`に切り替えること(`sudo su --login ec2-user`)
- 以下の操作を実行し、`socat`プロセスを起動するシェルスクリプトを配置する。
- **ap-northeast-1aのインスタンス(public-1-1)の場合**
- `sudo vi /opt/socat-portforwarding-1a.sh`コマンドを実行する。
- `ec2/gateway/<環境名>/public-1-1/socat-portforwarding-1a.sh`の内容をコピペして保存する。
- `sudo chmod 774 /opt/socat-portforwarding-1a.sh`コマンドを実行する。
- **ap-northeast-1dのインスタンス(public-2-1)の場合**
- `sudo vi /opt/socat-portforwarding-1d.sh`コマンドを実行する。
- `ec2/gateway/<環境名>/public-2-1/socat-portforwarding-1d.sh`の内容をコピペして保存する。
- `sudo chmod 774 /opt/socat-portforwarding-1d.sh`コマンドを実行する。
- 以下の操作を実行し、`socat`プロセスを常駐させるためのサービス設定ファイルを配置する。
- **ap-northeast-1aのインスタンス(public-1-1)の場合**
- `sudo vi /etc/systemd/system/socat-dbconnection-1a.service`コマンドを実行する。
- `ec2/gateway/<環境名>/public-1-1/socat-dbconnection-1a.service`の内容をコピペして保存する。
- `sudo chmod 774 /etc/systemd/system/socat-dbconnection-1a.service`コマンドを実行する。
- **ap-northeast-1dのインスタンス(public-2-1)の場合**
- `sudo vi /etc/systemd/system/socat-dbconnection-1d.service`コマンドを実行する。
- `ec2/gateway/<環境名>/public-2-1/socat-dbconnection-1d.service`の内容をコピペして保存する。
- `sudo chmod 774 /etc/systemd/system/socat-dbconnection-1d.service`コマンドを実行する。
- 以下の操作を実行し、`socat`プロセスを起動するスクリプトをsystemdに登録する
- **ap-northeast-1aのインスタンス(public-1-1)の場合**
- `sudo systemctl enable socat-dbconnection-1a.service`コマンドを実行し、サービスを有効化する。
- `sudo systemctl status socat-dbconnection-1a.service`コマンドを実行し、サービスのステータスを確認する。`enabled;`となっていればOK
- **ap-northeast-1dのインスタンス(public-2-1)の場合**
- `sudo systemctl enable socat-dbconnection-1d.service`コマンドを実行し、サービスを有効化する。
- `sudo systemctl status socat-dbconnection-1d.service`コマンドを実行し、サービスのステータスを確認する。`enabled;`となっていればOK

View File

@ -1,10 +0,0 @@
[Unit]
Description = socat-dbconnection-1a
[Service]
ExecStart = /opt/socat-portforwarding-1a.sh
Type = oneshot
RemainAfterExit = yes
[Install]
WantedBy = default.target

View File

@ -1,3 +0,0 @@
#!/bin/bash
socat tcp4-listen:40001,reuseaddr,fork TCP:mbj-newdwh2021-product-dbcluster-instance-1.chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &
socat tcp4-listen:50001,reuseaddr,fork TCP:mbj-newdwh2021-product-dbcluster.cluster-chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &

View File

@ -1,10 +0,0 @@
[Unit]
Description = socat-dbconnection-1d
[Service]
ExecStart = /opt/socat-portforwarding-1d.sh
Type = oneshot
RemainAfterExit = yes
[Install]
WantedBy = default.target

View File

@ -1,3 +0,0 @@
#!/bin/bash
socat tcp4-listen:40001,reuseaddr,fork TCP:mbj-newdwh2021-product-dbcluster-instance-1-ap-northeast-1d.chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &
socat tcp4-listen:50001,reuseaddr,fork TCP:mbj-newdwh2021-product-dbcluster.cluster-chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &

View File

@ -1,10 +0,0 @@
[Unit]
Description = socat-dbconnection-1a
[Service]
ExecStart = /opt/socat-portforwarding-1a.sh
Type = oneshot
RemainAfterExit = yes
[Install]
WantedBy = default.target

View File

@ -1,3 +0,0 @@
#!/bin/bash
socat tcp4-listen:40001,reuseaddr,fork TCP:mbj-newdwh2021-staging-dbcluster-instance-1.chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &
socat tcp4-listen:50001,reuseaddr,fork TCP:mbj-newdwh2021-staging-dbcluster.cluster-chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &

View File

@ -1,10 +0,0 @@
[Unit]
Description = socat-dbconnection-1d
[Service]
ExecStart = /opt/socat-portforwarding-1d.sh
Type = oneshot
RemainAfterExit = yes
[Install]
WantedBy = default.target

View File

@ -1,3 +0,0 @@
#!/bin/bash
socat tcp4-listen:40001,reuseaddr,fork TCP:mbj-newdwh2021-staging-dbcluster-instance-1-ap-northeast-1d.chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &
socat tcp4-listen:50001,reuseaddr,fork TCP:mbj-newdwh2021-staging-dbcluster.cluster-chs11qsgoyix.ap-northeast-1.rds.amazonaws.com:3306 &

View File

@ -1,20 +0,0 @@
# Node.jsで実装されたLambdaの管理対象外ファイル群
package-lock.json
node_modules/
# ローカル確認用環境変数ファイル
.env
# Pythonの仮想環境ファイル
.venv
# pythonのキャッシュファイル
__pycache__/
# StepFunctionsステートメント定義変換後のフォルダ
stepfunctions/*/build
**/.vscode/settings.json
# python test
.coverage
.report/
# log
.log

View File

@ -1,15 +1,15 @@
FROM python:3.12-slim-bookworm
FROM python:3.8
ENV TZ="Asia/Tokyo"
# pythonの標準出力をバッファリングしないフラグ
ENV PYTHONUNBUFFERED=1
# pythonのバイトコードを生成しないフラグ
ENV PYTHONDONTWRITEBYTECODE=1
WORKDIR /usr/src/app
COPY Pipfile Pipfile.lock ./
RUN \
apt update -y && \
# パッケージのセキュリティアップデートのみを適用するコマンド
apt install -y unattended-upgrades && \
unattended-upgrades && \
pip install --upgrade pip wheel setuptools && \
pip install pipenv --no-cache-dir && \
pipenv install --system --deploy && \
pip uninstall -y pipenv virtualenv-clone virtualenv

View File

@ -11,7 +11,7 @@ test = "pytest tests/"
[packages]
boto3 = "*"
simple-salesforce = "==1.12.6"
simple-salesforce = "==1.12.4"
tenacity = "*"
[dev-packages]
@ -23,4 +23,4 @@ pytest-html = "*"
moto = "*"
[requires]
python_version = "3.12"
python_version = "3.8"

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
### ツールのバージョン
- Python 3.12.x
- Python 3.8.x
- PipEnv(Pythonの依存関係管理用モジュール)
### 開発環境

View File

@ -12,87 +12,87 @@ from src.system_var.environments import (CRM_BACKUP_BUCKET, CRM_CONFIG_BUCKET,
RESPONSE_JSON_BACKUP_FOLDER)
class S3Client:
class S3Resource:
def __init__(self, bucket_name: str) -> None:
self.__s3_client = boto3.client(AWS_RESOURCE_S3)
self.__s3_bucket = bucket_name
self.__s3_resource = boto3.resource(AWS_RESOURCE_S3)
self.__s3_bucket = self.__s3_resource.Bucket(bucket_name)
def get_object(self, object_key: str) -> str:
response = self.__s3_client.get_object(Bucket=self.__s3_bucket, Key=object_key)
response = self.__s3_bucket.Object(object_key).get()
body = response[S3_RESPONSE_BODY].read()
return body.decode(S3_CHAR_CODE)
def put_object(self, object_key: str, local_file_path: str) -> None:
self.__s3_client.upload_file(Filename=local_file_path, Bucket=self.__s3_bucket, Key=object_key)
self.__s3_bucket.upload_file(Key=object_key, Filename=local_file_path)
return
def copy(self, src_bucket: str, src_key: str, dest_bucket: str, dest_key: str) -> None:
copy_source = {'Bucket': src_bucket, 'Key': src_key}
self.__s3_client.copy_object(CopySource=copy_source, Bucket=dest_bucket, Key=dest_key)
self.__s3_resource.meta.client.copy(copy_source, dest_bucket, dest_key)
return
class ConfigBucket:
__s3_client: S3Client = None
__s3_resource: S3Resource = None
def __init__(self) -> None:
self.__s3_client = S3Client(CRM_CONFIG_BUCKET)
self.__s3_resource = S3Resource(CRM_CONFIG_BUCKET)
def __str__(self) -> str:
return CRM_CONFIG_BUCKET
def get_object_info_file(self) -> str:
return self.__s3_client.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}')
return self.__s3_resource.get_object(f'{OBJECT_INFO_FOLDER}/{OBJECT_INFO_FILENAME}')
def get_last_fetch_datetime_file(self, file_key: str) -> str:
return self.__s3_client.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_key}')
return self.__s3_resource.get_object(f'{LAST_FETCH_DATE_FOLDER}/{file_key}')
def put_last_fetch_datetime_file(self, file_key: str, local_file_path: str) -> None:
self.__s3_client.put_object(
self.__s3_resource.put_object(
f'{LAST_FETCH_DATE_FOLDER}/{file_key}', local_file_path)
return
class DataBucket:
__s3_client: S3Client = None
__s3_resource: S3Resource = None
def __init__(self) -> None:
self.__s3_client = S3Client(IMPORT_DATA_BUCKET)
self.__s3_resource = S3Resource(IMPORT_DATA_BUCKET)
def __str__(self) -> str:
return IMPORT_DATA_BUCKET
def put_csv(self, file_key: str, local_file_path: str) -> None:
object_key = f'{CRM_IMPORT_DATA_FOLDER}/{file_key}'
self.__s3_client.put_object(object_key, local_file_path)
self.__s3_resource.put_object(object_key, local_file_path)
return
def put_csv_from(self, src_bucket: str, src_key: str):
dest_filename = src_key.split('/')[-1]
self.__s3_client.copy(src_bucket, src_key, str(self), f'{CRM_IMPORT_DATA_FOLDER}/{dest_filename}')
self.__s3_resource.copy(src_bucket, src_key, str(self), f'{CRM_IMPORT_DATA_FOLDER}/{dest_filename}')
return
class BackupBucket:
__s3_client: S3Client = None
__s3_resource: S3Resource = None
def __init__(self) -> None:
self.__s3_client = S3Client(CRM_BACKUP_BUCKET)
self.__s3_resource = S3Resource(CRM_BACKUP_BUCKET)
def __str__(self) -> str:
return CRM_BACKUP_BUCKET
def put_response_json(self, file_key: str, local_file_path: str) -> None:
object_key = f'{RESPONSE_JSON_BACKUP_FOLDER}/{file_key}'
self.__s3_client.put_object(object_key, local_file_path)
self.__s3_resource.put_object(object_key, local_file_path)
return
def put_csv(self, file_key: str, local_file_path: str) -> None:
object_key = f'{CRM_IMPORT_DATA_BACKUP_FOLDER}/{file_key}'
self.__s3_client.put_object(object_key, local_file_path)
self.__s3_resource.put_object(object_key, local_file_path)
return
def put_result_json(self, file_key: str, local_file_path: str) -> None:
object_key = f'{PROCESS_RESULT_FOLDER}/{file_key}'
self.__s3_client.put_object(object_key, local_file_path)
self.__s3_resource.put_object(object_key, local_file_path)
return

View File

@ -1,4 +1,3 @@
from collections import OrderedDict
from src.config.objects import TargetObject
from src.converter.convert_strategy import ConvertStrategyFactory
@ -26,11 +25,10 @@ class CSVStringConverter:
json_object = self.__extract_necessary_props_from(json_object)
csv_row = []
for column in columns:
column_name = column.upper()
column_value = self.__get_column_value(json_object, column_name)
v = json_object[column.upper()]
convert_strategy = self.__convert_strategy_factory.create(column_value)
converted_value = convert_strategy.convert_value(column_value)
convert_strategy = self.__convert_strategy_factory.create(v)
converted_value = convert_strategy.convert_value(v)
csv_row.append(converted_value)
@ -40,31 +38,3 @@ class CSVStringConverter:
except Exception as e:
raise Exception(
f'CSV変換に失敗しました カラム名:[{column}] 行番号: [{i}] エラー内容:[{e}]')
def __get_column_value(self, json_object: dict, column_name: str) -> str:
# 参照を辿らない通常の項目の場合、カラム名が一致するためそのまま取得
if '.' not in column_name:
return json_object[column_name]
# カラム名に`.`が含まれている場合、オブジェクトの参照を辿って終端を取得する
relationship_columns = column_name.split('.')
return self.__get_column_value_by_relationship(json_object, relationship_columns)
def __get_column_value_by_relationship(self, json_object: dict, relationship_columns: str, recurs: int = 0) -> str:
# 参照関係の終端を取得しきるまで再帰的に深掘りする
# REVIEW: 参照の終端の項目型が住所型の場合、レスポンスが辞書型になるため大抵の場合Noneになる
relationship_name = relationship_columns[recurs]
relationship_item = json_object.get(relationship_name)
# 項目が取得できなかったらNoneを返す
if relationship_item is None:
return None
# 参照が辿りきれていない場合、再帰的に深掘りする
if type(relationship_item) == dict or type(relationship_item) == OrderedDict:
# 取り回しを良くするために、辞書のキーをアッパーケースにしておく
relationship_item_upper = {k.upper(): v for k, v in relationship_item.items()}
return self.__get_column_value_by_relationship(relationship_item_upper, relationship_columns, recurs + 1)
# 終端のデータを取得
return relationship_item

View File

@ -1,8 +1,7 @@
import os
import pytest
from src.aws.s3 import BackupBucket, ConfigBucket, DataBucket, S3Client
from src.aws.s3 import BackupBucket, ConfigBucket, DataBucket, S3Resource
@pytest.fixture
@ -16,7 +15,7 @@ def s3_test(s3_client, bucket_name):
yield
class TestS3Client:
class TestS3Resource:
def test_get_object(self, s3_test, s3_client, bucket_name):
"""
@ -32,7 +31,7 @@ class TestS3Client:
s3_client.put_object(Bucket=bucket_name, Key='hogehoge/test.txt', Body=b'aaaaaaaaaaaaaaa')
# Act
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
actual = sut.get_object('hogehoge/test.txt')
# Assert
@ -49,7 +48,7 @@ class TestS3Client:
"""
# Arrange
# Act
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
with pytest.raises(Exception):
# Assert
sut.get_object('hogehoge/test.txt')
@ -69,7 +68,7 @@ class TestS3Client:
with open(file_path, mode='w') as f:
f.write('aaaaaaaaaaaaaaa')
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
sut.put_object('hogehoge/test.txt', file_path)
actual = s3_client.get_object(Bucket=bucket_name, Key='hogehoge/test.txt')
@ -88,7 +87,7 @@ class TestS3Client:
"""
# Arrange
# Act
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
with pytest.raises(Exception):
# Assert
sut.put_object('hogehoge/test.txt', 'aaaaaaaaaaaaaaa')
@ -109,7 +108,7 @@ class TestS3Client:
s3_client.create_bucket(Bucket=for_copy_bucket)
s3_client.put_object(Bucket=bucket_name, Key='hogehoge/test.txt', Body=b'aaaaaaaaaaaaaaa')
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
sut.copy(bucket_name, 'hogehoge/test.txt', for_copy_bucket, 'test.txt')
actual = s3_client.get_object(Bucket=for_copy_bucket, Key='test.txt')
@ -126,7 +125,7 @@ class TestS3Client:
"""
# Arrange
# Act
sut = S3Client(bucket_name)
sut = S3Resource(bucket_name)
with pytest.raises(Exception):
# Assert
sut.copy(bucket_name, 'hogehoge/test.txt', 'for_copy_bucket', 'test.txt')
@ -141,8 +140,8 @@ class TestS3Client:
- インスタンス生成時に例外が発生すること
"""
with pytest.raises(Exception) as e:
S3Client()
assert e.value.args[0] == "S3Client.__init__() missing 1 required positional argument: 'bucket_name'"
S3Resource()
assert e.value.args[0] == "__init__() missing 1 required positional argument: 'bucket_name'"
class TestConfigBucket:

View File

@ -4,7 +4,8 @@ from datetime import datetime
import boto3
import pytest
from moto import mock_aws
from moto import mock_s3
from py.xml import html # type: ignore
from . import docstring_parser
@ -20,7 +21,7 @@ def aws_credentials():
@pytest.fixture
def s3_client(aws_credentials):
with mock_aws():
with mock_s3():
conn = boto3.client("s3", region_name="us-east-1")
yield conn
@ -34,18 +35,18 @@ def pytest_html_report_title(report):
def pytest_html_results_table_header(cells):
del cells[2:]
cells.insert(3, '<th>Cases</th>')
cells.insert(4, '<th>Arranges</th>')
cells.insert(5, '<th>Expects</th>')
cells.append('<th class="sortable time" col="time">Time</th>')
cells.insert(3, html.th("Cases"))
cells.insert(4, html.th("Arranges"))
cells.insert(5, html.th("Expects"))
cells.append(html.th("Time", class_="sortable time", col="time"))
def pytest_html_results_table_row(report, cells):
del cells[2:]
cells.insert(3, f'<td><pre>{report.cases}</pre></td>') # 「テスト内容」をレポートに出力
cells.insert(4, f'<td><pre>{report.arranges}</pre></td>') # 「期待結果」をレポートに出力
cells.insert(5, f'<td><pre>{report.expects}</pre></td>') # 「期待結果」をレポートに出力
cells.append(f'<td class="col-time">{datetime.now()}</td>') # ついでに「時間」もレポートに出力
cells.insert(3, html.td(html.pre(report.cases))) # 「テスト内容」をレポートに出力
cells.insert(4, html.td(html.pre(report.arranges))) # 「期待結果」をレポートに出力
cells.insert(5, html.td(html.pre(report.expects))) # 「期待結果」をレポートに出力
cells.append(html.td(datetime.now(), class_="col-time")) # ついでに「時間」もレポートに出力
@pytest.hookimpl(hookwrapper=True)

View File

@ -11,8 +11,7 @@ class TestCSVStringConverter:
def test_convert(self) -> str:
"""
Cases:
- 入力データがCSV形式の文字列で出力されること
- 参照関係を辿った項目の終端が取得されていること
入力データがCSV形式の文字列で出力されること
Arranges:
- オブジェクト情報の作成
- データの作成
@ -36,10 +35,7 @@ class TestCSVStringConverter:
"RowCause",
"LastModifiedDate",
"LastModifiedById",
"IsDeleted",
"Account.Name",
"Account.attributes.type",
"Account.attributes.url"
"IsDeleted"
],
"is_skip": False,
"is_update_last_fetch_datetime": False,
@ -61,8 +57,7 @@ class TestCSVStringConverter:
('RowCause', 'テストのため1'),
('LastModifiedDate', '2022-06-01T00:00:00.000+0000'),
('LastModifiedById', 1.234567E+6),
('IsDeleted', False),
('Account', None)
('IsDeleted', False)
]),
OrderedDict([
('attributes', OrderedDict([('type', 'AccountShare'), ('url', '/services/data/v1.0/sobjects/AccountShare/test1')])),
@ -76,8 +71,7 @@ class TestCSVStringConverter:
('RowCause', 'テストのため2'),
('LastModifiedDate', '2022-06-02T16:30:30.000+0000'),
('LastModifiedById', 2.23E+0),
('IsDeleted', True),
('Account', None)
('IsDeleted', True)
]),
OrderedDict([
('attributes', OrderedDict([('type', 'AccountShare'), ('url', '/services/data/v1.0/sobjects/AccountShare/test1')])),
@ -91,26 +85,7 @@ class TestCSVStringConverter:
('RowCause', 'テストのため3'),
('LastModifiedDate', '2022-06-03T23:50:50.000+0000'),
('LastModifiedById', 3.234567),
('IsDeleted', True),
('Account', None)
]),
OrderedDict([
('attributes', OrderedDict([('type', 'AccountShare'), ('url', '/services/data/v1.0/sobjects/AccountShare/test1')])),
('Id', 'TEST004'),
('AccountId', 'test004'),
('UserOrGroupId', None),
('AccountAccessLevel', 13),
('OpportunityAccessLevel', 14),
('CaseAccessLevel', 15),
('ContactAccessLevel', 16),
('RowCause', 'テストのため4'),
('LastModifiedDate', '2022-06-03T23:50:50.000+0000'),
('LastModifiedById', 3.234567),
('IsDeleted', False),
('Account', OrderedDict([
('attributes', OrderedDict([('type', 'Account'), ('url', '/services/data/v1.0/sobjects/Account/test4')])),
('Name', 'テスト取引先'),
]))
('IsDeleted', False)
])
]
@ -124,13 +99,10 @@ class TestCSVStringConverter:
# Expects
expect = [
["Id", "AccountId", "UserOrGroupId", "AccountAccessLevel", "OpportunityAccessLevel", "CaseAccessLevel",
"ContactAccessLevel", "RowCause", "LastModifiedDate", "LastModifiedById", "IsDeleted",
"Account.Name", "Account.attributes.type", "Account.attributes.url"],
["TEST001", "test001", "", 1, 2, 3, 4, "テストのため1", "2022-06-01 09:00:00", 1234567.0, 0, "", "", ""],
["TEST002", "test002", "", 5, 6, 7, 8, "テストのため2", "2022-06-03 01:30:30", 2.23, 1, "", "", ""],
["TEST003", "test003", "", 9, 10, 11, 12, "テストのため3", "2022-06-04 08:50:50", 3.234567, 1, "", "", ""],
["TEST004", "test004", "", 13, 14, 15, 16, "テストのため4", "2022-06-04 08:50:50",
3.234567, 0, "テスト取引先", "Account", "/services/data/v1.0/sobjects/Account/test4"]
"ContactAccessLevel", "RowCause", "LastModifiedDate", "LastModifiedById", "IsDeleted"],
["TEST001", "test001", "", 1, 2, 3, 4, "テストのため1", "2022-06-01 09:00:00", 1234567.0, 0],
["TEST002", "test002", "", 5, 6, 7, 8, "テストのため2", "2022-06-03 01:30:30", 2.23, 1],
["TEST003", "test003", "", 9, 10, 11, 12, "テストのため3", "2022-06-04 08:50:50", 3.234567, 0]
]
assert actual == expect
@ -212,12 +184,7 @@ class TestCSVStringConverter:
('RowCause', 'テストのため3'),
('LastModifiedDate', '2022-06-03T23:50:50.000+0000'),
('LastModifiedById', 3.234567E+6),
('IsDeleted', False),
('Account', OrderedDict([
('attributes', OrderedDict([('type', 'Account'), ('url', '/services/data/v1.0/sobjects/Account/test3')])),
('Name', 'テスト取引先'),
])
),
('IsDeleted', False)
])
]

View File

@ -286,56 +286,6 @@ class TestSalesforceApiClient:
actual = sut.fetch_sf_data(soql)
assert len(actual) >= 0
def test_fetch_sf_data_relationship_object_depth_1(self):
"""
Cases:
参照関係を1回辿るSOQLを実行しSalesforceからデータが取得できること
Arranges:
Salesforceの以下のオブジェクトにレコードを作成する(手作業コード上では行わない)
- RelationShipTest__c
Expects:
取得結果が期待値と一致すること
"""
soql = """SELECT
Id,
Name,
RecordTypeId,
RecordType.DeveloperName
FROM
RelationShipTest__c
ORDER BY Name ASC
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
assert dict(actual[0])["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_fetch_sf_data_relationship_object_depth_2(self):
"""
Cases:
参照関係を2回辿るSOQLを実行しSalesforceからデータが取得できること
Arranges:
Salesforceの以下のオブジェクトにレコードを作成する(手作業コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
Expects:
取得結果が期待値と一致すること
"""
soql = """SELECT
Id,
Name,
RelationShipTest__r.RecordType.DeveloperName
FROM
RelationShipTest_Child__c
ORDER BY Name ASC
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
assert dict(actual[0])["RelationshipTest__r"]["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_fetch_sf_data_by_soql_builder_system_modstamp_to_ge(self):
"""
Cases:
@ -582,79 +532,6 @@ class TestSalesforceApiClient:
assert len(actual) == 17
# 内容の確認は別のケースで行っているため省略
def test_fetch_sf_data_by_soql_builder_relationship_object_depth_1(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceから参照関係を1回辿ったオブジェクト項目が取得できること
Arranges:
- Salesforceの以下のオブジェクトにレコードを作成する(手作業コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得できたオブジェクトの1件をサンプリング確認しレコードタイプ名(DeveloperName)が含まれている
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'RelationShipTest__c',
'columns': [
'Id',
'Name',
'RecordTypeId',
'RecordType.DeveloperName'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_fetch_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
assert dict(actual[0])["RecordType"]["DeveloperName"] == "RecordTypeNormal"
...
def test_fetch_sf_data_by_soql_builder_relationship_object_depth_2(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceから参照関係を2回辿ったオブジェクト項目が取得できること
Arranges:
- Salesforceの以下のオブジェクトにレコードを作成する(手作業コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得できたオブジェクトの1件をサンプリング確認しレコードタイプ名(DeveloperName)が含まれている
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'RelationShipTest_Child__c',
'columns': [
'Id',
'Name',
'RelationShipTest__r.RecordType.DeveloperName'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_fetch_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
print(dict(actual[0]))
assert dict(actual[0])["RelationshipTest__r"]["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_raise_create_instance_cause_auth_failed(self, monkeypatch):
"""
Cases:

View File

@ -6,7 +6,6 @@ from datetime import datetime, timezone
import boto3
import pytest
from src.controller import controller
from src.parser.json_parser import JsonParser
from src.system_var.constants import YYYYMMDDTHHMMSSTZ
@ -115,10 +114,6 @@ def test_walk_through(s3_test, s3_client, monkeypatch, caplog):
logger.info(f'##########################')
# Assertion
log_messages = caplog.messages
# ログの目視確認を容易にするため、ローカルファイルに書き出す。
with open('crm_datafetch_test_walk_through_diff.log', 'w', encoding='utf8') as f:
f.write('\n'.join(log_messages))
# ループ前のログ確認
assert 'I-CTRL-01 CRMデータ取得処理を開始します' in log_messages
assert 'I-CTRL-02 データ取得準備処理呼び出し' in log_messages
@ -175,10 +170,6 @@ def test_walk_through(s3_test, s3_client, monkeypatch, caplog):
logger.info(f'##########################')
# ログ再取得
log_messages_all = caplog.messages
# ログの目視確認を容易にするため、ローカルファイルに書き出す。
with open('crm_datafetch_test_walk_through_all.log', 'w', encoding='utf8') as f:
f.write('\n'.join(log_messages_all))
object_info_list_all = object_info_files[1]
# 開始ログなどはテスト済みなのでチェックを省く
for object_info in object_info_list_all['objects']:

View File

@ -99,9 +99,8 @@ class TestCounterObject:
sut = CounterObject()
sut.describe(1)
print(str(e.value))
# Expects
assert str(e.value) == 'CounterObject.describe() takes 1 positional argument but 2 were given'
assert str(e.value) == 'describe() takes 1 positional argument but 2 were given'
def test_increment(self) -> int:
"""

View File

@ -1,19 +1,16 @@
FROM python:3.12-slim-bookworm
FROM python:3.9
ENV TZ="Asia/Tokyo"
# pythonの標準出力をバッファリングしないフラグ
ENV PYTHONUNBUFFERED=1
# pythonのバイトコードを生成しないフラグ
ENV PYTHONDONTWRITEBYTECODE=1
WORKDIR /usr/src/app
COPY Pipfile Pipfile.lock ./
COPY requirements.txt ./
RUN \
apt update -y && \
pip install pipenv --no-cache-dir && \
pipenv install --system --deploy && \
pip uninstall -y pipenv virtualenv-clone virtualenv
# パッケージのセキュリティアップデートのみを適用するコマンド
apt install -y unattended-upgrades && \
unattended-upgrades && \
pip install --upgrade pip wheel setuptools && \
pip install --no-cache-dir -r requirements.txt
COPY dataimport ./
CMD [ "python", "./controller.py" ]

View File

@ -1,13 +0,0 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
boto3 = "*"
pymysql = "*"
[dev-packages]
[requires]
python_version = "3.12"

View File

@ -1,87 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "1738beec0de1a16f127d9bbeef1c9cb1ffb5b2377aa1aedbce9bfacae0fa1c67"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.12"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"boto3": {
"hashes": [
"sha256:3faa2c328a61745f3215a63039606a6fcf55d9afe1cc76e3a5e27b9db58cdbf6",
"sha256:b998edac72f6740bd5d9d585cf3880f2dfeb4842e626b34430fd0e9623378011"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==1.38.32"
},
"botocore": {
"hashes": [
"sha256:0899a090e352cb5eeaae2c7bb52a987b469d23912c7ece86664dfb5c2e074978",
"sha256:64ab919a5d8b74dd73eaac1f978d0e674d11ff3bbe8815c3d2982477be9a082c"
],
"markers": "python_version >= '3.9'",
"version": "==1.38.32"
},
"jmespath": {
"hashes": [
"sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980",
"sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"
],
"markers": "python_version >= '3.7'",
"version": "==1.0.1"
},
"pymysql": {
"hashes": [
"sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c",
"sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==1.1.1"
},
"python-dateutil": {
"hashes": [
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==2.9.0.post0"
},
"s3transfer": {
"hashes": [
"sha256:0148ef34d6dd964d0d8cf4311b2b21c474693e57c2e069ec708ce043d2b527be",
"sha256:f5e6db74eb7776a37208001113ea7aa97695368242b364d73e91c981ac522177"
],
"markers": "python_version >= '3.9'",
"version": "==0.13.0"
},
"six": {
"hashes": [
"sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
"sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==1.17.0"
},
"urllib3": {
"hashes": [
"sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466",
"sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"
],
"markers": "python_version >= '3.9'",
"version": "==2.4.0"
}
},
"develop": {}
}

View File

@ -4,6 +4,7 @@ import sys
from datetime import datetime
import boto3
from common import convert_quotechar, debug_log
from end import end
from error import error
@ -40,7 +41,7 @@ LINE_FEED_CODE = {
}
# クラス変数
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
# チェック例外クラス
@ -73,14 +74,16 @@ def check(bucket_name, target_data_source, target_file_name, settings_key, log_i
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-CHK-01 - チェック処理を開始します')
# データ読込
settings_obj_response = s3_client.get_object(Bucket=bucket_name, Key=settings_key)
settings_obj = s3_resource.Object(bucket_name, settings_key)
settings_response = settings_obj.get()
settings_list = []
for line in io.TextIOWrapper(io.BytesIO(settings_obj_response["Body"].read()), encoding='utf-8'):
for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'):
settings_list.append(line.rstrip('\n'))
work_key = target_data_source + DIRECTORY_WORK + target_file_name
work_obj_response = s3_client.get_object(Bucket=bucket_name, Key=work_key)
work_data = io.TextIOWrapper(io.BytesIO(work_obj_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
work_obj = s3_resource.Object(bucket_name, work_key)
work_response = work_obj.get()
work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
work_csv_row = []
for i, line in enumerate(csv.reader(work_data, quotechar=convert_quotechar(settings_list[SETTINGS_ITEM["quotechar"]]), delimiter=settings_list[SETTINGS_ITEM["delimiter"]])):
# ヘッダあり、かつ、1行目の場合
@ -145,16 +148,3 @@ def is_empty_file(work_csv_row: list, settings_list: list):
return len(work_csv_row[1:]) == 0
return len(work_csv_row) == 0
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# check(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='targetフォルダ内のファイル名',
# settings_key='個別設定ファイル名',
# log_info='Info',
# mode='i'
# )

View File

@ -1,8 +1,7 @@
from datetime import datetime
import boto3
from common import debug_log
from error import error
from common import debug_log
# 定数
LOG_LEVEL = {'i': 'Info', 'e': 'Error'}
@ -13,6 +12,7 @@ DIRECTORY_WARNING = '/warning/'
# クラス変数
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def end(bucket_name, target_data_source, target_file_name, warning_info, log_info, mode):
@ -45,7 +45,8 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
}
done_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
done_key = target_data_source + DIRECTORY_DONE + done_file_name
s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=done_key)
done_obj = s3_resource.Object(bucket_name, done_key)
done_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=work_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-02 - workディレクトリの {target_file_name} をdoneディレクトリに移動しました 移動後ファイル名:{done_file_name}')
@ -63,20 +64,23 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
# warningファイルの作成
warning_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}_war.log'
warning_key = target_data_source + DIRECTORY_WARNING + warning_file_name
s3_client.put_object(Bucket=bucket_name, Key=warning_key, Body=bytes(warning_info, 'utf-8'))
warning_obj = s3_resource.Object(bucket_name, warning_key)
warning_obj.put(Body=warning_info)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-06 - warningディレクトリに {warning_file_name} を作成しました')
# warning処理結果ファイルの作成
result_warning_file_name = target_file_name + '.warning'
result_warning_key = target_data_source + DIRECTORY_TARGET + result_warning_file_name
s3_client.put_object(Bucket=bucket_name, Key=result_warning_key, Body=b'')
result_warning_obj = s3_resource.Object(bucket_name, result_warning_key)
result_warning_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-07 - targetディレクトリに {result_warning_file_name} を作成しました')
else:
# done処理結果ファイルの作成
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-08 - Warning情報は存在しませんでした')
result_done_file_name = target_file_name + '.done'
result_done_key = target_data_source + DIRECTORY_TARGET + result_done_file_name
s3_client.put_object(Bucket=bucket_name, Key=result_done_key, Body=b'')
result_done_obj = s3_resource.Object(bucket_name, result_done_key)
result_done_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-END-09 - targetディレクトリに {result_done_file_name} を作成しました')
# ⑤ 終了処理終了ログを出力する
@ -84,17 +88,3 @@ def end(bucket_name, target_data_source, target_file_name, warning_info, log_inf
except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-END-99 - エラー内容:{e}')
error(bucket_name, target_data_source, target_file_name, log_info)
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# end(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='targetフォルダ内のファイル',
# # warning_info='ワーニング内容', # ワーニングがある場合のテストはこちらを生かす
# warning_info='',
# log_info='Info',
# mode='i'
# )

View File

@ -1,7 +1,6 @@
import sys
from datetime import datetime
import boto3
import sys
# 定数
LOG_LEVEL = {'i': 'Info', 'e': 'Error'}
@ -11,6 +10,7 @@ DIRECTORY_ERROR = '/error/'
# クラス変数
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def error(bucket_name, target_data_source, target_file_name, log_info):
@ -34,7 +34,8 @@ def error(bucket_name, target_data_source, target_file_name, log_info):
}
error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
error_key = target_data_source + DIRECTORY_ERROR + error_file_name
s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=error_key)
error_obj = s3_resource.Object(bucket_name, error_key)
error_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=work_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-02 - workディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}')
@ -47,7 +48,8 @@ def error(bucket_name, target_data_source, target_file_name, log_info):
# ④ S3バケット内のtargetディレクトリに、「投入データファイル名.error」ファイルを作成する
result_error_file_name = target_file_name + '.error'
result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name
s3_client.put_object(Bucket=bucket_name, Key=result_error_key, Body=b'')
result_error_obj = s3_resource.Object(bucket_name, result_error_key)
result_error_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-04 - targetディレクトリに {result_error_file_name} を作成しました')
except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}')
@ -79,14 +81,16 @@ def error_doing_file_exists(bucket_name, target_key, target_data_source, target_
}
error_file_name = f'{datetime.now():%Y%m%d%H%M%S}_{target_file_name}'
error_key = target_data_source + DIRECTORY_ERROR + error_file_name
s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=error_key)
error_obj = s3_resource.Object(bucket_name, error_key)
error_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=target_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-07 - targetディレクトリの {target_file_name} をerrorディレクトリに移動しました 移動後ファイル名:{error_file_name}')
# ③ S3バケット内のtargetディレクトリに、「投入データファイル名.exclusive_error」ファイルを作成する
result_error_file_name = target_file_name + '.exclusive_error'
result_error_key = target_data_source + DIRECTORY_TARGET + result_error_file_name
s3_client.put_object(Bucket=bucket_name, Key=result_error_key, Body=b'')
result_error_obj = s3_resource.Object(bucket_name, result_error_key)
result_error_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-08 - targetディレクトリに {result_error_file_name} を作成しました')
except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-ERR-99 - エラー内容:{e}')
@ -95,25 +99,4 @@ def error_doing_file_exists(bucket_name, target_key, target_data_source, target_
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-ERR-09 - doingファイルが存在した時のエラー処理を終了します')
# ⑤ 処理を終了する
sys.exit()
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# エラー処理
# error(
# bucket_name='バケット名',
# target_data_source='データソース名',
# target_file_name='データソース名/target/ファイル名',
# log_info='Info'
# )
# doingファイルの有無チェック関数
# error_doing_file_exists(
# bucket_name='バケット名',
# target_key='投入データのフルパス',
# target_data_source='投入データのディレクトリ名よりデータソースに該当する部分',
# target_file_name='投入データのファイル名',
# log_info='Info'
# )
sys.exit()

View File

@ -1,12 +1,12 @@
import csv
from datetime import datetime
import boto3
import io
import csv
import re
import sys
from datetime import datetime
import boto3
from error import error
from error import error_doing_file_exists
from common import debug_log
from error import error, error_doing_file_exists
# 定数
LOG_LEVEL = {"i": 'Info', "e": 'Error'}
@ -17,6 +17,7 @@ DIRECTORY_SETTINGS = '/settings/'
# クラス変数
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def init(bucket_name, target_key, target_data_source, target_file_name, log_info, mode):
@ -59,7 +60,8 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
try:
# ③ S3バケット内のtargetディレクトリに、「投入データファイル名.doing」ファイルを作成する
s3_client.put_object(Bucket=bucket_name, Key=doing_key, Body=b'')
doing_obj = s3_resource.Object(bucket_name, doing_key)
doing_obj.put(Body='')
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-04 - targetディレクトリに {doing_file_name} を作成しました')
# ④ 投入データファイルをS3バケット内のtargetディレクトリから、workディレクトリに移動(コピー削除)する
@ -68,7 +70,8 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
'Key': target_key
}
work_key = target_data_source + DIRECTORY_WORK + target_file_name
s3_client.copy(CopySource=copy_source, Bucket=bucket_name, Key=work_key)
work_obj = s3_resource.Object(bucket_name, work_key)
work_obj.copy(copy_source)
s3_client.delete_object(Bucket=bucket_name, Key=target_key)
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-05 - 投入データ {target_file_name} をworkディレクトリに移動しました')
except Exception as e:
@ -119,8 +122,9 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
try:
# ⑦ 個別設定ファイルを特定する
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-INI-17 - 個別設定ファイルを検索します')
mapping_obj_response = s3_client.get_object(Bucket=bucket_name, Key=mapping_key)
mapping_body = io.TextIOWrapper(io.BytesIO(mapping_obj_response["Body"].read()), encoding='utf-8')
mapping_obj = s3_resource.Object(bucket_name, mapping_key)
mapping_response = mapping_obj.get()
mapping_body = io.TextIOWrapper(io.BytesIO(mapping_response["Body"].read()), encoding='utf-8')
settings_file_name = ''
for row in csv.reader(mapping_body, delimiter='\t'):
if row:
@ -155,15 +159,3 @@ def init(bucket_name, target_key, target_data_source, target_file_name, log_info
except Exception as e:
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["e"]} E-INI-99 - エラー内容:{e}')
error(bucket_name, target_data_source, target_file_name, log_info)
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# init(
# bucket_name='バケット名',
# target_key='データソース名/target/ファイル名',
# target_data_source='データソース名',
# target_file_name='ファイル名',
# log_info='Info',
# mode='i'
# )

View File

@ -5,9 +5,10 @@ from datetime import datetime
import boto3
import pymysql
from pymysql.constants import CLIENT
from common import convert_quotechar, debug_log
from error import error
from pymysql.constants import CLIENT
# 定数
DIRECTORY_WORK = '/work/'
@ -46,6 +47,7 @@ INVALID_CONFIG_EXCEPTION_MESSAGE = f'個別設定ファイルのインポート
# クラス変数
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
def main(bucket_name, target_data_source, target_file_name, settings_key, db_info, log_info, mode):
@ -89,7 +91,8 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
# ④ 個別設定ファイルのロードスキーマのテーブル名に記載されているテーブルをTRUNCATEする
# 個別設定ファイルの読み込み
settings_response = s3_client.get_object(Bucket=bucket_name, Key=settings_key)
settings_obj = s3_resource.Object(bucket_name, settings_key)
settings_response = settings_obj.get()
settings_list = []
for line in io.TextIOWrapper(io.BytesIO(settings_response["Body"].read()), encoding='utf-8'):
settings_list.append(line.rstrip('\n'))
@ -107,7 +110,8 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
# ⑤ 投入データファイルを1行ごとにループする
print(f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {LOG_LEVEL["i"]} I-MAIN-05 - 投入データ {target_file_name} の読み込みを開始します')
work_key = target_data_source + DIRECTORY_WORK + target_file_name
work_response = s3_client.get_object(Bucket=bucket_name, Key=work_key)
work_obj = s3_resource.Object(bucket_name, work_key)
work_response = work_obj.get()
work_data = io.TextIOWrapper(io.BytesIO(work_response["Body"].read()), encoding=settings_list[SETTINGS_ITEM["charCode"]], newline=LINE_FEED_CODE[settings_list[SETTINGS_ITEM["lineFeedCode"]]])
process_count = 0 # 処理件数カウンタ
@ -257,9 +261,10 @@ def main(bucket_name, target_data_source, target_file_name, settings_key, db_inf
try:
if ex_sql_file_exists:
# 拡張SQLファイルからSQL文生成
ex_sql_obj_response = s3_client.get_object(Bucket=bucket_name, Key=ex_sql_key)
ex_sqls_obj = s3_resource.Object(bucket_name, ex_sql_key)
ex_sql_response = ex_sqls_obj.get()
ex_sql = ''
for line in io.TextIOWrapper(io.BytesIO(ex_sql_obj_response["Body"].read()), encoding='utf-8'):
for line in io.TextIOWrapper(io.BytesIO(ex_sql_response["Body"].read()), encoding='utf-8'):
ex_sql = f'{ex_sql} {line.rstrip()}'
# トランザクション開始
@ -353,18 +358,3 @@ def truncate_judge(settings_list):
class InvalidConfigException(Exception):
pass
# ローカル実行用コード
# 値はよしなに変えてください
# if __name__ == '__main__':
# DB_INFO = {"host": '127.0.0.1', "name": 'org02', "pass": 'user', "user": 'user'}
# main(
# bucket_name='バケット名',
# target_data_source='投入データのディレクトリ名よりデータソースに該当する部分',
# target_file_name='投入データのファイル名',
# settings_key='投入データに該当する個別設定ファイルのフルパス',
# db_info=DB_INFO,
# log_info='info',
# mode='i'
# )

View File

@ -0,0 +1,2 @@
boto3
PyMySQL

View File

@ -1,12 +0,0 @@
tests/*
.coverage
.env
.env.example
.report/*
.vscode/*
.pytest_cache/*
*/__pychache__/*
Dockerfile
pytest.ini
README.md
*.sql

View File

@ -1,9 +0,0 @@
DB_HOST=************
DB_PORT=3306
DB_USERNAME=************
DB_PASSWORD=************
DB_SCHEMA=*****
DUMP_BACKUP_BUCKET=************
LOG_LEVEL=INFO

View File

@ -1,11 +0,0 @@
.vscode/settings.json
.env
my.cnf
# python
__pycache__
# python test
.pytest_cache
.coverage
.report/

View File

@ -1,16 +0,0 @@
{
// IntelliSense 使
//
// : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(DEBUG) export dbdump",
"type": "python",
"request": "launch",
"program": "entrypoint.py",
"console": "integratedTerminal",
"justMyCode": true
}
]
}

View File

@ -1,31 +0,0 @@
{
"[python]": {
"editor.defaultFormatter": null,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
},
//
"python.defaultInterpreterPath": "<pythonインタプリターのパス>",
"python.linting.lintOnSave": true,
"python.linting.enabled": true,
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": true,
"python.linting.flake8Args": [
"--max-line-length=200",
"--ignore=F541"
],
"python.formatting.provider": "autopep8",
"python.formatting.autopep8Path": "autopep8",
"python.formatting.autopep8Args": [
"--max-line-length", "200",
"--ignore=F541"
],
"python.testing.pytestArgs": [
"tests/batch/ultmarc"
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}

View File

@ -1,40 +0,0 @@
FROM python:3.12-slim-bookworm
ENV TZ="Asia/Tokyo"
# pythonの標準出力をバッファリングしないフラグ
ENV PYTHONUNBUFFERED=1
# pythonのバイトコードを生成しないフラグ
ENV PYTHONDONTWRITEBYTECODE=1
WORKDIR /usr/src/app
COPY Pipfile Pipfile.lock ./
# mysql-apt-config をdpkgでインストールする際に標準出力に渡す文字列ファイルをコピー
COPY mysql_dpkg_selection.txt ./
# 必要なパッケージインストール
RUN apt update && apt install -y less vim curl wget gzip unzip sudo lsb-release
# mysqlをインストール
RUN \
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb && \
apt install -y gnupg && \
dpkg -i mysql-apt-config_0.8.29-1_all.deb < mysql_dpkg_selection.txt && \
apt update && \
apt install -y mysql-client
# aws cli v2 のインストール
RUN \
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
sudo ./aws/install
# python関連のライブラリインストール
RUN \
pip install --upgrade pip wheel setuptools && \
pip install pipenv --no-cache-dir && \
pipenv install --system --deploy && \
pip uninstall -y pipenv virtualenv-clone virtualenv
COPY src ./src
COPY entrypoint.py entrypoint.py
CMD ["python", "entrypoint.py"]

View File

@ -1,16 +0,0 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
autopep8 = "*"
flake8 = "*"
[requires]
python_version = "3.12"
[pipenv]
allow_prereleases = true

View File

@ -1,63 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "2f7808325e11704ced6ad10c85e1d583663a03d7ccabaa9696ab1fe133a6b30c"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.12"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {},
"develop": {
"autopep8": {
"hashes": [
"sha256:89440a4f969197b69a995e4ce0661b031f455a9f776d2c5ba3dbd83466931758",
"sha256:ce8ad498672c845a0c3de2629c15b635ec2b05ef8177a6e7c91c74f3e9b51128"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==2.3.2"
},
"flake8": {
"hashes": [
"sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a",
"sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd"
],
"index": "pypi",
"markers": "python_full_version >= '3.8.1'",
"version": "==7.1.2"
},
"mccabe": {
"hashes": [
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
],
"markers": "python_version >= '3.6'",
"version": "==0.7.0"
},
"pycodestyle": {
"hashes": [
"sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3",
"sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"
],
"markers": "python_version >= '3.8'",
"version": "==2.12.1"
},
"pyflakes": {
"hashes": [
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
],
"markers": "python_version >= '3.8'",
"version": "==3.2.0"
}
}
}

View File

@ -1,48 +0,0 @@
# 【共通】DBダンプ取得 
## 概要
当処理は特定の機能で利用するものではなく、共通処理として要件に応じて実行することを想定している。
## 環境情報
- Python 3.9
- MySQL 8.23
- VSCode
## 環境構築
- Python の構築
- Merck_NewDWH 開発 2021 の Wiki、[Python 環境構築](https://nds-tyo.backlog.com/alias/wiki/1874930)を参照
- 「Pipenv の導入」までを行っておくこと
- 構築完了後、プロジェクト配下で以下のコマンドを実行し、Python の仮想環境を作成する
- `pipenv install --dev --python <pyenvでインストールしたpythonバージョン>`
- この手順で出力される仮想環境のパスは、後述する VSCode の設定手順で使用するため、控えておく
- MySQL の環境構築
- Windows の場合、以下のリンクからダウンロードする
- <https://dev.mysql.com/downloads/installer/>
- Docker を利用する場合、「newsdwh-tools」リポジトリの MySQL 設定を使用すると便利
- 「crm-table-to-ddl」フォルダ内で以下のコマンドを実行すると
- `docker-compose up -d`
- Docker の構築手順は、[Docker のセットアップ手順](https://nds-tyo.backlog.com/alias/wiki/1754332)を参照のこと
- データを投入する
- 立ち上げたデータベースに「src05」スキーマを作成する
- [ローカル開発用データ](https://ndstokyo.sharepoint.com/:f:/r/sites/merck-new-dwh-team/Shared%20Documents/03.NewDWH%E6%A7%8B%E7%AF%89%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA3/02.%E9%96%8B%E7%99%BA/90.%E9%96%8B%E7%99%BA%E5%85%B1%E6%9C%89/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E9%96%8B%E7%99%BA%E7%94%A8%E3%83%87%E3%83%BC%E3%82%BF?csf=1&web=1&e=VVcRUs)をダウンロードし、mysql コマンドを使用して復元する
- `mysql -h <ホスト名> -P <ポート> -u <ユーザー名> -p src05 < src05_dump.sql`
- 環境変数の設定
- 「.env.example」ファイルをコピーし、「.env」ファイルを作成する
- 環境変数を設定する。設定内容は PRJ メンバーより共有を受けてください
- VSCode の設定
- 「.vscode/recommended_settings.json」ファイルをコピーし、「settings.json」ファイルを作成する
- 「python.defaultInterpreterPath」を、Python の構築手順で作成した仮想環境のパスに変更する
## 実行
- VSCode 上で「F5」キーを押下すると、バッチ処理が起動する。
- 「entrypoint.py」が、バッチ処理のエントリーポイント。
- 実際の処理は、「src/jobctrl_dbdump.py」で行っている。
## フォルダ構成(工事中)

View File

@ -1,10 +0,0 @@
"""【共通】DBダンプ取得処理のエントリーポイント"""
from src import jobctrl_dbdump
if __name__ == '__main__':
try:
exit(jobctrl_dbdump.exec())
except Exception:
# エラーが起きても、正常系のコードで返す。
# エラーが起きた事実はbatch_process内でログを出す。
exit(0)

View File

@ -1,3 +0,0 @@
1
1
4

View File

@ -1,106 +0,0 @@
"""DBダンプ取得"""
import datetime
import os
import subprocess
import textwrap
from src.logging.get_logger import get_logger
from src.system_var import constants, environment
logger = get_logger('DBダンプ取得')
def exec():
try:
logger.info('DBダンプ取得開始')
# 事前処理(共通処理としては空振りする)
_pre_exec()
# メイン処理
# MySQL接続情報を作成する
my_cnf_file_content = f"""
[client]
user={environment.DB_USERNAME}
password={environment.DB_PASSWORD}
host={environment.DB_HOST}
"""
# my.cnfファイルのパス
my_cnf_path = os.path.join('my.cnf')
# my.cnfファイルを生成する
with open(my_cnf_path, 'w') as f:
f.write(textwrap.dedent(my_cnf_file_content)[1:-1])
# ファイルのパーミッションが強いとmysqldumpコマンドが実行できないため
# my.cnfファイルのパーミッションをread-onlyに設定
os.chmod(my_cnf_path, 0o444)
dt_now = datetime.datetime.now()
converted_value = dt_now.strftime('%Y%m%d%H%M%S%f')
dump_file_name = f'backup_rds_{environment.DB_SCHEMA}_{converted_value}.gz'
s3_file_path = f's3://{environment.DUMP_BACKUP_BUCKET}/{constants.DUMP_BACKUP_FOLDER}/{dt_now.year}/{dt_now.strftime("%m")}/{dt_now.strftime("%d")}/{dump_file_name}'
# mysqldumpコマンドを実行し、dumpを取得する
command = [
'mysqldump',
f'--defaults-file={my_cnf_path}',
'-P',
f"{environment.DB_PORT}",
'--no-tablespaces',
'--skip-column-statistics',
'--single-transaction',
'--set-gtid-purged=OFF',
environment.DB_SCHEMA
]
mysqldump_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# gzipコマンドを実行してdump結果を圧縮する
gzip_process = subprocess.Popen(['gzip', '-c'], stdin=mysqldump_process.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# aws s3 cpコマンドを実行してアップロードする
s3_cp_process = subprocess.Popen(['aws', 's3', 'cp', '-', s3_file_path], stdin=gzip_process.stdout, stderr=subprocess.PIPE)
# mysqldumpの標準出力をgzipに接続したため、標準出力をクローズする
mysqldump_process.stdout.close()
# gzipの標準出力をaws s3 cpに接続したため、標準出力をクローズする
gzip_process.stdout.close()
# パイプラインを実行し、エラーハンドリング
_, error = mysqldump_process.communicate()
if mysqldump_process.returncode != 0:
raise Exception(f'`mysqldump`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
_, error = gzip_process.communicate()
if gzip_process.returncode != 0:
raise Exception(f'`gzip`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
_, error = s3_cp_process.communicate()
if s3_cp_process.returncode != 0:
raise Exception(f'`aws s3 cp`実行時にエラーが発生しました。{"" if error is None else error.decode("utf-8")}')
# 事後処理(共通処理としては空振りする)
_post_exec()
logger.info('DBダンプ取得終了正常終了')
logger.info(f'出力ファイルパス: {s3_file_path}')
return constants.BATCH_EXIT_CODE_SUCCESS
except Exception as e:
logger.exception(f'DBダンプ取得中に想定外のエラーが発生しました :{e}')
return constants.BATCH_EXIT_CODE_SUCCESS
def _pre_exec():
"""
ダンプ復元 事前処理
共通機能としては事前処理を実装しない
事前処理が必要なダンプ復元処理を実装する場合当ロジックをコピーする
"""
pass
def _post_exec():
"""
ダンプ復元 事後処理
共通機能としては事後処理を実装しない
事後処理が必要なダンプ復元処理を実装する場合当ロジックをコピーする
"""
pass

View File

@ -1,37 +0,0 @@
import logging
from src.system_var.environment import LOG_LEVEL
# boto3関連モジュールのログレベルを事前に個別指定し、モジュール内のDEBUGログの表示を抑止する
for name in ["boto3", "botocore", "s3transfer", "urllib3"]:
logging.getLogger(name).setLevel(logging.WARNING)
def get_logger(log_name: str) -> logging.Logger:
"""一意のログ出力モジュールを取得します。
Args:
log_name (str): ロガー名
Returns:
_type_: _description_
"""
logger = logging.getLogger(log_name)
level = logging.getLevelName(LOG_LEVEL)
if not isinstance(level, int):
level = logging.INFO
logger.setLevel(level)
if not logger.hasHandlers():
handler = logging.StreamHandler()
logger.addHandler(handler)
formatter = logging.Formatter(
'%(name)s\t[%(levelname)s]\t%(asctime)s\t%(message)s',
'%Y-%m-%d %H:%M:%S'
)
for handler in logger.handlers:
handler.setFormatter(formatter)
return logger

View File

@ -1,5 +0,0 @@
# バッチ正常終了コード
BATCH_EXIT_CODE_SUCCESS = 0
# ダンプバックアップフォルダー
DUMP_BACKUP_FOLDER = 'dump'

View File

@ -1,19 +0,0 @@
import os
# Database
DB_HOST = os.environ['DB_HOST']
DB_PORT = int(os.environ['DB_PORT'])
DB_USERNAME = os.environ['DB_USERNAME']
DB_PASSWORD = os.environ['DB_PASSWORD']
DB_SCHEMA = os.environ['DB_SCHEMA']
# AWS
DUMP_BACKUP_BUCKET = os.environ['DUMP_BACKUP_BUCKET']
# 初期値がある環境変数
LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO')
DB_CONNECTION_MAX_RETRY_ATTEMPT = int(os.environ.get('DB_CONNECTION_MAX_RETRY_ATTEMPT', 4))
DB_CONNECTION_RETRY_INTERVAL_INIT = int(os.environ.get('DB_CONNECTION_RETRY_INTERVAL', 5))
DB_CONNECTION_RETRY_INTERVAL_MIN_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MIN_SECONDS', 5))
DB_CONNECTION_RETRY_INTERVAL_MAX_SECONDS = int(os.environ.get('DB_CONNECTION_RETRY_MAX_SECONDS', 50))

View File

@ -18,20 +18,82 @@
"default": {
"boto3": {
"hashes": [
"sha256:3faa2c328a61745f3215a63039606a6fcf55d9afe1cc76e3a5e27b9db58cdbf6",
"sha256:b998edac72f6740bd5d9d585cf3880f2dfeb4842e626b34430fd0e9623378011"
"sha256:ae1352d0193aaf90c47d6e57ab054b0b1fabf0fbbe9f51eefec431bf2c3e18f4",
"sha256:bb8ecd6f86289ceaed566eefc0ce8ac66a85e5954aef115ed4ac602cbe61f101"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==1.38.32"
"version": "==1.28.82"
},
"botocore": {
"hashes": [
"sha256:0899a090e352cb5eeaae2c7bb52a987b469d23912c7ece86664dfb5c2e074978",
"sha256:64ab919a5d8b74dd73eaac1f978d0e674d11ff3bbe8815c3d2982477be9a082c"
"sha256:5f213229348433d0b7b6aac2d9ae2fdd15c4ff9f38c30ea072f5b300bf6c1dcb",
"sha256:9d7d8de1789b1ed37b86a2b0a4fcff9fac91deef0548461d411e1626f68ca70c"
],
"markers": "python_version >= '3.9'",
"version": "==1.38.32"
"markers": "python_version >= '3.7'",
"version": "==1.31.82"
},
"greenlet": {
"hashes": [
"sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174",
"sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd",
"sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa",
"sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a",
"sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec",
"sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565",
"sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d",
"sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c",
"sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234",
"sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d",
"sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546",
"sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2",
"sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74",
"sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de",
"sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd",
"sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9",
"sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3",
"sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846",
"sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2",
"sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353",
"sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8",
"sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166",
"sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206",
"sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b",
"sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d",
"sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe",
"sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997",
"sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445",
"sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0",
"sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96",
"sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884",
"sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6",
"sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1",
"sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619",
"sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94",
"sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4",
"sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1",
"sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63",
"sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd",
"sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a",
"sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376",
"sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57",
"sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16",
"sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e",
"sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc",
"sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a",
"sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c",
"sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5",
"sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a",
"sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72",
"sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9",
"sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9",
"sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e",
"sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8",
"sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65",
"sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064",
"sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"
],
"markers": "platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))",
"version": "==3.0.1"
},
"jmespath": {
"hashes": [
@ -43,241 +105,217 @@
},
"pymysql": {
"hashes": [
"sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c",
"sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"
"sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96",
"sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==1.1.1"
"version": "==1.1.0"
},
"python-dateutil": {
"hashes": [
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==2.9.0.post0"
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.8.2"
},
"s3transfer": {
"hashes": [
"sha256:0148ef34d6dd964d0d8cf4311b2b21c474693e57c2e069ec708ce043d2b527be",
"sha256:f5e6db74eb7776a37208001113ea7aa97695368242b364d73e91c981ac522177"
"sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a",
"sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"
],
"markers": "python_version >= '3.9'",
"version": "==0.13.0"
"markers": "python_version >= '3.7'",
"version": "==0.7.0"
},
"six": {
"hashes": [
"sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
"sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==1.17.0"
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
},
"sqlalchemy": {
"hashes": [
"sha256:023b3ee6169969beea3bb72312e44d8b7c27c75b347942d943cf49397b7edeb5",
"sha256:03968a349db483936c249f4d9cd14ff2c296adfa1290b660ba6516f973139582",
"sha256:05132c906066142103b83d9c250b60508af556982a385d96c4eaa9fb9720ac2b",
"sha256:087b6b52de812741c27231b5a3586384d60c353fbd0e2f81405a814b5591dc8b",
"sha256:0b3dbf1e7e9bc95f4bac5e2fb6d3fb2f083254c3fdd20a1789af965caf2d2348",
"sha256:118c16cd3f1b00c76d69343e38602006c9cfb9998fa4f798606d28d63f23beda",
"sha256:1936af879e3db023601196a1684d28e12f19ccf93af01bf3280a3262c4b6b4e5",
"sha256:1e3f196a0c59b0cae9a0cd332eb1a4bda4696e863f4f1cf84ab0347992c548c2",
"sha256:23a8825495d8b195c4aa9ff1c430c28f2c821e8c5e2d98089228af887e5d7e29",
"sha256:293cd444d82b18da48c9f71cd7005844dbbd06ca19be1ccf6779154439eec0b8",
"sha256:32f9dc8c44acdee06c8fc6440db9eae8b4af8b01e4b1aee7bdd7241c22edff4f",
"sha256:34ea30ab3ec98355235972dadc497bb659cc75f8292b760394824fab9cf39826",
"sha256:3d3549fc3e40667ec7199033a4e40a2f669898a00a7b18a931d3efb4c7900504",
"sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae",
"sha256:4d44522480e0bf34c3d63167b8cfa7289c1c54264c2950cc5fc26e7850967e45",
"sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443",
"sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23",
"sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576",
"sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1",
"sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0",
"sha256:5e22575d169529ac3e0a120cf050ec9daa94b6a9597993d1702884f6954a7d71",
"sha256:60c578c45c949f909a4026b7807044e7e564adf793537fc762b2489d522f3d11",
"sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e",
"sha256:6375cd674fe82d7aa9816d1cb96ec592bac1726c11e0cafbf40eeee9a4516b5f",
"sha256:6854175807af57bdb6425e47adbce7d20a4d79bbfd6f6d6519cd10bb7109a7f8",
"sha256:6ab60a5089a8f02009f127806f777fca82581c49e127f08413a66056bd9166dd",
"sha256:725875a63abf7c399d4548e686debb65cdc2549e1825437096a0af1f7e374814",
"sha256:7492967c3386df69f80cf67efd665c0f667cee67032090fe01d7d74b0e19bb08",
"sha256:81965cc20848ab06583506ef54e37cf15c83c7e619df2ad16807c03100745dea",
"sha256:81c24e0c0fde47a9723c81d5806569cddef103aebbf79dbc9fcbb617153dea30",
"sha256:81eedafa609917040d39aa9332e25881a8e7a0862495fcdf2023a9667209deda",
"sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9",
"sha256:8280856dd7c6a68ab3a164b4a4b1c51f7691f6d04af4d4ca23d6ecf2261b7923",
"sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df",
"sha256:8b4af17bda11e907c51d10686eda89049f9ce5669b08fbe71a29747f1e876036",
"sha256:90144d3b0c8b139408da50196c5cad2a6909b51b23df1f0538411cd23ffa45d3",
"sha256:906e6b0d7d452e9a98e5ab8507c0da791856b2380fdee61b765632bb8698026f",
"sha256:90c11ceb9a1f482c752a71f203a81858625d8df5746d787a4786bca4ffdf71c6",
"sha256:911cc493ebd60de5f285bcae0491a60b4f2a9f0f5c270edd1c4dbaef7a38fc04",
"sha256:9a420a91913092d1e20c86a2f5f1fc85c1a8924dbcaf5e0586df8aceb09c9cc2",
"sha256:9f8c9fdd15a55d9465e590a402f42082705d66b05afc3ffd2d2eb3c6ba919560",
"sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70",
"sha256:a373a400f3e9bac95ba2a06372c4fd1412a7cee53c37fc6c05f829bf672b8769",
"sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1",
"sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6",
"sha256:b1f09b6821406ea1f94053f346f28f8215e293344209129a9c0fcc3578598d7b",
"sha256:b2ac41acfc8d965fb0c464eb8f44995770239668956dc4cdf502d1b1ffe0d747",
"sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078",
"sha256:b50eab9994d64f4a823ff99a0ed28a6903224ddbe7fef56a6dd865eec9243440",
"sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f",
"sha256:c0b0e5e1b5d9f3586601048dd68f392dc0cc99a59bb5faf18aab057ce00d00b2",
"sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d",
"sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc",
"sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a",
"sha256:dd5ec3aa6ae6e4d5b5de9357d2133c07be1aff6405b136dad753a16afb6717dd",
"sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9",
"sha256:ff8e80c4c4932c10493ff97028decfdb622de69cae87e0f127a7ebe32b4069c6"
"sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3",
"sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884",
"sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74",
"sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d",
"sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc",
"sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca",
"sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d",
"sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf",
"sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846",
"sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306",
"sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221",
"sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5",
"sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89",
"sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55",
"sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72",
"sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea",
"sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8",
"sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577",
"sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df",
"sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4",
"sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d",
"sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34",
"sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4",
"sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24",
"sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6",
"sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965",
"sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35",
"sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b",
"sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab",
"sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22",
"sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4",
"sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204",
"sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855",
"sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d",
"sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab",
"sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69",
"sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693",
"sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e",
"sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8",
"sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0",
"sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45",
"sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab",
"sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1",
"sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d",
"sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda",
"sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b",
"sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18",
"sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac",
"sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==2.0.41"
"version": "==2.0.23"
},
"tenacity": {
"hashes": [
"sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb",
"sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"
"sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a",
"sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==9.1.2"
"version": "==8.2.3"
},
"typing-extensions": {
"hashes": [
"sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4",
"sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"
"sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0",
"sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
],
"markers": "python_version >= '3.9'",
"version": "==4.14.0"
"markers": "python_version >= '3.8'",
"version": "==4.8.0"
},
"urllib3": {
"hashes": [
"sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e",
"sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"
"sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07",
"sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
"version": "==1.26.20"
"markers": "python_version < '3.10'",
"version": "==1.26.18"
}
},
"develop": {
"autopep8": {
"hashes": [
"sha256:8d6c87eba648fdcfc83e29b788910b8643171c395d9c4bcf115ece035b9c9dda",
"sha256:a203fe0fcad7939987422140ab17a930f684763bf7335bdb6709991dd7ef6c2d"
"sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb",
"sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==2.3.1"
"version": "==2.0.4"
},
"boto3": {
"hashes": [
"sha256:9edf49640c79a05b0a72f4c2d1e24dfc164344b680535a645f455ac624dc3680",
"sha256:db58348849a5af061f0f5ec9c3b699da5221ca83354059fdccb798e3ddb6b62a"
"sha256:ae1352d0193aaf90c47d6e57ab054b0b1fabf0fbbe9f51eefec431bf2c3e18f4",
"sha256:bb8ecd6f86289ceaed566eefc0ce8ac66a85e5954aef115ed4ac602cbe61f101"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==1.35.57"
"version": "==1.28.82"
},
"botocore": {
"hashes": [
"sha256:92ddd02469213766872cb2399269dd20948f90348b42bf08379881d5e946cc34",
"sha256:d96306558085baf0bcb3b022d7a8c39c93494f031edb376694d2b2dcd0e81327"
"sha256:5f213229348433d0b7b6aac2d9ae2fdd15c4ff9f38c30ea072f5b300bf6c1dcb",
"sha256:9d7d8de1789b1ed37b86a2b0a4fcff9fac91deef0548461d411e1626f68ca70c"
],
"markers": "python_version >= '3.8'",
"version": "==1.35.57"
"markers": "python_version >= '3.7'",
"version": "==1.31.82"
},
"coverage": {
"extras": [
"toml"
],
"hashes": [
"sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376",
"sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9",
"sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111",
"sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172",
"sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491",
"sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546",
"sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2",
"sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11",
"sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08",
"sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c",
"sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2",
"sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963",
"sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613",
"sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0",
"sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db",
"sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf",
"sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73",
"sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117",
"sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1",
"sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e",
"sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522",
"sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25",
"sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc",
"sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea",
"sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52",
"sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a",
"sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07",
"sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06",
"sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa",
"sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901",
"sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b",
"sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17",
"sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0",
"sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21",
"sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19",
"sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5",
"sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51",
"sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3",
"sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3",
"sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f",
"sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076",
"sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a",
"sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718",
"sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba",
"sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e",
"sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27",
"sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e",
"sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09",
"sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e",
"sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70",
"sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f",
"sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72",
"sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a",
"sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef",
"sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b",
"sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b",
"sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f",
"sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806",
"sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b",
"sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1",
"sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c",
"sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"
"sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1",
"sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63",
"sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9",
"sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312",
"sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3",
"sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb",
"sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25",
"sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92",
"sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda",
"sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148",
"sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6",
"sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216",
"sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a",
"sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640",
"sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836",
"sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c",
"sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f",
"sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2",
"sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901",
"sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed",
"sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a",
"sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074",
"sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc",
"sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84",
"sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083",
"sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f",
"sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c",
"sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c",
"sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637",
"sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2",
"sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82",
"sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f",
"sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce",
"sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef",
"sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f",
"sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611",
"sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c",
"sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76",
"sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9",
"sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce",
"sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9",
"sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf",
"sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf",
"sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9",
"sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6",
"sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2",
"sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a",
"sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a",
"sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf",
"sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738",
"sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a",
"sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"
],
"markers": "python_version >= '3.9'",
"version": "==7.6.4"
"markers": "python_version >= '3.8'",
"version": "==7.3.2"
},
"exceptiongroup": {
"hashes": [
"sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b",
"sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"
"sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9",
"sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"
],
"markers": "python_version < '3.11'",
"version": "==1.2.2"
"version": "==1.1.3"
},
"flake8": {
"hashes": [
"sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38",
"sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"
"sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23",
"sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"
],
"index": "pypi",
"markers": "python_full_version >= '3.8.1'",
"version": "==7.1.1"
"version": "==6.1.0"
},
"iniconfig": {
"hashes": [
@ -305,69 +343,67 @@
},
"packaging": {
"hashes": [
"sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
"sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"
"sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5",
"sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"
],
"markers": "python_version >= '3.8'",
"version": "==24.2"
"markers": "python_version >= '3.7'",
"version": "==23.2"
},
"pluggy": {
"hashes": [
"sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1",
"sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"
"sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12",
"sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"
],
"markers": "python_version >= '3.8'",
"version": "==1.5.0"
"version": "==1.3.0"
},
"pycodestyle": {
"hashes": [
"sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3",
"sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"
"sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
"sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
],
"markers": "python_version >= '3.8'",
"version": "==2.12.1"
"version": "==2.11.1"
},
"pyflakes": {
"hashes": [
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
"sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774",
"sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"
],
"markers": "python_version >= '3.8'",
"version": "==3.2.0"
"version": "==3.1.0"
},
"pytest": {
"hashes": [
"sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181",
"sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"
"sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac",
"sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==8.3.3"
"version": "==7.4.3"
},
"pytest-cov": {
"hashes": [
"sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35",
"sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"
"sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6",
"sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==6.0.0"
"version": "==4.1.0"
},
"python-dateutil": {
"hashes": [
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.9.0.post0"
"version": "==2.8.2"
},
"s3transfer": {
"hashes": [
"sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d",
"sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c"
"sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a",
"sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"
],
"markers": "python_version >= '3.8'",
"version": "==0.10.3"
"markers": "python_version >= '3.7'",
"version": "==0.7.0"
},
"six": {
"hashes": [
@ -379,19 +415,19 @@
},
"tomli": {
"hashes": [
"sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
"sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"markers": "python_version < '3.11'",
"version": "==2.0.2"
"version": "==2.0.1"
},
"urllib3": {
"hashes": [
"sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e",
"sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"
"sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07",
"sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"
],
"markers": "python_version < '3.10'",
"version": "==1.26.20"
"version": "==1.26.18"
}
}
}

View File

@ -20,8 +20,8 @@ def exec():
db = Database.get_instance()
try:
db.connect()
db.begin()
db.to_jst()
db.begin()
logger.debug('DCF施設統合マスタ作成処理開始')
# COM施設からDCF施設統合マスタに登録
(is_add_dcf_inst_merge, duplication_inst_records) = _insert_dcf_inst_merge_from_com_inst(db)

View File

@ -1,5 +1,4 @@
from datetime import datetime, timedelta
from src.batch.batch_functions import logging_sql
from src.batch.common.batch_context import BatchContext
from src.db.database import Database
@ -15,8 +14,8 @@ def exec():
db = Database.get_instance()
try:
db.connect()
db.begin()
db.to_jst()
db.begin()
logger.debug('DCF施設統合マスタ日次更新処理開始')
# DCF施設統合マスタ移行先コードのセット(無効フラグが『0(有効)』)
enabled_dst_inst_merge_records = _set_enabled_dct_inst_merge(db)
@ -121,13 +120,12 @@ def _add_ult_ident_presc(db: Database, enabled_dst_inst_merge_records: list[dict
logger.info('納入先処方元マスタの登録 終了')
def _select_primary_key_from_emp_chg_inst(db: Database, dcf_inst_cd: str) -> list[dict]:
# 従業員担当施設マスタから、DCF施設コードに対応した領域コードと担当者種別コードの取得
def _select_emp_chg_inst_ta_cd(db: Database, dcf_inst_cd: str) -> list[dict]:
# 従業員担当施設マスタから、DCF施設コードに対応した領域コードの取得
try:
sql = """
SELECT
ta_cd,
emp_chg_type_cd
ta_cd
FROM
src05.emp_chg_inst
WHERE
@ -136,14 +134,14 @@ def _select_primary_key_from_emp_chg_inst(db: Database, dcf_inst_cd: str) -> lis
AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < end_date
"""
params = {'dcf_inst_cd': dcf_inst_cd}
emp_chg_inst_primary_key_records = db.execute_select(sql, params)
emp_chg_inst_ta_cd_records = db.execute_select(sql, params)
logging_sql(logger, sql)
logger.info('従業員担当施設マスタから領域コード、担当者種別コードの取得に成功')
logger.info('従業員担当施設マスタから領域コードの取得に成功')
except Exception as e:
logger.debug('従業員担当施設マスタから領域コード、担当者種別コードの取得に失敗')
logger.debug('従業員担当施設マスタから領域コードの取得に失敗')
raise e
return emp_chg_inst_primary_key_records
return emp_chg_inst_ta_cd_records
def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]):
@ -151,10 +149,10 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]):
logger.info('従業員担当施設マスタの登録 開始')
for enabled_merge_record in enabled_dst_inst_merge_records:
tekiyo_month_first_day = _get_first_day_of_month(enabled_merge_record['tekiyo_month'])
emp_chg_inst_primary_key_records = _select_primary_key_from_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'])
for emp_chg_inst_primary_key_record in emp_chg_inst_primary_key_records:
emp_chg_inst_ta_cd_records = _select_emp_chg_inst_ta_cd(db, enabled_merge_record['dcf_inst_cd'])
for emp_chg_inst_ta_cd_record in emp_chg_inst_ta_cd_records:
emp_chg_inst_records = _select_emp_chg_inst(db, enabled_merge_record['dcf_inst_cd'], enabled_merge_record['dup_opp_cd'],
emp_chg_inst_primary_key_record['ta_cd'], emp_chg_inst_primary_key_record['emp_chg_type_cd'])
emp_chg_inst_ta_cd_record['ta_cd'])
for emp_chg_inst_row in emp_chg_inst_records:
# 重複時相手先コードが存在したかのチェック
if emp_chg_inst_row['opp_count'] > 0:
@ -175,7 +173,7 @@ def _add_emp_chg_inst(db: Database, enabled_dst_inst_merge_records: list[dict]):
emp_chg_inst_row)
continue
# 適用開始日 ≧ DCF施設統合マスタの適用月度の1日の場合、N(論理削除レコード)に設定する
_update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'], emp_chg_inst_row['emp_chg_type_cd'],
_update_emp_chg_inst_disabled(db, enabled_merge_record['dcf_inst_cd'], emp_chg_inst_row['ta_cd'],
emp_chg_inst_row['start_date'])
logger.info('従業員担当施設マスタの登録 終了')
@ -209,7 +207,7 @@ def _delete_ult_ident_presc(db: Database, start_date: str, ult_ident_presc_row:
raise e
def _update_emp_chg_inst_disabled(db: Database, dcf_inst_cd: str, ta_cd: str, emp_chg_type_cd: str, start_date: str):
def _update_emp_chg_inst_disabled(db: Database, dcf_inst_cd: str, ta_cd: str, start_date: str):
# emp_chg_instをUPDATE
try:
elapsed_time = ElapsedTime()
@ -223,10 +221,9 @@ def _update_emp_chg_inst_disabled(db: Database, dcf_inst_cd: str, ta_cd: str, em
WHERE
inst_cd = :dcf_inst_cd
AND ta_cd = :ta_cd
AND emp_chg_type_cd = :emp_chg_type_cd
AND start_date = :start_date
"""
params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'emp_chg_type_cd': emp_chg_type_cd, 'start_date': start_date}
params = {'dcf_inst_cd': dcf_inst_cd, 'ta_cd': ta_cd, 'start_date': start_date}
res = db.execute(sql, params)
logging_sql(logger, sql)
logger.info(f'従業員担当施設マスタのYorNフラグ更新に成功, {res.rowcount} 行更新 ({elapsed_time.of})')
@ -249,7 +246,6 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date:
WHERE
inst_cd = :dcf_inst_cd
AND ta_cd = :ta_cd
AND emp_chg_type_cd = :emp_chg_type_cd
AND emp_cd = :emp_cd
AND bu_cd = :bu_cd
AND start_date = :start_date
@ -258,7 +254,6 @@ def _update_emp_chg_inst_end_date(db: Database, dcf_inst_cd: str, last_end_date:
'end_date': last_end_date,
'dcf_inst_cd': dcf_inst_cd,
'ta_cd': emp_chg_inst_row['ta_cd'],
'emp_chg_type_cd': emp_chg_inst_row['emp_chg_type_cd'],
'emp_cd': emp_chg_inst_row['emp_cd'],
'bu_cd': emp_chg_inst_row['bu_cd'],
'start_date': emp_chg_inst_row['start_date']
@ -281,7 +276,6 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str,
src05.emp_chg_inst(
inst_cd,
ta_cd,
emp_chg_type_cd,
emp_cd,
bu_cd,
start_date,
@ -296,7 +290,6 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str,
VALUES(
:dup_opp_cd,
:ta_cd,
:emp_chg_type_cd,
:emp_cd,
:bu_cd,
:start_date,
@ -312,7 +305,6 @@ def _insert_emp_chg_inst(db: Database, dup_opp_cd: str, set_start_date: str,
params = {
'dup_opp_cd': dup_opp_cd,
'ta_cd': emp_chg_inst_row['ta_cd'],
'emp_chg_type_cd': emp_chg_inst_row['emp_chg_type_cd'],
'emp_cd': emp_chg_inst_row['emp_cd'],
'bu_cd': emp_chg_inst_row['bu_cd'],
'start_date': set_start_date,
@ -526,14 +518,13 @@ def _insert_ult_ident_presc(db: Database, set_Start_Date: str, dup_opp_cd: str,
raise e
def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str, emp_chg_type_cd: str) -> list[dict]:
def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd: str) -> list[dict]:
# emp_chg_instからSELECT
try:
sql = """
SELECT
eci.inst_cd,
eci.ta_cd,
eci.emp_chg_type_cd,
eci.emp_cd,
eci.bu_cd,
eci.start_date,
@ -548,18 +539,16 @@ def _select_emp_chg_inst(db: Database, dcf_inst_cd: str, dup_opp_cd: str, ta_cd:
WHERE
eciopp.inst_cd = :dup_opp_cd
AND eciopp.ta_cd = :ta_cd
AND eciopp.emp_chg_type_cd = :emp_chg_type_cd
) AS opp_count
FROM
src05.emp_chg_inst AS eci
WHERE
eci.inst_cd = :dcf_inst_cd
AND eci.ta_cd = :ta_cd
AND eci.emp_chg_type_cd = :emp_chg_type_cd
AND eci.enabled_flg = 'Y'
AND (SELECT ht.syor_date FROM src05.hdke_tbl AS ht) < eci.end_date
"""
params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd, 'emp_chg_type_cd': emp_chg_type_cd}
params = {'dcf_inst_cd': dcf_inst_cd, 'dup_opp_cd': dup_opp_cd, 'ta_cd': ta_cd}
emp_chg_inst_records = db.execute_select(sql, params)
logging_sql(logger, sql)
logger.info('従業員担当施設マスタの取得 成功')

View File

@ -53,9 +53,7 @@ def _insert_into_emp_chg_inst_lau_from_emp_chg_inst(db: Database):
src05.emp_chg_inst_lau
SELECT
inst_cd,
ta_cd,
emp_chg_type_cd,
emp_cd,
ta_cd,emp_cd,
bu_cd,
start_date,
end_date,

View File

@ -86,14 +86,7 @@ def _insert_mst_inst_from_fcl_mst_v(db: Database):
END AS address,
fmv1.postal_cd,
fmv1.tel_num,
CASE
WHEN
fmv1.fcl_type BETWEEN '20' AND '29' THEN LEFT(fmv1.closed_dt, 10)
WHEN
fmv1.fcl_type IN ('A1', 'A0') AND fmv1.end_date != '9999-12-31' THEN DATE_FORMAT(fmv1.end_date, "%Y-%m-%d")
ELSE
null
END AS delete_date,
LEFT(fmv1.closed_dt, 10),
fmv1.v_inst_cd,
fmv1.ins_dt,
fmv1.upd_dt

View File

@ -1,9 +1,8 @@
from src.batch.common.batch_context import BatchContext
from src.batch.laundering import (
create_inst_merge_for_laundering, emp_chg_inst_laundering,
ult_ident_presc_laundering, sales_results_laundering)
from src.batch.dcf_inst_merge import integrate_dcf_inst_merge
from src.batch.laundering import (create_inst_merge_for_laundering,
emp_chg_inst_laundering,
sales_results_laundering,
ult_ident_presc_laundering)
from src.logging.get_logger import get_logger
batch_context = BatchContext.get_instance()
@ -19,7 +18,7 @@ def exec():
logger.info('営業日ではないため、実績洗替処理をスキップします。')
return
# DCF施設統合マスタ日次更新
integrate_dcf_inst_merge.exec()
integrate_dcf_inst_merge.exec()
# 洗替用マスタ作成
create_inst_merge_for_laundering.exec()
# 施設担当者洗替

View File

@ -214,9 +214,6 @@ class ComDrMapper(UltmarcTableMapper):
# 西暦の取得
self.__set_era()
# 「@」による項目クリアを設定
self.__set_clearing_item()
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
@ -250,10 +247,14 @@ class ComDrMapper(UltmarcTableMapper):
# 削除予定理由
if len(self.record.drdel_code) > 0:
set_clauses.append('delete_sche_reason_cd = :drdel_code')
if self.record.drdel_code == '@':
self.query_parameter['drdel_code'] = None
# 重複時相手先コード
if len(self.record.opp_dup_code) > 0:
set_clauses.append('opp_dup_cd = :opp_dup_code')
if self.record.reptdr_id == '@':
self.query_parameter['opp_dup_code'] = None
# 医師名(漢字)
if len(self.record.dr_name) > 0:
@ -274,6 +275,12 @@ class ComDrMapper(UltmarcTableMapper):
set_clauses.append('birthday_month = :birthday_month')
set_clauses.append('birthday_day = :birthday_day')
set_clauses.append('birthday = :birth_day')
if self.record.birthday_era == '@':
self.query_parameter['birthday_era'] = None
self.query_parameter['birthday_year'] = None
self.query_parameter['birthday_month'] = None
self.query_parameter['birthday_day'] = None
self.query_parameter['birth_day'] = None
# 出身都道府県コード
if len(self.record.home_town_code) > 0:
@ -288,6 +295,10 @@ class ComDrMapper(UltmarcTableMapper):
set_clauses.append('grad_year = :grad_year')
set_clauses.append('grad_era = :grad_yearera')
set_clauses.append('grad_y = :grad_y')
if self.record.grad_yearera == '@':
self.query_parameter['grad_yearera'] = None
self.query_parameter['grad_year'] = None
self.query_parameter['grad_y'] = None
# 出身校コード
if len(self.record.graduniv_code) > 0:
@ -302,10 +313,16 @@ class ComDrMapper(UltmarcTableMapper):
set_clauses.append('drday_era = :drda_yera')
set_clauses.append('drday_year = :drday_year')
set_clauses.append('drday_y = :drday_y')
if self.record.drda_yera == '@':
self.query_parameter['drda_yera'] = None
self.query_parameter['drday_year'] = None
self.query_parameter['drday_y'] = None
# 住所不明
if len(self.record.dr_addr_lost_code) > 0:
set_clauses.append('addr_unknown_reason_cd = :dr_addr_lost_code')
if self.record.dr_addr_lost_code == '@':
self.query_parameter['dr_addr_lost_code'] = None
# 住所
# 集合項目のいずれかに入力がある場合に更新
@ -323,22 +340,32 @@ class ComDrMapper(UltmarcTableMapper):
# 自宅電話番号
if len(self.record.dr_tel) > 0:
set_clauses.append('home_phone_number = :dr_tel')
if self.record.dr_tel == '@':
self.query_parameter['dr_tel'] = None
# 利用停止区分
if len(self.record.use_stop_flag) > 0:
set_clauses.append('use_stop_div = :use_stop_flag')
if self.record.use_stop_flag == '@':
self.query_parameter['use_stop_flag'] = None
# 利用停止理由
if len(self.record.use_stopc_ode) > 0:
set_clauses.append('use_stop_reason_cd = :use_stopc_ode')
if self.record.use_stopc_ode == '@':
self.query_parameter['use_stopc_ode'] = None
# 利用停止登録年月日
if len(self.record.cre_stop_date) > 0:
set_clauses.append('use_stop_regist_ymd = :cre_stop_date')
if self.record.cre_stop_date == '@':
self.query_parameter['cre_stop_date'] = None
# 利用停止解除年月日
if len(self.record.release_date) > 0:
set_clauses.append('use_stop_cancel_ymd = :release_date')
if self.record.release_date == '@':
self.query_parameter['release_date'] = None
# 開勤区分
if len(self.record.pract_class_code) > 0:
@ -349,6 +376,10 @@ class ComDrMapper(UltmarcTableMapper):
set_clauses.append('estab_era = :pract_yearera')
set_clauses.append('estab_year = :pract_year')
set_clauses.append('estab_y = :estab_y')
if self.record.pract_yearera == '@':
self.query_parameter['pract_yearera'] = None
self.query_parameter['pract_year'] = None
self.query_parameter['estab_y'] = None
# 一括登録フラグ
if len(self.record.bskregst_flag) > 0:
@ -428,53 +459,3 @@ class ComDrMapper(UltmarcTableMapper):
# 月日も空の場合、生年月日は空
return ''
def __set_clearing_item(self):
# 削除予定理由
if self.record.drdel_code == '@':
self.query_parameter['drdel_code'] = None
# 重複時相手先コード
if self.record.reptdr_id == '@':
self.query_parameter['opp_dup_code'] = None
# 生年月日
if self.record.birthday_era == '@':
self.query_parameter['birthday_era'] = None
self.query_parameter['birthday_year'] = None
self.query_parameter['birthday_month'] = None
self.query_parameter['birthday_day'] = None
self.query_parameter['birth_day'] = None
# 卒年
if self.record.grad_yearera == '@':
self.query_parameter['grad_yearera'] = None
self.query_parameter['grad_year'] = None
self.query_parameter['grad_y'] = None
# 登録年
if self.record.drda_yera == '@':
self.query_parameter['drda_yera'] = None
self.query_parameter['drday_year'] = None
self.query_parameter['drday_y'] = None
# 住所不明
if self.record.dr_addr_lost_code == '@':
self.query_parameter['dr_addr_lost_code'] = None
# 自宅電話番号
if self.record.dr_tel == '@':
self.query_parameter['dr_tel'] = None
# 利用停止区分
if self.record.use_stop_flag == '@':
self.query_parameter['use_stop_flag'] = None
# 利用停止理由
if self.record.use_stopc_ode == '@':
self.query_parameter['use_stopc_ode'] = None
# 利用停止登録年月日
if self.record.cre_stop_date == '@':
self.query_parameter['cre_stop_date'] = None
# 利用停止解除年月日
if self.record.release_date == '@':
self.query_parameter['release_date'] = None
# 開業年
if self.record.pract_yearera == '@':
self.query_parameter['pract_yearera'] = None
self.query_parameter['pract_year'] = None
self.query_parameter['estab_y'] = None
return

View File

@ -182,10 +182,6 @@ class ComDrWrkplaceMapper(UltmarcTableMapper):
def __make_queries(self):
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 「@」による項目クリアを設定
self.__set_clearing_item()
# 存在しない場合はInsert
if record_count[0]['count_num'] == 0:
return [self.INSERT_QUERY]
@ -208,6 +204,8 @@ class ComDrWrkplaceMapper(UltmarcTableMapper):
# DM不可フラグの値をセット
# 履歴レコード作成判断とならないため、後から設定
if self.record.notdm_flg != '':
notdm_flg = None if self.record.notdm_flg == '@' else self.record.notdm_flg
self.query_parameter['notdm_flg'] = notdm_flg
set_clause_without_historical.append(f'notdm_flg = :notdm_flg')
# 何かしら更新がある場合、履歴作成クエリを作成
if len(set_clauses_with_historical) != 0:
@ -232,16 +230,24 @@ class ComDrWrkplaceMapper(UltmarcTableMapper):
# 役職コード
if self.record.postcode != '':
set_clauses.append('post_cd = :postcode')
self.query_parameter['postcode'] = '' if self.record.postcode == '@' else self.record.postcode
# 大学順位
if self.record.identitycode != '':
set_clauses.append('identity_cd = :identitycode')
self.query_parameter['identitycode'] = '' if self.record.identitycode == '@' else self.record.identitycode
# 所属部科(集合項目)
if self.record.sectcode != '':
# 所属部科コード
self.query_parameter['sectcode'] = '9999' if self.record.sectcode == '@' else self.record.sectcode
set_clauses.append('blng_sec_cd = :sectcode')
# 所属部科(カナ)
sectname_kana = None if self.record.sectname_kana == '@' else self.record.sectname_kana
self.query_parameter['sectname_kana'] = sectname_kana
set_clauses.append(f'blng_sec_name_kana = :sectname_kana')
# 所属部科(漢字)
# 全角文字なので、修正項目として全角@が連携されるパターンがある
sectname = None if self.record.sectname == '' else self.record.sectname
self.query_parameter['sectname'] = sectname
set_clauses.append(f'blng_sec_name = :sectname')
# 何かしら更新がある場合、適用開始日をセットする
@ -250,32 +256,3 @@ class ComDrWrkplaceMapper(UltmarcTableMapper):
set_clauses.append("aply_start_ymd = DATE_FORMAT(:syor_date, '%Y%m%d')")
return set_clauses
def __set_clearing_item(self):
# 役職コード
if self.record.postcode == '@':
# NOT NULLのため、空文字をセット
self.query_parameter['postcode'] = ''
# 大学順位
if self.record.identitycode == '@':
# NOT NULLのため、空文字をセット
self.query_parameter['identitycode'] = ''
# DM不可フラグ
if self.record.notdm_flg == '@':
self.query_parameter['notdm_flg'] = None
# 以下、実際には項目のクリアが発生しない為不要なロジックだが、現行踏襲の為残しておく
# 所属部科コード
if self.record.sectcode == '@':
# NOT NULLのため、固定の所属部科コードをセット
self.query_parameter['sectcode'] = '9999'
# 所属部科(カナ)
if self.record.sectname_kana == '@':
self.query_parameter['sectname_kana'] = None
# 所属部科(漢字)
# 全角の項目なので、修正項目値として全角@が連携される
if self.record.sectname == '':
self.query_parameter['sectname'] = None
return

View File

@ -677,10 +677,6 @@ class ComInstAttMapper(UltmarcTableMapper):
def __make_upsert_query(self):
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 「@」による項目クリアを設定
self.__set_clearing_item()
# 存在しない場合はInsert
if record_count[0]['count_num'] == 0:
self.queries.append(self.INSERT_QUERY)
@ -697,24 +693,40 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('dpc_flag = :dpc_flag')
set_clauses.append('dpc_specday = :dpc_spec_day')
set_clauses.append('dpc_cancelday = :dpc_cancel_day')
if self.record.dpc_flag == '@':
self.query_parameter['dpc_flag'] = None
self.query_parameter['dpc_spec_day'] = None
self.query_parameter['dpc_cancel_day'] = None
# DPC準備病院
if len(self.record.predpc_flag) > 0:
set_clauses.append('predpc_flag = :predpc_flag')
set_clauses.append('predpc_specday = :predpc_spec_day')
set_clauses.append('predpc_cancelday = :predpc_cancel_day')
if self.record.predpc_flag == '@':
self.query_parameter['predpc_flag'] = None
self.query_parameter['predpc_spec_day'] = None
self.query_parameter['predpc_cancel_day'] = None
# がん診療連携拠点病院
if len(self.record.cancer_flag) > 0:
set_clauses.append('cancer_flag = :cancer_flag')
set_clauses.append('cancer_specday = :cancer_spec_day')
set_clauses.append('cancer_cancelday = :cancer_cancel_day')
if self.record.cancer_flag == '@':
self.query_parameter['cancer_flag'] = None
self.query_parameter['cancer_spec_day'] = None
self.query_parameter['cancer_cancel_day'] = None
# 特定機能病院
if len(self.record.funchp_flag) > 0:
set_clauses.append('funchpflag = :funchp_flag')
set_clauses.append('funchpokdate = :funchp_ok_date')
set_clauses.append('funchpcandate = :funchp_can_date')
if self.record.funchp_flag == '@':
self.query_parameter['funchp_flag'] = None
self.query_parameter['funchp_ok_date'] = None
self.query_parameter['funchp_can_date'] = None
# 地域医療支援病院
if len(self.record.areasuphp_flag) > 0:
@ -722,167 +734,275 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('areasuphpintrate = :areasuphp_intrate')
set_clauses.append('areasuphpokdate = :areasuphp_ok_date')
set_clauses.append('areasuphpcandate = :areasuphp_can_date')
if self.record.areasuphp_flag == '@':
self.query_parameter['areasuphp_flag'] = None
self.query_parameter['areasuphp_intrate'] = None
self.query_parameter['areasuphp_ok_date'] = None
self.query_parameter['areasuphp_can_date'] = None
# 超急性期脳卒中加算
if len(self.record.acuthp_add_flag) > 0:
set_clauses.append('acuthpaddflag = :acuthp_add_flag')
set_clauses.append('acuthpaddokdate = :acuthp_add_ok_date')
set_clauses.append('acuthpaddcandate = :acuthp_add_can_date')
if self.record.acuthp_add_flag == '@':
self.query_parameter['acuthp_add_flag'] = None
self.query_parameter['acuthp_add_ok_date'] = None
self.query_parameter['acuthp_add_can_date'] = None
# 総合入院体制加算
if len(self.record.genadmisiion_flag) > 0:
set_clauses.append('genadmisiionflag = :genadmisiion_flag')
set_clauses.append('genadmisiionfokdate = :genadmisiion_ok_date')
set_clauses.append('genadmisiionfcandate = :genadmisiion_can_date')
if self.record.genadmisiion_flag == '@':
self.query_parameter['genadmisiion_flag'] = None
self.query_parameter['genadmisiion_ok_date'] = None
self.query_parameter['genadmisiion_can_date'] = None
# 医師事務作業補助体制加算
if len(self.record.assistance_flag) > 0:
set_clauses.append('assistanceflag = :assistance_flag')
set_clauses.append('assistanceokdate = :assistance_ok_date')
set_clauses.append('assistancecandate = :assistance_can_date')
if self.record.assistance_flag == '@':
self.query_parameter['assistance_flag'] = None
self.query_parameter['assistance_ok_date'] = None
self.query_parameter['assistance_can_date'] = None
# 診療録管理体制加算
if len(self.record.diagnosis_treatment_flag) > 0:
set_clauses.append('diagnosistreatment_flag = :diagnosis_treatment_flag')
set_clauses.append('diagnosistreatment_specday = :diagnosis_treatment_spec_day')
set_clauses.append('diagnosistreatment_cancelday = :diagnosis_treatment_cancel_day')
if self.record.diagnosis_treatment_flag == '@':
self.query_parameter['diagnosis_treatment_flag'] = None
self.query_parameter['diagnosis_treatment_spec_day'] = None
self.query_parameter['diagnosis_treatment_cancel_day'] = None
# 医療安全対策加算
if len(self.record.safety_flag) > 0:
set_clauses.append('safety_flag = :safety_flag')
set_clauses.append('safety_specday = :safety_spec_day')
set_clauses.append('safety_cancelday = :safety_cancel_day')
if self.record.safety_flag == '@':
self.query_parameter['safety_flag'] = None
self.query_parameter['safety_spec_day'] = None
self.query_parameter['safety_cancel_day'] = None
# 褥瘡ハイリスク患者ケア加算
if len(self.record.highrisk_flag) > 0:
set_clauses.append('highrisk_flag = :highrisk_flag')
set_clauses.append('highrisk_specday = :highrisk_spec_day')
set_clauses.append('highrisk_cancelday = :highrisk_cancel_day')
if self.record.highrisk_flag == '@':
self.query_parameter['highrisk_flag'] = None
self.query_parameter['highrisk_spec_day'] = None
self.query_parameter['highrisk_cancel_day'] = None
# 地域連携小児夜間・休日診療料
if len(self.record.infant_and_holiday_flag) > 0:
set_clauses.append('infantandholiday_flag = :infant_and_holiday_flag')
set_clauses.append('infantandholiday_specday = :infant_and_holiday_spec_day')
set_clauses.append('infantandholiday_cancelday = :infant_and_holiday_cancel_day')
if self.record.infant_and_holiday_flag == '@':
self.query_parameter['infant_and_holiday_flag'] = None
self.query_parameter['infant_and_holiday_spec_day'] = None
self.query_parameter['infant_and_holiday_cancel_day'] = None
# 開放型病院
if len(self.record.ophp_flag) > 0:
set_clauses.append('ophpflag = :ophp_flag')
set_clauses.append('ophpokdate = :ophpok_date')
set_clauses.append('ophpcandate = :ophpcan_date')
if self.record.ophp_flag == '@':
self.query_parameter['ophp_flag'] = None
self.query_parameter['ophpok_date'] = None
self.query_parameter['ophpcan_date'] = None
# 地域連携クリティカルパス
if len(self.record.critical_flag) > 0:
set_clauses.append('critical_flag = :critical_flag')
# 項目クリア判断
is_aggregate_item_clear = self.record.critical_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['critical_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
num = str(i).zfill(2) # 2桁で0埋め
setting_item_name = f'critical_code{num}'
set_clauses.append(f'{setting_item_name} = :{setting_item_name}')
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 薬剤管理指導料
if len(self.record.drgmgthp_flag) > 0:
set_clauses.append('drgmgthpflag = :drgmgthp_flag')
set_clauses.append('drgmgthpokdate = :drgmgthp_ok_date')
set_clauses.append('drgmgthpcandate = :drgmgthp_can_date')
if self.record.drgmgthp_flag == '@':
self.query_parameter['drgmgthp_flag'] = None
self.query_parameter['drgmgthp_ok_date'] = None
self.query_parameter['drgmgthp_can_date'] = None
# 画像診断管理加算
if len(self.record.image_diagnosis_flag) > 0:
set_clauses.append('imagediagnosis_flag = :image_diagnosis_flag')
set_clauses.append('imagediagnosis_specifiedday = :image_diagnosis_specified_day')
set_clauses.append('imagediagnosis_cancelday = :image_diagnosis_cancel_day')
if self.record.image_diagnosis_flag == '@':
self.query_parameter['image_diagnosis_flag'] = None
self.query_parameter['image_diagnosis_specified_day'] = None
self.query_parameter['image_diagnosis_cancel_day'] = None
# 外来化学療法加算
if len(self.record.chemotherapy_flag) > 0:
set_clauses.append('chemotherapy_flag = :chemotherapy_flag')
set_clauses.append('chemotherapy_specday = :chemotherapy_spec_day')
set_clauses.append('chemotherapy_cancelday = :chemotherapy_cancel_day')
if self.record.chemotherapy_flag == '@':
self.query_parameter['chemotherapy_flag'] = None
self.query_parameter['chemotherapy_spec_day'] = None
self.query_parameter['chemotherapy_cancel_day'] = None
# 疾患別リハビリテーション料
if len(self.record.rehabilitation_flag) > 0:
set_clauses.append('rehabilitation_flag = :rehabilitation_flag')
# 項目クリア判断
is_aggregate_item_clear = self.record.rehabilitation_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['rehabilitation_flag'] = None
# 10個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 11):
num = str(i).zfill(2) # 2桁で0埋め
setting_item_name = f'rehabilitation_code{num}'
set_clauses.append(f'{setting_item_name} = :{setting_item_name}')
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 麻酔管理料
if len(self.record.anesthetizing_manage_flag) > 0:
set_clauses.append('anesthetizingmanage_flag = :anesthetizing_manage_flag')
set_clauses.append('anesthetizingmanage_specday = :anesthetizing_manage_spec_day')
set_clauses.append('anesthetizingmanage_cancelday = :anesthetizing_manage_can_day')
if self.record.anesthetizing_manage_flag == '@':
self.query_parameter['anesthetizing_manage_flag'] = None
self.query_parameter['anesthetizing_manage_spec_day'] = None
self.query_parameter['anesthetizing_manage_can_day'] = None
# 在宅療養支援病院・診療所
if len(self.record.home_recuperation_flag) > 0:
set_clauses.append('homerecuperation_flag = :home_recuperation_flag')
set_clauses.append('homerecuperation_specday = :home_recuperation_spec_day')
set_clauses.append('homerecuperation_cancelday = :home_recuperation_cancel_day')
if self.record.home_recuperation_flag == '@':
self.query_parameter['home_recuperation_flag'] = None
self.query_parameter['home_recuperation_spec_day'] = None
self.query_parameter['home_recuperation_cancel_day'] = None
# 在宅時医学総合管理料
if len(self.record.synthesis_when_staying_flag) > 0:
set_clauses.append('synthesiswhenstaying_flag = :synthesis_when_staying_flag')
set_clauses.append('synthesiswhenstaying_specday = :synthesis_when_staying_spec_day')
set_clauses.append('synthesiswhenstaying_cancelday = :synthesis_when_staying_can_day')
if self.record.synthesis_when_staying_flag == '@':
self.query_parameter['synthesis_when_staying_flag'] = None
self.query_parameter['synthesis_when_staying_spec_day'] = None
self.query_parameter['synthesis_when_staying_can_day'] = None
# 在宅末期医療総合診療料
if len(self.record.home_late_flag) > 0:
set_clauses.append('homelateflag = :home_late_flag')
set_clauses.append('homelateokday = :home_late_ok_day')
set_clauses.append('homelatecanday = :home_late_can_day')
if self.record.home_late_flag == '@':
self.query_parameter['home_late_flag'] = None
self.query_parameter['home_late_ok_day'] = None
self.query_parameter['home_late_can_day'] = None
# ケアミックス区分
if len(self.record.caremix_kind) > 0:
set_clauses.append('caremixkind = :caremix_kind')
if self.record.caremix_kind == '@':
self.query_parameter['caremix_kind'] = None
# 完全型・移行型区分
if len(self.record.fullmove_flag) > 0:
set_clauses.append('fullmoveflag = :fullmove_flag')
if self.record.fullmove_flag == '@':
self.query_parameter['fullmove_flag'] = None
# 療養型病床群
if sum(len(item) for item in self.record.resthp_items) > 0:
# 医療型
set_clauses.append('resthpflag = :resthp_flag')
set_clauses.append('resthpcarekind = :resthp_care_kind')
set_clauses.append('resthpbednum = :resthp_bed_num')
set_clauses.append('resthpokdate = :resthp_ok_date')
set_clauses.append('resthpcandate = :resthp_can_date')
# 介護型
set_clauses.append('resthpcarenrskind = :resthp_care_nrs_kind')
set_clauses.append('resthpcarebednum = :resthp_care_bed_num')
set_clauses.append('resthpcareokdate = :resthp_care_ok_date')
set_clauses.append('resthpcarecandate = :resthp_care_can_date')
# 合計
set_clauses.append('resthpsbednum = :resthp_sbed_num')
if self.record.resthp_flag == '@':
self.query_parameter['resthp_flag'] = None
self.query_parameter['resthp_care_kind'] = None
self.query_parameter['resthp_bed_num'] = None
self.query_parameter['resthp_ok_date'] = None
self.query_parameter['resthp_can_date'] = None
self.query_parameter['resthp_care_nrs_kind'] = None
self.query_parameter['resthp_care_bed_num'] = None
self.query_parameter['resthp_care_ok_date'] = None
self.query_parameter['resthp_care_can_date'] = None
self.query_parameter['resthp_sbed_num'] = None
# 一般病棟
if len(self.record.nrmhp_flag) > 0:
set_clauses.append('nrmhpflag = :nrmhp_flag')
set_clauses.append('nrmhpcarekind = :nrmhp_care_kind')
set_clauses.append('nrmhpbedtotalnum = :nrmhp_bed_total_num')
if self.record.nrmhp_flag == '@':
self.query_parameter['nrmhp_flag'] = None
self.query_parameter['nrmhp_care_kind'] = None
self.query_parameter['nrmhp_bed_total_num'] = None
# 精神病棟
if len(self.record.menthp_flag) > 0:
set_clauses.append('menthpflag = :menthp_flag')
set_clauses.append('menthpcarekind = :menthp_care_kind')
set_clauses.append('menthpbednum = :menthp_bed_num')
if self.record.menthp_flag == '@':
self.query_parameter['menthp_flag'] = None
self.query_parameter['menthp_care_kind'] = None
self.query_parameter['menthp_bed_num'] = None
# 結核病棟
if len(self.record.tubhp_flag) > 0:
set_clauses.append('tubhpflag = :tubhp_flag')
set_clauses.append('tubhpcarekind = :tubhp_care_kind')
set_clauses.append('tubhpbednum = :tubhp_bed_num')
if self.record.tubhp_flag == '@':
self.query_parameter['tubhp_flag'] = None
self.query_parameter['tubhp_care_kind'] = None
self.query_parameter['tubhp_bed_num'] = None
# 感染症指定医療機関
if len(self.record.infhp_flag) > 0:
set_clauses.append('infhpflag = :infhp_flag')
set_clauses.append('infhpflag1 = :infhp_flag1')
set_clauses.append('infhpflag2 = :infhp_flag2')
if self.record.infhp_flag == '@':
self.query_parameter['infhp_flag'] = None
self.query_parameter['infhp_flag1'] = None
self.query_parameter['infhp_flag2'] = None
# 感染症病床
if len(self.record.infhp_bed_flag) > 0:
set_clauses.append('infhpbedflag = :infhp_bed_flag')
set_clauses.append('infhpbednum = :infhp_bed_num')
if self.record.infhp_bed_flag == '@':
self.query_parameter['infhp_bed_flag'] = None
self.query_parameter['infhp_bed_num'] = None
# 緩和ケア病棟設置病院
if len(self.record.hospice_flag) > 0:
@ -890,6 +1010,11 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('hospicebednum = :hospice_bed_num')
set_clauses.append('hospiceokdate = :hospice_ok_date')
set_clauses.append('hospicecandate = :hospice_can_date')
if self.record.hospice_flag == '@':
self.query_parameter['hospice_flag'] = None
self.query_parameter['hospice_bed_num'] = None
self.query_parameter['hospice_ok_date'] = None
self.query_parameter['hospice_can_date'] = None
# 医療機能評価
if len(self.record.hpfunce_st_flag) > 0:
@ -897,35 +1022,55 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('hpfuncestkind = :hpfunce_st_kind')
set_clauses.append('hpfuncestokdate = :hpfunce_st_ok_date')
set_clauses.append('hpfuncestcandate = :hpfunce_st_can_date')
if self.record.hpfunce_st_flag == '@':
self.query_parameter['hpfunce_st_flag'] = None
self.query_parameter['hpfunce_st_kind'] = None
self.query_parameter['hpfunce_st_ok_date'] = None
self.query_parameter['hpfunce_st_can_date'] = None
# 臨床研修指定病院
if sum(len(item) for item in self.record.cl_items) > 0:
# 基幹型病院1
set_clauses.append('clolyhpkind = :clolyhp_kind')
set_clauses.append('clolyhpokdate = :clolyhp_ok_date')
set_clauses.append('clolyhpcandate = :clolyhp_can_date')
# 基幹型病院2群指定
set_clauses.append('clhpkind = :clhp_kind')
set_clauses.append('clhpokdate = :clhp_ok_date')
set_clauses.append('clhpcandate = :clhp_can_date')
# 協力型病院(群指定)
set_clauses.append('cldephpkind = :cldephp_kind')
set_clauses.append('cldephpokdate = :cldephp_ok_date')
set_clauses.append('cldephpcandate = :cldephp_can_date')
if self.record.clolyhp_kind == '@':
self.query_parameter['clolyhp_kind'] = None
self.query_parameter['clolyhp_ok_date'] = None
self.query_parameter['clolyhp_can_date'] = None
self.query_parameter['clhp_kind'] = None
self.query_parameter['clhp_ok_date'] = None
self.query_parameter['clhp_can_date'] = None
self.query_parameter['cldephp_kind'] = None
self.query_parameter['cldephp_ok_date'] = None
self.query_parameter['cldephp_can_date'] = None
# 災害拠点病院
if len(self.record.disasthp_flag) > 0:
set_clauses.append('disasthpflag = :disasthp_flag')
if self.record.disasthp_flag == '@':
self.query_parameter['disasthp_flag'] = None
# 救急医療
if len(self.record.d1emerhp_flag) > 0:
set_clauses.append('d1emerhpflag = :d1emerhp_flag')
set_clauses.append('d2emerhpflag = :d2emerhp_flag')
set_clauses.append('d3emerhpflag = :d3emerhp_flag')
if self.record.d1emerhp_flag == '@':
self.query_parameter['d1emerhp_flag'] = None
self.query_parameter['d2emerhp_flag'] = None
self.query_parameter['d3emerhp_flag'] = None
# 救急告示診療所
if len(self.record.emergency_clinic) > 0:
set_clauses.append('emergencyclinic = :emergency_clinic')
if self.record.emergency_clinic == '@':
self.query_parameter['emergency_clinic'] = None
# 治験中核病院
if len(self.record.trial_core_flag) > 0:
@ -933,42 +1078,72 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('trialcore_div = :trial_core_div')
set_clauses.append('trialcoreokdate = :trial_core_ok_date')
set_clauses.append('trialcorecandate = :trial_core_can_date')
if self.record.trial_core_flag == '@':
self.query_parameter['trial_core_flag'] = None
self.query_parameter['trial_core_div'] = None
self.query_parameter['trial_core_ok_date'] = None
self.query_parameter['trial_core_can_date'] = None
# 認知症疾患医療センター
if len(self.record.dementia_flag) > 0:
set_clauses.append('dementiaflag = :dementia_flag')
set_clauses.append('dementiaokdate = :dementia_okd_ate')
set_clauses.append('dementiacandate = :dementia_can_date')
if self.record.dementia_flag == '@':
self.query_parameter['dementia_flag'] = None
self.query_parameter['dementia_okd_ate'] = None
self.query_parameter['dementia_can_date'] = None
# 特定健康診査実施機関
if len(self.record.sphealth_exploration) > 0:
set_clauses.append('sphealth_exploration = :sphealth_exploration')
if self.record.sphealth_exploration == '@':
self.query_parameter['sphealth_exploration'] = None
# 特定保健指導実施機関
if len(self.record.sphealth_guidance) > 0:
set_clauses.append('sphealth_guidance = :sphealth_guidance')
if self.record.sphealth_guidance == '@':
self.query_parameter['sphealth_guidance'] = None
# 先進医療実施医療機関
if len(self.record.hiadhp_flag) > 0:
set_clauses.append('hiadhpflag = :hiadhp_flag')
# 項目クリア判断
is_aggregate_item_clear = self.record.hiadhp_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['hiadhp_flag'] = None
# 40個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 41):
setting_item_name_code = f'hiadhpcode{i}'
setting_item_name_kind = f'hiadhpkind{i}'
set_clauses.append(f'{setting_item_name_code} = :{setting_item_name_code}')
set_clauses.append(f'{setting_item_name_kind} = :{setting_item_name_kind}')
if is_aggregate_item_clear:
self.query_parameter[setting_item_name_code] = None
self.query_parameter[setting_item_name_kind] = None
# 先端医療実施医療機関
if len(self.record.hitechhp_flag) > 0:
set_clauses.append('hitechhpflag = :hitechhp_flag')
# 項目クリア判断
is_aggregate_item_clear = self.record.hitechhp_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['hitechhp_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
setting_item_name = f'hitechhpkind{i}'
set_clauses.append(f'{setting_item_name} = :{setting_item_name}')
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 政策医療
if len(self.record.policy_medical_flag) > 0:
set_clauses.append('policymedical_flag = :policy_medical_flag')
# 項目クリア判断
is_aggregate_item_clear = self.record.policy_medical_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['policy_medical_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
num = str(i).zfill(2) # 2桁で0埋め
@ -976,6 +1151,9 @@ class ComInstAttMapper(UltmarcTableMapper):
setting_item_name_content = f'policymedical_content{num}'
set_clauses.append(f'{setting_item_name_code} = :{setting_item_name_code}')
set_clauses.append(f'{setting_item_name_content} = :{setting_item_name_content}')
if is_aggregate_item_clear:
self.query_parameter[setting_item_name_code] = None
self.query_parameter[setting_item_name_content] = None
# 訪問看護ステーション
if len(self.record.visitcarest_flag) > 0:
@ -983,10 +1161,17 @@ class ComInstAttMapper(UltmarcTableMapper):
set_clauses.append('visitcarestation_id = :visitcarestation_id')
set_clauses.append('visitcarestation_code = :visitcarestation_code')
set_clauses.append('visitcarestation_yobi = :visitcarestation_yobi')
if self.record.visitcarest_flag == '@':
self.query_parameter['visitcarest_flag'] = None
self.query_parameter['visitcarestation_id'] = None
self.query_parameter['visitcarestation_code'] = None
self.query_parameter['visitcarestation_yobi'] = None
# 開設年月
if len(self.record.open_date) > 0:
set_clauses.append('opendate = :open_date')
if self.record.open_date == '@':
self.query_parameter['open_date'] = None
update_columns = ','.join(set_clauses)
# 何も更新項目が無い場合はNoneとする更新処理は行わない
@ -999,277 +1184,3 @@ class ComInstAttMapper(UltmarcTableMapper):
update_columns=update_columns
)
return update_query
def __set_clearing_item(self):
# DPC対象病院
if self.record.dpc_flag == '@':
self.query_parameter['dpc_flag'] = None
self.query_parameter['dpc_spec_day'] = None
self.query_parameter['dpc_cancel_day'] = None
# DPC準備病院
if self.record.predpc_flag == '@':
self.query_parameter['predpc_flag'] = None
self.query_parameter['predpc_spec_day'] = None
self.query_parameter['predpc_cancel_day'] = None
# がん診療連携拠点病院
if self.record.cancer_flag == '@':
self.query_parameter['cancer_flag'] = None
self.query_parameter['cancer_spec_day'] = None
self.query_parameter['cancer_cancel_day'] = None
# 特定機能病院
if self.record.funchp_flag == '@':
self.query_parameter['funchp_flag'] = None
self.query_parameter['funchp_ok_date'] = None
self.query_parameter['funchp_can_date'] = None
# 地域医療支援病院
if self.record.areasuphp_flag == '@':
self.query_parameter['areasuphp_flag'] = None
self.query_parameter['areasuphp_intrate'] = None
self.query_parameter['areasuphp_ok_date'] = None
self.query_parameter['areasuphp_can_date'] = None
# 超急性期脳卒中加算
if self.record.acuthp_add_flag == '@':
self.query_parameter['acuthp_add_flag'] = None
self.query_parameter['acuthp_add_ok_date'] = None
self.query_parameter['acuthp_add_can_date'] = None
# 総合入院体制加算
if self.record.genadmisiion_flag == '@':
self.query_parameter['genadmisiion_flag'] = None
self.query_parameter['genadmisiion_ok_date'] = None
self.query_parameter['genadmisiion_can_date'] = None
# 医師事務作業補助体制加算
if self.record.assistance_flag == '@':
self.query_parameter['assistance_flag'] = None
self.query_parameter['assistance_ok_date'] = None
self.query_parameter['assistance_can_date'] = None
# 診療録管理体制加算
if self.record.diagnosis_treatment_flag == '@':
self.query_parameter['diagnosis_treatment_flag'] = None
self.query_parameter['diagnosis_treatment_spec_day'] = None
self.query_parameter['diagnosis_treatment_cancel_day'] = None
# 医療安全対策加算
if self.record.safety_flag == '@':
self.query_parameter['safety_flag'] = None
self.query_parameter['safety_spec_day'] = None
self.query_parameter['safety_cancel_day'] = None
# 褥瘡ハイリスク患者ケア加算
if self.record.highrisk_flag == '@':
self.query_parameter['highrisk_flag'] = None
self.query_parameter['highrisk_spec_day'] = None
self.query_parameter['highrisk_cancel_day'] = None
# 地域連携小児夜間・休日診療料
if self.record.infant_and_holiday_flag == '@':
self.query_parameter['infant_and_holiday_flag'] = None
self.query_parameter['infant_and_holiday_spec_day'] = None
self.query_parameter['infant_and_holiday_cancel_day'] = None
# 開放型病院
if self.record.ophp_flag == '@':
self.query_parameter['ophp_flag'] = None
self.query_parameter['ophpok_date'] = None
self.query_parameter['ophpcan_date'] = None
# 地域連携クリティカルパス
is_aggregate_item_clear = self.record.critical_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['critical_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
num = str(i).zfill(2) # 2桁で0埋め
setting_item_name = f'critical_code{num}'
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 薬剤管理指導料
if self.record.drgmgthp_flag == '@':
self.query_parameter['drgmgthp_flag'] = None
self.query_parameter['drgmgthp_ok_date'] = None
self.query_parameter['drgmgthp_can_date'] = None
# 画像診断管理加算
if self.record.image_diagnosis_flag == '@':
self.query_parameter['image_diagnosis_flag'] = None
self.query_parameter['image_diagnosis_specified_day'] = None
self.query_parameter['image_diagnosis_cancel_day'] = None
# 外来化学療法加算
if self.record.chemotherapy_flag == '@':
self.query_parameter['chemotherapy_flag'] = None
self.query_parameter['chemotherapy_spec_day'] = None
self.query_parameter['chemotherapy_cancel_day'] = None
# 疾患別リハビリテーション料
is_aggregate_item_clear = self.record.rehabilitation_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['rehabilitation_flag'] = None
# 10個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 11):
num = str(i).zfill(2) # 2桁で0埋め
setting_item_name = f'rehabilitation_code{num}'
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 麻酔管理料
if self.record.anesthetizing_manage_flag == '@':
self.query_parameter['anesthetizing_manage_flag'] = None
self.query_parameter['anesthetizing_manage_spec_day'] = None
self.query_parameter['anesthetizing_manage_can_day'] = None
# 在宅療養支援病院・診療所
if self.record.home_recuperation_flag == '@':
self.query_parameter['home_recuperation_flag'] = None
self.query_parameter['home_recuperation_spec_day'] = None
self.query_parameter['home_recuperation_cancel_day'] = None
# 在宅時医学総合管理料
if self.record.synthesis_when_staying_flag == '@':
self.query_parameter['synthesis_when_staying_flag'] = None
self.query_parameter['synthesis_when_staying_spec_day'] = None
self.query_parameter['synthesis_when_staying_can_day'] = None
# 在宅末期医療総合診療料
if self.record.home_late_flag == '@':
self.query_parameter['home_late_flag'] = None
self.query_parameter['home_late_ok_day'] = None
self.query_parameter['home_late_can_day'] = None
# ケアミックス区分
if self.record.caremix_kind == '@':
self.query_parameter['caremix_kind'] = None
# 完全型・移行型区分
if self.record.fullmove_flag == '@':
self.query_parameter['fullmove_flag'] = None
# 療養型病床群
if self.record.resthp_flag == '@':
# 医療型
self.query_parameter['resthp_flag'] = None
self.query_parameter['resthp_care_kind'] = None
self.query_parameter['resthp_bed_num'] = None
self.query_parameter['resthp_ok_date'] = None
self.query_parameter['resthp_can_date'] = None
# 介護型
self.query_parameter['resthp_care_nrs_kind'] = None
self.query_parameter['resthp_care_bed_num'] = None
self.query_parameter['resthp_care_ok_date'] = None
self.query_parameter['resthp_care_can_date'] = None
# 合計
self.query_parameter['resthp_sbed_num'] = None
# 一般病棟
if self.record.nrmhp_flag == '@':
self.query_parameter['nrmhp_flag'] = None
self.query_parameter['nrmhp_care_kind'] = None
self.query_parameter['nrmhp_bed_total_num'] = None
# 精神病棟
if self.record.menthp_flag == '@':
self.query_parameter['menthp_flag'] = None
self.query_parameter['menthp_care_kind'] = None
self.query_parameter['menthp_bed_num'] = None
# 結核病棟
if self.record.tubhp_flag == '@':
self.query_parameter['tubhp_flag'] = None
self.query_parameter['tubhp_care_kind'] = None
self.query_parameter['tubhp_bed_num'] = None
# 感染症指定医療機関
if self.record.infhp_flag == '@':
self.query_parameter['infhp_flag'] = None
self.query_parameter['infhp_flag1'] = None
self.query_parameter['infhp_flag2'] = None
# 感染症病床
if self.record.infhp_bed_flag == '@':
self.query_parameter['infhp_bed_flag'] = None
self.query_parameter['infhp_bed_num'] = None
# 緩和ケア病棟設置病院
if self.record.hospice_flag == '@':
self.query_parameter['hospice_flag'] = None
self.query_parameter['hospice_bed_num'] = None
self.query_parameter['hospice_ok_date'] = None
self.query_parameter['hospice_can_date'] = None
# 医療機能評価
if self.record.hpfunce_st_flag == '@':
self.query_parameter['hpfunce_st_flag'] = None
self.query_parameter['hpfunce_st_kind'] = None
self.query_parameter['hpfunce_st_ok_date'] = None
self.query_parameter['hpfunce_st_can_date'] = None
# 臨床研修指定病院
if self.record.clolyhp_kind == '@':
# 基幹型病院1
self.query_parameter['clolyhp_kind'] = None
self.query_parameter['clolyhp_ok_date'] = None
self.query_parameter['clolyhp_can_date'] = None
# 基幹型病院2群指定
self.query_parameter['clhp_kind'] = None
self.query_parameter['clhp_ok_date'] = None
self.query_parameter['clhp_can_date'] = None
# 協力型病院(群指定)
self.query_parameter['cldephp_kind'] = None
self.query_parameter['cldephp_ok_date'] = None
self.query_parameter['cldephp_can_date'] = None
# 災害拠点病院
if self.record.disasthp_flag == '@':
self.query_parameter['disasthp_flag'] = None
# 救急医療
if self.record.d1emerhp_flag == '@':
self.query_parameter['d1emerhp_flag'] = None
self.query_parameter['d2emerhp_flag'] = None
self.query_parameter['d3emerhp_flag'] = None
# 救急告示診療所
if self.record.emergency_clinic == '@':
self.query_parameter['emergency_clinic'] = None
# 治験中核病院
if self.record.trial_core_flag == '@':
self.query_parameter['trial_core_flag'] = None
self.query_parameter['trial_core_div'] = None
self.query_parameter['trial_core_ok_date'] = None
self.query_parameter['trial_core_can_date'] = None
# 認知症疾患医療センター
if self.record.dementia_flag == '@':
self.query_parameter['dementia_flag'] = None
self.query_parameter['dementia_okd_ate'] = None
self.query_parameter['dementia_can_date'] = None
# 特定健康診査実施機関
if self.record.sphealth_exploration == '@':
self.query_parameter['sphealth_exploration'] = None
# 特定保健指導実施機関
if self.record.sphealth_guidance == '@':
self.query_parameter['sphealth_guidance'] = None
# 先進医療実施医療機関
is_aggregate_item_clear = self.record.hiadhp_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['hiadhp_flag'] = None
# 40個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 41):
setting_item_name_code = f'hiadhpcode{i}'
setting_item_name_kind = f'hiadhpkind{i}'
if is_aggregate_item_clear:
self.query_parameter[setting_item_name_code] = None
self.query_parameter[setting_item_name_kind] = None
# 先端医療実施医療機関
is_aggregate_item_clear = self.record.hitechhp_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['hitechhp_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
setting_item_name = f'hitechhpkind{i}'
if is_aggregate_item_clear:
self.query_parameter[setting_item_name] = None
# 政策医療
# 項目クリア判断
is_aggregate_item_clear = self.record.policy_medical_flag == '@'
if is_aggregate_item_clear:
self.query_parameter['policy_medical_flag'] = None
# 20個分の項目設定(rangeの第2引数の数字はループに含まれないため、+1を指定する)
for i in range(1, 21):
num = str(i).zfill(2) # 2桁で0埋め
setting_item_name_code = f'policymedical_code{num}'
setting_item_name_content = f'policymedical_content{num}'
if is_aggregate_item_clear:
self.query_parameter[setting_item_name_code] = None
self.query_parameter[setting_item_name_content] = None
# 訪問看護ステーション
if self.record.visitcarest_flag == '@':
self.query_parameter['visitcarest_flag'] = None
self.query_parameter['visitcarestation_id'] = None
self.query_parameter['visitcarestation_code'] = None
self.query_parameter['visitcarestation_yobi'] = None
# 開設年月
if self.record.open_date == '@':
self.query_parameter['open_date'] = None
return

View File

@ -263,10 +263,6 @@ class ComInstMapper(UltmarcTableMapper):
def __make_upsert_query(self):
# レコードの存在確認(施設)
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 「@」による項目クリアを設定
self.__set_clearing_item()
if record_count[0]['count_num'] == 0:
# 存在しない場合はInsert
self.queries.append(self.INSERT_INST_QUERY)
@ -348,64 +344,96 @@ class ComInstMapper(UltmarcTableMapper):
# 未確認フラグ
if len(self.record.uncheck_flag) > 0:
set_clauses.append('unconf_flg = :uncheck_flag')
if self.record.uncheck_flag == '@':
self.query_parameter['uncheck_flag'] = None
# 削除予定理由コード
if len(self.record.hpdel_code) > 0:
set_clauses.append('delete_sche_reason_cd = :hpdel_code')
if self.record.hpdel_code == '@':
self.query_parameter['hpdel_code'] = None
# 重複時相手先コード
if len(self.record.dup_opp_code) > 0:
set_clauses.append('dup_opp_cd = :dup_opp_code')
if self.record.duphp_id == '@':
self.query_parameter['dup_opp_code'] = None
# 住所不明理由コード
if len(self.record.hp_addr_lost_code) > 0:
set_clauses.append('addr_unknown_reason_cd = :hp_addr_lost_code')
if self.record.hp_addr_lost_code == '@':
self.query_parameter['hp_addr_lost_code'] = None
# 電話番号なしフラグ
if len(self.record.tel_nothing_flag) > 0:
set_clauses.append('phone_number_non_flg = :tel_nothing_flag')
if self.record.tel_nothing_flag == '@':
self.query_parameter['tel_nothing_flag'] = None
# 電話番号
if len(self.record.hp_tel) > 0:
set_clauses.append('inst_phone_number = :hp_tel')
if self.record.hp_tel == '@':
self.query_parameter['hp_tel'] = None
# 施設代表者コード
if len(self.record.inst_repre_code) > 0:
set_clauses.append('inst_repre_cd = :inst_repre_code')
if self.record.president_id == '@':
self.query_parameter['inst_repre_code'] = None
# 代表者(カナ)
if len(self.record.president_kana) > 0:
set_clauses.append('inst_repre_kana = :president_kana')
if self.record.president_kana == '@':
self.query_parameter['president_kana'] = None
# 代表者(漢字) ※「@」が大文字
if len(self.record.president) > 0:
set_clauses.append('inst_repre = :president')
if self.record.president == '':
self.query_parameter['president'] = None
# 開業予定フラグ・開業予定年月
if len(self.record.open_flag + self.record.open_year_month) > 0:
set_clauses.append('estab_sche_flg = :open_flag')
set_clauses.append('estab_sche_ym = :open_year_month')
if self.record.open_flag == '@':
self.query_parameter['open_flag'] = None
self.query_parameter['open_year_month'] = None
# 休院フラグ・休院開始年月
if len(self.record.close_flag + self.record.close_year_month) > 0:
set_clauses.append('close_flg = :close_flag')
set_clauses.append('close_start_ym = :close_year_month')
if self.record.close_flag == '@':
self.query_parameter['close_flag'] = None
self.query_parameter['close_year_month'] = None
# 関連大学親コード
if len(self.record.univ_prnt_code) > 0:
set_clauses.append('rltd_univ_prnt_cd = :univ_prnt_code')
if self.record.assoc_parrent_id == '@':
self.query_parameter['univ_prnt_code'] = None
# 病棟閉鎖フラグ
if len(self.record.close_flag2) > 0:
set_clauses.append('ward_abolish_flg = :close_flag2')
if self.record.close_flag2 == '@':
self.query_parameter['close_flag2'] = None
# 病床数(定員)
if self.record.bed_num is not None:
set_clauses.append('bed_num = :bed_num')
if self.record.bed_num == '@':
self.query_parameter['bed_num'] = None
# 許可病床メンテ日付
if len(self.record.bed_class_maint_date) > 0:
set_clauses.append('prmit_bed_maint_ymd = :bed_class_maint_date')
if self.record.bed_class_maint_date == '@':
self.query_parameter['bed_class_maint_date'] = None
# 許可ベッド数(合計、精神、結核、感染、その他、一般病床、療養病床)
if not self.record.prmit_bed.count(None) == len(self.record.prmit_bed):
@ -416,6 +444,14 @@ class ComInstMapper(UltmarcTableMapper):
set_clauses.append('prmit_bed_num_other = :bed_num_gen')
set_clauses.append('prmit_bed_num_gen = :bed_num_gen2')
set_clauses.append('prmit_bed_num_rcup = :bed_num_rest')
if self.record.bed_num_sum == '@':
self.query_parameter['bed_num_sum'] = None
self.query_parameter['bed_num_psy'] = None
self.query_parameter['bed_num_tub'] = None
self.query_parameter['bed_num_epi'] = None
self.query_parameter['bed_num_gen'] = None
self.query_parameter['bed_num_gen2'] = None
self.query_parameter['bed_num_rest'] = None
# 検査項目(微生物、血清、血液、病理、寄生虫、生化、RI)
if sum(len(item) for item in self.record.insp_item) > 0:
@ -426,6 +462,14 @@ class ComInstMapper(UltmarcTableMapper):
set_clauses.append('insp_item_paras = :inspect_code5')
set_clauses.append('insp_item_biochem = :inspect_code6')
set_clauses.append('insp_item_ri = :inspect_code7')
if self.record.inspect_code1 == '@':
self.query_parameter['inspect_code1'] = None
self.query_parameter['inspect_code2'] = None
self.query_parameter['inspect_code3'] = None
self.query_parameter['inspect_code4'] = None
self.query_parameter['inspect_code5'] = None
self.query_parameter['inspect_code6'] = None
self.query_parameter['inspect_code7'] = None
update_columns = ','.join(set_clauses)
# 何も更新項目が無い場合は更新処理は行わない
@ -450,7 +494,6 @@ class ComInstMapper(UltmarcTableMapper):
# 削除
self.queries.append(self.PHYSICAL_DELETE_TRT_QUERY)
# 診療科目の1つ目の値がクリアマーク@)の場合、診療科目を登録しない
if self.record.medsbj_code[0] == "@":
return
@ -473,15 +516,10 @@ class ComInstMapper(UltmarcTableMapper):
record_count = self.db.execute_select(self.RECORD_EXISTS_SPCARE_QUERY, self.query_parameter)
# 存在しない場合はInsert
if record_count[0]['count_num'] == 0:
# 特養医務室の集合項目の値がクリアマーク(@)の場合、登録しない
if self.record.dcfhp_92id == "@":
return
self.queries.append(self.INSERT_SPCARE_QUERY)
return
# 存在する場合はUpdate
# 特養医務室の集合項目の値がクリアマーク(@)の場合、DCF親施設コードをクリアし、削除日を設定
if self.record.dcfhp_92id == "@":
self.query_parameter['dcf_prnt_inst_code'] = None
self.query_parameter['delete_ymd'] = self.query_parameter['execute_date_str_ymd']
@ -491,73 +529,3 @@ class ComInstMapper(UltmarcTableMapper):
self.queries.append(self.UPDATE_SPCARE_QUERY)
return
def __set_clearing_item(self):
# 未確認フラグ
if self.record.uncheck_flag == '@':
self.query_parameter['uncheck_flag'] = None
# 削除予定理由コード
if self.record.hpdel_code == '@':
self.query_parameter['hpdel_code'] = None
# 重複時相手先コード
if self.record.duphp_id == '@':
self.query_parameter['dup_opp_code'] = None
# 住所不明理由コード
if self.record.hp_addr_lost_code == '@':
self.query_parameter['hp_addr_lost_code'] = None
# 電話番号なしフラグ
if self.record.tel_nothing_flag == '@':
self.query_parameter['tel_nothing_flag'] = None
# 電話番号
if self.record.hp_tel == '@':
self.query_parameter['hp_tel'] = None
# 施設代表者コード
if self.record.president_id == '@':
self.query_parameter['inst_repre_code'] = None
# 代表者(カナ)
if self.record.president_kana == '@':
self.query_parameter['president_kana'] = None
# 代表者(漢字) ※全角文字のため、クリアマーク「@」が大文字
if self.record.president == '':
self.query_parameter['president'] = None
# 開業予定フラグ・開業予定年月
if self.record.open_flag == '@':
self.query_parameter['open_flag'] = None
self.query_parameter['open_year_month'] = None
# 休院フラグ・休院開始年月
if self.record.close_flag == '@':
self.query_parameter['close_flag'] = None
self.query_parameter['close_year_month'] = None
# 関連大学親コード
if self.record.assoc_parrent_id == '@':
self.query_parameter['univ_prnt_code'] = None
# 病棟閉鎖フラグ
if self.record.close_flag2 == '@':
self.query_parameter['close_flag2'] = None
# 病床数(定員)
if self.record.bed_num == '@':
self.query_parameter['bed_num'] = None
# 許可病床メンテ日付
if self.record.bed_class_maint_date == '@':
self.query_parameter['bed_class_maint_date'] = None
# 許可ベッド数(合計、精神、結核、感染、その他、一般病床、療養病床)
if self.record.bed_num_sum == '@':
self.query_parameter['bed_num_sum'] = None
self.query_parameter['bed_num_psy'] = None
self.query_parameter['bed_num_tub'] = None
self.query_parameter['bed_num_epi'] = None
self.query_parameter['bed_num_gen'] = None
self.query_parameter['bed_num_gen2'] = None
self.query_parameter['bed_num_rest'] = None
# 検査項目(微生物、血清、血液、病理、寄生虫、生化、RI)
if self.record.inspect_code1 == '@':
self.query_parameter['inspect_code1'] = None
self.query_parameter['inspect_code2'] = None
self.query_parameter['inspect_code3'] = None
self.query_parameter['inspect_code4'] = None
self.query_parameter['inspect_code5'] = None
self.query_parameter['inspect_code6'] = None
self.query_parameter['inspect_code7'] = None
return

View File

@ -143,9 +143,6 @@ class ComPharmMapper(UltmarcTableMapper):
return
def __make_upsert_query(self):
# 「@」による項目クリアを設定
self.__set_clearing_item()
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
@ -178,6 +175,7 @@ class ComPharmMapper(UltmarcTableMapper):
# 住所不明理由コード
if self.record.hp_addr_lost_code != '':
set_clauses.append('addr_unknown_reason_cd = :hp_addr_lost_code')
self.query_parameter['hp_addr_lost_code'] = None if self.record.hp_addr_lost_code == '@' else self.record.hp_addr_lost_code
# 正式施設名カナ
if self.record.hp_name_kana != '':
@ -199,31 +197,42 @@ class ComPharmMapper(UltmarcTableMapper):
if len(self.record.close_flg + self.record.close_yearmonth) > 0:
set_clauses.append('close_flg = :close_flg')
set_clauses.append('close_start_ym = :close_yearmonth')
if self.record.close_flg == '@':
self.query_parameter['close_flg'] = None
self.query_parameter['close_yearmonth'] = None
# 開業予定フラグ、開業予定年月
if len(self.record.open_flag + self.record.open_yearmonth) > 0:
set_clauses.append('estab_sche_flg = :open_flag')
set_clauses.append('estab_sche_ym = :open_yearmonth')
if self.record.open_flag == '@':
self.query_parameter['open_flag'] = None
self.query_parameter['open_yearmonth'] = None
# 施設代表者カナ
if self.record.president_Kana != '':
set_clauses.append('inst_repre_kana = :president_Kana')
self.query_parameter['president_Kana'] = None if self.record.president_Kana == '@' else self.record.president_Kana
# 施設代表者
# 施設代表者 ※@が大文字
if self.record.president != '':
set_clauses.append('inst_repre = :president')
self.query_parameter['president'] = None if self.record.president == '' else self.record.president
# 電話番号なしフラグ
if self.record.tel_nothing_flag != '':
set_clauses.append('phone_number_non_flg = :tel_nothing_flag')
self.query_parameter['tel_nothing_flag'] = None if self.record.tel_nothing_flag == '@' else self.record.tel_nothing_flag
# 未確認フラグ
if self.record.unconf_flg != '':
set_clauses.append('unconf_flg = :unconf_flg')
self.query_parameter['unconf_flg'] = None if self.record.unconf_flg == '@' else self.record.unconf_flg
# 施設電話番号
if self.record.tel_number != '':
set_clauses.append('inst_phone_number = :tel_number')
self.query_parameter['tel_number'] = None if self.record.tel_number == '@' else self.record.tel_number
# 施設住所カナ
if self.record.addr_kana != '':
@ -246,6 +255,7 @@ class ComPharmMapper(UltmarcTableMapper):
# 住所表示番号
if self.record.addr_number != '':
set_clauses.append('addr_display_number = :addr_number')
self.query_parameter['addr_number'] = None if self.record.addr_number == '@' else self.record.addr_number
# 住所カウント(集合項目である県コードが入っていればカウントをセットする)
if len(self.record.prefc_cd) > 0:
@ -255,73 +265,32 @@ class ComPharmMapper(UltmarcTableMapper):
# 経営体コード
if self.record.mgtclass_code != '':
set_clauses.append('manage_cd = :mgtclass_code')
self.query_parameter['mgtclass_code'] = None if self.record.mgtclass_code == '@' else self.record.mgtclass_code
# 削除予定理由コード
if self.record.del_cd != '':
set_clauses.append('delete_sche_reason_cd = :del_cd')
self.query_parameter['del_cd'] = None if self.record.del_cd == '@' else self.record.del_cd
# 重複時相手先コード
if self.record.dup_opp_cd != '':
set_clauses.append('dup_opp_cd = :dup_opp_cd')
self.query_parameter['dup_opp_cd'] = None if self.record.dup_opp_cd == '@' else self.record.dup_opp_cd
# 管理薬剤師名(漢字)※@が大文字
if self.record.pharmacist != '':
set_clauses.append('supervising_pharmacist = :pharmacist')
self.query_parameter['pharmacist'] = None if self.record.pharmacist == '' else self.record.pharmacist
# 管理薬剤師名(カナ)
if self.record.pharmacist_kana != '':
set_clauses.append('supervising_pharmacist_kana = :pharmacist_kana')
self.query_parameter['pharmacist_kana'] = None if self.record.pharmacist_kana == '@' else self.record.pharmacist_kana
# チェーン店本部コード
if self.record.franchise_hq_id != '':
set_clauses.append('franchise_hq_cd = :franchise_hq_cd')
if self.record.franchise_hq_id == '@':
self.query_parameter['franchise_hq_cd'] = None
return set_clauses
def __set_clearing_item(self):
# 住所不明理由コード
if self.record.hp_addr_lost_code == '@':
self.query_parameter['hp_addr_lost_code'] = None
# 休院フラグ、休院予定年月
if self.record.close_flg == '@':
self.query_parameter['close_flg'] = None
self.query_parameter['close_yearmonth'] = None
# 開業予定フラグ、開業予定年月
if self.record.open_flag == '@':
self.query_parameter['open_flag'] = None
self.query_parameter['open_yearmonth'] = None
# 施設代表者カナ
if self.record.president_Kana == '@':
self.query_parameter['president_Kana'] = None
# 施設代表者 ※@が大文字
if self.record.president == '':
self.query_parameter['president'] = None
# 電話番号なしフラグ
if self.record.tel_nothing_flag == '@':
self.query_parameter['tel_nothing_flag'] = None
# 未確認フラグ
if self.record.unconf_flg == '@':
self.query_parameter['unconf_flg'] = None
# 施設電話番号
if self.record.tel_number == '@':
self.query_parameter['tel_number'] = None
# 住所表示番号
if self.record.addr_number == '@':
self.query_parameter['addr_number'] = None
# 削除予定理由コード
if self.record.del_cd == '@':
self.query_parameter['del_cd'] = None
# 重複時相手先コード
if self.record.duphp_id == '@':
self.query_parameter['dup_opp_cd'] = None
# 管理薬剤師名(漢字) ※@が大文字
if self.record.pharmacist == '':
self.query_parameter['pharmacist'] = None
# 管理薬剤師名(カナ)
if self.record.pharmacist_kana == '@':
self.query_parameter['pharmacist_kana'] = None
# チェーン店本部コード
if self.record.franchise_hq_id == '@':
self.query_parameter['franchise_hq_cd'] = None
return

View File

@ -1,7 +1,6 @@
from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \
UltmarcTableMapper
from src.batch.ultmarc.utmp_tables.tables.com_prefc_med_base import \
ComPrefcMedBase
from src.batch.ultmarc.utmp_tables.tables.com_prefc_med_base import ComPrefcMedBase
class ComPrefcMedBaseMapper(UltmarcTableMapper):
@ -192,18 +191,15 @@ class ComPrefcMedBaseMapper(UltmarcTableMapper):
def __init__(self, record: list[str], db) -> None:
super().__init__(record, db, ComPrefcMedBase)
program_name = __name__.split(".")[-1] # 当モジュール名(現行から変わっている)
program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている)
# モジュール名をクエリパラメータに設定
self.query_parameter["program_name"] = program_name
self.query_parameter['program_name'] = program_name
# 読み込んだレコード値もクエリパラメータに追加
self.query_parameter = {
**self.query_parameter,
**self.record.to_sql_parameter(),
}
self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()}
def make_query(self):
# 『修正区分がB(修正)かつ追加削除区分が1(退職)』の場合、物理削除
if self.record.maint_flag == "B" and self.record.adddel_div == "1":
if self.record.maint_flag == 'B' and self.record.adddel_div == '1':
self.queries.append(self.PHYSICAL_DELETE_QUERY)
return
@ -212,16 +208,10 @@ class ComPrefcMedBaseMapper(UltmarcTableMapper):
return
def __make_upsert_query(self):
# 「@」による項目クリアを設定
self.__set_clearing_item()
# レコードの存在確認
record_count = self.db.execute_select(
self.RECORD_EXISTS_QUERY, self.query_parameter
)
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
if record_count[0]["count_num"] == 0:
if record_count[0]['count_num'] == 0:
return self.INSERT_QUERY
# 存在する場合ではUpdate
@ -232,258 +222,234 @@ class ComPrefcMedBaseMapper(UltmarcTableMapper):
# 情報年月日
if len(self.record.info_date) > 0:
set_clauses.append("info_date = :info_date")
set_clauses.append('info_date = :info_date')
if self.record.info_date == '@':
self.query_parameter['info_date'] = None
# 案内用ホームページアドレス
if len(self.record.home_page) > 0:
set_clauses.append("home_page = :home_page")
set_clauses.append('home_page = :home_page')
if self.record.home_page == '@':
self.query_parameter['home_page'] = None
# 院内処方フラグ
if len(self.record.hppre_flg) > 0:
set_clauses.append("hppre_flg = :hppre_flg")
set_clauses.append('hppre_flg = :hppre_flg')
if self.record.hppre_flg == '@':
self.query_parameter['hppre_flg'] = None
# 院外処方フラグ
if len(self.record.expre_flg) > 0:
set_clauses.append("expre_flg = :expre_flg")
set_clauses.append('expre_flg = :expre_flg')
if self.record.expre_flg == '@':
self.query_parameter['expre_flg'] = None
# 治験の実施
if len(self.record.trial_flg) > 0:
set_clauses.append("trial_flg = :trial_flg")
set_clauses.append("trial_contcount = :trial_cont_count")
set_clauses.append("trialwhet_from = :trial_whet_from")
set_clauses.append("trialwhet_to = :trial_whet_to")
set_clauses.append('trial_flg = :trial_flg')
set_clauses.append('trial_contcount = :trial_cont_count')
set_clauses.append('trialwhet_from = :trial_whet_from')
set_clauses.append('trialwhet_to = :trial_whet_to')
if self.record.trial_flg == '@':
self.query_parameter['trial_flg'] = None
self.query_parameter['trial_cont_count'] = None
self.query_parameter['trial_whet_from'] = None
self.query_parameter['trial_whet_to'] = None
# 保有する施設設備フラグ
if len(self.record.equipment_flg) > 0:
set_clauses.append("equipment_flg = :equipment_flg")
set_clauses.append('equipment_flg = :equipment_flg')
if self.record.equipment_flg == '@':
self.query_parameter['equipment_flg'] = None
# 対応することができる疾患・治療の内容フラグ
if len(self.record.cos_disease_flg) > 0:
set_clauses.append("cos_disease_flg = :cos_disease_flg")
set_clauses.append('cos_disease_flg = :cos_disease_flg')
if self.record.cos_disease_flg == '@':
self.query_parameter['cos_disease_flg'] = None
# 対応することができる短期滞在手術フラグ
if len(self.record.cos_surgery) > 0:
set_clauses.append("cos_surgery = :cos_surgery")
set_clauses.append('cos_surgery = :cos_surgery')
if self.record.cos_surgery == '@':
self.query_parameter['cos_surgery'] = None
# 専門外来フラグ
if len(self.record.specialclinic_flg) > 0:
set_clauses.append("specialclinic_flg = :specialclinic_flg")
set_clauses.append('specialclinic_flg = :specialclinic_flg')
if self.record.specialclinic_flg == '@':
self.query_parameter['specialclinic_flg'] = None
# 地域医療連携体制_窓口設置フラグ
if len(self.record.establishment_flg) > 0:
set_clauses.append("establishment_flg = :establishment_flg")
set_clauses.append('establishment_flg = :establishment_flg')
if self.record.establishment_flg == '@':
self.query_parameter['establishment_flg'] = None
# 地域医療連携体制_地域連携パスフラグ
if len(self.record.critical_flg) > 0:
set_clauses.append("critical_flg = :critical_flg")
set_clauses.append('critical_flg = :critical_flg')
if self.record.critical_flg == '@':
self.query_parameter['critical_flg'] = None
# 入院診療計画策定時における院内の連携体制
if len(self.record.cop_system) > 0:
set_clauses.append("cop_system = :cop_system")
set_clauses.append('cop_system = :cop_system')
if self.record.cop_system == '@':
self.query_parameter['cop_system'] = None
# オーダリングシステム
if len(self.record.sys_exists_flg) > 0:
set_clauses.append("sys_exists_flg = :sys_exists_flg")
set_clauses.append("sys_inspection = :sys_inspection")
set_clauses.append("sys_prescription = :sys_prescription")
set_clauses.append("sys_reserv = :sys_reserv")
set_clauses.append('sys_exists_flg = :sys_exists_flg')
set_clauses.append('sys_inspection = :sys_inspection')
set_clauses.append('sys_prescription = :sys_prescription')
set_clauses.append('sys_reserv = :sys_reserv')
if self.record.sys_exists_flg == '@':
self.query_parameter['sys_exists_flg'] = None
self.query_parameter['sys_inspection'] = None
self.query_parameter['sys_prescription'] = None
self.query_parameter['sys_reserv'] = None
# ICDコード利用フラグ
if len(self.record.icduse_flg) > 0:
set_clauses.append("icduse_flg = :icduse_flg")
set_clauses.append('icduse_flg = :icduse_flg')
if self.record.icduse_flg == '@':
self.query_parameter['icduse_flg'] = None
# 電子カルテフラク
if len(self.record.echart_flg) > 0:
set_clauses.append("echart_flg = :echart_flg")
set_clauses.append('echart_flg = :echart_flg')
if self.record.echart_flg == '@':
self.query_parameter['echart_flg'] = None
# 専任従事者
if len(self.record.fulltime_flg) > 0:
set_clauses.append("fulltime_flg = :fulltime_flg")
set_clauses.append("fulltime_count = :fulltime_count")
set_clauses.append('fulltime_flg = :fulltime_flg')
set_clauses.append('fulltime_count = :fulltime_count')
if self.record.fulltime_flg == '@':
self.query_parameter['fulltime_flg'] = None
self.query_parameter['fulltime_count'] = None
# 病床患者数平均
if len(self.record.ge_patient_avg) > 0:
set_clauses.append("ge_patient_avg = :ge_patient_avg")
set_clauses.append("mt_patient_avg = :mt_patient_avg")
set_clauses.append("mc_patient_avg = :mc_patient_avg")
set_clauses.append("ca_patient_avg = :ca_patient_avg")
set_clauses.append("pys_patient_avg = :pys_patient_avg")
set_clauses.append("tub_patient_avg = :inf_patient_avg")
set_clauses.append("inf_patient_avg = :tub_patient_avg")
set_clauses.append("patient_avg_sum = :patient_avg_sum")
set_clauses.append("patient_avg_from = :patient_avg_from")
set_clauses.append("patient_avg_to = :patient_avg_to")
set_clauses.append('ge_patient_avg = :ge_patient_avg')
set_clauses.append('mt_patient_avg = :mt_patient_avg')
set_clauses.append('mc_patient_avg = :mc_patient_avg')
set_clauses.append('ca_patient_avg = :ca_patient_avg')
set_clauses.append('pys_patient_avg = :pys_patient_avg')
set_clauses.append('tub_patient_avg = :inf_patient_avg')
set_clauses.append('inf_patient_avg = :tub_patient_avg')
set_clauses.append('patient_avg_sum = :patient_avg_sum')
set_clauses.append('patient_avg_from = :patient_avg_from')
set_clauses.append('patient_avg_to = :patient_avg_to')
if self.record.ge_patient_avg == '@':
self.query_parameter['ge_patient_avg'] = None
self.query_parameter['mt_patient_avg'] = None
self.query_parameter['mc_patient_avg'] = None
self.query_parameter['ca_patient_avg'] = None
self.query_parameter['pys_patient_avg'] = None
self.query_parameter['inf_patient_avg'] = None
self.query_parameter['tub_patient_avg'] = None
self.query_parameter['patient_avg_sum'] = None
self.query_parameter['patient_avg_from'] = None
self.query_parameter['patient_avg_to'] = None
# 患者数平均
if len(self.record.cl_patient_avg) > 0:
set_clauses.append("cl_patient_avg = :cl_patient_avg")
set_clauses.append("cl_patient_avg_from = :cl_patient_avg_from")
set_clauses.append("cl_patient_avg_to = :cl_patient_avg_to")
set_clauses.append('cl_patient_avg = :cl_patient_avg')
set_clauses.append('cl_patient_avg_from = :cl_patient_avg_from')
set_clauses.append('cl_patient_avg_to = :cl_patient_avg_to')
if self.record.cl_patient_avg == '@':
self.query_parameter['cl_patient_avg'] = None
self.query_parameter['cl_patient_avg_from'] = None
self.query_parameter['cl_patient_avg_to'] = None
# 患者数平均
if len(self.record.hm_patient_avg) > 0:
set_clauses.append("hm_patient_avg = :hm_patient_avg")
set_clauses.append("hm_patient_avg_from = :hm_patient_avg_from")
set_clauses.append("hm_patient_avg_to = :hm_patient_avg_to")
set_clauses.append('hm_patient_avg = :hm_patient_avg')
set_clauses.append('hm_patient_avg_from = :hm_patient_avg_from')
set_clauses.append('hm_patient_avg_to = :hm_patient_avg_to')
if self.record.hm_patient_avg == '@':
self.query_parameter['hm_patient_avg'] = None
self.query_parameter['hm_patient_avg_from'] = None
self.query_parameter['hm_patient_avg_to'] = None
# 患者数延数
if len(self.record.ge_patient_ex) > 0:
set_clauses.append("ge_patient_ex = :ge_patient_ex")
set_clauses.append("mt_patient_ex = :mt_patient_ex")
set_clauses.append("mc_patient_ex = :mc_patient_ex")
set_clauses.append("ca_patient_ex = :ca_patient_ex")
set_clauses.append("pys_patient_ex = :pys_patient_ex")
set_clauses.append("tub_patient_ex = :tub_patient_ex")
set_clauses.append("inf_patient_ex = :inf_patient_ex")
set_clauses.append("patient_ex_sum = :patient_ex_sum")
set_clauses.append("patient_ex_from = :patient_ex_from")
set_clauses.append("patient_ex_to = :patient_ex_to")
set_clauses.append('ge_patient_ex = :ge_patient_ex')
set_clauses.append('mt_patient_ex = :mt_patient_ex')
set_clauses.append('mc_patient_ex = :mc_patient_ex')
set_clauses.append('ca_patient_ex = :ca_patient_ex')
set_clauses.append('pys_patient_ex = :pys_patient_ex')
set_clauses.append('tub_patient_ex = :tub_patient_ex')
set_clauses.append('inf_patient_ex = :inf_patient_ex')
set_clauses.append('patient_ex_sum = :patient_ex_sum')
set_clauses.append('patient_ex_from = :patient_ex_from')
set_clauses.append('patient_ex_to = :patient_ex_to')
if self.record.ge_patient_ex == '@':
self.query_parameter['ge_patient_ex'] = None
self.query_parameter['mt_patient_ex'] = None
self.query_parameter['mc_patient_ex'] = None
self.query_parameter['ca_patient_ex'] = None
self.query_parameter['pys_patient_ex'] = None
self.query_parameter['tub_patient_ex'] = None
self.query_parameter['inf_patient_ex'] = None
self.query_parameter['patient_ex_sum'] = None
self.query_parameter['patient_ex_from'] = None
self.query_parameter['patient_ex_to'] = None
# 患者数延数
if len(self.record.cl_patient_ex) > 0:
set_clauses.append("cl_patient_ex = :cl_patient_ex")
set_clauses.append("cl_patient_ex_from = :cl_patient_ex_from")
set_clauses.append("cl_patient_ex_to = :cl_patient_ex_to")
set_clauses.append('cl_patient_ex = :cl_patient_ex')
set_clauses.append('cl_patient_ex_from = :cl_patient_ex_from')
set_clauses.append('cl_patient_ex_to = :cl_patient_ex_to')
if self.record.cl_patient_ex == '@':
self.query_parameter['cl_patient_ex'] = None
self.query_parameter['cl_patient_ex_from'] = None
self.query_parameter['cl_patient_ex_to'] = None
# 患者数延数
if len(self.record.hm_patient_ex) > 0:
set_clauses.append("hm_patient_ex = :hm_patient_ex")
set_clauses.append("hm_patient_ex_from = :hm_patient_ex_from")
set_clauses.append("hm_patient_ex_to = :hm_patient_ex_to")
set_clauses.append('hm_patient_ex = :hm_patient_ex')
set_clauses.append('hm_patient_ex_from = :hm_patient_ex_from')
set_clauses.append('hm_patient_ex_to = :hm_patient_ex_to')
if self.record.hm_patient_ex == '@':
self.query_parameter['hm_patient_ex'] = None
self.query_parameter['hm_patient_ex_from'] = None
self.query_parameter['hm_patient_ex_to'] = None
# 平均在院日数
if len(self.record.ge_stay_avg) > 0:
set_clauses.append("ge_stay_avg = :ge_stay_avg")
set_clauses.append("mt_stay_avg = :mt_stay_avg")
set_clauses.append("mc_stay_avg = :mc_stay_avg")
set_clauses.append("ca_stay_avg = :ca_stay_avg")
set_clauses.append("pys_stay_avg = :pys_stay_avg")
set_clauses.append("tub_stay_avg = :tub_stay_avg")
set_clauses.append("inf_stay_avg = :inf_stay_avg")
set_clauses.append("stay_avg_sum = :stay_avg_sum")
set_clauses.append("stay_avg_from = :stay_avg_from")
set_clauses.append("stay_avg_to = :stay_avg_to")
set_clauses.append('ge_stay_avg = :ge_stay_avg')
set_clauses.append('mt_stay_avg = :mt_stay_avg')
set_clauses.append('mc_stay_avg = :mc_stay_avg')
set_clauses.append('ca_stay_avg = :ca_stay_avg')
set_clauses.append('pys_stay_avg = :pys_stay_avg')
set_clauses.append('tub_stay_avg = :tub_stay_avg')
set_clauses.append('inf_stay_avg = :inf_stay_avg')
set_clauses.append('stay_avg_sum = :stay_avg_sum')
set_clauses.append('stay_avg_from = :stay_avg_from')
set_clauses.append('stay_avg_to = :stay_avg_to')
if self.record.ge_stay_avg == '@':
self.query_parameter['ge_stay_avg'] = None
self.query_parameter['mt_stay_avg'] = None
self.query_parameter['mc_stay_avg'] = None
self.query_parameter['ca_stay_avg'] = None
self.query_parameter['pys_stay_avg'] = None
self.query_parameter['tub_stay_avg'] = None
self.query_parameter['inf_stay_avg'] = None
self.query_parameter['stay_avg_sum'] = None
self.query_parameter['stay_avg_from'] = None
self.query_parameter['stay_avg_to'] = None
update_columns = ",".join(set_clauses)
update_columns = ','.join(set_clauses)
# 何も更新項目が無い場合はNoneとする更新処理は行わない
if len(update_columns) == 0:
return None
else:
# 末尾にカンマを付けてSET句を完成させる
update_columns += ","
update_query = self.UPDATE_QUERY.format(update_columns=update_columns)
update_columns += ','
update_query = self.UPDATE_QUERY.format(
update_columns=update_columns
)
return update_query
def __set_clearing_item(self):
# 情報年月日
if self.record.info_date == "@":
self.query_parameter["info_date"] = None
# 案内用ホームページアドレス
if self.record.home_page == "@":
self.query_parameter["home_page"] = None
# 院内処方フラグ
if self.record.hppre_flg == "@":
self.query_parameter["hppre_flg"] = None
# 院外処方フラグ
if self.record.expre_flg == "@":
self.query_parameter["expre_flg"] = None
# 治験の実施
if self.record.trial_flg == "@":
self.query_parameter["trial_flg"] = None
self.query_parameter["trial_cont_count"] = None
self.query_parameter["trial_whet_from"] = None
self.query_parameter["trial_whet_to"] = None
# 保有する施設設備フラグ
if self.record.equipment_flg == "@":
self.query_parameter["equipment_flg"] = None
# 対応することができる疾患・治療の内容フラグ
if self.record.cos_disease_flg == "@":
self.query_parameter["cos_disease_flg"] = None
# 対応することができる短期滞在手術フラグ
if self.record.cos_surgery == "@":
self.query_parameter["cos_surgery"] = None
# 専門外来フラグ
if self.record.specialclinic_flg == "@":
self.query_parameter["specialclinic_flg"] = None
# 地域医療連携体制_窓口設置フラグ
if self.record.establishment_flg == "@":
self.query_parameter["establishment_flg"] = None
# 地域医療連携体制_地域連携パスフラグ
if self.record.critical_flg == "@":
self.query_parameter["critical_flg"] = None
# 入院診療計画策定時における院内の連携体制
if self.record.cop_system == "@":
self.query_parameter["cop_system"] = None
# オーダリングシステム
if self.record.sys_exists_flg == "@":
self.query_parameter["sys_exists_flg"] = None
self.query_parameter["sys_inspection"] = None
self.query_parameter["sys_prescription"] = None
self.query_parameter["sys_reserv"] = None
# ICDコード利用フラグ
if self.record.icduse_flg == "@":
self.query_parameter["icduse_flg"] = None
# 電子カルテフラク
if self.record.echart_flg == "@":
self.query_parameter["echart_flg"] = None
# 専任従事者
if self.record.fulltime_flg == "@":
self.query_parameter["fulltime_flg"] = None
self.query_parameter["fulltime_count"] = None
# 病床患者数平均
if self.record.ge_patient_avg == "@":
self.query_parameter["ge_patient_avg"] = None
self.query_parameter["mt_patient_avg"] = None
self.query_parameter["mc_patient_avg"] = None
self.query_parameter["ca_patient_avg"] = None
self.query_parameter["pys_patient_avg"] = None
self.query_parameter["inf_patient_avg"] = None
self.query_parameter["tub_patient_avg"] = None
self.query_parameter["patient_avg_sum"] = None
self.query_parameter["patient_avg_from"] = None
self.query_parameter["patient_avg_to"] = None
# 患者数平均
if self.record.cl_patient_avg == "@":
self.query_parameter["cl_patient_avg"] = None
self.query_parameter["cl_patient_avg_from"] = None
self.query_parameter["cl_patient_avg_to"] = None
# 患者数平均
if self.record.hm_patient_avg == "@":
self.query_parameter["hm_patient_avg"] = None
self.query_parameter["hm_patient_avg_from"] = None
self.query_parameter["hm_patient_avg_to"] = None
# 患者数延数
if self.record.ge_patient_ex == "@":
self.query_parameter["ge_patient_ex"] = None
self.query_parameter["mt_patient_ex"] = None
self.query_parameter["mc_patient_ex"] = None
self.query_parameter["ca_patient_ex"] = None
self.query_parameter["pys_patient_ex"] = None
self.query_parameter["tub_patient_ex"] = None
self.query_parameter["inf_patient_ex"] = None
self.query_parameter["patient_ex_sum"] = None
self.query_parameter["patient_ex_from"] = None
self.query_parameter["patient_ex_to"] = None
# 患者数延数
if self.record.cl_patient_ex == "@":
self.query_parameter["cl_patient_ex"] = None
self.query_parameter["cl_patient_ex_from"] = None
self.query_parameter["cl_patient_ex_to"] = None
# 患者数延数
if self.record.hm_patient_ex == "@":
self.query_parameter["hm_patient_ex"] = None
self.query_parameter["hm_patient_ex_from"] = None
self.query_parameter["hm_patient_ex_to"] = None
# 平均在院日数
if self.record.ge_stay_avg == "@":
self.query_parameter["ge_stay_avg"] = None
self.query_parameter["mt_stay_avg"] = None
self.query_parameter["mc_stay_avg"] = None
self.query_parameter["ca_stay_avg"] = None
self.query_parameter["pys_stay_avg"] = None
self.query_parameter["tub_stay_avg"] = None
self.query_parameter["inf_stay_avg"] = None
self.query_parameter["stay_avg_sum"] = None
self.query_parameter["stay_avg_from"] = None
self.query_parameter["stay_avg_to"] = None
return

View File

@ -89,10 +89,6 @@ class ComPrefcMedDisTreatMapper(UltmarcTableMapper):
return
def __make_upsert_query(self):
# 修正のレコードだった場合はNULLに変換する
if self.record.pre_num == '@':
self.query_parameter['pre_num'] = None
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
@ -100,7 +96,10 @@ class ComPrefcMedDisTreatMapper(UltmarcTableMapper):
return self.INSERT_QUERY
# 存在する場合はUpdate
if self.record.is_pre_num_not_empty:
# 前年件数が空の場合は更新しない
if self.record.pre_num is not None:
if self.record.pre_num == '@':
self.query_parameter['pre_num'] = None
return self.UPDATE_QUERY
else:
return None

View File

@ -89,10 +89,6 @@ class ComPrefcMedEqupmentMapper(UltmarcTableMapper):
return
def __make_upsert_query(self):
# 修正のレコードだった場合はNULLに変換する
if self.record.bed_num == '@':
self.query_parameter['bed_num'] = None
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
@ -101,7 +97,9 @@ class ComPrefcMedEqupmentMapper(UltmarcTableMapper):
# 存在する場合はUpdate
# 病床数が空の場合は更新しない
if self.record.is_bed_num_not_empty:
if self.record.bed_num is not None:
if self.record.bed_num == '@':
self.query_parameter['bed_num'] = None
return self.UPDATE_QUERY
else:
return None

View File

@ -1,9 +1,6 @@
from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import (
UltmarcTableMapper,
)
from src.batch.ultmarc.utmp_tables.tables.com_prefc_med_sp_outpat import (
ComPrefcMedSpOutpat,
)
from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \
UltmarcTableMapper
from src.batch.ultmarc.utmp_tables.tables.com_prefc_med_sp_outpat import ComPrefcMedSpOutpat
class ComPrefcMedSpOutpatMapper(UltmarcTableMapper):
@ -76,18 +73,15 @@ class ComPrefcMedSpOutpatMapper(UltmarcTableMapper):
def __init__(self, record: list[str], db) -> None:
super().__init__(record, db, ComPrefcMedSpOutpat)
program_name = __name__.split(".")[-1] # 当モジュール名(現行から変わっている)
program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている)
# モジュール名をクエリパラメータに設定
self.query_parameter["program_name"] = program_name
self.query_parameter['program_name'] = program_name
# 読み込んだレコード値もクエリパラメータに追加
self.query_parameter = {
**self.query_parameter,
**self.record.to_sql_parameter(),
}
self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()}
def make_query(self):
# 『修正区分がB(修正)かつ追加削除区分が1(退職)』の場合、物理削除
if self.record.maint_flag == "B" and self.record.adddel_div == "1":
if self.record.maint_flag == 'B' and self.record.adddel_div == '1':
self.queries.append(self.PHYSICAL_DELETE_QUERY)
return
@ -96,16 +90,10 @@ class ComPrefcMedSpOutpatMapper(UltmarcTableMapper):
return
def __make_upsert_query(self):
# 修正のレコードだった場合はNULLに変換する
if self.record.sectsub_cd == "@":
self.query_parameter["sectsub_cd"] = None
# レコードの存在確認
record_count = self.db.execute_select(
self.RECORD_EXISTS_QUERY, self.query_parameter
)
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 存在しない場合はInsert
if record_count[0]["count_num"] == 0:
if record_count[0]['count_num'] == 0:
return self.INSERT_QUERY
# 存在する場合ではUpdate
@ -116,18 +104,22 @@ class ComPrefcMedSpOutpatMapper(UltmarcTableMapper):
# ソートキー
if len(self.record.sort_key) > 0:
set_clauses.append("sort_key = :sort_key")
set_clauses.append('sort_key = :sort_key')
# 分類補助コード
if len(self.record.sectsub_cd) > 0:
set_clauses.append("sectsub_cd = :sectsub_cd")
set_clauses.append('sectsub_cd = :sectsub_cd')
if self.record.sectsub_cd == '@':
self.query_parameter['sectsub_cd'] = None
update_columns = ",".join(set_clauses)
update_columns = ','.join(set_clauses)
# 何も更新項目が無い場合はNoneとする更新処理は行わない
if len(update_columns) == 0:
return None
else:
# 末尾にカンマを付けてSET句を完成させる
update_columns += ","
update_query = self.UPDATE_QUERY.format(update_columns=update_columns)
update_columns += ','
update_query = self.UPDATE_QUERY.format(
update_columns=update_columns
)
return update_query

View File

@ -104,10 +104,6 @@ class ComSpFieldMapper(UltmarcTableMapper):
# レコードの存在確認
record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter)
# 「@」による項目クリアを設定
self.__set_clearing_item()
# 存在しない場合はInsert
if record_count[0]['count_num'] == 0:
return self.INSERT_QUERY
@ -119,14 +115,23 @@ class ComSpFieldMapper(UltmarcTableMapper):
if len(self.record.specialist_flg) > 0:
set_clauses.append('specialist_flg = :specialist_flg')
set_clauses.append('specialist_publsh_ymd = :specialist_publsh_ymd')
if self.record.specialist_flg == '@':
self.query_parameter['specialist_flg'] = None
self.query_parameter['specialist_publsh_ymd'] = None
if len(self.record.ackn_med_flg) > 0:
set_clauses.append('ackn_med_flg = :ackn_med_flg')
set_clauses.append('ackn_med_publsh_ymd = :ackn_med_publsh_ymd')
if self.record.ackn_med_flg == '@':
self.query_parameter['ackn_med_flg'] = None
self.query_parameter['ackn_med_publsh_ymd'] = None
if len(self.record.guide_med_flg) > 0:
set_clauses.append('guide_med_flg = :guide_med_flg')
set_clauses.append('guide_med_publsh_ymd = :guide_med_publsh_ymd')
if self.record.guide_med_flg == '@':
self.query_parameter['guide_med_flg'] = None
self.query_parameter['guide_med_publsh_ymd'] = None
update_columns = ','.join(set_clauses)
# 何も更新項目が無い場合はNoneとする更新処理は行わない
@ -139,20 +144,3 @@ class ComSpFieldMapper(UltmarcTableMapper):
update_columns=update_columns
)
return update_query
def __set_clearing_item(self):
# 専門医の集合項目クリア
if self.record.specialist_flg == '@':
self.query_parameter['specialist_flg'] = None
self.query_parameter['specialist_publsh_ymd'] = None
# 認定医の集合項目クリア
if self.record.ackn_med_flg == '@':
self.query_parameter['ackn_med_flg'] = None
self.query_parameter['ackn_med_publsh_ymd'] = None
# 指導医の集合項目クリア
if self.record.guide_med_flg == '@':
self.query_parameter['guide_med_flg'] = None
self.query_parameter['guide_med_publsh_ymd'] = None
return

View File

@ -23,12 +23,8 @@ class ComPrefcMedDisTreat(UltmarcTable):
self.adddel_div = record[6]
self.pre_num = record[9]
# Update判断フラグ。数値が空の場合は更新しない。
self.is_pre_num_not_empty = True
# smallint型のカラム値は、空文字で渡ってきた場合はNULLに変換する
self.pre_num = self.pre_num if len(self.pre_num) > 0 else None
self.is_pre_num_not_empty = self.pre_num is not None
# DCFDSF施設コード
self.dcfdsf_inst_code = ''.join([self.dcfhp_id, self.dcfhp_code, self.dcfhp_yobi])

View File

@ -23,12 +23,8 @@ class ComPrefcMedEqupment(UltmarcTable):
self.adddel_div = record[6]
self.bed_num = record[9]
# Update判断フラグ。数値が空の場合は更新しない。
self.is_bed_num_not_empty = True
# smallint型のカラム値は、空文字で渡ってきた場合はNULLに変換する
self.bed_num = self.bed_num if len(self.bed_num) > 0 else None
self.is_bed_num_not_empty = self.bed_num is not None
# DCFDSF施設コード
self.dcfdsf_inst_code = ''.join([self.dcfhp_id, self.dcfhp_code, self.dcfhp_yobi])

View File

@ -3,5 +3,6 @@
"501","01","995783","00","A","20141113","20141114",,,,,"船越 正信","フナコシ マサノブ","1","3","29","01","06","53","55","3","53","039","1","3","53","A01","L01","E02","C04","L03","7","00","000","000","000",,,,,"00","00","00","00","00","00","00","00",,"02","A05","20051003",,"2",,,
"501","01","997682","00","A","20141113","20141114",,,,,"川崎 三紀子","カワサキ ミキコ","2","3","46","10","03","99","99","4","11","057","1","4","11","A01","A58",,,,,"13","119","047","000","173-0001","東京都板橋区本町6-3-301","トウキヨウト イタバシク ホンチヨウ 6-3-301","6-3-301","03","03","02","00","07","07","06","00","03-3579-1698",,,,,"2",,,"1"
"501","01","997906","00","A","20141113","20141114",,,,,"丘 守正","オカ モリマサ","1","3","20","03","11","99","31","3","45","799","1",,,"A01","L01","A31","A21","A11",,"08","221","095","000","312-0021","茨城県ひたちなか市大字三反田3892-4","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","3892-4","03","06","05","00","08","07","11","00","029-274-7110",,,,,"1","4","03",
"501","01","999613","00","A","20141113","20141114","5","01","481065","00","藤田 茜","フジタ アカネ","2",,,,,"99","99",,,"799","1","4","23",,,,,,"6","00","000","000","000",,,,,"00","00","00","00","00","00","00","00",,,,,,"9",,,
"501","01","997907","00","A","20141113","20141114",,,,,"丘 守正","オカ モリマサ","1",,,"03","11","99","31","3","45","799","1",,,"","","","","",,"08","221","095","000","312-0021","茨城県ひたちなか市大字三反田3892-4","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","3892-4","03","06","05","00","08","07","11","00","029-274-7110",,,,,"1","4","03",
"501","01","997908","00","A","20141113","20141114","@","@","481065","00","藤堂 尚也","トウドウ ナオヤ","1","@","20","10","03","99","31","@","45","799","1","@","23","@","L01","E02","C04","L03","@","08","221","095","000","312-0021","茨城県ひたちなか市大字三反田3892-4","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","3892-4","03","06","05","00","08","07","11","00","@","@","@","@","@","1","@","03","1"
"501","01","997908","00","A","20141113","20141114",,,,,"丘 守正","オカ モリマサ","1","3","20",,,"99","31","3","45","799","1",,,"","","","","",,"08","221","095","000","312-0021","茨城県ひたちなか市大字三反田3892-4","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","3892-4","03","06","05","00","08","07","11","00","029-274-7110",,,,,"1","4","03",

1 501 01 222222 33 A 20230425 20230426 7 8 9 10 11 12 1 4 15 06 17 18 19 1 21 022 3 4 25 A26 C27 I28 K29 L30 1 32 033 034 035 231-0036 37 38 126-1-39 40 41 42 43 44 45 46 47 045-625-2048 49 50 20200501 20200502 3 4 55 6
3 501 01 995783 00 A 20141113 20141114 船越 正信 フナコシ マサノブ 1 3 29 01 06 53 55 3 53 039 1 3 53 A01 L01 E02 C04 L03 7 00 000 000 000 00 00 00 00 00 00 00 00 02 A05 20051003 2
4 501 01 997682 00 A 20141113 20141114 川崎 三紀子 カワサキ ミキコ 2 3 46 10 03 99 99 4 11 057 1 4 11 A01 A58 13 119 047 000 173-0001 東京都板橋区本町6-3-301 トウキヨウト イタバシク ホンチヨウ 6-3-301 6-3-301 03 03 02 00 07 07 06 00 03-3579-1698 2 1
5 501 01 997906 00 A 20141113 20141114 丘 守正 オカ モリマサ 1 3 20 03 11 99 31 3 45 799 1 A01 L01 A31 A21 A11 08 221 095 000 312-0021 茨城県ひたちなか市大字三反田3892-4 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 3892-4 03 06 05 00 08 07 11 00 029-274-7110 1 4 03
6 501 01 999613 00 A 20141113 20141114 5 01 481065 00 藤田 茜 フジタ アカネ 2 99 99 799 1 4 23 6 00 000 000 000 00 00 00 00 00 00 00 00 9
7 501 01 997907 00 A 20141113 20141114 丘 守正 オカ モリマサ 1 03 11 99 31 3 45 799 1 08 221 095 000 312-0021 茨城県ひたちなか市大字三反田3892-4 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 3892-4 03 06 05 00 08 07 11 00 029-274-7110 1 4 03
8 501 01 997908 00 A 20141113 20141114 @ @ 481065 00 藤堂 尚也 丘 守正 トウドウ ナオヤ オカ モリマサ 1 @ 3 20 10 03 99 31 @ 3 45 799 1 @ 23 @ L01 E02 C04 L03 @ 08 221 095 000 312-0021 茨城県ひたちなか市大字三反田3892-4 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 3892-4 03 06 05 00 08 07 11 00 @ 029-274-7110 @ @ @ @ 1 @ 4 03 1

View File

@ -5,4 +5,5 @@
"0199768200","カワサキ ミキコ","川崎 三紀子","3","46","10","03","19711003","99",,,,"03-3579-1698","トウキヨウト イタバシク ホンチヨウ 6-3-301","東京都板橋区本町6-3-301","173-0001","13119047000","13","119","6-3-301","07070600","03030200","99","2","2",,,"057","1","4","11","1999","1",,"1",,,,,"4","11","1999","NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"
"0199790600","オカ モリマサ","丘 守正","3","20","03","11","19450311","99","4","03","1991","029-274-7110","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","茨城県ひたちなか市大字三反田3892-4","312-0021","08221095000","08","221","3892-4","08071100","03060500","31","1","1",,,"799","1","3","45","1970",,,"1",,,,,,,,"NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"
"0199790700","オカ モリマサ","丘 守正",,,"03","11"," 0311","99","4","03","1991","029-274-7110","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","茨城県ひたちなか市大字三反田3892-4","312-0021","08221095000","08","221","3892-4","08071100","03060500","31","1","1",,,"799","1","3","45","1970",,,"1",,,,,,,,"NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"
"0199790800","トウドウ ナオヤ","藤堂 尚也","NULL","NULL","NULL","NULL","NULL","99","NULL","NULL","NULL","NULL","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","茨城県ひたちなか市大字三反田3892-4","312-0021","08221095000","08","221","3892-4","08071100","03060500","31","1","1","NULL","NULL","799","1","NULL","NULL","NULL","1","NULL","1","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"
"0199790800","オカ モリマサ","丘 守正","3","20",,,"","99","4","03","1991","029-274-7110","イバラキケン ヒタチナカシ オオアザミタンダ 3892-4","茨城県ひたちなか市大字三反田3892-4","312-0021","08221095000","08","221","3892-4","08071100","03060500","31","1","1",,,"799","1","3","45","1970",,,"1",,,,,,,,"NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"
"0199961300","フジタ アカネ","藤田 茜",,,,,,"99",,,,,,,,"00000000000","00","000",,"00000000","00000000","99","9","2","5","6","799","1",,,,,"0148106500","1",,,,,"4","23","2011","NULL","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2017/10/08 16:16:43","com_dr_mapper","2017/10/08 16:16:43","com_dr_mapper"

1 dcf_pcf_dr_cd dr_name_kana dr_name birthday_era birthday_year birthday_month birthday_day birthday hometown_cd estab_era estab_year estab_y home_phone_number home_addr_kana home_addr home_postal_number addr_village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt dr_circle_cd estab_div_cd sex_cd delete_sche_reason_cd addr_unknown_reason_cd alma_cd depart_disc_cd grad_era grad_year grad_y lump_regist_flg opp_dup_cd dr_ph_div use_stop_div use_stop_reason_cd use_stop_regist_ymd use_stop_cancel_ymd drday_era drday_year drday_y cor_dnfdr_cd abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
5 0199768200 カワサキ ミキコ 川崎 三紀子 3 46 10 03 19711003 99 03-3579-1698 トウキヨウト イタバシク ホンチヨウ 6-3-301 東京都板橋区本町6-3-301 173-0001 13119047000 13 119 6-3-301 07070600 03030200 99 2 2 057 1 4 11 1999 1 1 4 11 1999 NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2017/10/08 16:16:43 com_dr_mapper 2017/10/08 16:16:43 com_dr_mapper
6 0199790600 オカ モリマサ 丘 守正 3 20 03 11 19450311 99 4 03 1991 029-274-7110 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 茨城県ひたちなか市大字三反田3892-4 312-0021 08221095000 08 221 3892-4 08071100 03060500 31 1 1 799 1 3 45 1970 1 NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2017/10/08 16:16:43 com_dr_mapper 2017/10/08 16:16:43 com_dr_mapper
7 0199790700 オカ モリマサ 丘 守正 03 11 0311 99 4 03 1991 029-274-7110 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 茨城県ひたちなか市大字三反田3892-4 312-0021 08221095000 08 221 3892-4 08071100 03060500 31 1 1 799 1 3 45 1970 1 NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2017/10/08 16:16:43 com_dr_mapper 2017/10/08 16:16:43 com_dr_mapper
8 0199790800 トウドウ ナオヤ オカ モリマサ 藤堂 尚也 丘 守正 NULL 3 NULL 20 NULL NULL NULL 99 NULL 4 NULL 03 NULL 1991 NULL 029-274-7110 イバラキケン ヒタチナカシ オオアザミタンダ 3892-4 茨城県ひたちなか市大字三反田3892-4 312-0021 08221095000 08 221 3892-4 08071100 03060500 31 1 1 NULL NULL 799 1 NULL 3 NULL 45 NULL 1970 1 NULL 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2017/10/08 16:16:43 com_dr_mapper 2017/10/08 16:16:43 com_dr_mapper
9 0199961300 フジタ アカネ 藤田 茜 99 00000000000 00 000 00000000 00000000 99 9 2 5 6 799 1 0148106500 1 4 23 2011 NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2017/10/08 16:16:43 com_dr_mapper 2017/10/08 16:16:43 com_dr_mapper

View File

@ -8,4 +8,3 @@
"502","01","997906","","A","00","5504428","","2","20141113","20141114","","144","7212","","",""
"502","01","997906","","A","00","5507600","","2","20141113","20141114","","144","9114","","",""
"502","01","999613","","A","00","5504428","","2","20141113","20141114","","144","5140","","",""
"502","01","995784","","B","00","5507600","","2","20170907","20170910","@","@","@","","@","@"

1 502 01 995783 A 00 5414992 2 20141113 20141114 501
8 502 01 997906 A 00 5504428 2 20141113 20141114 144 7212
9 502 01 997906 A 00 5507600 2 20141113 20141114 144 9114
10 502 01 999613 A 00 5504428 2 20141113 20141114 144 5140
502 01 995784 B 00 5507600 2 20170907 20170910 @ @ @ @ @

View File

@ -9,4 +9,3 @@
"005504428","01997906","7212",,"144","2020-02-22","ユケツ.サイボウチリヨウガク","輸血・細胞治療学",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper"
"005507600","01997906","9114",,"144","2020-02-22","サイボウイシヨクブモン","細胞移植部門",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper"
"005504428","01999613","5140",,"144","2020-02-22","ヤクリガク","薬理学",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper"
"005507600","01995784","9999",,,"2020-02-22","NULL","NULL","NULL","2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper"

1 dcf_dsf_inst_cd dcf_pcf_dr_cd blng_sec_cd post_cd identity_cd aply_start_ymd blng_sec_name_kana blng_sec_name notdm_flg regist_ymd update_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
9 005504428 01997906 7212 144 2020-02-22 ユケツ.サイボウチリヨウガク 輸血・細胞治療学 2022-02-02 NULL NULL NULL NULL NULL 2022-02-02 10:45:17 com_dr_wrkplace_mapper 2022-02-02 14:54:00 com_dr_wrkplace_mapper
10 005507600 01997906 9114 144 2020-02-22 サイボウイシヨクブモン 細胞移植部門 2022-02-02 NULL NULL NULL NULL NULL 2022-02-02 10:45:17 com_dr_wrkplace_mapper 2022-02-02 14:54:00 com_dr_wrkplace_mapper
11 005504428 01999613 5140 144 2020-02-22 ヤクリガク 薬理学 2022-02-02 NULL NULL NULL NULL NULL 2022-02-02 10:45:17 com_dr_wrkplace_mapper 2022-02-02 14:54:00 com_dr_wrkplace_mapper
005507600 01995784 9999 2020-02-22 NULL NULL NULL 2022-02-02 NULL NULL NULL NULL NULL 2022-02-02 10:45:17 com_dr_wrkplace_mapper 2022-02-02 14:54:00 com_dr_wrkplace_mapper

View File

@ -5,4 +5,3 @@
"101","00","9901679","","A","20141113","20141114","","","","","","鹿児島市医師会臨床検査センター","カゴシマシイシカイリンシヨウケンサセンタ-","鹿児島市医師会臨床検査センター","カゴシマシイシカイリンシヨウケンサセンタ-","","46","201","017","000","892-0846","鹿児島県鹿児島市加治屋町3-10","カゴシマケン カゴシマシ カジヤチヨウ 3-10","3-10","04","04","04","00","08","07","08","00","","099-226-8827","470","60","01","148013","","海江田 健","カイエダ タケル","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","9","9","","","","","0","","","","","","","","","1","1","1","1","1","1","1","","",""
"101","00","9904439","","A","20141113","20141114","","","","","","川崎市立井田病院","カワサキシリツイダビヨウイン","井田病院 市立","イダビヨウイン シリツ","","14","133","001","002","211-0035","神奈川県川崎市中原区井田2-27-1","カナガワケン カワサキシ ナカハラク イダ 2-27-1","2-27-1","04","06","02","02","08","12","04","02","","044-766-2188","221","01","","","","","","","","","","A01","A34","A22","M01","D02","A12","A81","C01","N03","K01","J01","P02","O01","B01","C04","E02","F01","I01","C05","B31","H02","A41","A03","A58","A61","A65","F08","A56","B11","B22","B04","P03","G06","A57","","","","","","","","","","","","","","","","","","","","","","","","","","","1","3","","","","","370","20140811","370","0","27","0","343","343","0","","","","","","","","","",""
"101","00","9929798","","A","20141113","20141114","","","","","","パーソナルヘルス学びのクリニック","パ-ソナルヘルスマナビノクリニツク","パーソナルヘルス学びのCL","パ-ソナルヘルスマナビノクリニツク","","13","103","025","002","107-0062","東京都港区南青山2-2-15 ウイン青山405","トウキヨウト ミナトク ミナミアオヤマ 2-2-1 ウインアオヤマ 405","2-2-15-405","03","02","03","02","07","05","08","02","1","","472","10","01","331831","","白澤 博満","シラサワ ヒロミツ","","","","","A01","I01","A57","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","7","6","","","","","0","20130415","0","0","0","0","0","0","0","","","","","","","","","",""
"101","99","99999","99","A","20230606","200230607","@","@","@","11","12","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこあいうえお","アイウエオカクキケコアイウエオカクキケコ","@","18","19","20","21","123-4522","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","25","26","27","28","29","30","31","32","33","@","@","36","37","@","39","40","","@","@","202304","@","202306","@","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","7","8","@","10","11","@","@","@","@","6","7","8","9","0","1","@","3","4","5","6","7","8","@","333333","11"

1 101 22 33333 44 A 20230606 200230607 8 9 10 11 12 あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえお アイウエオカクキケコアイウエオカクキケコ 7 18 19 20 21 123-4522 あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ 25 26 27 28 29 30 31 32 33 4 35 36 37 38 39 40 あいうえおかきくけこあいうえおかきくけこ アイウエオカクキケコ 3 202304 5 202306 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 7 8 8 10 11 2 113 20230114 115 6 7 8 9 0 1 2 3 4 5 6 7 8 99 333333 11
5 101 00 9901679 A 20141113 20141114 鹿児島市医師会臨床検査センター カゴシマシイシカイリンシヨウケンサセンタ- 鹿児島市医師会臨床検査センター カゴシマシイシカイリンシヨウケンサセンタ- 46 201 017 000 892-0846 鹿児島県鹿児島市加治屋町3-10 カゴシマケン カゴシマシ カジヤチヨウ 3-10 3-10 04 04 04 00 08 07 08 00 099-226-8827 470 60 01 148013 海江田 健 カイエダ タケル 9 9 0 1 1 1 1 1 1 1
6 101 00 9904439 A 20141113 20141114 川崎市立井田病院 カワサキシリツイダビヨウイン 井田病院 市立 イダビヨウイン シリツ 14 133 001 002 211-0035 神奈川県川崎市中原区井田2-27-1 カナガワケン カワサキシ ナカハラク イダ 2-27-1 2-27-1 04 06 02 02 08 12 04 02 044-766-2188 221 01 A01 A34 A22 M01 D02 A12 A81 C01 N03 K01 J01 P02 O01 B01 C04 E02 F01 I01 C05 B31 H02 A41 A03 A58 A61 A65 F08 A56 B11 B22 B04 P03 G06 A57 1 3 370 20140811 370 0 27 0 343 343 0
7 101 00 9929798 A 20141113 20141114 パーソナルヘルス学びのクリニック パ-ソナルヘルスマナビノクリニツク パーソナルヘルス学びのCL パ-ソナルヘルスマナビノクリニツク 13 103 025 002 107-0062 東京都港区南青山2-2-15 ウイン青山405 トウキヨウト ミナトク ミナミアオヤマ 2-2-1 ウインアオヤマ 405 2-2-15-405 03 02 03 02 07 05 08 02 1 472 10 01 331831 白澤 博満 シラサワ ヒロミツ A01 I01 A57 7 6 0 20130415 0 0 0 0 0 0 0
101 99 99999 99 A 20230606 200230607 @ @ @ 11 12 あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえお アイウエオカクキケコアイウエオカクキケコ @ 18 19 20 21 123-4522 あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ 25 26 27 28 29 30 31 32 33 @ @ 36 37 @ 39 40 @ @ 202304 @ 202306 @ 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 7 8 @ 10 11 @ @ @ @ 6 7 8 9 0 1 @ 3 4 5 6 7 8 @ 333333 11

View File

@ -6,4 +6,3 @@
"009904439","01","","カワサキシリツイダビヨウイン","イダビヨウイン シリツ","川崎市立井田病院","井田病院 市立","","370","","","","","","","","","","","044-766-2188","カナガワケン カワサキシ ナカハラク イダ 2-27-1","神奈川県川崎市中原区井田2-27-1","211-0035","14133001002","14","133","2-27-1","08120402","04060202","221","","1","","","","","","","","","3","343","0","27","0","370","343","0","20140811","1","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2022-01-31 11:38:27","com_inst_mapper","2022-01-31 11:38:27","com_inst_mapper"
"009929798","10","","パ-ソナルヘルスマナビノクリニツク","パ-ソナルヘルスマナビノクリニツク","パーソナルヘルス学びのクリニック","パーソナルヘルス学びのCL","","0","","","","","","01331831","シラサワ ヒロミツ","白澤 博満","1","","","トウキヨウト ミナトク ミナミアオヤマ 2-2-1 ウインアオヤマ 405","東京都港区南青山2-2-15 ウイン青山405","107-0062","13103025002","13","103","2-2-15-405","07050802","03020302","472","","7","","","","","","","","","6","0","0","0","0","0","0","0","20130415","1","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2022-01-31 11:38:28","com_inst_mapper","2022-01-31 11:38:28","com_inst_mapper"
"223333344","37","7","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","アイウエオカクキケコアイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","あいうえおかきくけこあいうえおかきくけこあいうえお","81011","113","5","3","202306","202304","2","383940","アイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこ","4","8","35","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","123-4522","18192021","18","19","25","30313233","26272829","36","9","7","101112","2","3","4","5","6","7","8","8","9","6","7","8","115","0","1","20230114","1","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_inst_mapper","2023/04/12 00:00:00","com_inst_mapper"
"999999999","37","NULL","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","アイウエオカクキケコアイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","あいうえおかきくけこあいうえおかきくけこあいうえお","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ","あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ","123-4522","18192021","18","19","25","30313233","26272829","36","NULL","7","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","8","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","1","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_inst_mapper","2023/04/12 00:00:00","com_inst_mapper"

1 dcf_dsf_inst_cd inst_div_cd addr_unknown_reason_cd form_inst_name_kana inst_name_kana form_inst_name_kanji inst_name_kanji rltd_univ_prnt_cd bed_num close_flg estab_sche_flg close_start_ym estab_sche_ym ward_abolish_flg inst_repre_cd inst_repre_kana inst_repre phone_number_non_flg unconf_flg inst_phone_number inst_addr_kana inst_addr postal_number village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt manage_cd delete_sche_reason_cd hp_assrt_cd dup_opp_cd insp_item_micrb insp_item_serum insp_item_blood insp_item_patho insp_item_paras insp_item_biochem insp_item_ri re_exam_cd prmit_bed_num_other prmit_bed_num_mental prmit_bed_num_tuber prmit_bed_num_infection prmit_bed_num_sum prmit_bed_num_gen prmit_bed_num_rcup prmit_bed_maint_ymd inst_pharm_div abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
6 009904439 01 カワサキシリツイダビヨウイン イダビヨウイン シリツ 川崎市立井田病院 井田病院 市立 370 044-766-2188 カナガワケン カワサキシ ナカハラク イダ 2-27-1 神奈川県川崎市中原区井田2-27-1 211-0035 14133001002 14 133 2-27-1 08120402 04060202 221 1 3 343 0 27 0 370 343 0 20140811 1 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2022-01-31 11:38:27 com_inst_mapper 2022-01-31 11:38:27 com_inst_mapper
7 009929798 10 パ-ソナルヘルスマナビノクリニツク パ-ソナルヘルスマナビノクリニツク パーソナルヘルス学びのクリニック パーソナルヘルス学びのCL 0 01331831 シラサワ ヒロミツ 白澤 博満 1 トウキヨウト ミナトク ミナミアオヤマ 2-2-1 ウインアオヤマ 405 東京都港区南青山2-2-15 ウイン青山405 107-0062 13103025002 13 103 2-2-15-405 07050802 03020302 472 7 6 0 0 0 0 0 0 0 20130415 1 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2022-01-31 11:38:28 com_inst_mapper 2022-01-31 11:38:28 com_inst_mapper
8 223333344 37 7 アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ アイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ あいうえおかきくけこあいうえおかきくけこあいうえお 81011 113 5 3 202306 202304 2 383940 アイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこ 4 8 35 アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ 123-4522 18192021 18 19 25 30313233 26272829 36 9 7 101112 2 3 4 5 6 7 8 8 9 6 7 8 115 0 1 20230114 1 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_inst_mapper 2023/04/12 00:00:00 com_inst_mapper
999999999 37 NULL アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ アイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ あいうえおかきくけこあいうえおかきくけこあいうえお NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL アイウエオカクキケコアイウエオカクキケコアイウエオカクキケコ あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ 123-4522 18192021 18 19 25 30313233 26272829 36 NULL 7 NULL NULL NULL NULL NULL NULL NULL NULL 8 NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_inst_mapper 2023/04/12 00:00:00 com_inst_mapper

View File

@ -134,8 +134,6 @@ class TestComInstMapper:
# 期待値ファイルを読み込む(特養医務室データ)
expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_spcare_insert.csv'))
actual_record_count = self.db.execute_select('SELECT COUNT(*) AS count_num FROM src05.com_spcare_med_office_dat')[0]['count_num']
assert actual_record_count == len(expect_data_list), 'DBのレコード件数が期待値の件数と一致すること'
primary_keys = [f"'{primary_key['dcf_chld_inst_cd']}'" for primary_key in expect_data_list]
actual_select_sql = f"SELECT * FROM src05.com_spcare_med_office_dat WHERE dcf_chld_inst_cd IN ({','.join(primary_keys)})"
actual_data_list = self.db.execute_select(actual_select_sql)

View File

@ -18,4 +18,3 @@
"111","00","9908576","","A","2","20141113","20141114","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","20100401","","","","","1","20080401","","","","","","","","","","","","","","","","","","20070831","","","20070831","","","","2","9","1","I001","33","20130401","","","","","","33","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","200704"
"111","00","9910624","","A","2","20141113","20141114","1","20030401","","","","","1","20120401","","1","19940201","","","","","","1","20120401","","","","","","","","1","20121201","","1","20090701","","1","20061101","","","","","","","","1","99","","","","","","","","","","","","","","","","","","","","1","20100401","","1","20140401","","1","20140401","","1","01","02","03","04","","","","","","","1","20140401","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","08","20100402","","","","20060331","1","20041001","","1","20040331","","1","1","1","","","1","2","20070702","","","","","1","1","1","002","1","006","1","051","4","004","1","100","2","165","1","035","1","168","1","118","1","101","1","182","","202","1","214","5","149","","197","1","198","","177","1","183","1","213","5","217","5","212","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","11","31","34","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","192202"
"111","00","9929798","","A","2","20141113","20141114","1","20080701","","","","","","","","","","","","","","","","","","","","","1","20100401","","1","20090301","","1","20100401","","","","20080531","","","","1","19971201","","","","","","","","","","","","","","","","","","","","","","","1","20100401","","","","","1","20080401","","1","01","02","03","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","13","20140106","","","","","","","","1","20040331","","","1","1","","","","","","","","","","1","1","1","168","1","197","1","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","195305"
"111","00","9929799",,"A","2","20141113","20141114","@","20080701","20080701","@","2008","20080701","@","20080701","20080701","@","20080701","20080701","@","10.1","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","20080701","20080701","@","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","15","17","18","19","20","@","20100401","20100401","@","20100401","20100401","@","20100401","20100401","@","01","02","03","04","05","06","07","08","09","10","@","20140401","20140401","@","20140401","20140401","@","20140401","20140401","@","20140401","20140401","@","@","@","I001","33","20130401","20130401","4101","116","20090501","20090501","33","@","B999","450","@","M999","40","@","K999","4","@","9","9","@","9","@","21","20130901","20130901","@","13","20140106","20140106","@","20030401","20040229","1","20041001","20041001","1","20040331","20040331","@","@","1","1","@","@","2","20070702","20070702","@","20070702","20070702","@","@","@","168","1","197","1","051","4","004","1","100","2","165","1","035","1","168","1","118","1","101","1","182",,"202","1","214","5","149","1","197","1","198","1","177","1","183","1","213","5","217","5","212","1","202","3","204","5","206","7","208","9","210","1","212","3","214","5","216","7","218","9","220","1","222","3","224","5","226","7","228","9","230","1","232","3","234","5","236","7","238","9","@","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","@","62","3","64","5","66","7","68","9","70","1","72","3","74","5","76","7","78","9","80","1","82","3","84","5","86","7","88","9","90","1","92","3","94","5","96","7","98","9","00","1","@","00","8106522","00","@"

1 111 123 456789 99 A 0 NULL NULL 9 20230510 20230511 2 2023 20230514 5 20230516 20230517 8 20230519 20230520 1 22.1 20230523 20230524 5 20230526 20230527 8 20230529 20230530 1 20230502 20230503 4 20230505 20230506 7 20230508 20230509 0 20230501 20230402 3 20230404 20230405 6 20230407 20230408 9 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 0 20230701 20230702 3 20230704 20230705 6 20230707 20230708 9 80 81 82 83 84 85 86 87 88 89 0 20230901 20230902 3 20230904 20230905 6 20230907 20230908 9 20231001 20231011 2 3 4 105 106 20231007 20231008 109 110 20231101 20231102 113 4 0115 116 7 0118 119 0 0121 122 3 4 5 6 127 8 129 20230130 20230131 2 33 20230104 20230105 6 20230107 20230108 9 20230104 20230101 2 20230103 20230104 5 6 7 8 9 0 1 20230102 20230403 4 20230105 20230106 7 8 9 160 1 162 3 164 5 166 7 168 9 170 1 172 3 174 5 176 7 178 9 180 1 182 3 184 5 186 7 188 9 190 1 192 3 194 5 196 7 198 9 200 1 202 3 204 5 206 7 208 9 210 1 212 3 214 5 216 7 218 9 220 1 222 3 224 5 226 7 228 9 230 1 232 3 234 5 236 7 238 9 0 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 1 62 3 64 5 66 7 68 9 70 1 72 3 74 5 76 7 78 9 80 1 82 3 84 5 86 7 88 9 90 1 92 3 94 5 96 7 98 9 00 1 2 3 0000304 05 202303
18 111 00 9908576 A 2 20141113 20141114 1 20100401 1 20080401 20070831 20070831 2 9 1 I001 33 20130401 33 200704
19 111 00 9910624 A 2 20141113 20141114 1 20030401 1 20120401 1 19940201 1 20120401 1 20121201 1 20090701 1 20061101 1 99 1 20100401 1 20140401 1 20140401 1 01 02 03 04 1 20140401 1 08 20100402 20060331 1 20041001 1 20040331 1 1 1 1 2 20070702 1 1 1 002 1 006 1 051 4 004 1 100 2 165 1 035 1 168 1 118 1 101 1 182 202 1 214 5 149 197 1 198 177 1 183 1 213 5 217 5 212 1 11 31 34 192202
20 111 00 9929798 A 2 20141113 20141114 1 20080701 1 20100401 1 20090301 1 20100401 20080531 1 19971201 1 20100401 1 20080401 1 01 02 03 1 13 20140106 1 20040331 1 1 1 1 1 168 1 197 1 195305
111 00 9929799 A 2 20141113 20141114 @ 20080701 20080701 @ 2008 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 10.1 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 20080701 20080701 @ 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 15 17 18 19 20 @ 20100401 20100401 @ 20100401 20100401 @ 20100401 20100401 @ 01 02 03 04 05 06 07 08 09 10 @ 20140401 20140401 @ 20140401 20140401 @ 20140401 20140401 @ 20140401 20140401 @ @ @ I001 33 20130401 20130401 4101 116 20090501 20090501 33 @ B999 450 @ M999 40 @ K999 4 @ 9 9 @ 9 @ 21 20130901 20130901 @ 13 20140106 20140106 @ 20030401 20040229 1 20041001 20041001 1 20040331 20040331 @ @ 1 1 @ @ 2 20070702 20070702 @ 20070702 20070702 @ @ @ 168 1 197 1 051 4 004 1 100 2 165 1 035 1 168 1 118 1 101 1 182 202 1 214 5 149 1 197 1 198 1 177 1 183 1 213 5 217 5 212 1 202 3 204 5 206 7 208 9 210 1 212 3 214 5 216 7 218 9 220 1 222 3 224 5 226 7 228 9 230 1 232 3 234 5 236 7 238 9 @ 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 @ 62 3 64 5 66 7 68 9 70 1 72 3 74 5 76 7 78 9 80 1 82 3 84 5 86 7 88 9 90 1 92 3 94 5 96 7 98 9 00 1 @ 00 8106522 00 @

View File

@ -18,4 +18,4 @@
"009908576","","","","","","","","","","","","","","NULL","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","20100401","","","","","1","20080401","","","","","","","","","","","","","","","","","","20070831","","","20070831","","","","2","9","1","I001","33","20130401","","","NULL","","","33","","","NULL","","","NULL","","","NULL","","","","","NULL","","NULL","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","200704","20171008","20230509","NULL","NULL","NULL","NULL","2017/10/08 20:57:12","com_inst_att_mapper","2017/10/08 20:57:12","com_inst_att_mapper"
"009910624","1","20030401","","","","","1","20120401","","1","19940201","","","NULL","","","1","20120401","","","","","","","","1","20121201","","1","20090701","","1","20061101","","","","","","","","1","99","","","","","","","","","","","","","","","","","","","","1","20100401","","1","20140401","","1","20140401","","1","01","02","03","04","","","","","","","1","20140401","","","","","","","","","","","","","","","NULL","","","","NULL","","","NULL","","","NULL","","","NULL","","","NULL","","","","","NULL","","NULL","","","1","08","20100402","","","","20060331","1","20041001","","1","20040331","","1","1","1","","","1","2","20070702","","","","","1","1","1","002","1","006","1","051","4","004","1","100","2","165","1","035","1","168","1","118","1","101","1","182","","202","1","214","5","149","","197","1","198","","177","1","183","1","213","5","217","5","212","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","1","11","31","34","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","192202","20171008","20230509","NULL","NULL","NULL","NULL","2017/10/08 20:57:12","com_inst_att_mapper","2017/10/08 20:57:12","com_inst_att_mapper"
"009929798","1","20080701","","","","","","","","","","","","NULL","","","","","","","","","1","20100401","","1","20090301","","1","20100401","","","","20080531","","","","1","19971201","","","","","","","","","","","","","","","","","","","","","","","1","20100401","","","","","1","20080401","","1","01","02","03","","","","","","","","","","","","","","","","","","","","","","","","NULL","","","","NULL","","","NULL","","","NULL","","","NULL","","","NULL","","","","","NULL","","NULL","","","1","13","20140106","","","","","","","","1","20040331","","","1","1","","","","","","","","","","1","1","1","168","1","197","1","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","195305","20171008","20230509","NULL","NULL","NULL","NULL","2017/10/08 20:57:12","com_inst_att_mapper","2017/10/08 20:57:12","com_inst_att_mapper"
"009929799","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","20171008","20230509","NULL","NULL","NULL","NULL","2017/10/08 20:57:12","com_inst_att_mapper","2017/10/08 20:57:12","com_inst_att_mapper"
"12345678999","9","20230510","20230511","2","2023","20230514","5","20230516","20230517","8","20230519","20230520","1","22.1","20230523","20230524","5","20230526","20230527","8","20230529","20230530","1","20230502","20230503","4","20230505","20230506","7","20230508","20230509","0","20230501","20230402","3","20230404","20230405","6","20230407","20230408","9","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","0","20230701","20230702","3","20230704","20230705","6","20230707","20230708","9","80","81","82","83","84","85","86","87","88","89","0","20230901","20230902","3","20230904","20230905","6","20230907","20230908","9","20231001","20231011","2","3","4","105","106","20231007","20231008","109","110","20231101","20231102","113","4","0115","116","7","0118","119","0","0121","122","3","4","5","6","127","8","129","20230130","20230131","2","33","20230104","20230105","6","20230107","20230108","9","20230104","20230101","2","20230103","20230104","5","6","7","8","9","0","1","20230102","20230403","4","20230105","20230106","7","8","9","160","1","162","3","164","5","166","7","168","9","170","1","172","3","174","5","176","7","178","9","180","1","182","3","184","5","186","7","188","9","190","1","192","3","194","5","196","7","198","9","200","1","202","3","204","5","206","7","208","9","210","1","212","3","214","5","216","7","218","9","220","1","222","3","224","5","226","7","228","9","230","1","232","3","234","5","236","7","238","9","0","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","1","62","3","64","5","66","7","68","9","70","1","72","3","74","5","76","7","78","9","80","1","82","3","84","5","86","7","88","9","90","1","92","3","94","5","96","7","98","9","00","1","2","3","0000304","05","202303","20230509","20230509","NULL","NULL","NULL","NULL","2023/05/09 10:10:10","com_inst_att_mapper","2023/05/09 10:10:10","com_inst_att_mapper"

1 dcf_dsf_inst_cd dpc_flag dpc_specday dpc_cancelday predpc_flag predpc_specday predpc_cancelday cancer_flag cancer_specday cancer_cancelday funchpflag funchpokdate funchpcandate areasuphpflag areasuphpintrate areasuphpokdate areasuphpcandate acuthpaddflag acuthpaddokdate acuthpaddcandate genadmisiionflag genadmisiionfokdate genadmisiionfcandate assistanceflag assistanceokdate assistancecandate diagnosistreatment_flag diagnosistreatment_specday diagnosistreatment_cancelday safety_flag safety_specday safety_cancelday highrisk_flag highrisk_specday highrisk_cancelday infantandholiday_flag infantandholiday_specday infantandholiday_cancelday ophpflag ophpokdate ophpcandate critical_flag critical_code01 critical_code02 critical_code03 critical_code04 critical_code05 critical_code06 critical_code07 critical_code08 critical_code09 critical_code10 critical_code11 critical_code12 critical_code13 critical_code14 critical_code15 critical_code16 critical_code17 critical_code18 critical_code19 critical_code20 drgmgthpflag drgmgthpokdate drgmgthpcandate imagediagnosis_flag imagediagnosis_specifiedday imagediagnosis_cancelday chemotherapy_flag chemotherapy_specday chemotherapy_cancelday rehabilitation_flag rehabilitation_code01 rehabilitation_code02 rehabilitation_code03 rehabilitation_code04 rehabilitation_code05 rehabilitation_code06 rehabilitation_code07 rehabilitation_code08 rehabilitation_code09 rehabilitation_code10 anesthetizingmanage_flag anesthetizingmanage_specday anesthetizingmanage_cancelday homerecuperation_flag homerecuperation_specday homerecuperation_cancelday synthesiswhenstaying_flag synthesiswhenstaying_specday synthesiswhenstaying_cancelday homelateflag homelateokday homelatecanday caremixkind fullmoveflag resthpflag resthpcarekind resthpbednum resthpokdate resthpcandate resthpcarenrskind resthpcarebednum resthpcareokdate resthpcarecandate resthpsbednum nrmhpflag nrmhpcarekind nrmhpbedtotalnum menthpflag menthpcarekind menthpbednum tubhpflag tubhpcarekind tubhpbednum infhpflag infhpflag1 infhpflag2 infhpbedflag infhpbednum hospiceflag hospicebednum hospiceokdate hospicecandate hpfuncestflag hpfuncestkind hpfuncestokdate hpfuncestcandate clolyhpkind clolyhpokdate clolyhpcandate clhpkind clhpokdate clhpcandate cldephpkind cldephpokdate cldephpcandate disasthpflag d1emerhpflag d2emerhpflag d3emerhpflag emergencyclinic trialcoreflag trialcore_div trialcoreokdate trialcorecandate dementiaflag dementiaokdate dementiacandate sphealth_exploration sphealth_guidance hiadhpflag hiadhpcode1 hiadhpkind1 hiadhpcode2 hiadhpkind2 hiadhpcode3 hiadhpkind3 hiadhpcode4 hiadhpkind4 hiadhpcode5 hiadhpkind5 hiadhpcode6 hiadhpkind6 hiadhpcode7 hiadhpkind7 hiadhpcode8 hiadhpkind8 hiadhpcode9 hiadhpkind9 hiadhpcode10 hiadhpkind10 hiadhpcode11 hiadhpkind11 hiadhpcode12 hiadhpkind12 hiadhpcode13 hiadhpkind13 hiadhpcode14 hiadhpkind14 hiadhpcode15 hiadhpkind15 hiadhpcode16 hiadhpkind16 hiadhpcode17 hiadhpkind17 hiadhpcode18 hiadhpkind18 hiadhpcode19 hiadhpkind19 hiadhpcode20 hiadhpkind20 hiadhpcode21 hiadhpkind21 hiadhpcode22 hiadhpkind22 hiadhpcode23 hiadhpkind23 hiadhpcode24 hiadhpkind24 hiadhpcode25 hiadhpkind25 hiadhpcode26 hiadhpkind26 hiadhpcode27 hiadhpkind27 hiadhpcode28 hiadhpkind28 hiadhpcode29 hiadhpkind29 hiadhpcode30 hiadhpkind30 hiadhpcode31 hiadhpkind31 hiadhpcode32 hiadhpkind32 hiadhpcode33 hiadhpkind33 hiadhpcode34 hiadhpkind34 hiadhpcode35 hiadhpkind35 hiadhpcode36 hiadhpkind36 hiadhpcode37 hiadhpkind37 hiadhpcode38 hiadhpkind38 hiadhpcode39 hiadhpkind39 hiadhpcode40 hiadhpkind40 hitechhpflag hitechhpkind1 hitechhpkind2 hitechhpkind3 hitechhpkind4 hitechhpkind5 hitechhpkind6 hitechhpkind7 hitechhpkind8 hitechhpkind9 hitechhpkind10 hitechhpkind11 hitechhpkind12 hitechhpkind13 hitechhpkind14 hitechhpkind15 hitechhpkind16 hitechhpkind17 hitechhpkind18 hitechhpkind19 hitechhpkind20 policymedical_flag policymedical_code01 policymedical_content01 policymedical_code02 policymedical_content02 policymedical_code03 policymedical_content03 policymedical_code04 policymedical_content04 policymedical_code05 policymedical_content05 policymedical_code06 policymedical_content06 policymedical_code07 policymedical_content07 policymedical_code08 policymedical_content08 policymedical_code09 policymedical_content09 policymedical_code10 policymedical_content10 policymedical_code11 policymedical_content11 policymedical_code12 policymedical_content12 policymedical_code13 policymedical_content13 policymedical_code14 policymedical_content14 policymedical_code15 policymedical_content15 policymedical_code16 policymedical_content16 policymedical_code17 policymedical_content17 policymedical_code18 policymedical_content18 policymedical_code19 policymedical_content19 policymedical_code20 policymedical_content20 visitcarestflag visitcarestation_id visitcarestation_code visitcarestation_yobi opendate regist_ymd update_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
18 009908576 NULL 1 20100401 1 20080401 20070831 20070831 2 9 1 I001 33 20130401 NULL 33 NULL NULL NULL NULL NULL 200704 20171008 20230509 NULL NULL NULL NULL 2017/10/08 20:57:12 com_inst_att_mapper 2017/10/08 20:57:12 com_inst_att_mapper
19 009910624 1 20030401 1 20120401 1 19940201 NULL 1 20120401 1 20121201 1 20090701 1 20061101 1 99 1 20100401 1 20140401 1 20140401 1 01 02 03 04 1 20140401 NULL NULL NULL NULL NULL NULL NULL NULL 1 08 20100402 20060331 1 20041001 1 20040331 1 1 1 1 2 20070702 1 1 1 002 1 006 1 051 4 004 1 100 2 165 1 035 1 168 1 118 1 101 1 182 202 1 214 5 149 197 1 198 177 1 183 1 213 5 217 5 212 1 11 31 34 192202 20171008 20230509 NULL NULL NULL NULL 2017/10/08 20:57:12 com_inst_att_mapper 2017/10/08 20:57:12 com_inst_att_mapper
20 009929798 1 20080701 NULL 1 20100401 1 20090301 1 20100401 20080531 1 19971201 1 20100401 1 20080401 1 01 02 03 NULL NULL NULL NULL NULL NULL NULL NULL 1 13 20140106 1 20040331 1 1 1 1 1 168 1 197 1 195305 20171008 20230509 NULL NULL NULL NULL 2017/10/08 20:57:12 com_inst_att_mapper 2017/10/08 20:57:12 com_inst_att_mapper
21 009929799 12345678999 NULL 9 NULL 20230510 NULL 20230511 NULL 2 NULL 2023 NULL 20230514 NULL 5 NULL 20230516 NULL 20230517 NULL 8 NULL 20230519 NULL 20230520 NULL 1 NULL 22.1 NULL 20230523 NULL 20230524 NULL 5 NULL 20230526 NULL 20230527 NULL 8 NULL 20230529 NULL 20230530 NULL 1 NULL 20230502 NULL 20230503 NULL 4 NULL 20230505 NULL 20230506 NULL 7 NULL 20230508 NULL 20230509 NULL 0 NULL 20230501 NULL 20230402 NULL 3 NULL 20230404 NULL 20230405 NULL 6 NULL 20230407 NULL 20230408 NULL 9 NULL 50 NULL 51 NULL 52 NULL 53 NULL 54 NULL 55 NULL 56 NULL 57 NULL 58 NULL 59 NULL 60 NULL 61 NULL 62 NULL 63 NULL 64 NULL 65 NULL 66 NULL 67 NULL 68 NULL 69 NULL 0 NULL 20230701 NULL 20230702 NULL 3 NULL 20230704 NULL 20230705 NULL 6 NULL 20230707 NULL 20230708 NULL 9 NULL 80 NULL 81 NULL 82 NULL 83 NULL 84 NULL 85 NULL 86 NULL 87 NULL 88 NULL 89 NULL 0 NULL 20230901 NULL 20230902 NULL 3 NULL 20230904 NULL 20230905 NULL 6 NULL 20230907 NULL 20230908 NULL 9 NULL 20231001 NULL 20231011 NULL 2 NULL 3 NULL 4 NULL 105 NULL 106 NULL 20231007 NULL 20231008 NULL 109 NULL 110 NULL 20231101 NULL 20231102 NULL 113 NULL 4 NULL 0115 NULL 116 NULL 7 NULL 0118 NULL 119 NULL 0 NULL 0121 NULL 122 NULL 3 NULL 4 NULL 5 NULL 6 NULL 127 NULL 8 NULL 129 NULL 20230130 NULL 20230131 NULL 2 NULL 33 NULL 20230104 NULL 20230105 NULL 6 NULL 20230107 NULL 20230108 NULL 9 NULL 20230104 NULL 20230101 NULL 2 NULL 20230103 NULL 20230104 NULL 5 NULL 6 NULL 7 NULL 8 NULL 9 NULL 0 NULL 1 NULL 20230102 NULL 20230403 NULL 4 NULL 20230105 NULL 20230106 NULL 7 NULL 8 NULL 9 NULL 160 NULL 1 NULL 162 NULL 3 NULL 164 NULL 5 NULL 166 NULL 7 NULL 168 NULL 9 NULL 170 NULL 1 NULL 172 NULL 3 NULL 174 NULL 5 NULL 176 NULL 7 NULL 178 NULL 9 NULL 180 NULL 1 NULL 182 NULL 3 NULL 184 NULL 5 NULL 186 NULL 7 NULL 188 NULL 9 NULL 190 NULL 1 NULL 192 NULL 3 NULL 194 NULL 5 NULL 196 NULL 7 NULL 198 NULL 9 NULL 200 NULL 1 NULL 202 NULL 3 NULL 204 NULL 5 NULL 206 NULL 7 NULL 208 NULL 9 NULL 210 NULL 1 NULL 212 NULL 3 NULL 214 NULL 5 NULL 216 NULL 7 NULL 218 NULL 9 NULL 220 NULL 1 NULL 222 NULL 3 NULL 224 NULL 5 NULL 226 NULL 7 NULL 228 NULL 9 NULL 230 NULL 1 NULL 232 NULL 3 NULL 234 NULL 5 NULL 236 NULL 7 NULL 238 NULL 9 NULL 0 NULL 41 NULL 42 NULL 43 NULL 44 NULL 45 NULL 46 NULL 47 NULL 48 NULL 49 NULL 50 NULL 51 NULL 52 NULL 53 NULL 54 NULL 55 NULL 56 NULL 57 NULL 58 NULL 59 NULL 60 NULL 1 NULL 62 NULL 3 NULL 64 NULL 5 NULL 66 NULL 7 NULL 68 NULL 9 NULL 70 NULL 1 NULL 72 NULL 3 NULL 74 NULL 5 NULL 76 NULL 7 NULL 78 NULL 9 NULL 80 NULL 1 NULL 82 NULL 3 NULL 84 NULL 5 NULL 86 NULL 7 NULL 88 NULL 9 NULL 90 NULL 1 NULL 92 NULL 3 NULL 94 NULL 5 NULL 96 NULL 7 NULL 98 NULL 9 NULL 00 NULL 1 NULL 2 NULL 3 NULL 0000304 NULL 05 NULL 202303 20171008 20230509 20230509 NULL NULL NULL NULL 2017/10/08 20:57:12 2023/05/09 10:10:10 com_inst_att_mapper 2017/10/08 20:57:12 2023/05/09 10:10:10 com_inst_att_mapper

View File

@ -117,4 +117,3 @@
"102","03","3673870",,"A","20121127","20121128",,,,,,"薮藪篭籠","セイシキテンポメイモジ70","薮藪篭籠","リヤクシキモジ70",,"13","102","24","2","103-0007","東京都中央区日本橋浜町2-45-1 薮藪篭籠","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ70","2-45-1-70","3","3","5","2","7","7","12","2",,"03-3249-8231","471","85","薮藪篭籠 太郎","ダイヒヨウシヤメイモジ70 タロウ",,,,,"薮藪篭籠 太郎","カンリヤクザイシメイモジ70 タロウ",,,
"102","03","3673871",,"A","20121127","20121128",,,,,,"尭堯槙槇遥遙瑶瑤凜熙","セイシキテンポメイモジ71","尭堯槙槇遥遙瑶瑤凜熙","リヤクシキモジ71",,"13","102","24","2","103-0007","東京都中央区日本橋浜町2-45-1 尭堯槙槇遥遙瑶瑤凜熙","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ71","2-45-1-71","3","3","5","2","7","7","12","2",,"03-3249-8231","471","85","尭堯槙槇遥遙瑶瑤凜熙 太郎","ダイヒヨウシヤメイモジ71 タロウ",,,,,"尭堯槙槇遥遙瑶瑤凜熙 太郎","カンリヤクザイシメイモジ71 タロウ",,,
"102","03","3673872",,"A","20121127","20121128",,,,,,"ツッー-一医院薬鈴田","セイシキテンポメイモジ72","ツッー-一医院薬鈴田","リヤクシキモジ72",,"13","102","24","2","103-0007","東京都中央区日本橋浜町2-45-1 ツッー-一医院薬鈴田","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ72","2-45-1-72","3","3","5","2","7","7","12","2",,"03-3249-8231","471","85","ツッー-一医院薬鈴田 太郎","ダイヒヨウシヤメイモジ72 タロウ",,,,,"ツッー-一医院薬鈴田 太郎","カンリヤクザイシメイモジ72 タロウ",,,
"102","03","3673873",,"A","20121127","20121128","@","@","@","3673873","00","正漢字","セイカナ","略漢字","リヤクカナ","@","61","62","63","64","001-6234","住所漢字","ジユウシヨカナ","@","1","2","3","4","5","6","7","8","@","@","471","66","","@","@","201212","@","201210","","@","@","3673056","00"

1 102 12 345678 3 A 200501 200601 7 8 123 456 78901 亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾 アイウエオアイウエオアイウエオアイウエオアイウエオアイウエオアイウエオアイウエオ 亜居宇絵尾亜居宇絵尾亜居宇絵尾 アイウエオアイウエオアイウエオアイウエオ 6 17 189 19 2099 221-0001 亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾 アイウエオアイウエオアイウエオアイウエオアイウエオアイウエオ 1.23457E+12 25 26 27 28 29 30 31 32 3 0120-1234-12345 353 22 亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾 アイウエオアイウエオ 9 204001 1 204201 亜居宇絵尾亜居宇絵尾亜居宇絵尾亜居宇絵尾 アイウエオアイウエオ 12 3456 78901
117 102 03 3673870 A 20121127 20121128 薮藪篭籠 セイシキテンポメイモジ70 薮藪篭籠 リヤクシキモジ70 13 102 24 2 103-0007 東京都中央区日本橋浜町2-45-1 薮藪篭籠 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ70 2-45-1-70 3 3 5 2 7 7 12 2 03-3249-8231 471 85 薮藪篭籠 太郎 ダイヒヨウシヤメイモジ70 タロウ 薮藪篭籠 太郎 カンリヤクザイシメイモジ70 タロウ
118 102 03 3673871 A 20121127 20121128 尭堯槙槇遥遙瑶瑤凜熙 セイシキテンポメイモジ71 尭堯槙槇遥遙瑶瑤凜熙 リヤクシキモジ71 13 102 24 2 103-0007 東京都中央区日本橋浜町2-45-1 尭堯槙槇遥遙瑶瑤凜熙 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ71 2-45-1-71 3 3 5 2 7 7 12 2 03-3249-8231 471 85 尭堯槙槇遥遙瑶瑤凜熙 太郎 ダイヒヨウシヤメイモジ71 タロウ 尭堯槙槇遥遙瑶瑤凜熙 太郎 カンリヤクザイシメイモジ71 タロウ
119 102 03 3673872 A 20121127 20121128 ツッー-一医院薬鈴田 セイシキテンポメイモジ72 ツッー-一医院薬鈴田 リヤクシキモジ72 13 102 24 2 103-0007 東京都中央区日本橋浜町2-45-1 ツッー-一医院薬鈴田 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ72 2-45-1-72 3 3 5 2 7 7 12 2 03-3249-8231 471 85 ツッー-一医院薬鈴田 太郎 ダイヒヨウシヤメイモジ72 タロウ ツッー-一医院薬鈴田 太郎 カンリヤクザイシメイモジ72 タロウ
102 03 3673873 A 20121127 20121128 @ @ @ 3673873 00 正漢字 セイカナ 略漢字 リヤクカナ @ 61 62 63 64 001-6234 住所漢字 ジユウシヨカナ @ 1 2 3 4 5 6 7 8 @ @ 471 66 @ @ 201212 @ 201210 @ @ 3673056 00

View File

@ -1,7 +1,7 @@
"102","1","2","3","B",,,"6",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"102","9","9","9","B",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"102","4","5","6","B",200501,200601,"6",7,55,56,57,正漢字,正カナ,略漢字,略カナ,0,61,62,63,64,001-6234,住所漢字,住所カナ,11,1,2,3,4,5,6,7,8,0,119991234,11,66,代漢,代カナ,4,204411,8,204812,薬剤師漢字,薬剤師カナ,99,88,77,
"102","7","8","9","B",200501,200601,"6",@,@,,,正漢字,正カナ,略漢字,略カナ,@,61,62,63,64,001-6234,住所漢字,住所カナ,@,1,2,3,4,5,6,7,8,@,@,471,66,,@,@,,@,,,@,@,,,
"102","7","8","9","B",200501,200601,"6",@,@,,,正漢字,正カナ,略漢字,略カナ,@,61,62,63,64,001-6234,住所漢字,住所カナ,@,1,2,3,4,5,6,7,8,@,@,@,66,,@,@,,@,,,@,@,,,
"102","03","3673002",,"B",20121128,20121129,,5,03,3673003,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"102","03","3673011",,"B",20121128,20121129,"@",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"102","03","3673012",,"B",20121128,20121129,,1,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

1 102 1 2 3 B 6
2 102 9 9 9 B
3 102 4 5 6 B 200501 200601 6 7 55 56 57 正漢字 正カナ 略漢字 略カナ 0 61 62 63 64 001-6234 住所漢字 住所カナ 11 1 2 3 4 5 6 7 8 0 119991234 11 66 代漢 代カナ 4 204411 8 204812 薬剤師漢字 薬剤師カナ 99 88 77
4 102 7 8 9 B 200501 200601 6 @ @ 正漢字 正カナ 略漢字 略カナ @ 61 62 63 64 001-6234 住所漢字 住所カナ @ 1 2 3 4 5 6 7 8 @ @ 471 @ 66 @ @ @ @ @
5 102 03 3673002 B 20121128 20121129 5 03 3673003 6
6 102 03 3673011 B 20121128 20121129 @
7 102 03 3673012 B 20121128 20121129 1 6

View File

@ -117,4 +117,3 @@
"033673870","85",,"セイシキテンポメイモジ70","リヤクシキモジ70","薮藪篭籠","薮藪篭籠",,,,,"ダイヒヨウシヤメイモジ70 タロウ","薮藪篭籠 太郎",,,"03-3249-8231","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ70","東京都中央区日本橋浜町2-45-1 薮藪篭籠","103-0007","13102242","13","102","2-45-1-70","07071202","03030502","471",,,"薮藪篭籠 太郎","カンリヤクザイシメイモジ70 タロウ",,"2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_pharm_mapper","2023/04/12 00:00:00","com_pharm_mapper"
"033673871","85",,"セイシキテンポメイモジ71","リヤクシキモジ71","尭堯槙槇遥遙瑶瑤凜熙","尭堯槙槇遥遙瑶瑤凜熙",,,,,"ダイヒヨウシヤメイモジ71 タロウ","尭堯槙槇遥遙瑶瑤凜熙 太郎",,,"03-3249-8231","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ71","東京都中央区日本橋浜町2-45-1 尭堯槙槇遥遙瑶瑤凜熙","103-0007","13102242","13","102","2-45-1-71","07071202","03030502","471",,,"尭堯槙槇遥遙瑶瑤凜熙 太郎","カンリヤクザイシメイモジ71 タロウ",,"2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_pharm_mapper","2023/04/12 00:00:00","com_pharm_mapper"
"033673872","85",,"セイシキテンポメイモジ72","リヤクシキモジ72","ツッー-一医院薬鈴田","ツッー-一医院薬鈴田",,,,,"ダイヒヨウシヤメイモジ72 タロウ","ツッー-一医院薬鈴田 太郎",,,"03-3249-8231","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ72","東京都中央区日本橋浜町2-45-1 ツッー-一医院薬鈴田","103-0007","13102242","13","102","2-45-1-72","07071202","03030502","471",,,"ツッー-一医院薬鈴田 太郎","カンリヤクザイシメイモジ72 タロウ",,"2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_pharm_mapper","2023/04/12 00:00:00","com_pharm_mapper"
"033673873","66","NULL","セイカナ","リヤクカナ","正漢字","略漢字","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","ジユウシヨカナ","住所漢字","001-6234","61626364","61","62","NULL","05060708","01020304","471","NULL","NULL","NULL","NULL","NULL","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/12 00:00:00","com_pharm_mapper","2023/04/12 00:00:00","com_pharm_mapper"

1 dcf_dsf_inst_cd inst_div_cd addr_unknown_reason_cd form_inst_name_kana inst_name_kana form_inst_name_kanji inst_name_kanji close_flg estab_sche_flg close_start_ym estab_sche_ym inst_repre_kana inst_repre phone_number_non_flg unconf_flg inst_phone_number inst_addr_kana inst_addr postal_number village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt manage_cd delete_sche_reason_cd dup_opp_cd supervising_pharmacist supervising_pharmacist_kana franchise_hq_cd inst_pharm_div abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
117 033673870 85 セイシキテンポメイモジ70 リヤクシキモジ70 薮藪篭籠 薮藪篭籠 ダイヒヨウシヤメイモジ70 タロウ 薮藪篭籠 太郎 03-3249-8231 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ70 東京都中央区日本橋浜町2-45-1 薮藪篭籠 103-0007 13102242 13 102 2-45-1-70 07071202 03030502 471 薮藪篭籠 太郎 カンリヤクザイシメイモジ70 タロウ 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_pharm_mapper 2023/04/12 00:00:00 com_pharm_mapper
118 033673871 85 セイシキテンポメイモジ71 リヤクシキモジ71 尭堯槙槇遥遙瑶瑤凜熙 尭堯槙槇遥遙瑶瑤凜熙 ダイヒヨウシヤメイモジ71 タロウ 尭堯槙槇遥遙瑶瑤凜熙 太郎 03-3249-8231 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ71 東京都中央区日本橋浜町2-45-1 尭堯槙槇遥遙瑶瑤凜熙 103-0007 13102242 13 102 2-45-1-71 07071202 03030502 471 尭堯槙槇遥遙瑶瑤凜熙 太郎 カンリヤクザイシメイモジ71 タロウ 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_pharm_mapper 2023/04/12 00:00:00 com_pharm_mapper
119 033673872 85 セイシキテンポメイモジ72 リヤクシキモジ72 ツッー-一医院薬鈴田 ツッー-一医院薬鈴田 ダイヒヨウシヤメイモジ72 タロウ ツッー-一医院薬鈴田 太郎 03-3249-8231 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 モジ72 東京都中央区日本橋浜町2-45-1 ツッー-一医院薬鈴田 103-0007 13102242 13 102 2-45-1-72 07071202 03030502 471 ツッー-一医院薬鈴田 太郎 カンリヤクザイシメイモジ72 タロウ 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_pharm_mapper 2023/04/12 00:00:00 com_pharm_mapper
033673873 66 NULL セイカナ リヤクカナ 正漢字 略漢字 NULL NULL NULL NULL NULL NULL NULL NULL NULL ジユウシヨカナ 住所漢字 001-6234 61626364 61 62 NULL 05060708 01020304 471 NULL NULL NULL NULL NULL 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/12 00:00:00 com_pharm_mapper 2023/04/12 00:00:00 com_pharm_mapper

View File

@ -33,5 +33,5 @@
"033673061","85",,"セイシキテンポメイ03B13B","リヤクシキ03B13B","正式店舗名03B13b","略式03B13b",,,,,,,,,"03-3249-8231","トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 03B13B","東京都中央区日本橋浜町2-45-1 03B13b","103-0007","13102242","13","102","2-45-1-03B13B","07071202","03030502","471",,,,,"033673060","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/19 00:00:00","com_pharm_mapper","2023/04/19 00:00:00","com_pharm_mapper"
"123","2","6","13","15","12","14","1","9","204201","204001","38","37","3","6","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/19 08:27:33","com_pharm_mapper"
"456","66","0","正カナ","略カナ","正漢字","略漢字","8","4","204812","204411","代カナ","代漢","0","6","119991234","住所カナ","住所漢字","001-6234","61626364","61","62","11","05060708","01020304","11","7","555657","薬剤師漢字","薬剤師カナ","998877","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/4/18 10:27:00","com_pharm_mapper","2023/4/19 08:27:00","com_pharm_mapper"
"789","66","NULL","正カナ","略カナ","正漢字","略漢字","NULL","NULL","NULL","NULL","NULL","NULL","NULL","6","NULL","住所カナ","住所漢字","001-6234","61626364","61","62","NULL","05060708","01020304","471","NULL","NULL","NULL","NULL","NULL","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/4/18 10:27:00","com_pharm_mapper","2023/4/19 08:27:00","com_pharm_mapper"
"789","66","NULL","正カナ","略カナ","正漢字","略漢字","NULL","NULL","NULL","NULL","NULL","NULL","NULL","6","NULL","住所カナ","住所漢字","001-6234","61626364","61","62","NULL","05060708","01020304","NULL","NULL","NULL","NULL","NULL","NULL","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/4/18 10:27:00","com_pharm_mapper","2023/4/19 08:27:00","com_pharm_mapper"
"999","2","6","13","15","12","14","1","9","204201","204001","38","37","3","7","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/18 10:27:33","com_pharm_mapper"

1 dcf_dsf_inst_cd inst_div_cd addr_unknown_reason_cd form_inst_name_kana inst_name_kana form_inst_name_kanji inst_name_kanji close_flg estab_sche_flg close_start_ym estab_sche_ym inst_repre_kana inst_repre phone_number_non_flg unconf_flg inst_phone_number inst_addr_kana inst_addr postal_number village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt manage_cd delete_sche_reason_cd dup_opp_cd supervising_pharmacist supervising_pharmacist_kana franchise_hq_cd inst_pharm_div abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
33 033673061 85 セイシキテンポメイ03B13B リヤクシキ03B13B 正式店舗名03B13b 略式03B13b 03-3249-8231 トウキヨウト チユウオウク ニホンバシハマチヨウ 2-45-1 03B13B 東京都中央区日本橋浜町2-45-1 03B13b 103-0007 13102242 13 102 2-45-1-03B13B 07071202 03030502 471 033673060 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/19 00:00:00 com_pharm_mapper 2023/04/19 00:00:00 com_pharm_mapper
34 123 2 6 13 15 12 14 1 9 204201 204001 38 37 3 6 34 23 22 221-000 17181920 17 18 24 29303132 25262728 35 8 91011 43 44 454647 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/18 10:27:33 com_pharm_mapper 2023/04/19 08:27:33 com_pharm_mapper
35 456 66 0 正カナ 略カナ 正漢字 略漢字 8 4 204812 204411 代カナ 代漢 0 6 119991234 住所カナ 住所漢字 001-6234 61626364 61 62 11 05060708 01020304 11 7 555657 薬剤師漢字 薬剤師カナ 998877 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/4/18 10:27:00 com_pharm_mapper 2023/4/19 08:27:00 com_pharm_mapper
36 789 66 NULL 正カナ 略カナ 正漢字 略漢字 NULL NULL NULL NULL NULL NULL NULL 6 NULL 住所カナ 住所漢字 001-6234 61626364 61 62 NULL 05060708 01020304 471 NULL NULL NULL NULL NULL NULL 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/4/18 10:27:00 com_pharm_mapper 2023/4/19 08:27:00 com_pharm_mapper
37 999 2 6 13 15 12 14 1 9 204201 204001 38 37 3 7 34 23 22 221-000 17181920 17 18 24 29303132 25262728 35 8 91011 43 44 454647 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/18 10:27:33 com_pharm_mapper 2023/04/18 10:27:33 com_pharm_mapper

View File

@ -1,8 +1,6 @@
"132","00","9900146",,"A","2","20141113","20141114","20140624",,"1",,,,,,"1","1",,,,,,,,,,,,,,"18.8",,,,,,,,"20130401","20140331","49.8","20130401","20140331",,,,,,,,,,,,,,,,,,,,"39.3",,,,,,,,"20130401","20140331"
"132","00","9900194",,"A","2","20141113","20141114","20121101",http://www.hospital.misawa.aomori.jp/,"1",1,1,0,20100401,20110331,"1","1",1,1,1,1,1,1,1,1,1,1,1,1,3,"205.4",,,,,,,,"20100401","20110331","468.1","20100401","20110331",8.3,20100401,20110331,,,,,,,,,,,,,,,,,"18.7",,,,,,0.0,,"20100401","20110331"
"132","00","9901649",,"A","2","20141113","20141114",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"132","00","9901679",,"A","2","20141113","20141114","20140627",http://www.kai-sei-kai.com/,"1",,,,,,"1","1",1,1,1,,1,,,,,1,,1,2,"58.5",229.2,102.3,131.3,,,,,"20130401","20140331","96.0","20130401","20140331",,,,,,,,,,,,,,,,,,,,"20.4",641.3,533.2,749.2,,,,,"20130401","20140331"
"132","00","9929798",,"A","2","20141113","20141114","20130611",http://www.urakawa.jrc.or.jp/,"1",,,,,,"1","1",1,1,1,,1,,,,,,,1,1,"114.6",46.6,,,39.9,0.0,0.0,,"20120401","20130331","481.6","20120401","20130331",16.2,20120401,20130331,,,,,,,,,,,,,,,,,"15.6",555.3,,,169.4,0.0,0.0,,"20120401","20130331"
"132","99","9999999",88,"A","2","20141113","20141114","@",@,"@",@,@,@,@,@,"@","@",@,@,@,@,@,@,@,@,@,@,@,@,@,"@",@,@,@,@,@,@,@,"@","@","@","@","@",@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,"@",@,@,@,@,@,@,@,"@","@"
"132","99","9999999",89,"A","2","20141113","20141114","@",@,"@",@,@,4444,20100401,20110331,"@","@",@,@,@,@,@,@,1,1,1,@,@,@,12345,"@",146.6,114.5,39.2,679.4,753.1,951.3,0.0,"20120401","20130331","@","20220430","20220517",@,20230623,20230707,@,147258,369147,258369,987654,321789,753159,842862,20200202,20200220,@,20220222,20230330,@,20060606,20070707,"@",159.3,25.6,154.1,35.1,397.8,65.7,62.5,"19980430","19990501"
"132","99","9999999",99,"A","2","20141113","20141114","20130611",aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz,"1",2,3,4444,20150101,20160101,"1","1",1,1,1,1,1,1,1,1,1,1,1,1,123,"12345.6",12345.6,12345.6,12345.6,12345.6,12345.6,12345.6,12345.6,"20120401","20130331","12345.6","20120401","20130331",12345.6,20120401,20130331,123467,123467,123467,123467,123467,123467,123467,123467,20200202,20200202,123467,20200202,20200202,123467,20200202,20200202,"12345.6",12345.6,12345.6,12345.6,12345.6,12345.6,12345.6,12345.6,"20120401","20130331"
"132","00","9900146","","A","2","20141113","20141114","20140624","","1","","","","","","1","1","","","","","","","","","","","","","","18.8","","","","","","","","20130401","20140331","49.8","20130401","20140331","","","","","","","","","","","","","","","","","","","","39.3","","","","","","","","20130401","20140331"
"132","00","9900194","","A","2","20141113","20141114","20121101","http://www.hospital.misawa.aomori.jp/","1","1","1","0","20100401","20110331","1","1","1","1","1","1","1","1","1","1","1","1","1","1","3","205.4","","","","","","","","20100401","20110331","468.1","20100401","20110331","8.3","20100401","20110331","","","","","","","","","","","","","","","","","18.7","","","","","","0.0","","20100401","20110331"
"132","00","9901649","","A","2","20141113","20141114","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"132","00","9901679","","A","2","20141113","20141114","20140627","http://www.kai-sei-kai.com/","1","","","","","","1","1","1","1","1","","1","","","","","1","","1","2","58.5","229.2","102.3","131.3","","","","","20130401","20140331","96.0","20130401","20140331","","","","","","","","","","","","","","","","","","","","20.4","641.3","533.2","749.2","","","","","20130401","20140331"
"132","00","9929798","","A","2","20141113","20141114","20130611","http://www.urakawa.jrc.or.jp/","1","","","","","","1","1","1","1","1","","1","","","","","","","1","1","114.6","46.6","","","39.9","0.0","0.0","","20120401","20130331","481.6","20120401","20130331","16.2","20120401","20130331","","","","","","","","","","","","","","","","","15.6","555.3","","","169.4","0.0","0.0","","20120401","20130331"
"132","99","9999999","99","A","2","20141113","20141114","20130611","aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz","1","2","3","4444","20150101","20160101","1","1","1","1","1","1","1","1","1","1","1","1","1","1","123","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","20120401","20130331","12345.6","20120401","20130331","12345.6","20120401","20130331","123467","123467","123467","123467","123467","123467","123467","123467","20200202","20200202","123467","20200202","20200202","123467","20200202","20200202","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","20120401","20130331"

1 132 00 9900146 A 2 20141113 20141114 20140624 1 1 1 18.8 20130401 20140331 49.8 20130401 20140331 39.3 20130401 20140331
2 132 00 9900194 A 2 20141113 20141114 20121101 http://www.hospital.misawa.aomori.jp/ 1 1 1 0 20100401 20110331 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 205.4 20100401 20110331 468.1 20100401 20110331 8.3 20100401 20110331 18.7 0.0 20100401 20110331
3 132 00 9901649 A 2 20141113 20141114
4 132 00 9901679 A 2 20141113 20141114 20140627 http://www.kai-sei-kai.com/ 1 1 1 1 1 1 1 1 1 2 58.5 229.2 102.3 131.3 20130401 20140331 96.0 20130401 20140331 20.4 641.3 533.2 749.2 20130401 20140331
5 132 00 9929798 A 2 20141113 20141114 20130611 http://www.urakawa.jrc.or.jp/ 1 1 1 1 1 1 1 1 1 114.6 46.6 39.9 0.0 0.0 20120401 20130331 481.6 20120401 20130331 16.2 20120401 20130331 15.6 555.3 169.4 0.0 0.0 20120401 20130331
6 132 99 9999999 88 99 A 2 20141113 20141114 @ 20130611 @ aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz @ 1 @ 2 @ 3 @ 4444 @ 20150101 @ 20160101 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 1 @ 123 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 20120401 @ 20130331 @ 12345.6 @ 20120401 @ 20130331 @ 12345.6 @ 20120401 @ 20130331 @ 123467 @ 123467 @ 123467 @ 123467 @ 123467 @ 123467 @ 123467 @ 123467 @ 20200202 @ 20200202 @ 123467 @ 20200202 @ 20200202 @ 123467 @ 20200202 @ 20200202 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 12345.6 @ 20120401 @ 20130331
132 99 9999999 89 A 2 20141113 20141114 @ @ @ @ @ 4444 20100401 20110331 @ @ @ @ @ @ @ @ 1 1 1 @ @ @ 12345 @ 146.6 114.5 39.2 679.4 753.1 951.3 0.0 20120401 20130331 @ 20220430 20220517 @ 20230623 20230707 @ 147258 369147 258369 987654 321789 753159 842862 20200202 20200220 @ 20220222 20230330 @ 20060606 20070707 @ 159.3 25.6 154.1 35.1 397.8 65.7 62.5 19980430 19990501
132 99 9999999 99 A 2 20141113 20141114 20130611 aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz 1 2 3 4444 20150101 20160101 1 1 1 1 1 1 1 1 1 1 1 1 1 1 123 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 20120401 20130331 12345.6 20120401 20130331 12345.6 20120401 20130331 123467 123467 123467 123467 123467 123467 123467 123467 20200202 20200202 123467 20200202 20200202 123467 20200202 20200202 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 20120401 20130331

View File

@ -1,9 +1,7 @@
"dcf_dsf_inst_cd","info_date","home_page","hppre_flg","expre_flg","trial_flg","trial_contcount","trialwhet_from","trialwhet_to","equipment_flg","cos_disease_flg","cos_surgery","specialclinic_flg","establishment_flg","critical_flg","cop_system","sys_exists_flg","sys_inspection","sys_prescription","sys_reserv","icduse_flg","echart_flg","fulltime_flg","fulltime_count","ge_patient_avg","mt_patient_avg","mc_patient_avg","ca_patient_avg","pys_patient_avg","tub_patient_avg","inf_patient_avg","patient_avg_sum","patient_avg_from","patient_avg_to","cl_patient_avg","cl_patient_avg_from","cl_patient_avg_to","hm_patient_avg","hm_patient_avg_from","hm_patient_avg_to","ge_patient_ex","mt_patient_ex","mc_patient_ex","ca_patient_ex","pys_patient_ex","tub_patient_ex","inf_patient_ex","patient_ex_sum","patient_ex_from","patient_ex_to","cl_patient_ex","cl_patient_ex_from","cl_patient_ex_to","hm_patient_ex","hm_patient_ex_from","hm_patient_ex_to","ge_stay_avg","mt_stay_avg","mc_stay_avg","ca_stay_avg","pys_stay_avg","tub_stay_avg","inf_stay_avg","stay_avg_sum","stay_avg_from","stay_avg_to","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id"
"009900146","20140624",,"1",,,,,,"1","1",,,,,,,,,,,,,,"18.8",,,,,,,,"20130401","20140331","49.8","20130401","20140331",,,,,,,,,,,,,,,,,,,,"39.3",,,,,,,,"20130401","20140331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009900194","20121101","http://www.hospital.misawa.aomori.jp/","1","1","1","0","20100401","20110331","1","1","1","1","1","1","1","1","1","1","1","1","1","1","3","205.4",,,,,,,,"20100401","20110331","468.1","20100401","20110331","8.3","20100401","20110331",,,,,,,,,,,,,,,,,"18.7",,,,,,"0.0",,"20100401","20110331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009901649",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009901679","20140627","http://www.kai-sei-kai.com/","1",,,,,,"1","1","1","1","1",,"1",,,,,"1",,"1","2","58.5","229.2","102.3","131.3",,,,,"20130401","20140331","96.0","20130401","20140331",,,,,,,,,,,,,,,,,,,,"20.4","641.3","533.2","749.2",,,,,"20130401","20140331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009929798","20130611","http://www.urakawa.jrc.or.jp/","1",,,,,,"1","1","1","1","1",,"1",,,,,,,"1","1","114.6","46.6",,,"39.9","0.0","0.0",,"20120401","20130331","481.6","20120401","20130331","16.2","20120401","20130331",,,,,,,,,,,,,,,,,"15.6","555.3",,,"169.4","0.0","0.0",,"20120401","20130331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"99999999988","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","20130331","NULL","NULL","NULL","NULL","NULL","2000/05/09 20:39:15","com_prefc_med_base_mapper","2000/05/09 20:39:15","com_prefc_med_base_mapper"
"99999999989","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","20130331","NULL","NULL","NULL","NULL","NULL","2000/05/09 20:39:15","com_prefc_med_base_mapper","2000/05/09 20:39:15","com_prefc_med_base_mapper"
"009900146","20140624","","1","","","","","","1","1","","","","","","","","","","","","","","18.8","","","","","","","","20130401","20140331","49.8","20130401","20140331","","","","","","","","","","","","","","","","","","","","39.3","","","","","","","","20130401","20140331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009900194","20121101","http://www.hospital.misawa.aomori.jp/","1","1","1","0","20100401","20110331","1","1","1","1","1","1","1","1","1","1","1","1","1","1","3","205.4","","","","","","","","20100401","20110331","468.1","20100401","20110331","8.3","20100401","20110331","","","","","","","","","","","","","","","","","18.7","","","","","","0.0","","20100401","20110331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009901649","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009901679","20140627","http://www.kai-sei-kai.com/","1","","","","","","1","1","1","1","1","","1","","","","","1","","1","2","58.5","229.2","102.3","131.3","","","","","20130401","20140331","96.0","20130401","20140331","","","","","","","","","","","","","","","","","","","","20.4","641.3","533.2","749.2","","","","","20130401","20140331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"009929798","20130611","http://www.urakawa.jrc.or.jp/","1","","","","","","1","1","1","1","1","","1","","","","","","","1","1","114.6","46.6","","","39.9","0.0","0.0","","20120401","20130331","481.6","20120401","20130331","16.2","20120401","20130331","","","","","","","","","","","","","","","","","15.6","555.3","","","169.4","0.0","0.0","","20120401","20130331","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"
"99999999999","20130611","aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz","1","2","3","4444","20150101","20160101","1","1","1","1","1","1","1","1","1","1","1","1","1","1","123","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","20120401","20130331","12345.6","20120401","20130331","12345.6","20120401","20130331","123467","123467","123467","123467","123467","123467","123467","123467","20200202","20200202","123467","20200202","20200202","123467","20200202","20200202","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","12345.6","20120401","20130331","20130331","NULL","NULL","NULL","NULL","NULL","2023/05/09 20:39:15","com_prefc_med_base_mapper","2023/05/09 20:39:15","com_prefc_med_base_mapper"

1 dcf_dsf_inst_cd info_date home_page hppre_flg expre_flg trial_flg trial_contcount trialwhet_from trialwhet_to equipment_flg cos_disease_flg cos_surgery specialclinic_flg establishment_flg critical_flg cop_system sys_exists_flg sys_inspection sys_prescription sys_reserv icduse_flg echart_flg fulltime_flg fulltime_count ge_patient_avg mt_patient_avg mc_patient_avg ca_patient_avg pys_patient_avg tub_patient_avg inf_patient_avg patient_avg_sum patient_avg_from patient_avg_to cl_patient_avg cl_patient_avg_from cl_patient_avg_to hm_patient_avg hm_patient_avg_from hm_patient_avg_to ge_patient_ex mt_patient_ex mc_patient_ex ca_patient_ex pys_patient_ex tub_patient_ex inf_patient_ex patient_ex_sum patient_ex_from patient_ex_to cl_patient_ex cl_patient_ex_from cl_patient_ex_to hm_patient_ex hm_patient_ex_from hm_patient_ex_to ge_stay_avg mt_stay_avg mc_stay_avg ca_stay_avg pys_stay_avg tub_stay_avg inf_stay_avg stay_avg_sum stay_avg_from stay_avg_to regist_ymd update_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
2 009900146 20140624 1 1 1 18.8 20130401 20140331 49.8 20130401 20140331 39.3 20130401 20140331 20230510 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper
3 009900194 20121101 http://www.hospital.misawa.aomori.jp/ 1 1 1 0 20100401 20110331 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 205.4 20100401 20110331 468.1 20100401 20110331 8.3 20100401 20110331 18.7 0.0 20100401 20110331 20230510 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper
4 009901649 20230510 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper
5 009901679 20140627 http://www.kai-sei-kai.com/ 1 1 1 1 1 1 1 1 1 2 58.5 229.2 102.3 131.3 20130401 20140331 96.0 20130401 20140331 20.4 641.3 533.2 749.2 20130401 20140331 20230510 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper
6 009929798 20130611 http://www.urakawa.jrc.or.jp/ 1 1 1 1 1 1 1 1 1 114.6 46.6 39.9 0.0 0.0 20120401 20130331 481.6 20120401 20130331 16.2 20120401 20130331 15.6 555.3 169.4 0.0 0.0 20120401 20130331 20230510 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper
99999999988 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 20130331 NULL NULL NULL NULL NULL 2000/05/09 20:39:15 com_prefc_med_base_mapper 2000/05/09 20:39:15 com_prefc_med_base_mapper
99999999989 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 20130331 NULL NULL NULL NULL NULL 2000/05/09 20:39:15 com_prefc_med_base_mapper 2000/05/09 20:39:15 com_prefc_med_base_mapper
7 99999999999 20130611 aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbz 1 2 3 4444 20150101 20160101 1 1 1 1 1 1 1 1 1 1 1 1 1 1 123 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 20120401 20130331 12345.6 20120401 20130331 12345.6 20120401 20130331 123467 123467 123467 123467 123467 123467 123467 123467 20200202 20200202 123467 20200202 20200202 123467 20200202 20200202 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 12345.6 20120401 20130331 20130331 NULL NULL NULL NULL NULL 2023/05/09 20:39:15 com_prefc_med_base_mapper 2023/05/09 20:39:15 com_prefc_med_base_mapper

View File

@ -6,4 +6,3 @@
"134","00","9929798","","A","0902","2","20141113","20141114",""
"134","00","9929798","","A","0915","2","20141113","20141114",""
"134","99","9999999","99","A","1234","2","20141113","20141114","123456"
"134","99","9999999","99","A","1235","2","20141113","20141114","@"

1 134 00 9901649 A 1001 2 20141113 20141114
6 134 00 9929798 A 0902 2 20141113 20141114
7 134 00 9929798 A 0915 2 20141113 20141114
8 134 99 9999999 99 A 1234 2 20141113 20141114 123456
134 99 9999999 99 A 1235 2 20141113 20141114 @

View File

@ -8,4 +8,3 @@
"009929798","0915","NULL","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper"
"009929798","0915","NULL","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper"
"99999999999","1234","123456","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper"
"99999999999","1235","NULL","20230510","NULL","NULL","NULL","NULL","NULL","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper","2023/05/10 20:57:12","com_prefc_med_dis_treat_mapper"

1 dcf_dsf_inst_cd treatment_code pre_num regist_ymd update_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
8 009929798 0915 NULL 20230510 NULL NULL NULL NULL NULL 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper
9 009929798 0915 NULL 20230510 NULL NULL NULL NULL NULL 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper
10 99999999999 1234 123456 20230510 NULL NULL NULL NULL NULL 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper
99999999999 1235 NULL 20230510 NULL NULL NULL NULL NULL 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper 2023/05/10 20:57:12 com_prefc_med_dis_treat_mapper

View File

@ -3,4 +3,4 @@
"133","00","9901649","","A","009","2","20141113","20141114","3"
"133","00","9901679","","A","015","2","20141113","20141114",""
"133","00","9904439","","A","006","2","20141113","20141114",""
"133","00","9929798","","A","010","2","20141113","20141114","@"
"133","00","9929798","","A","010","2","20141113","20141114",""

1 133 00 9900146 A 012 2 20141113 20141114 0
3 133 00 9901649 A 009 2 20141113 20141114 3
4 133 00 9901679 A 015 2 20141113 20141114
5 133 00 9904439 A 006 2 20141113 20141114
6 133 00 9929798 A 010 2 20141113 20141114 @

View File

@ -1,4 +1,3 @@
"136","99","9999999","88","A","あいうえお","2","20141113","20141114","123","@"
"136","00","9901649","","A","テスト 小児 内分泌・腎臓外来","2","20141113","20141114","5","030"
"136","00","9904439","","A","テスト アルコール症専門外来","2","20141113","20141114","1","019"
"136","00","9904439","","A","テスト メンタルヘルス専門外来","2","20141113","20141114","7","019"

1 136 99 00 9999999 9901649 88 A あいうえお テスト 小児 内分泌・腎臓外来 2 20141113 20141114 123 5 @ 030
136 99 9999999 88 A あいうえお 2 20141113 20141114 123 @
1 136 00 00 9901649 9901649 A テスト 小児 内分泌・腎臓外来 テスト 小児 内分泌・腎臓外来 2 20141113 20141114 5 5 030 030
2 136 00 00 9904439 9904439 A テスト アルコール症専門外来 テスト アルコール症専門外来 2 20141113 20141114 1 1 019 019
3 136 00 00 9904439 9904439 A テスト メンタルヘルス専門外来 テスト メンタルヘルス専門外来 2 20141113 20141114 7 7 019 019

View File

@ -1,5 +1,4 @@
"dcf_dsf_inst_cd","specialclinic_name","sort_key","sectsub_cd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id"
"99999999988","あいうえお","123","NULL","20171008","NULL","NULL","NULL","NULL","NULL","2017/10/08 20:57:12","com_prefc_med_sp_outpat_mapper","2017/10/08 20:57:12","com_prefc_med_sp_outpat_mapper"
"009901649","テスト 小児 内分泌・腎臓外来","5","030","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper"
"009904439","テスト アルコール症専門外来","1","019","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper"
"009904439","テスト メンタルヘルス専門外来","7","019","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper","2023/05/11 10:57:12","com_prefc_med_sp_outpat_mapper"

1 dcf_dsf_inst_cd specialclinic_name sort_key sectsub_cd regist_ymd update_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
99999999988 あいうえお 123 NULL 20171008 NULL NULL NULL NULL NULL 2017/10/08 20:57:12 com_prefc_med_sp_outpat_mapper 2017/10/08 20:57:12 com_prefc_med_sp_outpat_mapper
2 009901649 テスト 小児 内分泌・腎臓外来 5 030 20230511 NULL NULL NULL NULL NULL 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper
3 009904439 テスト アルコール症専門外来 1 019 20230511 NULL NULL NULL NULL NULL 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper
4 009904439 テスト メンタルヘルス専門外来 7 019 20230511 NULL NULL NULL NULL NULL 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper 2023/05/11 10:57:12 com_prefc_med_sp_outpat_mapper

View File

@ -5,4 +5,3 @@
"511","01","999613","00","A","0056","2","20141113","20141114","1","20140706","","","1","20140706"
"511","91","999999","99","B","9999","2","","","1","20220628","1","20230425","1","20230425"
"511","99","999999","99","A","9999","2","","","1","20220628","1","20230425","1","20230425"
"511","01","999988","99","A","9999","2",,,"@","20220628","@","20230425","@","20230425"

1 511 01 994301 00 A 0003 2 20141113 20141114 1 20140401
5 511 01 999613 00 A 0056 2 20141113 20141114 1 20140706 1 20140706
6 511 91 999999 99 B 9999 2 1 20220628 1 20230425 1 20230425
7 511 99 999999 99 A 9999 2 1 20220628 1 20230425 1 20230425
511 01 999988 99 A 9999 2 @ 20220628 @ 20230425 @ 20230425

View File

@ -6,4 +6,3 @@
"0199961300","0056","2","1","20140706","","","1","20140706","20230425","NULL","NULL","NULL","NULL","NULL","NULL","2023/01/08 17:05:14","com_sp_field_mapper","2023/01/08 17:05:14","com_sp_field_mapper"
"9199999999","9999","2","1","20220628","1","20230425","1","20230425","20230425","NULL","NULL","NULL","NULL","NULL","NULL","2023/01/08 17:05:14","com_sp_field_mapper","2023/01/08 17:05:14","com_sp_field_mapper"
"9999999999","9999","2","1","20220628","1","20230425","1","20230425","20230425","NULL","NULL","NULL","NULL","NULL","NULL","2023/01/08 17:05:14","com_sp_field_mapper","2023/01/08 17:05:14","com_sp_field_mapper"
"0199998899","9999","2","NULL","NULL","NULL","NULL","NULL","NULL","20230425","NULL","NULL","NULL","NULL","NULL","NULL","2023/01/08 17:05:14","com_sp_field_mapper","2023/01/08 17:05:14","com_sp_field_mapper"

1 dcf_pcf_dr_cd specialist_cd specialist_maint_div specialist_flg specialist_publsh_ymd ackn_med_flg ackn_med_publsh_ymd guide_med_flg guide_med_publsh_ymd regist_ymd update_ymd delete_ymd regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
6 0199961300 0056 2 1 20140706 1 20140706 20230425 NULL NULL NULL NULL NULL NULL 2023/01/08 17:05:14 com_sp_field_mapper 2023/01/08 17:05:14 com_sp_field_mapper
7 9199999999 9999 2 1 20220628 1 20230425 1 20230425 20230425 NULL NULL NULL NULL NULL NULL 2023/01/08 17:05:14 com_sp_field_mapper 2023/01/08 17:05:14 com_sp_field_mapper
8 9999999999 9999 2 1 20220628 1 20230425 1 20230425 20230425 NULL NULL NULL NULL NULL NULL 2023/01/08 17:05:14 com_sp_field_mapper 2023/01/08 17:05:14 com_sp_field_mapper
0199998899 9999 2 NULL NULL NULL NULL NULL NULL 20230425 NULL NULL NULL NULL NULL NULL 2023/01/08 17:05:14 com_sp_field_mapper 2023/01/08 17:05:14 com_sp_field_mapper

View File

@ -136,8 +136,6 @@ def is_valid_date_format(date_str: str, date_format):
Returns:
_type_: 正しい日付文字列の場合Trueそれ以外はFalse
"""
if date_str is None:
return False
try:
datetime.strptime(date_str, date_format)
return True

View File

@ -16,115 +16,165 @@
]
},
"default": {
"greenlet": {
"hashes": [
"sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174",
"sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd",
"sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa",
"sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a",
"sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec",
"sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565",
"sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d",
"sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c",
"sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234",
"sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d",
"sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546",
"sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2",
"sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74",
"sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de",
"sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd",
"sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9",
"sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3",
"sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846",
"sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2",
"sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353",
"sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8",
"sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166",
"sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206",
"sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b",
"sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d",
"sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe",
"sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997",
"sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445",
"sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0",
"sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96",
"sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884",
"sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6",
"sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1",
"sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619",
"sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94",
"sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4",
"sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1",
"sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63",
"sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd",
"sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a",
"sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376",
"sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57",
"sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16",
"sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e",
"sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc",
"sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a",
"sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c",
"sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5",
"sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a",
"sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72",
"sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9",
"sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9",
"sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e",
"sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8",
"sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65",
"sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064",
"sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"
],
"markers": "platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))",
"version": "==3.0.1"
},
"pymysql": {
"hashes": [
"sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c",
"sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"
"sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96",
"sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==1.1.1"
"version": "==1.1.0"
},
"sqlalchemy": {
"hashes": [
"sha256:023b3ee6169969beea3bb72312e44d8b7c27c75b347942d943cf49397b7edeb5",
"sha256:03968a349db483936c249f4d9cd14ff2c296adfa1290b660ba6516f973139582",
"sha256:05132c906066142103b83d9c250b60508af556982a385d96c4eaa9fb9720ac2b",
"sha256:087b6b52de812741c27231b5a3586384d60c353fbd0e2f81405a814b5591dc8b",
"sha256:0b3dbf1e7e9bc95f4bac5e2fb6d3fb2f083254c3fdd20a1789af965caf2d2348",
"sha256:118c16cd3f1b00c76d69343e38602006c9cfb9998fa4f798606d28d63f23beda",
"sha256:1936af879e3db023601196a1684d28e12f19ccf93af01bf3280a3262c4b6b4e5",
"sha256:1e3f196a0c59b0cae9a0cd332eb1a4bda4696e863f4f1cf84ab0347992c548c2",
"sha256:23a8825495d8b195c4aa9ff1c430c28f2c821e8c5e2d98089228af887e5d7e29",
"sha256:293cd444d82b18da48c9f71cd7005844dbbd06ca19be1ccf6779154439eec0b8",
"sha256:32f9dc8c44acdee06c8fc6440db9eae8b4af8b01e4b1aee7bdd7241c22edff4f",
"sha256:34ea30ab3ec98355235972dadc497bb659cc75f8292b760394824fab9cf39826",
"sha256:3d3549fc3e40667ec7199033a4e40a2f669898a00a7b18a931d3efb4c7900504",
"sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae",
"sha256:4d44522480e0bf34c3d63167b8cfa7289c1c54264c2950cc5fc26e7850967e45",
"sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443",
"sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23",
"sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576",
"sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1",
"sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0",
"sha256:5e22575d169529ac3e0a120cf050ec9daa94b6a9597993d1702884f6954a7d71",
"sha256:60c578c45c949f909a4026b7807044e7e564adf793537fc762b2489d522f3d11",
"sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e",
"sha256:6375cd674fe82d7aa9816d1cb96ec592bac1726c11e0cafbf40eeee9a4516b5f",
"sha256:6854175807af57bdb6425e47adbce7d20a4d79bbfd6f6d6519cd10bb7109a7f8",
"sha256:6ab60a5089a8f02009f127806f777fca82581c49e127f08413a66056bd9166dd",
"sha256:725875a63abf7c399d4548e686debb65cdc2549e1825437096a0af1f7e374814",
"sha256:7492967c3386df69f80cf67efd665c0f667cee67032090fe01d7d74b0e19bb08",
"sha256:81965cc20848ab06583506ef54e37cf15c83c7e619df2ad16807c03100745dea",
"sha256:81c24e0c0fde47a9723c81d5806569cddef103aebbf79dbc9fcbb617153dea30",
"sha256:81eedafa609917040d39aa9332e25881a8e7a0862495fcdf2023a9667209deda",
"sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9",
"sha256:8280856dd7c6a68ab3a164b4a4b1c51f7691f6d04af4d4ca23d6ecf2261b7923",
"sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df",
"sha256:8b4af17bda11e907c51d10686eda89049f9ce5669b08fbe71a29747f1e876036",
"sha256:90144d3b0c8b139408da50196c5cad2a6909b51b23df1f0538411cd23ffa45d3",
"sha256:906e6b0d7d452e9a98e5ab8507c0da791856b2380fdee61b765632bb8698026f",
"sha256:90c11ceb9a1f482c752a71f203a81858625d8df5746d787a4786bca4ffdf71c6",
"sha256:911cc493ebd60de5f285bcae0491a60b4f2a9f0f5c270edd1c4dbaef7a38fc04",
"sha256:9a420a91913092d1e20c86a2f5f1fc85c1a8924dbcaf5e0586df8aceb09c9cc2",
"sha256:9f8c9fdd15a55d9465e590a402f42082705d66b05afc3ffd2d2eb3c6ba919560",
"sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70",
"sha256:a373a400f3e9bac95ba2a06372c4fd1412a7cee53c37fc6c05f829bf672b8769",
"sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1",
"sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6",
"sha256:b1f09b6821406ea1f94053f346f28f8215e293344209129a9c0fcc3578598d7b",
"sha256:b2ac41acfc8d965fb0c464eb8f44995770239668956dc4cdf502d1b1ffe0d747",
"sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078",
"sha256:b50eab9994d64f4a823ff99a0ed28a6903224ddbe7fef56a6dd865eec9243440",
"sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f",
"sha256:c0b0e5e1b5d9f3586601048dd68f392dc0cc99a59bb5faf18aab057ce00d00b2",
"sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d",
"sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc",
"sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a",
"sha256:dd5ec3aa6ae6e4d5b5de9357d2133c07be1aff6405b136dad753a16afb6717dd",
"sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9",
"sha256:ff8e80c4c4932c10493ff97028decfdb622de69cae87e0f127a7ebe32b4069c6"
"sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3",
"sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884",
"sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74",
"sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d",
"sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc",
"sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca",
"sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d",
"sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf",
"sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846",
"sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306",
"sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221",
"sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5",
"sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89",
"sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55",
"sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72",
"sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea",
"sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8",
"sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577",
"sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df",
"sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4",
"sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d",
"sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34",
"sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4",
"sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24",
"sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6",
"sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965",
"sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35",
"sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b",
"sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab",
"sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22",
"sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4",
"sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204",
"sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855",
"sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d",
"sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab",
"sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69",
"sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693",
"sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e",
"sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8",
"sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0",
"sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45",
"sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab",
"sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1",
"sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d",
"sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda",
"sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b",
"sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18",
"sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac",
"sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==2.0.41"
"version": "==2.0.23"
},
"tenacity": {
"hashes": [
"sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb",
"sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"
"sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a",
"sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==9.1.2"
"version": "==8.2.3"
},
"typing-extensions": {
"hashes": [
"sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4",
"sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"
"sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0",
"sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
],
"markers": "python_version >= '3.9'",
"version": "==4.14.0"
"markers": "python_version >= '3.8'",
"version": "==4.8.0"
}
},
"develop": {
"autopep8": {
"hashes": [
"sha256:8d6c87eba648fdcfc83e29b788910b8643171c395d9c4bcf115ece035b9c9dda",
"sha256:a203fe0fcad7939987422140ab17a930f684763bf7335bdb6709991dd7ef6c2d"
"sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb",
"sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==2.3.1"
"version": "==2.0.4"
},
"flake8": {
"hashes": [
"sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38",
"sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"
"sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23",
"sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"
],
"index": "pypi",
"markers": "python_full_version >= '3.8.1'",
"version": "==7.1.1"
"version": "==6.1.0"
},
"mccabe": {
"hashes": [
@ -136,27 +186,27 @@
},
"pycodestyle": {
"hashes": [
"sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3",
"sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"
"sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
"sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
],
"markers": "python_version >= '3.8'",
"version": "==2.12.1"
"version": "==2.11.1"
},
"pyflakes": {
"hashes": [
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
"sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774",
"sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"
],
"markers": "python_version >= '3.8'",
"version": "==3.2.0"
"version": "==3.1.0"
},
"tomli": {
"hashes": [
"sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
"sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"markers": "python_version < '3.11'",
"version": "==2.0.2"
"version": "==2.0.1"
}
}
}

View File

@ -1,4 +1,4 @@
FROM python:3.9
FROM python:3.9-bullseye
ENV TZ="Asia/Tokyo"
@ -11,8 +11,8 @@ RUN apt update && apt install -y less vim curl wget gzip unzip sudo lsb-release
# mysqlをインストール
RUN \
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb && \
dpkg -i mysql-apt-config_0.8.29-1_all.deb < mysql_dpkg_selection.txt && \
wget https://dev.mysql.com/get/mysql-apt-config_0.8.25-1_all.deb && \
dpkg -i mysql-apt-config_0.8.25-1_all.deb < mysql_dpkg_selection.txt && \
apt update && \
apt install -y mysql-client

View File

@ -16,115 +16,165 @@
]
},
"default": {
"greenlet": {
"hashes": [
"sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174",
"sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd",
"sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa",
"sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a",
"sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec",
"sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565",
"sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d",
"sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c",
"sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234",
"sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d",
"sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546",
"sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2",
"sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74",
"sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de",
"sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd",
"sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9",
"sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3",
"sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846",
"sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2",
"sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353",
"sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8",
"sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166",
"sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206",
"sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b",
"sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d",
"sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe",
"sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997",
"sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445",
"sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0",
"sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96",
"sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884",
"sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6",
"sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1",
"sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619",
"sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94",
"sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4",
"sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1",
"sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63",
"sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd",
"sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a",
"sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376",
"sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57",
"sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16",
"sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e",
"sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc",
"sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a",
"sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c",
"sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5",
"sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a",
"sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72",
"sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9",
"sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9",
"sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e",
"sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8",
"sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65",
"sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064",
"sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"
],
"markers": "platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))",
"version": "==3.0.1"
},
"pymysql": {
"hashes": [
"sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c",
"sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"
"sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96",
"sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==1.1.1"
"version": "==1.1.0"
},
"sqlalchemy": {
"hashes": [
"sha256:023b3ee6169969beea3bb72312e44d8b7c27c75b347942d943cf49397b7edeb5",
"sha256:03968a349db483936c249f4d9cd14ff2c296adfa1290b660ba6516f973139582",
"sha256:05132c906066142103b83d9c250b60508af556982a385d96c4eaa9fb9720ac2b",
"sha256:087b6b52de812741c27231b5a3586384d60c353fbd0e2f81405a814b5591dc8b",
"sha256:0b3dbf1e7e9bc95f4bac5e2fb6d3fb2f083254c3fdd20a1789af965caf2d2348",
"sha256:118c16cd3f1b00c76d69343e38602006c9cfb9998fa4f798606d28d63f23beda",
"sha256:1936af879e3db023601196a1684d28e12f19ccf93af01bf3280a3262c4b6b4e5",
"sha256:1e3f196a0c59b0cae9a0cd332eb1a4bda4696e863f4f1cf84ab0347992c548c2",
"sha256:23a8825495d8b195c4aa9ff1c430c28f2c821e8c5e2d98089228af887e5d7e29",
"sha256:293cd444d82b18da48c9f71cd7005844dbbd06ca19be1ccf6779154439eec0b8",
"sha256:32f9dc8c44acdee06c8fc6440db9eae8b4af8b01e4b1aee7bdd7241c22edff4f",
"sha256:34ea30ab3ec98355235972dadc497bb659cc75f8292b760394824fab9cf39826",
"sha256:3d3549fc3e40667ec7199033a4e40a2f669898a00a7b18a931d3efb4c7900504",
"sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae",
"sha256:4d44522480e0bf34c3d63167b8cfa7289c1c54264c2950cc5fc26e7850967e45",
"sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443",
"sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23",
"sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576",
"sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1",
"sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0",
"sha256:5e22575d169529ac3e0a120cf050ec9daa94b6a9597993d1702884f6954a7d71",
"sha256:60c578c45c949f909a4026b7807044e7e564adf793537fc762b2489d522f3d11",
"sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e",
"sha256:6375cd674fe82d7aa9816d1cb96ec592bac1726c11e0cafbf40eeee9a4516b5f",
"sha256:6854175807af57bdb6425e47adbce7d20a4d79bbfd6f6d6519cd10bb7109a7f8",
"sha256:6ab60a5089a8f02009f127806f777fca82581c49e127f08413a66056bd9166dd",
"sha256:725875a63abf7c399d4548e686debb65cdc2549e1825437096a0af1f7e374814",
"sha256:7492967c3386df69f80cf67efd665c0f667cee67032090fe01d7d74b0e19bb08",
"sha256:81965cc20848ab06583506ef54e37cf15c83c7e619df2ad16807c03100745dea",
"sha256:81c24e0c0fde47a9723c81d5806569cddef103aebbf79dbc9fcbb617153dea30",
"sha256:81eedafa609917040d39aa9332e25881a8e7a0862495fcdf2023a9667209deda",
"sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9",
"sha256:8280856dd7c6a68ab3a164b4a4b1c51f7691f6d04af4d4ca23d6ecf2261b7923",
"sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df",
"sha256:8b4af17bda11e907c51d10686eda89049f9ce5669b08fbe71a29747f1e876036",
"sha256:90144d3b0c8b139408da50196c5cad2a6909b51b23df1f0538411cd23ffa45d3",
"sha256:906e6b0d7d452e9a98e5ab8507c0da791856b2380fdee61b765632bb8698026f",
"sha256:90c11ceb9a1f482c752a71f203a81858625d8df5746d787a4786bca4ffdf71c6",
"sha256:911cc493ebd60de5f285bcae0491a60b4f2a9f0f5c270edd1c4dbaef7a38fc04",
"sha256:9a420a91913092d1e20c86a2f5f1fc85c1a8924dbcaf5e0586df8aceb09c9cc2",
"sha256:9f8c9fdd15a55d9465e590a402f42082705d66b05afc3ffd2d2eb3c6ba919560",
"sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70",
"sha256:a373a400f3e9bac95ba2a06372c4fd1412a7cee53c37fc6c05f829bf672b8769",
"sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1",
"sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6",
"sha256:b1f09b6821406ea1f94053f346f28f8215e293344209129a9c0fcc3578598d7b",
"sha256:b2ac41acfc8d965fb0c464eb8f44995770239668956dc4cdf502d1b1ffe0d747",
"sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078",
"sha256:b50eab9994d64f4a823ff99a0ed28a6903224ddbe7fef56a6dd865eec9243440",
"sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f",
"sha256:c0b0e5e1b5d9f3586601048dd68f392dc0cc99a59bb5faf18aab057ce00d00b2",
"sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d",
"sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc",
"sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a",
"sha256:dd5ec3aa6ae6e4d5b5de9357d2133c07be1aff6405b136dad753a16afb6717dd",
"sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9",
"sha256:ff8e80c4c4932c10493ff97028decfdb622de69cae87e0f127a7ebe32b4069c6"
"sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3",
"sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884",
"sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74",
"sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d",
"sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc",
"sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca",
"sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d",
"sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf",
"sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846",
"sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306",
"sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221",
"sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5",
"sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89",
"sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55",
"sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72",
"sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea",
"sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8",
"sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577",
"sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df",
"sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4",
"sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d",
"sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34",
"sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4",
"sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24",
"sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6",
"sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965",
"sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35",
"sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b",
"sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab",
"sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22",
"sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4",
"sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204",
"sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855",
"sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d",
"sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab",
"sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69",
"sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693",
"sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e",
"sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8",
"sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0",
"sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45",
"sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab",
"sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1",
"sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d",
"sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda",
"sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b",
"sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18",
"sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac",
"sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
"version": "==2.0.41"
"version": "==2.0.23"
},
"tenacity": {
"hashes": [
"sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb",
"sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"
"sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a",
"sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==9.1.2"
"version": "==8.2.3"
},
"typing-extensions": {
"hashes": [
"sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4",
"sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"
"sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0",
"sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
],
"markers": "python_version >= '3.9'",
"version": "==4.14.0"
"markers": "python_version >= '3.8'",
"version": "==4.8.0"
}
},
"develop": {
"autopep8": {
"hashes": [
"sha256:8d6c87eba648fdcfc83e29b788910b8643171c395d9c4bcf115ece035b9c9dda",
"sha256:a203fe0fcad7939987422140ab17a930f684763bf7335bdb6709991dd7ef6c2d"
"sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb",
"sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==2.3.1"
"version": "==2.0.4"
},
"flake8": {
"hashes": [
"sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38",
"sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"
"sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23",
"sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"
],
"index": "pypi",
"markers": "python_full_version >= '3.8.1'",
"version": "==7.1.1"
"version": "==6.1.0"
},
"mccabe": {
"hashes": [
@ -136,27 +186,27 @@
},
"pycodestyle": {
"hashes": [
"sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3",
"sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"
"sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
"sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
],
"markers": "python_version >= '3.8'",
"version": "==2.12.1"
"version": "==2.11.1"
},
"pyflakes": {
"hashes": [
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
"sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774",
"sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"
],
"markers": "python_version >= '3.8'",
"version": "==3.2.0"
"version": "==3.1.0"
},
"tomli": {
"hashes": [
"sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
"sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"markers": "python_version < '3.11'",
"version": "==2.0.2"
"version": "==2.0.1"
}
}
}

View File

@ -1,4 +1,4 @@
FROM python:3.9
FROM python:3.9-bullseye
ENV TZ="Asia/Tokyo"
@ -11,8 +11,8 @@ RUN apt update && apt install -y less vim curl wget gzip unzip sudo lsb-release
# mysqlをインストール
RUN \
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb && \
dpkg -i mysql-apt-config_0.8.29-1_all.deb < mysql_dpkg_selection.txt && \
wget https://dev.mysql.com/get/mysql-apt-config_0.8.25-1_all.deb && \
dpkg -i mysql-apt-config_0.8.25-1_all.deb < mysql_dpkg_selection.txt && \
apt update && \
apt install -y mysql-client

View File

@ -19,19 +19,19 @@
"develop": {
"autopep8": {
"hashes": [
"sha256:1fa8964e4618929488f4ec36795c7ff12924a68b8bf01366c094fc52f770b6e7",
"sha256:2bb76888c5edbcafe6aabab3c47ba534f5a2c2d245c2eddced4a30c4b4946357"
"sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb",
"sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"
],
"index": "pypi",
"version": "==2.1.0"
"version": "==2.0.4"
},
"flake8": {
"hashes": [
"sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132",
"sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"
"sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23",
"sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"
],
"index": "pypi",
"version": "==7.0.0"
"version": "==6.1.0"
},
"mccabe": {
"hashes": [
@ -51,11 +51,11 @@
},
"pyflakes": {
"hashes": [
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
"sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774",
"sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"
],
"markers": "python_version >= '3.8'",
"version": "==3.2.0"
"version": "==3.1.0"
},
"tomli": {
"hashes": [

View File

@ -26,7 +26,6 @@ openpyxl = "*"
xlrd = "*"
sqlalchemy = "==2.*"
mojimoji = "*"
numpy = "==2.0.*"
[dev-packages]
autopep8 = "*"

File diff suppressed because it is too large Load Diff

View File

@ -84,8 +84,6 @@
│   ├── exception_handler.py -- FastAPI内部でエラー発生時のハンドリング
│   └── exceptions.py -- カスタム例外クラス
├── main.py -- APサーバーのエントリーポイント。ここでルーターやハンドラーの登録を行う
├── middleware -- ミドルウェアの設定
│ └── middleware.py
├── model -- モデル層(MVCのM)
│   ├── db -- リポジトリから返されるDBレコードのモデル
│   │   ├── base_db_model.py
@ -197,39 +195,3 @@
- コントローラーのrouter変数が、`router.route_class = Authenticate`となっている場合、以下の動きをする
- リクエスト到達時にセッションの有無をチェックする
- レスポンス時、クッキーにセッションキーを登録する
## HTMLで読み込んでいるスクリプトのSRIハッシュ値を生成・設定する方法
### サブリソース完全性 (Subresource Integrity, SRI) とは
CDN などから取得したリソースが意図せず改ざんされていないかをブラウザーが検証するセキュリティ機能です。 SRI を利用する際には、取得したリソースのハッシュ値と一致すべきハッシュ値を指定します。
詳細:<https://developer.mozilla.org/ja/docs/Web/Security/Subresource_Integrity>
実消化&アルトマークのWebアプリケーションでは、複数の外部スクリプトを読み込んで動作しているため、読み込むスクリプトを変更した場合は、
タグの属性値`integrity`に設定されているスクリプトのハッシュ値を更新する必要がある。
### SRI ハッシュ値の生成方法(サーバー内のスクリプトについて)
- サーバー内に保管されているスクリプトを更新した場合、Linux環境WSL2でも可で、以下のコマンドを実行し、ハッシュ値を生成する
```bash
cat <更新したスクリプトファイル名> | openssl dgst -sha384 -binary | openssl base64 -A
```
参考:<https://developer.mozilla.org/ja/docs/Web/Security/Subresource_Integrity#sri_%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB>
### SRI ハッシュ値の生成方法(外部サイトから読み込んでいるスクリプトについて)
- 外部サイトから読み込んでいるスクリプトを更新した場合、下記のMDNオンラインツールでハッシュ値を生成する
- [SRI Hash Generator](https://www.srihash.org/)
### SRI ハッシュ値の設定方法
- 更新したスクリプトを読み込んでいる箇所の`integrity`属性値を、生成したハッシュ値に置き換える
- 以下は設定のサンプル
```bash
<script src="https://リンク/スクリプト.js" integrity="sha384-生成したハッシュ" crossorigin="anonymous"></script>
```

View File

@ -79,11 +79,11 @@ def search_bio_data(
'data': data,
'count': bio_sales_lot_count
})
# クッキーも書き換え
json_response.set_cookie(
key='session',
value=session.session_key,
max_age=environment.SESSION_EXPIRE_MINUTE * 60, # cookieの有効期限は秒数指定なので、60秒をかける
secure=True,
httponly=True
)
@ -153,10 +153,10 @@ async def download_bio_data(
'status': 'ok',
'download_url': download_file_url
})
json_response.set_cookie(
key='session',
value=session.session_key,
max_age=environment.SESSION_EXPIRE_MINUTE * 60, # cookieの有効期限は秒数指定なので、60秒をかける
secure=True,
httponly=True
)

View File

@ -70,22 +70,11 @@ def login(
jwt_token = login_service.login(request.username, request.password)
except NotAuthorizeException as e:
logger.info(f'ログイン失敗:{e}')
# ログイン失敗回数をカウント
login_service.increase_login_failed_count(request.username)
# ログイン失敗回数を超過した場合はメッセージを変える
if login_service.is_login_failed_limit_exceeded(request.username):
login_service.on_login_fail_limit_exceeded(request.username)
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED)
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_ERROR)
except JWTTokenVerifyException as e:
logger.info(f'ログイン失敗:{e}')
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
# ログイン成功問わず、DBのログイン失敗回数が10回以上あれば、ログアウト画面にリダイレクトする
if login_service.is_login_failed_limit_exceeded(request.username):
logger.info(f'ログイン失敗回数が10回以上: {request.username}')
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=constants.LOGOUT_REASON_LOGIN_FAILED_LIMIT_EXCEEDED)
verified_token = jwt_token.verify_token()
# 普通の認証だと、`cognito:username`に入る。
user_id = verified_token.user_id
@ -124,7 +113,6 @@ def login(
status_code=status.HTTP_303_SEE_OTHER,
headers={'session_key': session_key}
)
return response
@ -182,5 +170,4 @@ def sso_authorize(
status_code=status.HTTP_303_SEE_OTHER,
headers={'session_key': session_key}
)
return response

Some files were not shown because too many files have changed in this diff Show More