Ambulant-Solutions/Response-Connect
GitHub: Ambulant-Solutions/Response-Connect
一款专为救护车和应急响应组织设计的开源运营管理平台,旨在将人员、调度、合规、车队与治理整合到统一的分层架构中。
Stars: 0 | Forks: 0
# Response Connect
Response Connect 是一个开源的运营管理平台,专为救护车服务、医疗机构、应急响应组织和其他公共安全团队设计。
它旨在将人员管理、运营控制、合规、文件、事件、患者转运、车队、设备和组织治理整合到一个连贯的系统中。
该项目的构建围绕着一个简单的原则:
Response Connect 没有将每个功能实现为一个孤立的模块,而是为文件、目录、参考数据、权限、生命周期管理、运营事件和审计历史提供共享的平台能力。
## 项目状态
Response Connect 正在积极开发中,尚未准备好用于生产环境。
当前的开发阶段是:
```
Platform Foundation and Consolidation
```
目前已实现的基础包括:
* Flask 应用和模块化蓝图结构;
* PostgreSQL 持久化和 Alembic 迁移;
* 基于 Docker 的部署;
* Redis、Celery worker 和 Celery Beat 服务;
* 使用 MinIO 的 S3 兼容文件存储;
* 不可变的受管文件记录;
* Flask 流式文件下载;
* 身份验证、角色和权限;
* 组织和个人应用区域;
* 目录框架原语;
* 文件处理策略;
* 参考数据注册和同步;
* 结构化平台日志;
* 架构手册和交付路线图。
计划中的主要基础能力还包括:
* Event Journal;
* 运营和审计日志;
* 生命周期和分配行为;
* Desk 层级和 Desk 范围的访问控制;
* File Types 和文件处理管道;
* 通知;
* 搜索;
* 报告。
当前的实现路线图维护在 [docs/ROADMAP.md](docs/ROADMAP.md) 中。
## Response Connect 旨在支持的功能
Response Connect 的设计旨在支持多个相互关联的运营领域。
### 人员与合规
计划中的功能包括:
* 员工记录;
* 职位;
* 临床职级;
* 资质;
* 能力;
* 强制性培训;
* 证据和证书;
* 专业注册;
* 过期和续期;
* 部署合规。
### 运营控制
运营工作将通过分层级的 **Desks** 进行组织。
Desk 代表一个工作空间或控制边界,而不一定是一个物理的办公桌或地点。
示例包括:
```
Company Operations
├── Event Medical
│ ├── Glastonbury Festival 2026
│ └── Exeter Christmas Market
├── Patient Transport
│ ├── Devon
│ ├── Cornwall
│ └── Somerset
└── Ambulance Operations
├── North Area
└── South Area
```
Desk 可以提供对以下内容的访问:
* CAD 和调度功能;
* 事件;
* 患者行程;
* 资源;
* 车辆;
* 员工签到;
* 任务;
* 通讯;
* 仪表板;
* 运营日志。
### 事件和审计历史
计划使用共享的 Event Journal 作为以下功能的基础:
* 全公司运营日志;
* Desk 日志;
* 事件和事故时间线;
* 轮班日志;
* 资源历史;
* 管理审计记录;
* 安全事件;
* 系统处理事件。
Event Journal 不会取代正常的领域模型。领域表将保持作为当前状态的来源,而日志将保留不可变的历史记录。
### 文件和文档
Files 平台旨在提供:
* S3 兼容存储;
* 不可变文件对象;
* 生成的 object key;
* SHA-256 完整性哈希;
* 上传验证;
* 流式下载;
* 软删除;
* 恢复;
* 永久清除;
* 文件处理策略;
* 未来的恶意软件扫描;
* 预览和缩略图;
* 文档版本控制;
* 证据附件。
业务模块将使用 Files 平台,而不是直接访问 S3 或 MinIO。
### 运营资源
未来的运营模块预计将管理:
* 人员;
* 车辆;
* 医疗团队;
* 设备;
* 治疗中心;
* 无线电;
* 专职响应单位。
底层领域记录将保持独立,而共享的运营视图可以暴露公共属性,例如可用性、位置、状态、能力和当前 Desk。
### 治理和组织知识
计划中的治理能力包括:
* 受控策略和程序;
* 文档审查和批准;
* 版本历史;
* 确认回执;
* 内部审计;
* 风险;
* 发现;
* 行动;
* 投诉和事件;
* 证据;
* 治理报告。
## 架构
Response Connect 采用分层设计:
```
Business and operational modules
↓
Shared organisational domains
↓
Platform capabilities
↓
Infrastructure providers
```
依赖关系通常应自上而下流动。
平台能力不能依赖于特定业务的模块。
### 平台能力
主要平台能力预计包括:
* 身份验证;
* 权限和授权;
* 目录;
* 参考数据;
* 文件和内容;
* 平台日志;
* Event Journal;
* 生命周期;
* 通知;
* 搜索;
* 报告。
### 共享组织领域
共享领域包括:
* 组织;
* 人员;
* 位置;
* Desks;
* 车辆;
* 设备;
* 资源。
### 业务模块
业务模块组合了平台和共享领域的服务。
示例包括:
* 人员;
* 能力;
* 事件医疗;
* 患者转运;
* 事件和 CAD;
* 车队;
* 设备和库存;
* 知识库和治理。
## 核心架构原则
Response Connect 遵循几项项目范围内的规则。
### 平台优先于产品
可重用的能力应该在平台层一次性构建,而不是在各个单独的模块中重复创建。
### 单一所有权
每个概念只有一个所属模块。
其他模块可以通过其公共服务引用该概念,但不能重新定义其生命周期或业务规则。
### 服务层工作流
路由处理 HTTP 相关问题。
服务负责:
* 业务工作流;
* 验证;
* 事务;
* 生命周期转换;
* 事件创建;
* 调用其他平台能力。
### 稳定的机器标识符
应用逻辑使用稳定的代码而不是可编辑的显示名称。
示例包括:
```
files:upload
pdf_document
mandatory_training
vehicle.arrived_on_scene
```
### 不可变历史
存储的文件内容、审计历史、事件历史和文档版本应该被扩展,而不是被静默重写。
### 自托管优先
该平台必须保持能够由安装所有者控制的底层设施上使用 Docker 进行实际部署。
可以支持外部云服务,但不能成为强制性要求。
### 渐进式增强
应用程序是服务器端渲染的。
HTMX 增强了常规的 HTML 工作流,而不是用单独的客户端应用程序替代服务器。
## 技术栈
当前的技术栈包括:
* Python;
* Flask;
* Flask-SQLAlchemy;
* PostgreSQL;
* Alembic 和 Flask-Migrate;
* HTMX;
* Jinja 模板;
* Redis;
* Celery;
* MinIO 或其他 S3 兼容的对象存储;
* Gunicorn;
* Docker Compose;
* 使用 Tabler 图标的 Iconify;
* Pytest。
## 部署模型
Response Connect 目前假定:
* 每次安装对应一个组织;
* 每次安装对应一个独立的数据库;
* 每次安装对应一个独立的对象存储配置;
* 没有共享的多租户应用数据库。
组织可以自托管应用程序,也可以在专用的托管虚拟机中运行它。
此模型旨在减少:
* 数据隔离风险;
* 跨租户泄漏;
* 运营复杂性;
* 难以进行的特定于租户的迁移。
## Docker 服务
标准的 Compose 部署目前包括:
| 服务 | 用途 |
| -------- | ----------------------------------------- |
| `web` | 通过 Gunicorn 提供的 Flask 应用 |
| `worker` | Celery 后台任务 worker |
| `beat` | Celery 定时任务服务 |
| `db` | PostgreSQL 数据库 |
| `redis` | Celery broker 和结果 backend |
| `minio` | S3 兼容的对象存储 |
Web 应用程序暴露在:
```
http://localhost:8000
```
本地 MinIO 管理控制台暴露在:
```
http://localhost:9001
```
MinIO 控制台默认绑定到本地机器。
## 快速开始
### 1. 克隆仓库
```
git clone https://github.com/Ambulant-Solutions/Response-Connect.git
cd Response-Connect
```
### 2. 创建环境文件
```
cp .env.example .env
```
在启动应用程序之前,请查看 `.env`。
至少,将:
```
SECRET_KEY
POSTGRES_PASSWORD
S3_SECRET_KEY
```
替换为强随机值。
在需要发送邮件之前,电子邮件设置可以保持未配置状态。
### 3. 构建并启动容器
```
docker compose up -d --build
```
检查服务:
```
docker compose ps
```
### 4. 应用数据库迁移
```
docker compose exec web flask db upgrade
```
### 5. 初始化对象存储
```
docker compose exec web flask files-init
```
这将确保已配置的 S3 bucket 存在。
### 6. 同步系统参考数据
列出已注册的数据集:
```
docker compose exec web flask reference-data list
```
预览更改:
```
docker compose exec web flask reference-data sync --dry-run
```
应用定义:
```
docker compose exec web flask reference-data sync
```
参考数据同步设计为幂等的。
它会创建缺失的系统记录并更新系统拥有的字段,同时保留本地拥有的显示自定义。
### 7. 创建初始管理员
```
docker compose exec web flask create-admin \
--email admin@example.com \
--password 'replace-with-a-strong-password' \
--first-name System \
--last-name Administrator
```
### 8. 打开应用程序
```
http://localhost:8000
```
## 开发模式
本地工作可使用开发覆盖配置:
```
docker compose \
-f docker-compose.yml \
-f docker-compose.dev.yml \
up -d --build
```
开发配置绑定挂载源代码仓库并启用自动重新加载行为。
可以使用以下命令查看容器日志:
```
docker compose logs -f web
```
Worker 日志:
```
docker compose logs -f worker
```
定时任务日志:
```
docker compose logs -f beat
```
## 数据库迁移
Response Connect 使用 Flask-Migrate 和 Alembic。
更改 SQLAlchemy 模型后,生成迁移:
```
docker compose exec web flask db migrate \
-m "Describe the schema change"
```
在应用之前,请仔细检查生成的迁移。
应用迁移:
```
docker compose exec web flask db upgrade
```
显示当前版本:
```
docker compose exec web flask db current
```
迁移文件必须提交到仓库。
参考数据和数据库迁移服务于不同的目的:
* 迁移更改数据库结构或转换存储的数据;
* 参考数据同步管理由稳定代码标识的系统提供记录。
## 测试
使用以下命令运行完整的测试套件:
```
docker compose exec web python -m pytest
```
运行特定目录:
```
docker compose exec web python -m pytest tests/files
```
运行单个测试文件:
```
docker compose exec web python -m pytest \
tests/test_job_position_routes.py
```
请使用 `python -m pytest` 而不是直接调用 `pytest` 可执行文件,以便测试使用与应用程序相同的解释器和导入路径。
当前的测试覆盖率包括:
* 文件管理工作流;
* 文件处理策略;
* 目录验证器;
* 参考数据行为;
* 结构化平台日志;
* 组织设置路由;
* 人员设置(例如职位)。
专用的 PostgreSQL 测试数据库和更广泛的集成测试仍在路线图中。
## 参考数据命令
列出已注册的数据集:
```
docker compose exec web flask reference-data list
```
同步所有数据集:
```
docker compose exec web flask reference-data sync
```
同步单个数据集:
```
docker compose exec web flask reference-data sync \
--dataset files.processing_policies
```
预览单个数据集:
```
docker compose exec web flask reference-data sync \
--dataset files.processing_policies \
--dry-run
```
当前的文件处理策略包括:
```
generic_binary
pdf_document
standard_image
profile_photo
archive
```
## 文件存储
本地部署使用 MinIO 作为 S3 兼容提供商。
该架构允许以后配置兼容的外部 S3 服务,而无需更改业务模块。
受管上传使用:
* 生成的 object key;
* 不可变二进制对象;
* SHA-256 哈希;
* 持久化的文件元数据;
* 服务控制的上传和下载工作流。
下载通过 Flask 流式传输,而不是直接暴露对象存储的 URL。
这简化了部署,并让应用程序授权机制控制每一次下载。
## 应用程序结构
当前的仓库结构包括:
```
app/
├── blueprints/
│ ├── api/
│ ├── auth/
│ ├── external/
│ ├── job_application/
│ ├── jobs/
│ ├── main/
│ ├── org/
│ └── personal/
├── catalogues/
├── files/
├── reference_data/
├── templates/
├── static/
├── config.py
├── extensions.py
└── platform_logging.py
docs/
├── architecture/
└── ROADMAP.md
migrations/
tests/
docker-compose.yml
docker-compose.dev.yml
Dockerfile
wsgi.py
```
### `app/blueprints/`
包含当前面向用户的应用区域和业务路由。
### `app/catalogues/`
包含共享目录原语、验证、异常和基础服务行为。
### `app/files/`
包含 S3 提供商、文件管理器、不可变文件模型、处理策略、命令和参考数据集成。
### `app/reference_data/`
包含参考数据定义、注册表行为、同步契约和 CLI 支持。
### `docs/architecture/`
包含架构手册和共享项目约定。
### `docs/ROADMAP.md`
包含整合的、有序的交付计划。
在开始重要工作之前,应对其进行审查和更新。
## 当前面向用户的区域
该应用程序目前包含以下基础:
* 身份验证;
* 个人员工视图;
* 组织管理;
* 组织设置;
* 人员记录;
* 位置和位置类型;
* 角色和权限;
* 人员设置;
* 职位;
* 强制性培训课程定义;
* 招聘和工作申请;
* 面向外部的表单;
* 文件管理。
某些区域是计划功能的结构性占位符,尚未完成。
## 计划的运营架构
下一个主要基础将是 Event Journal。
它将提供一个不可变的事件存储,可以支持:
* 运营活动;
* 管理审计历史;
* 系统事件;
* 安全事件;
* Desk 时间线;
* 记录时间线。
继 Event Journal 之后,计划顺序为:
1. 生命周期行为;
2. Desk 层级和访问控制;
3. 运营日志和审计日志投影;
4. File Types 和上传策略集成;
5. 临床职级;
6. 能力和强制性培训;
7. 运营模块,如事件控制、患者转运和 CAD。
权威顺序维护在 [docs/ROADMAP.md](docs/ROADMAP.md) 中。
## 架构文档
从以下内容开始:
* [架构指南](docs/architecture/README.md)
* [平台原则](docs/architecture/01-platform-principles.md)
* [项目结构和模块边界](docs/architecture/02-project-structure.md)
* [模块约定](docs/architecture/03-module-conventions.md)
* [服务层约定](docs/architecture/04-service-layer-conventions.md)
* [核心概念和共享词汇](docs/architecture/05-core-concepts.md)
* [目录框架]( )
* [平台概览和运营架构](docs/architecture/07-platform-overview.md)
* [交付路线图](docs/ROADMAP.md)
## 贡献期望
Response Connect 旨在成为一个对贡献者友好的开源项目。
在完成专门的贡献指南之前,更改应遵循以下原则:
1. 在开始工作之前查看 `docs/ROADMAP.md`。
2. 阅读相关的架构章节。
3. 保留模块所有权。
4. 将业务工作流放在服务中。
5. 为应用控制的身份使用稳定的代码。
6. 使用公共模块接口。
7. 添加或更新测试。
8. 生成并检查迁移。
9. 更新文档。
10. 当工作改变了项目状态或优先级时更新路线图。
不要仅仅为了避免扩展现有平台能力而引入现有平台能力的第二种实现。
## 安全和生产就绪情况
该仓库目前是一个活跃的开发项目。
在生产使用之前,该项目仍需要额外的工作,包括:
* 安全审查;
* 生产配置指南;
* 独立的测试基础设施;
* CI;
* 备份和恢复测试;
* 事件和审计持久化;
* 恶意软件扫描;
* 保留策略控制;
* 健康检查和监控;
* 部署加固;
* 升级测试;
* 用户和管理员文档。
不要将当前的 `main` 分支视为受支持的生产版本。
## 许可证
一旦选择并提交了最终许可文件,项目的开源许可证应记录在此处。
在此之前,公共仓库中源代码的存在不应被视为完整的许可授予。
## 维护者
Response Connect 目前由 Ambulant Solutions 作为一个开源的运营管理平台进行开发。
随着项目的成熟,将记录项目治理、贡献规则、发布流程和支持安排。
标签:Celery, Flask, MinIO, PostgreSQL, 医疗急救, 库, 应急响应, 搜索引擎查询, 测试用例, 版权保护, 运营管理平台, 逆向工具