Install
openclaw skills install csv-documentation-generatorUse when generating computer system validation (CSV) documentation for pharmaceutical and medical device industries, including validation plans, URS, FS, IQ/OQ/PQ documents, and traceability matrices.
openclaw skills install csv-documentation-generatorGenerate Computerized System Validation (CSV) documentation for pharmaceutical and medical device industries. Supports bilingual (Chinese/English) templates and multiple output formats (Word/Excel).
Use this skill when:
| System Type | GAMP Category | Documents |
|---|---|---|
| EDC (Electronic Data Capture) | Category 4/5 | All 12 documents |
| CTMS (Clinical Trial Management) | Category 4 | VP, URS, FS, RA, IQ, OQ, RTM |
| LIMS (Laboratory Information Management) | Category 4/5 | All 12 documents |
| MES (Manufacturing Execution System) | Category 4 | All 12 documents |
| ERP (Enterprise Resource Planning) | Category 4 | VP, URS, RA, IQ, OQ |
| SCADA/DCS | Category 2/3 | VP, URS, IQ, OQ, PQ |
| Custom Software | Category 3/4 | VP, URS, RA, IQ, OQ |
# Navigate to skill directory
cd <SKILL_DIR>/csv-documentation-generator
# Run script - will automatically create virtual environment on first run
python3 scripts/generate.py vp --project "XX系统" --system "EDC v1.0" --output ./output/
# Note: If --category is not specified, interactive GAMP category selection will be prompted
# The script provides bilingual (Chinese/English) guidance based on GAMP 5 Second Edition
# Generate Validation Plan (with category specified)
python3 scripts/generate.py vp --project "XX系统" --system "EDC v1.0" --category 4 --output ./output/
# Generate full validation package
python3 scripts/generate.py all --project "XX系统" --system "MES" --category 4 --output ./validation/
# Navigate to skill directory
cd <SKILL_DIR>/csv-documentation-generator
# Parse source code for requirements (extracts @URS, @TEST, @FS, @TS markers)
python3 scripts/cli.py parse ./src
# For AI agents (non-interactive mode), use --auto-add:
python3 scripts/cli.py parse ./src --auto-add
# Review extracted requirements
cat requirements.json
This skill automatically handles environment setup:
.venv virtual environment in skill directoryThis ensures consistent behavior and avoids dependency conflicts.
If --category is not specified, the script will prompt with bilingual (Chinese/English) guidance:
GAMP 5 (Second Edition) Category Selection:
[1] Infrastructure Software - 基础设施软件
[2] Firmware - 固件
[3] Commercial Off-The-Shelf (COTS) - Non-configured - 商用现货软件 (不可配置)
[4] Configured COTS - 配置型 COTS 软件 (e.g., EDC, CTMS, LIMS, MES)
[5] Custom / Critical Application - 定制/关键应用
AI agents should guide users to select the appropriate category based on GAMP 5 Second Edition principles.
| Command | Description | Output Format |
|---|---|---|
generate.py vp | Validation Plan | .docx |
generate.py urs | User Requirements Specification | .docx |
generate.py fs | Functional Specification | .docx |
generate.py ts | Technical Specification | .docx |
generate.py ra | Risk Assessment (FMEA) | .docx |
generate.py iq | Installation Qualification | .docx |
generate.py oq | Operational Qualification | .docx |
generate.py pq | Performance Qualification | .docx |
generate.py rtm | Traceability Matrix | .xlsx |
generate.py vsr | Validation Summary Report | .docx |
generate.py checklist | Validation Checklist | .xlsx |
generate.py test-case | Test Case Template | .xlsx |
generate.py all | Full validation package | .docx / .xlsx |
| Option | Description | Required |
|---|---|---|
--project | Project name | Yes |
--system | System name and version | Yes |
--category | GAMP category (1-5). If not specified, interactive selection will be prompted with bilingual GAMP 5 guidance. | No (will prompt) |
--bilingual | Enable bilingual mode: 'true' or 'false' (default: true). When true, headers remain bilingual and content follows --language. | No |
--language | Primary language for content: 'zh' (Chinese) or 'en' (English) (default: zh). Used when bilingual=false or for content in bilingual mode. | No |
--verbose / -v | Show detailed progress information (default: simplified output) | No |
--output | Output directory | Yes |
--format | Output format: docx, xlsx, or both (default: both) | No |
All generated documents follow consistent naming and formatting rules:
| Document Type | Format | Example |
|---|---|---|
| Validation Plan | {TYPE}_{PROJECT}.{ext} | VP_XX系统.docx |
| User Requirements | {TYPE}_{PROJECT}.{ext} | URS_XX系统.docx |
| Functional Specification | {TYPE}_{PROJECT}.{ext} | FS_XX系统.docx |
| Traceability Matrix | RTM_{PROJECT}.{ext} | RTM_XX系统.xlsx |
{output_dir}/
├── VP_项目名.docx
├── URS_项目名.docx
├── FS_项目名.docx
├── TS_项目名.docx
├── RA_项目名.docx
├── IQ_项目名.docx
├── OQ_项目名.docx
├── PQ_项目名.docx
├── VSR_项目名.docx
├── RTM_项目名.xlsx
└── CHECKLIST_项目名.xlsx
Fonts:
Colors:
Common variables used in templates:
| Variable | Description | Example |
|---|---|---|
{PROJECT_NAME} | Project name | 临床试验系统 |
{SYSTEM_NAME} | System name | EDC v1.0 |
{SYSTEM_VERSION} | System version | 1.0 |
{GAMP_CATEGORY} | GAMP category | 4 |
{DOC_ID} | Document ID | URS-001 |
{DATE} | Document date | 2024-01-01 |
{AUTHOR} | Document author | 张三 |
{REVIEWER} | Reviewer name | 李四 |
{APPROVER} | Approver name | 王五 |
| Category | Description | Validation Approach |
|---|---|---|
| 1 | Operating System | Legacy |
| 2 | Firmware | Simplified |
| 3 | Commercial-off-the-shelf (COTS) | Risk-based |
| 4 | Configured COTS | Risk-based |
| 5 | Custom/Critical | Full validation |
This skill includes compliance checks for:
21 CFR Part 11: Electronic Records and Signatures
EU Annex 11: Computerised Systems
ALCOA+: Data Integrity
This skill encapsulates the following semantic actions for GxP document generation:
parse_requirements(source_path) → RequirementsDB
│
▼
generate_vp(context) → Document
│ ──────────────────────► generate_urs(context) → Document
│ │
│ ◄── (URS traceability) ──────────────────┤
│ ▼
├────────────────────────────────────► generate_fs(context) → Document
│ │
│ ◄── (FS technical specs) ─────────────────┤
│ ▼
└────────────────────────────────────► generate_ra(context) → Document
│
┌───────────┴───────────┐
▼ ▼
generate_iq_oq_pq(context) generate_rtm(context)
│ │
└───────────┬───────────┘
▼
generate_vsr(context) → Document
| Action | Description | Pre-conditions |
|---|---|---|
parse_requirements() | Parse @URS, @FS, @TEST markers from source code | Source code available |
generate_vp() | Create Validation Plan | Project name, system name, GAMP category |
generate_urs() | Create User Requirements Specification | System context, GxP scope |
generate_fs() | Create Functional Specification | URS requirements linked |
generate_ra() | Create Risk Assessment | URS priorities, GxP scope |
generate_iq_oq_pq() | Create Qualification Protocols | RA risk levels, TS config |
generate_rtm() | Create Traceability Matrix | URS, FS, test cases linked |
generate_vsr() | Create Validation Summary Report | All test results, deviations |
sync_bidirectional() | Sync requirements ↔ templates | Templates and requirements.json exist |
run_compliance_check() | Verify GxP compliance | Requirements and test results |
| Flow | Semantic Meaning |
|---|---|
| VP → URS | Business process analysis defines GxP scope for requirements |
| URS → FS | Functional requirements trace to design specifications |
| URS → RA | Requirement priority determines risk severity |
| RA → Test | Risk level scales testing rigor (IQ/OQ/PQ scope) |
| All → RTM | Complete traceability matrix for regulatory audit |
Critical Thinking Constraints and Content Fill Prompts are defined in prompts.md.
For GAMP 5 M12 Critical Thinking constraints, document generation triggering conditions, and content fill prompt templates, see prompts.md.
Reference materials included in references/ folder:
| File | Description |
|---|---|
gamp-5.md | GAMP 5 quick reference guide |
21cfr-part11.md | 21 CFR Part 11 key requirements |
annex-11.md | EU Annex 11 requirements |
data-integrity.md | ALCOA+ data integrity principles |
Complete fill examples are provided in templates/examples/ directory:
| Example File | Description |
|---|---|
urs-example.md | URS with complete requirement examples |
fs-example.md | FS with traceability examples |
ra-example.md | RA with hierarchical risk examples |
iq-example.md | IQ with qualification check examples |
AI agents SHOULD reference these examples for content style guidance when filling templates.
All templates support Smart Bilingual output controlled by --bilingual and --language flags:
--bilingual | --language | Behavior |
|---|---|---|
true (default) | zh | Headers bilingual, content in Chinese |
true (default) | en | Headers bilingual, content in English |
false | zh | Pure Chinese output |
false | en | Pure English output |
Templates use dual-language format for headers:
## 1. 目的 / Purpose
本文档定义了... / This document defines...
Tables use dual-language headers:
| 中文 | English |
|---|---|
| 验证计划 | Validation Plan |
| 用户需求 | User Requirements |
Content cells use format like 中文 / English:
| 模块 / Module | 描述 / Description |
|---|---|
| 用户管理 / User Management | 系统应... / System should... |
This skill supports GAMP 5 compliant requirements traceability across the entire validation lifecycle.
代码注释 (@URS[module])
↓
requirements.json (需求解析)
↓
URS 模板 (自动同步章节)
↓
FS/TS 文档 (引用需求ID)
↓
测试用例 (关联需求ID)
↓
测试结果 (解析需求ID)
↓
RTM (追溯矩阵自动生成)
When generating code, AI agents MUST include requirement markers for automatic traceability. Use the standardized @REQ format:
# @REQ URS-001 - 系统应支持基于角色的访问控制 (RBAC)
# @REQ URS-002 - 用户密码必须满足复杂度要求(至少8位)
# @FS FS-001
# @TS TS-001
# @TEST[OQ-UM-001] - 验证用户角色分配功能
# @RISK H # High risk module
def assign_role(user_id: str, role: str) -> bool:
'''
@REQ URS-001 - Role-based access control required
@TEST[OQ-UM-001] - Test role assignment
'''
# Implementation...
Standard comment formats:
| Pattern | Example | Description |
|---|---|---|
// @REQ URS-xxx | // @REQ URS-001 - 系统应支持RBAC | Requirement with ID and description |
# @REQ | # @REQ URS-001 - 描述 | Python-style comment |
/* @REQ */ | /* @REQ URS-001 - 描述 */ | Multi-line comment |
// @TEST[type-id] | // @TEST[OQ-UM-001] - 验证 | Test case link |
// @FS | // @FS FS-001 | FS reference |
// @TS | // @TS TS-001 | TS reference |
// @RISK [H/M/L] | // @RISK H | Risk level (High/Medium/Low) |
Risk levels:
H (High): Security, compliance, electronic signature, audit trail relatedM (Medium): Default for most requirementsL (Low): Simple features, documentation, reports| Module ID | 中文名 | English Name | Test Prefix |
|---|---|---|---|
user_mgmt | 用户管理 | User Management | UM |
audit_trail | 审计追踪 | Audit Trail | AT |
data_mgmt | 数据管理 | Data Management | DM |
business_func | 业务功能 | Business Functions | BF |
reporting | 报告功能 | Reporting | RP |
integration | 接口集成 | Integration | INT |
security | 安全 | Security | SEC |
compliance | 合规 | Compliance | CMP |
注意: 章节号(4.X)是动态分配的,基于模板中已有的章节。同步时会自动为新模块分配下一个可用编号。
⛔ This step is NOT automatic. You must manually add these rules to your agent's system prompt (AGENTS.md) if you want @REQ/@TEST annotations to apply across ALL skills.
To enable cross-skill annotation enforcement, add the following to your AGENTS.md or agent system prompt:
Code Annotation Rules (for GxP traceability):
- When writing code that implements requirements, add @REQ markers: # @REQ URS-xxx - description
- When writing test cases, add @TEST markers: # @TEST[OQ-UM-xxx] - description
- Mark high-risk code sections with @RISK H (security, compliance, audit trail related)
- Mark medium-risk code with @RISK M
- Mark low-risk code with @RISK L
Why this is needed: OpenClaw skills only execute when active. There is no mechanism to make instructions persist across skill switches except via the system prompt.
See STANDARDS.md for full documentation and standards/code-annotations.json for the standards file.
Test case IDs follow the format: {IQ|OQ|PQ}-{ModulePrefix}-{Number}
| Type | Example | Description |
|---|---|---|
| IQ | IQ-UM-001 | Installation Qualification test |
| OQ | OQ-UM-001 | Operational Qualification test |
| PQ | PQ-UM-001 | Performance Qualification test |
Before generating documents, use --sync to automatically update templates with new requirements:
# Generate URS and sync requirements to template
python3 scripts/generate.py urs --sync \
--project "临床系统" \
--system "EDC v1.0" \
--category 4 \
--output ./validation/
# Generate full validation package with sync
python3 scripts/generate.py all --sync \
--project "XX系统" \
--system "MES" \
--category 4 \
--output ./validation/
What --sync does:
requirements.json for all requirementsUse --sync-template-to-db to extract requirements from templates and add them to requirements.json:
# Extract requirements from urs.md template to requirements.json
python3 scripts/generate.py urs --sync-template-to-db \
--project "临床系统" \
--system "EDC v1.0" \
--category 4 \
--output ./validation/
What --sync-template-to-db does:
| URS-xxx | description | formatFor interactive step-by-step document generation with confirmation prompts:
python3 scripts/generate.py all --interactive \
--project "临床系统" \
--system "EDC v1.0" \
--category 4 \
--output ./validation/
Interactive workflow:
[1/11] 解析代码注释...
→ 按 Enter 继续,'s' 跳过,'q' 退出:
[2/11] 同步需求到数据库...
→ 按 Enter 继续,'s' 跳过,'q' 退出:
[3/11] 生成 URS...
→ 按 Enter 继续,'s' 跳过,'q' 退出:
✓ ./output/URS_临床系统.docx
...
Options:
Enter - Execute this steps - Skip this stepq - Quit (already generated files are preserved)Run GAMP 5 compliance validation to check requirements coverage and test coverage:
# Run compliance check (text output)
python3 scripts/generate.py check \
--requirements requirements.json \
--test-results test_results.json
# Run compliance check (JSON output for CI/CD)
python3 scripts/generate.py check \
--requirements requirements.json \
--test-results test_results.json \
--output-format json
Compliance checks performed:
Exit codes:
0 - All checks passed1 - Warnings present2 - Errors foundUse --diff-only to skip regeneration when requirements haven't changed:
# Only regenerate RTM if requirements changed
python3 scripts/generate.py rtm --diff-only \
--project "临床系统" \
--system "EDC v1.0" \
--category 4 \
--output ./validation/
How it works:
.requirements.hash in output directoryInstall post-commit hooks to automatically run compliance checks after code commits:
# Install hooks locally (per-project)
./scripts/git-hooks/install.sh --local
# Install hooks globally (all projects)
./scripts/git-hooks/install.sh --global
# Uninstall hooks
./scripts/git-hooks/install.sh --uninstall
What the hook does:
Use --sync for bidirectional sync between template and requirements.json:
# Full bidirectional sync (both directions)
python3 scripts/generate.py urs --sync \
--project "临床系统" \
--system "EDC v1.0" \
--category 4
# Only sync template → JSON
python3 scripts/generate.py urs --sync --sync-direction to-json
# Only sync JSON → template
python3 scripts/generate.py urs --sync --sync-direction to-template
Conflict resolution:
# Keep template descriptions on conflict
python3 scripts/generate.py urs --sync --conflict-resolution template
# Keep JSON descriptions on conflict
python3 scripts/generate.py urs --sync --conflict-resolution json
# Keep newer version based on updated_at
python3 scripts/generate.py urs --sync --conflict-resolution newer
Section numbering behavior:
### 4.X headersrequirements.json will have sections createdpm_query, multi_lock) are supported and will be assigned the next available section numberFor projects with multiple subprojects (monorepo structure):
# Auto-detect monorepo root
python3 scripts/generate.py rtm --project "临床系统" --system "EDC v1.0"
# Explicitly specify monorepo root
python3 scripts/generate.py rtm --project "临床系统" --system "EDC v1.0" \
--project-root /path/to/monorepo
Detected monorepo layouts:
apps/, packages/, projects/, modules/, services/ directoriesrequirements.jsonTemplates are versioned for compatibility tracking:
# Check compatibility (automatic on generate)
python3 scripts/generate.py rtm --project "系统" --system "v1.0" --category 4
# Specify template version
python3 scripts/generate.py rtm --template-version 1.2.0 \
--project "系统" --system "v1.0" --category 4
Automatic migrations:
Use provided CI/CD templates for automated documentation generation:
GitHub Actions (templates/ci/github-actions.yml):
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: python scripts/generate.py check --output-format json
- run: python scripts/generate.py all --diff-only
GitLab CI (templates/ci/gitlab-ci.yml):
generate:rtm:
extends: .csv-docs-base
script:
- python scripts/generate.py rtm --diff-only
artifacts:
paths:
- validation/RTM*.xlsx
The URS/FS/TS IDs and descriptions in templates are examples only. For actual projects:
--sync-template-to-db to populate initial requirements, then customizePer GxP requirements, any system change requires a risk assessment. When generating RA documents, include the change description:
python3 scripts/generate.py ra \
--project "临床系统" \
--system "EDC v1.0" \
--change-description "升级数据库从 v12 到 v14" \
--output ./validation/
# Navigate to skill directory
cd <SKILL_DIR>/csv-documentation-generator
# Parse source code for requirements using csv-docs CLI
python3 scripts/cli.py parse ./src
# View extracted requirements
cat requirements.json
| Issue | Solution |
|---|---|
| python-docx not installed | Run: pip install -r requirements.txt |
| Encoding errors | Ensure UTF-8 encoding in your terminal |
| Template not found | Check you are in the correct directory |
Run with verbose output:
python3 scripts/generate.py --help
For AI agents running in non-interactive mode, use --auto-add to automatically add all parsed requirements:
# Parse and auto-add all requirements (non-interactive)
python3 scripts/cli.py parse ./src --auto-add
# Generate with verbose output
python3 scripts/generate.py all --project "XX系统" --system "System v1.0" --category 4 --verbose
python3 scripts/generate.py urs \
--project "临床试验管理系统" \
--system "CTMS v2.0" \
--category 4 \
--bilingual true \
--output ./validation/
python3 scripts/generate.py ra \
--project "质量管理系统" \
--system "QMS v1.5" \
--category 4 \
--critical-functions "数据录入,审计追踪,权限控制" \
--output ./validation/
python3 scripts/generate.py rtm \
--project "实验室系统" \
--system "LIMS v3.0" \
--category 4 \
--urs-file ./URS-001.md \
--fs-file ./FS-001.md \
--output ./validation/