当前位置: 首页 > news >正文

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现

5.1 数据抽取与转换(ETL)

在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字段映射等处理,以满足后续成本核算和分析的需求。

医院 HIS 系统是医院信息化管理的核心,包含患者诊疗的全方位信息,如患者基本信息、诊疗记录、费用明细等。与 HIS 系统对接时,可采用 API 接口或中间库的方式进行数据抽取。使用 API 接口对接时,需先与 HIS 系统的开发团队沟通,获取详细的接口文档,明确接口的请求方式(如 GET、POST)、请求参数以及返回数据的格式(如 JSON、XML)。以获取患者诊疗信息为例,若 HIS 系统提供的 API 接口为https://his.example.com/api/patient_info,请求方式为 POST,请求参数为患者的住院号inpatient_no,则在 PostgreSQL 中可使用http_request函数(需安装相关扩展,如http_post)来发送请求,示例代码如下:

-- 安装http_post扩展(若未安装)CREATE EXTENSION IF NOT EXISTS http_post;-- 发送POST请求获取患者诊疗信息SELECT http_post('https://his.example.com/api/patient_info',    '{"inpatient_no": "20230101001"}',    'Content-Type: application/json');

上述代码通过http_post函数向 HIS 系统的 API 接口发送 POST 请求,传递患者住院号信息,接口返回的患者诊疗信息可进一步处理和存储到 PostgreSQL 数据库中。

采用中间库方式对接时,HIS 系统将数据定期同步到中间库(如 MySQL 数据库),PostgreSQL 再从中间库中抽取数据。可以使用dblink扩展来实现跨数据库连接和数据抽取。假设中间库为 MySQL,已安装mysql_fdw扩展并配置好连接参数,示例代码如下:

-- 安装mysql_fdw扩展(若未安装)CREATE EXTENSION IF NOT EXISTS mysql_fdw;-- 创建外部服务器CREATE SERVER his_mysql_server    FOREIGN DATA WRAPPER mysql_fdw    OPTIONS (host '192.168.1.100', port '3306', dbname 'his_database');-- 创建用户映射CREATE USER MAPPING FOR current_user    SERVER his_mysql_server    OPTIONS (username 'his_user', password 'his_password');-- 导入中间库中的患者诊疗信息表IMPORT FOREIGN SCHEMA his_schema    LIMIT TO (patient_info)    FROM SERVER his_mysql_server INTO public;

上述代码通过mysql_fdw扩展创建了与 MySQL 中间库的连接,导入了中间库中的患者诊疗信息表到 PostgreSQL 数据库中,以便后续进行数据处理。

从 HIS 系统抽取的数据往往需要进行格式转换和字段映射,以符合成本管理系统的数据模型。数据格式转换方面,日期格式可能在 HIS 系统中以不同的格式存储,如YYYY-MM-DDMM/DD/YYYY等,而成本管理系统要求统一的日期格式。在 PostgreSQL 中,可使用to_date函数进行日期格式转换,示例代码如下:

-- 将HIS系统中格式为MM/DD/YYYY的日期转换为YYYY-MM-DD格式UPDATE patient_infoSET admission_date = to_date(his_admission_date, 'MM/DD/YYYY')WHERE his_admission_date ~ '^\d{2}/\d{2}/\d{4}$';

字段映射是将 HIS 系统中的字段对应到成本管理系统中的字段。HIS 系统中的患者姓名字段可能为patient_name,而成本管理系统中为name,则可通过UPDATE语句进行字段映射,示例代码如下:

-- 字段映射,将HIS系统中的patient_name映射到成本管理系统中的nameUPDATE patient_infoSET name = his_patient_name;

在实际应用中,可能还需要处理复杂的数据结构,如 HIS 系统中可能将患者的多个诊断信息存储在一个字段中,以逗号分隔,而成本管理系统要求将每个诊断信息存储在单独的字段或数组中。可使用string_to_array函数将逗号分隔的诊断信息拆分为数组,示例代码如下:

-- 将HIS系统中逗号分隔的诊断信息拆分为数组UPDATE patient_infoSET diagnosis_array = string_to_array(his_diagnoses, ',');

通过以上数据抽取与转换的编程实现,能够将医院 HIS 系统中的原始数据转化为符合成本管理系统要求的数据格式和结构,为后续的成本核算、分析和管理提供准确、可靠的数据基础。

5.2 时间窗口处理与增量抽取

在医院成本管理系统中,数据的持续更新和增长是常态。为了减少系统负载,提高数据处理效率,按医保结算周期(如月度)进行增量抽取数据是一种行之有效的方法。这种方法能够避免每次都对全量数据进行处理,仅抽取自上次抽取时间点以来发生变化的数据,从而显著降低数据传输和处理的工作量。

在 PostgreSQL 中,实现时间窗口处理和增量抽取可以借助数据库的时间戳字段和相关的查询语句。假设患者诊疗信息表PatientInfo中有一个UpdateTime字段,记录了每条记录的最后更新时间。要实现每月的增量抽取,可以使用以下步骤和代码示例:

首先,确定时间窗口。以月度为例,获取当前月份的起始时间和结束时间。在 PostgreSQL 中,可以使用date_trunc函数和generate_series函数来生成时间窗口。获取当前月份的起始时间和结束时间的代码如下:

-- 获取当前月份的起始时间SELECT date_trunc('month', current_date) INTO start_date;-- 获取当前月份的结束时间SELECT (date_trunc('month', current_date) + INTERVAL '1 month - 1 day') INTO end_date;

上述代码中,date_trunc('month', current_date)函数将当前日期截断到月份,得到当前月份的起始时间,存储在start_date变量中。(date_trunc('month', current_date) + INTERVAL '1 month - 1 day')则是在当前月份起始时间的基础上加上 1 个月再减去 1 天,得到当前月份的结束时间,存储在end_date变量中。

接下来,根据时间窗口进行增量抽取。使用WHERE子句结合UpdateTime字段来筛选出在时间窗口内更新的记录。从PatientInfo表中抽取当前月份更新的患者诊疗信息的代码如下:

-- 从PatientInfo表中抽取当前月份更新的记录SELECT *FROM PatientInfoWHERE UpdateTime BETWEEN start_date AND end_date;

上述代码通过BETWEEN运算符,筛选出UpdateTime字段在start_dateend_date之间的记录,即当前月份更新的患者诊疗信息。

在实际应用中,还可以结合INSERT INTO...SELECT语句,将增量抽取的数据插入到另一个表中,用于后续的处理和分析。将当前月份更新的患者诊疗信息插入到MonthlyPatientInfo表中的代码如下:

-- 将当前月份更新的记录插入到MonthlyPatientInfo表中INSERT INTO MonthlyPatientInfoSELECT *FROM PatientInfoWHERE UpdateTime BETWEEN start_date AND end_date;

上述代码将从PatientInfo表中筛选出的当前月份更新的记录插入到MonthlyPatientInfo表中,方便对每月的增量数据进行单独处理和分析。

为了确保每次增量抽取的准确性和连续性,可以记录上次抽取的时间点。在每次抽取完成后,更新记录的时间点,以便下次抽取时能够准确获取自上次抽取以来的增量数据。可以使用一个单独的表来记录抽取时间点,假设该表名为ETLTimeStamp,包含TableName(表名)和LastExtractTime(上次抽取时间)字段。更新和获取抽取时间点的代码如下:

-- 更新ETLTimeStamp表中PatientInfo表的上次抽取时间为当前月份的结束时间UPDATE ETLTimeStampSET LastExtractTime = end_dateWHERE TableName = 'PatientInfo';-- 从ETLTimeStamp表中获取PatientInfo表的上次抽取时间SELECT LastExtractTimeFROM ETLTimeStampWHERE TableName = 'PatientInfo';

上述代码中,第一条UPDATE语句将ETLTimeStamp表中PatientInfo表的LastExtractTime更新为当前月份的结束时间,以便下次抽取时能够准确获取自上次抽取以来的增量数据。第二条SELECT语句则是从ETLTimeStamp表中获取PatientInfo

相关文章:

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...

打造本地音乐库

文章目录 存储介质硬盘(NAS)媒体播放器(可视MP3、MP4)实体介质(CD光盘、黑胶片)注意事项为什么不使用在线音乐(App)和网盘打造一套HiFi系统的成本非常高 获取音乐正版音乐途径免费音…...

【2024 - 年终总结】叶子增长,期待花开

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言论博客创作保持2024的记录清单博客科研开源工作生活 总结与展望互动致谢参考 前言…...

python 统计相同像素值个数

目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...

蓝卓“1+2+N”智慧工厂架构,让工业智能更简单

面对复杂的工业环境、海量的数据以及多样化的业务需求,如何实现智能化转型,让工业智能触手可及,成为了众多企业面临的难题。蓝卓以创新精神为引领,推出了“12N”智慧工厂架构,旨在简化工业智能的实现路径,让…...

12、MySQL锁相关知识

目录 1、全局锁和表锁使用场景 2、行锁的意义 3、为什么说间隙锁解决了快照的幻读? 4、RR隔离级别产生幻读的场景 5、详解元数据锁(MDL)作用以及如何减少元数据锁 6、出现死锁场景 7、查看MySQL锁情况 8、自增锁 1、全局锁和表锁使用场景 全局锁 备份数据库:当需要…...

某大厂一面:HashMap 的put方法具体做了哪些操作

HashMap 的 put 方法是一个常用的操作,它将一个键值对插入到哈希表中。下面是 put 方法执行的详细流程,包括各个步骤的解释,并附上相应的代码片段。 1. 检查键是否为 null 如果传入的键为 null,HashMap 会特别处理这种情况&…...

WPF基础 | 深入 WPF 事件机制:路由事件与自定义事件处理

WPF基础 | 深入 WPF 事件机制:路由事件与自定义事件处理 一、前言二、WPF 事件基础概念2.1 事件的定义与本质2.2 常见的 WPF 事件类型 三、路由事件3.1 路由事件的概念与原理3.2 路由事件的三个阶段3.3 路由事件的标识与注册3.4 常见的路由事件示例 四、自定义事件处…...

精选100+套HTML可视化大屏模板源码素材

大屏数据可视化以大屏为主要展示载体的数据可视化设计。 “大面积、炫酷动效、丰富色彩”,大屏易在观感上给人留下震撼印象,便于营造某些独特氛围、打造仪式感。 原本看不见的数据可视化后,便能调动人的情绪、引发人的共鸣。 使用方法&…...

如何使用Python爬虫按关键字搜索AliExpress商品:代码示例与实践指南

在电商领域,能够按关键字搜索并获取商品信息对于市场分析、选品和竞品研究至关重要。AliExpress(速卖通)作为全球知名的跨境电商平台,提供了丰富的商品数据。以下将详细介绍如何使用Python爬虫按关键字搜索AliExpress商品&#xf…...

No.36 学习 | Python 函数:从基础到实战

最近我在学 Python 编程,今天可算是狠狠钻研了一把 Python 里的函数,感觉脑袋里的知识又充实了不少,赶紧来记一记。 一、Python函数基础概念 (一)pass语句:代码块的“占位符” 在编写代码时,有…...

Unity常用特性(Attribute)用法

一.UnityEngine命名空间 1.[Header(string)] inspector面板上给显示的字段上加一个描述 通常情况下,用于在 Inspector 窗口中创建字段的逻辑分组 public class AttributeTest : MonoBehaviour {[Header("public_field_num")]public int num; }2.[Tool…...

VUE对接deepseekAPI调用

1.先去开放平台注册账号申请api key。开放平台:https://platform.deepseek.com/api_keys 2.你的项目需要有发送请求的axios或者自己写。 npm install axios # 或 yarn add axios 3.创建 API 调用函数 在 Vue 项目中,通常会将 API 调用的逻辑封装到一个…...

【Postman 接口测试】接口测试基础知识

在软件开发与测试领域,接口测试是保障软件质量的关键环节之一,而 Postman 作为一款功能强大且广泛使用的接口测试工具,能帮助我们高效地进行接口测试工作。下面,我们将详细介绍接口测试的基础知识,包括接口的认识、接口…...

谷粒商城——商品服务-三级分类

1.商品服务-三级分类 1.1三级分类介绍 1.2查询三级分类查询-递归树型结构数据获取 1.2.1导入数据pms_catelog.sql到数据表pms_category 1.2.2一次性查出所有分类及子分类 1.2.2.1修改CategoryController.java /*** 查出所有分类以及子分类,以树形结构组装起来*/R…...

视觉语言模型 (VLMs):跨模态智能的探索

文章目录 一. VLMs 的重要性与挑战:连接视觉与语言的桥梁 🌉二. VLMs 的核心训练范式:四种主流策略 🗺️1. 对比训练 (Contrastive Training):拉近正例,推远负例 ⚖️2. 掩码方法 (Masking):重构…...

HarmonyOS NEXT:华为分享-碰一碰开发分享

随着科技的不断进步,智能手机和智能设备之间的互联互通变得越来越重要。华为作为科技行业的领军企业,一直致力于为用户提供更加便捷、高效的使用体验。HarmonyOS NEXT系统的推出,特别是其中的“碰一碰”功能,为用户带来了前所未有…...

宝塔Linux+docker部署nginx出现403 Forbidden

本文主要讲述了宝塔docker部署nginx出现403 Forbidden的原因,以及成功部署前端的方法步骤。 目录 1、问题描述2、问题检测2.1 检测监听端口是否异常2.2 检测Docker容器是否异常2.2.1 打开宝塔Linux的软件商店,找到Docker管理器,查看前端容器是…...

软件测试丨Redis 的数据同步策略以及数据一致性保证

Redis 以其键值存储的方式,为开发者提供了数据快速存取的能力。它不仅支持丰富的数据结构,如字符串、哈希、列表、集合等,而且提供了高效的数据同步与一致性保障机制。正因为如此,Redis 被广泛应用于缓存、消息队列、实时数据分析…...

C语言-运算符

1. 按位与运算符(&) 按位与运算符对两个整数的每一位执行“与”操作。只有当两个相应位都为 1 时,结果才为 1 ;否则为 0。 // 示例 int a 5; // 二进制: 0101 int b 3; // 二进制: 0011 int result a & b; …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...