Compare commits

..

22 Commits

Author SHA1 Message Date
jobayer
777f2b3a0d chore: update version to 0.2.1
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 8m31s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 11s
2025-12-22 15:56:22 +06:00
jobayer
791dda3931 ci: enhance pipeline with pre-build package-list.json update
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Failing after 4s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Has been skipped
Move package-list.json update to occur before the build step for release builds,
allowing IG Publisher to generate history.html correctly. Adjust post-build steps
to only update package-feed.xml, and add verification for history.html generation
and deployment. This ensures registry files are prepared earlier in the process.
2025-12-22 15:41:41 +06:00
jobayer
205f3e58a1 -
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m33s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2025-12-22 15:28:57 +06:00
jobayer
c5e0a7d039 ci: enhance deployment with file cleanup and forced container recreation
All checks were successful
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m25s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Successful in 9s
2025-12-22 13:38:59 +06:00
jobayer
3297b88035 ci: enhance pipeline with version persistence and direct deployment
Some checks failed
FHIR IG CI/CD Pipeline with Version Persistence / build-ig (push) Successful in 6m58s
FHIR IG CI/CD Pipeline with Version Persistence / deploy (push) Failing after 8s
- Add version extraction from IG and tag validation for releases
- Update package-list.json and package-feed.xml automatically on releases
- Replace Docker-based deployment with direct file upload via SCP/SSH
- Add publication request configuration for FHIR registry
- Remove obsolete Dockerfile.serve as deployment strategy changed
2025-12-22 12:58:59 +06:00
18c7029f91 fixed reverted back the download page
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m46s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 6s
2025-10-06 15:44:18 +00:00
0b3ed58124 Added SHR Dashboard and SHR Info
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m26s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-05 12:15:01 +06:00
ea9714686d fixed codesystem warnings
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 15m34s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-03 13:03:07 +00:00
96c7f1038e fixed canonical url and id mismatches
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m28s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 12s
2025-10-03 12:35:18 +00:00
debd34938f changed package name and canonical url
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m8s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-03 09:42:42 +00:00
6f9ef8f32c #
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 42m0s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 12s
2025-10-03 08:25:05 +00:00
9f903f8971 #
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 37m9s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 17:29:54 +00:00
e96406dd66 Prepare v0.2.0 release: Fixed package name canonical url
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 7m26s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 11:51:37 +00:00
7c70cbd667 Prepare v0.2.0 release: Fixed package name canonical url
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m52s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 10s
2025-10-02 10:51:40 +00:00
441ba94e45 Prepare v0.2.0 release: Fixed ig.ini
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 7m1s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 10:36:26 +00:00
56353fb6f0 Prepare v0.2.0 release: Fixed ig.ini
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 16m6s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 10s
2025-10-02 10:16:38 +00:00
7bfa246e8e Prepare v0.2.0 release: Fixed package-list.json
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m53s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 08:26:26 +00:00
575386df1b Update package-feed.xml
Some checks failed
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m55s
FHIR IG CI/CD Pipeline / deploy (push) Has been cancelled
2025-10-02 14:19:51 +06:00
96448cd6f6 Update package-feed.xml
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 6m54s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 13:59:19 +06:00
1c19dd476c Prepare v0.2.0 release: Fixed package-list.json and added package-feed.xml
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 7m3s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 10s
2025-10-02 07:33:33 +00:00
334dc16c70 Update CHANGELOG.md
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 7m7s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 11:56:50 +06:00
41ba52b5e8 Prepare v0.2.0 release: initial draft
All checks were successful
FHIR IG CI/CD Pipeline / build-ig (push) Successful in 7m4s
FHIR IG CI/CD Pipeline / deploy (push) Successful in 11s
2025-10-02 05:45:11 +00:00
38 changed files with 607 additions and 377 deletions

View File

@@ -1,14 +1,16 @@
name: FHIR IG CI/CD Pipeline
name: FHIR IG CI/CD Pipeline with Version Persistence
on:
push:
branches: [ main, develop ]
tags:
- 'v*.*.*' # Trigger on version tags like v0.3.0
pull_request:
branches: [ main ]
env:
REGISTRY: git.dghs.gov.bd # Replace with your Gitea instance
IMAGE_NAME: gitadmin/bd-core-fhir-ig # Replace with your image name
REGISTRY: git.dghs.gov.bd
IMAGE_NAME: gitadmin/bd-core-fhir-ig
jobs:
build-ig:
@@ -18,7 +20,113 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Full history for proper IG building
fetch-depth: 0
- name: Extract version from IG
id: version
run: |
# Extract version from ImplementationGuide resource
VERSION=$(grep -oP '<version value="\K[^"]+' input/bd.fhir.core.xml | head -1)
if [ -z "$VERSION" ]; then
echo "ERROR: Could not extract version from ImplementationGuide XML"
exit 1
fi
echo "Extracted version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
# Determine if this is a release build (git tag) or dev build
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
BUILD_TYPE="release"
TAG_VERSION="${GITHUB_REF#refs/tags/v}"
# Verify tag matches IG version
if [ "$TAG_VERSION" != "$VERSION" ]; then
echo "ERROR: Git tag version ($TAG_VERSION) doesn't match IG version ($VERSION)"
exit 1
fi
else
BUILD_TYPE="dev"
fi
echo "build_type=$BUILD_TYPE" >> $GITHUB_OUTPUT
echo "Build type: $BUILD_TYPE"
# NEW STEP: Update package-list.json BEFORE build so IG Publisher can use it
- name: Pre-build package-list.json update
run: |
VERSION="${{ steps.version.outputs.version }}"
BUILD_TYPE="${{ steps.version.outputs.build_type }}"
DATE=$(date +%Y-%m-%d)
# Only update for release builds
if [ "$BUILD_TYPE" != "release" ]; then
echo " Dev build - skipping package-list.json pre-build update"
exit 0
fi
echo "📋 Updating package-list.json before build..."
# Check if package-list.json exists
if [ ! -f "package-list.json" ]; then
echo "⚠️ package-list.json not found in repo - history.html won't be generated"
echo "Creating minimal package-list.json for this build..."
cat > package-list.json << EOF
{
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd/core",
"introduction": "Core FHIR profiles and extensions for Bangladesh healthcare",
"list": [
{
"version": "current",
"desc": "Continuous Integration Build (latest in version control)",
"path": "https://fhir.dghs.gov.bd/core/",
"status": "ci-build",
"current": true
}
]
}
EOF
fi
# Update package-list.json with new version
python3 << 'PYEOF'
import json
import sys
version = "$VERSION"
date = "$DATE"
with open('package-list.json', 'r') as f:
pkg_list = json.load(f)
# Check if this version already exists
version_exists = any(e['version'] == version for e in pkg_list['list'])
if not version_exists:
new_entry = {
"version": version,
"date": date,
"desc": f"Release {version}",
"path": f"https://fhir.dghs.gov.bd/core/{version}/",
"status": "trial-use",
"sequence": "STU 1"
}
# Insert after 'current' entry
pkg_list['list'].insert(1, new_entry)
with open('package-list.json', 'w') as f:
json.dump(pkg_list, f, indent=2)
print(f"✅ Added version {version} to package-list.json")
else:
print(f" Version {version} already exists in package-list.json")
PYEOF
echo "📋 package-list.json is ready for IG Publisher"
cat package-list.json
- name: Install Docker CLI
run: |
@@ -26,258 +134,274 @@ jobs:
apt-get install -y docker.io
docker --version
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
- name: Build FHIR IG (Copy In/Out)
- name: Build FHIR IG
run: |
echo "Building FHIR IG using copy approach..."
echo "Building FHIR IG version ${{ steps.version.outputs.version }}..."
# Create a container (don't start yet)
CONTAINER_ID=$(docker create \
hl7fhir/ig-publisher-base:latest \
/bin/bash -c "cp -r /home/publisher/ig /tmp/build && cd /tmp/build && _updatePublisher.sh -y && _genonce.sh")
echo "Container ID: $CONTAINER_ID"
# Copy all source files into the container
docker cp $(pwd)/. $CONTAINER_ID:/home/publisher/ig/
# Start and wait for completion
docker start -a $CONTAINER_ID
EXIT_CODE=$?
# Copy outputs back
# Copy outputs
echo "Copying outputs from container..."
docker cp $CONTAINER_ID:/tmp/build/output ./output || echo "Warning: No output directory"
docker cp $CONTAINER_ID:/tmp/build/fsh-generated ./fsh-generated || echo "No FSH generated files"
docker cp $CONTAINER_ID:/tmp/build/fsh-generated ./fsh-generated || echo "No FSH generated"
docker cp $CONTAINER_ID:/tmp/build/input-cache ./input-cache || echo "No input-cache"
docker cp $CONTAINER_ID:/tmp/build/temp ./temp || echo "No temp directory"
# Show container logs if failed
if [ $EXIT_CODE -ne 0 ]; then
echo "Build failed, showing container logs:"
echo "Build failed, showing logs:"
docker logs $CONTAINER_ID
docker rm $CONTAINER_ID
exit 1
fi
# Cleanup
docker rm $CONTAINER_ID
# Verify
if [ ! -f "output/index.html" ]; then
echo "ERROR: Build failed - no index.html"
exit 1
fi
# Check if history.html was generated
if [ -f "output/history.html" ]; then
echo "✅ history.html generated successfully"
else
echo "⚠️ WARNING: history.html was not generated"
echo "This usually means package-list.json was missing or invalid"
fi
echo "✅ Build successful!"
- name: Verify IG Output
- name: Update package-feed.xml for releases
if: steps.version.outputs.build_type == 'release'
run: |
ls -la output/
if [ ! -f "output/index.html" ]; then
echo "ERROR: IG build failed - no index.html found"
exit 1
fi
echo "IG build successful!"
VERSION="${{ steps.version.outputs.version }}"
DATETIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
- name: Login to Gitea Container Registry
if: github.ref == 'refs/heads/main'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ gitea.actor }}
password: ${{ secrets.ACCESS_TOKEN_GITEA }}
cat > update-feed.py << 'EOF'
import sys
import xml.etree.ElementTree as ET
- name: Extract metadata
if: github.ref == 'refs/heads/main'
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
version = sys.argv[1]
datetime_iso = sys.argv[2]
- name: Build and push Docker image
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v6
ET.register_namespace('', 'http://www.w3.org/2005/Atom')
tree = ET.parse('package-feed.xml')
root = tree.getroot()
ns = {'atom': 'http://www.w3.org/2005/Atom'}
updated_elem = root.find('atom:updated', ns)
if updated_elem is not None:
updated_elem.text = datetime_iso
entry_exists = False
for entry in root.findall('atom:entry', ns):
title = entry.find('atom:title', ns)
if title is not None and version in title.text:
entry_exists = True
entry_updated = entry.find('atom:updated', ns)
if entry_updated is not None:
entry_updated.text = datetime_iso
break
if not entry_exists:
new_entry = ET.Element('{http://www.w3.org/2005/Atom}entry')
title = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}title')
title.text = f"bd.fhir.core version {version}"
link = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}link')
link.set('rel', 'alternate')
link.set('href', f"https://fhir.dghs.gov.bd/core/{version}/")
entry_id = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}id')
entry_id.text = f"https://fhir.dghs.gov.bd/core/{version}/"
entry_updated = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}updated')
entry_updated.text = datetime_iso
summary = ET.SubElement(new_entry, '{http://www.w3.org/2005/Atom}summary')
summary.text = f"Release {version} of Bangladesh Core FHIR Implementation Guide"
insert_pos = 0
for i, child in enumerate(root):
if child.tag.endswith('entry'):
insert_pos = i
break
insert_pos = i + 1
root.insert(insert_pos, new_entry)
tree.write('output/package-feed.xml', encoding='utf-8', xml_declaration=True)
print(f"✅ Updated package-feed.xml")
EOF
python3 update-feed.py "$VERSION" "$DATETIME"
# Also copy the updated package-list.json to output
cp package-list.json output/package-list.json
echo "📋 Updated registry files"
- name: Prepare deployment artifact
run: |
VERSION="${{ steps.version.outputs.version }}"
BUILD_TYPE="${{ steps.version.outputs.build_type }}"
tar -czf ig-output.tar.gz -C output .
echo "version=$VERSION" > deployment.env
echo "build_type=$BUILD_TYPE" >> deployment.env
echo "build_date=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> deployment.env
# List what's in the output
echo "📦 Output contents:"
ls -lh output/ | grep -E "(history\.html|package-list\.json|package-feed\.xml|index\.html)"
ls -lh ig-output.tar.gz
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
context: .
file: ./Dockerfile.serve
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# cache-from: type=gha
# cache-to: type=gha,mode=max
name: ig-output
path: |
ig-output.tar.gz
deployment.env
package-list.json
package-feed.xml
retention-days: 30
deploy:
needs: build-ig
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: ig-output
- name: Load deployment env
id: deploy_info
run: |
source deployment.env
echo "version=$version" >> $GITHUB_OUTPUT
echo "build_type=$build_type" >> $GITHUB_OUTPUT
echo "build_date=$build_date" >> $GITHUB_OUTPUT
echo "Deploying version: $version"
echo "Build type: $build_type"
- name: Deploy to server
uses: appleboy/ssh-action@v1.0.3
env:
REGISTRY: ${{ env.REGISTRY }}
IMAGE_NAME: ${{ env.IMAGE_NAME }}
IMAGE_TAG: latest
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
password: ${{ secrets.DEPLOY_PASSWORD }}
port: ${{ secrets.DEPLOY_PORT || 22 }}
source: "ig-output.tar.gz,deployment.env,package-list.json,package-feed.xml"
target: "/tmp/fhir-ig-deploy/"
- name: Execute deployment on server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
password: ${{ secrets.DEPLOY_PASSWORD }}
port: ${{ secrets.DEPLOY_PORT || 22 }}
envs: REGISTRY,IMAGE_NAME,IMAGE_TAG
script: |
# Create deployment directory if it doesn't exist
mkdir -p /opt/fhir-ig
cd /opt/fhir-ig
# Create docker-compose.prod.yml
cat > docker-compose.prod.yml << EOF
services:
fhir-ig:
image: \${REGISTRY}/\${IMAGE_NAME}:\${IMAGE_TAG:-latest}
container_name: fhir-ig-app
restart: unless-stopped
ports:
- "80:80"
environment:
- NODE_ENV=production
networks:
- fhir-ig-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
- fhir-ig-logs:/var/log/nginx
networks:
fhir-ig-network:
driver: bridge
volumes:
fhir-ig-logs:
driver: local
EOF
# Create deployment script
cat > deploy.sh << 'DEPLOY_SCRIPT'
#!/bin/bash
set -e
# Configuration
COMPOSE_FILE="docker-compose.prod.yml"
SERVICE_NAME="fhir-ig"
BACKUP_DIR="/opt/backups/fhir-ig"
LOG_FILE="/var/log/fhir-ig-deploy.log"
# Load deployment info
source /tmp/fhir-ig-deploy/deployment.env
# Create directories
mkdir -p "$BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"
echo "=========================================="
echo "Deploying FHIR IG"
echo "Version: $version"
echo "Build Type: $build_type"
echo "Build Date: $build_date"
echo "=========================================="
# Logging function
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Create version directory structure
VERSIONS_DIR="/opt/fhir-ig/versions"
mkdir -p "$VERSIONS_DIR"
log "Starting deployment of BD Core FHIR IG..."
log "Registry: $REGISTRY"
log "Image: $IMAGE_NAME"
log "Tag: $IMAGE_TAG"
# Determine target directory
if [ "$build_type" == "release" ]; then
TARGET_DIR="$VERSIONS_DIR/$version"
echo "📦 Deploying release version to: $TARGET_DIR"
else
TARGET_DIR="$VERSIONS_DIR/dev"
echo "🔧 Deploying dev build to: $TARGET_DIR"
# Login to registry
echo "$GITEA_PASSWORD" | docker login $REGISTRY -u "$GITEA_USERNAME" --password-stdin
# Backup current container if it exists
if docker compose -f "$COMPOSE_FILE" ps --services --filter "status=running" | grep -q "$SERVICE_NAME"; then
log "Creating backup of current deployment..."
BACKUP_FILE="$BACKUP_DIR/backup-$(date +%Y%m%d-%H%M%S).tar.gz"
docker compose -f "$COMPOSE_FILE" exec -T "$SERVICE_NAME" tar -czf - -C /usr/share/nginx/html . > "$BACKUP_FILE" 2>/dev/null || log "Backup failed, continuing..."
echo "Cleaning old dev files..."
rm -rf "$TARGET_DIR"/*
fi
# Set environment variables for docker compose
export REGISTRY="$REGISTRY"
export IMAGE_NAME="$IMAGE_NAME"
export IMAGE_TAG="$IMAGE_TAG"
# Create target directory
mkdir -p "$TARGET_DIR"
# Pull the latest image
log "Pulling latest image: $REGISTRY/$IMAGE_NAME:$IMAGE_TAG..."
docker pull "$REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
# Extract IG output
echo "Extracting IG output..."
tar -xzf /tmp/fhir-ig-deploy/ig-output.tar.gz -C "$TARGET_DIR"
# docker pull "\${REGISTRY}/\${IMAGE_NAME}:\${IMAGE_TAG}"
# Verify history.html was deployed
if [ -f "$TARGET_DIR/history.html" ]; then
echo "✅ history.html deployed successfully"
else
echo "⚠️ WARNING: history.html not found in deployment"
fi
# Stop and remove old container
log "Stopping old container..."
docker compose -f "$COMPOSE_FILE" down || log "No existing container to stop"
cp /tmp/fhir-ig-deploy/package-list.json "$VERSIONS_DIR/package-list.json"
# Start new container
log "Starting new container..."
docker compose -f "$COMPOSE_FILE" up -d
# Copy package-feed.xml to root
cp /tmp/fhir-ig-deploy/package-feed.xml "$VERSIONS_DIR/package-feed.xml"
# Wait for container to be healthy
# log "Waiting for container to become healthy..."
# timeout=120
# elapsed=0
# healthy=false
# Update 'current' symlink for releases
if [ "$build_type" == "release" ]; then
echo "Updating 'current' symlink to point to $version"
rm -f "$VERSIONS_DIR/current"
ln -sf "$version" "$VERSIONS_DIR/current"
fi
# while [ $elapsed -lt $timeout ]; do
# if docker compose -f "$COMPOSE_FILE" ps --format json | grep -q '"Health":"healthy"'; then
# log "Container is healthy!"
# healthy=true
# break
# fi
# sleep 5
# elapsed=$((elapsed + 5))
# log "Waiting... ($elapsed/$timeout seconds)"
# done
# Ensure nginx container is running with correct config
cd /opt/fhir-ig
# if [ "$healthy" = false ]; then
# log "ERROR: Container failed to become healthy within $timeout seconds"
# docker compose -f "$COMPOSE_FILE" logs --tail=50
# log "Rolling back..."
# docker compose -f "$COMPOSE_FILE" down
# exit 1
# fi
# Download deployment files if they don't exist
if [ ! -f "docker-compose.prod.yml" ]; then
echo "ERROR: docker-compose.prod.yml not found!"
echo "Please deploy the updated docker-compose.prod.yml and nginx.conf first"
exit 1
fi
# Cleanup old images (keep last 3 versions)
log "Cleaning up old images..."
docker images "\${REGISTRY}/\${IMAGE_NAME}" --format "table {{.Repository}}:{{.Tag}}\t{{.CreatedAt}}" | tail -n +2 | sort -k2 -r | tail -n +4 | awk '{print $1}' | xargs -r docker rmi || log "No old images to clean"
# Force recreate container to ensure new config/mounts are applied
# This handles "stuck" states better than a simple restart
docker compose -f docker-compose.prod.yml up -d --force-recreate fhir-ig
# Cleanup old backups (keep only last 5)
log "Cleaning up old backups..."
ls -t "$BACKUP_DIR"/backup-*.tar.gz 2>/dev/null | tail -n +6 | xargs -r rm || log "No old backups to clean"
# Cleanup
rm -rf /tmp/fhir-ig-deploy
log "Deployment completed successfully!"
log "🌐 Service available at: http://$(hostname -I | awk '{print $1}')"
echo "=========================================="
echo "✅ Deployment completed successfully!"
echo "Version $version is now available at:"
if [ "$build_type" == "release" ]; then
echo " - https://fhir.dghs.gov.bd/core/$version/"
echo " - https://fhir.dghs.gov.bd/core/$version/history.html"
echo " - https://fhir.dghs.gov.bd/core/ (current)"
else
echo " - https://fhir.dghs.gov.bd/core/dev/"
fi
echo "=========================================="
# Display final status
docker compose -f "$COMPOSE_FILE" ps
DEPLOY_SCRIPT
# Make deploy script executable
chmod +x deploy.sh
# Set registry credentials
export GITEA_USERNAME="${{ gitea.actor }}"
export GITEA_PASSWORD="${{ secrets.ACCESS_TOKEN_GITEA }}"
# Execute deployment
./deploy.sh
# List all versions
echo "Available versions:"
ls -lh "$VERSIONS_DIR" | grep -v total

23
CHANGELOG.md Normal file
View File

@@ -0,0 +1,23 @@
# Changelog
## [0.2.0] 2025-10-02
**First official draft release of BD-Core-FHIR-IG**
### Added
- **BDPatientProfile** with Bangladesh-specific identifier and address extensions.
- **BDPractitionerProfile** to capture practitioner details.
- **Identifier CodeSystem and ValueSet** including:
- National ID (NID)
- Birth Registration Number (BRN)
- Unique Health ID (UHID)
- **Bangladesh Address profile** with Division, District, Upazila, and Union levels.
- Initial **examples** for Patient and Practitioner resources.
- Configured **bd.fhir.core.xml** with canonical URL `https://fhir.dghs.gov.bd/core`.
### Notes
- This is a **pre-release draft**.
- Backward compatibility is **not guaranteed** until `1.0.0`.
- Future drafts may adjust slicing rules, bindings, and extensions.
---

View File

@@ -1,42 +0,0 @@
# Multi-stage build for serving FHIR IG output
FROM nginx:alpine
# Copy the built IG output to nginx html directory
# (Uncomment and adjust the path if needed)
COPY output/ /usr/share/nginx/html/
# Copy custom nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf
# Create a non-root user for security
RUN addgroup -g 1001 -S nginx-user && \
adduser -S -D -H -u 1001 -h /var/cache/nginx -s /sbin/nologin -G nginx-user -g nginx-user nginx-user
# Set proper permissions for Nginx directories
RUN chown -R nginx-user:nginx-user /usr/share/nginx/html && \
chown -R nginx-user:nginx-user /var/cache/nginx && \
chown -R nginx-user:nginx-user /var/log/nginx && \
chown -R nginx-user:nginx-user /etc/nginx/conf.d
# Fix Nginx PID permission issue
RUN mkdir -p /var/cache/nginx/run && \
chown -R nginx-user:nginx-user /var/cache/nginx/run
# Update nginx.conf to point PID to writable location
# Ensure your nginx.conf has:
# pid /var/cache/nginx/run/nginx.pid;
# Switch to non-root user
USER nginx-user
# Health check
# HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
# CMD curl -f http://localhost/ || exit 1
EXPOSE 80
# Start Nginx in foreground
# CMD ["nginx", "-g", "daemon off;"]
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

2
ig.ini
View File

@@ -1,7 +1,7 @@
[IG]
# ini file for the Implementation Guide publisher
# see comments below for instructions
ig = input/myig.xml
ig = input/bd.fhir.core.xml
#template = fhir.base.template#current
template = #bd-national-template
#template = D:\Git\templates\ig-template-base

View File

@@ -13,7 +13,7 @@
</extension>-->
<url value="https://fhir.dghs.gov.bd/core/ImplementationGuide/bd.fhir.core"/>
<!-- This version will propagate to all artifacts unless the "propagate-version" extension is overridden -->
<version value="0.2.0"/>
<version value="0.2.1"/>
<name value="BangladeshCoreFHIRIG"/>
<title value="Bangladesh Core FHIR Implementation Guide"/>
<status value="active"/>
@@ -78,9 +78,6 @@
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
<valueCode value="trial-use"/>
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm">
<valueInteger value="3"/>
</extension>
<nameUrl value="spec.html"/>
<title value="Detailed BD-Core-FHIR Specification"/>
<generation value="markdown"/>
@@ -114,7 +111,7 @@
<!-- releaselabel should be the ballot status for HL7-published IGs. -->
<parameter>
<code value="releaselabel"/>
<value value="Published by MoHFW"/>
<value value="Published by DGHS, MoHFW"/>
</parameter>
<parameter>
<code value="find-other-resources"/>
@@ -153,10 +150,6 @@
<code value="excludemap"/>
<value value="true"/>
</parameter>-->
<parameter>
<code value="showsource"/>
<value value="true"/>
</parameter>
<parameter>
<code value="i18n-default-lang"/>
<value value="en"/>
@@ -177,9 +170,5 @@
<code value="translation-sources"/>
<value value="input/translations-fr"/>
</parameter>
<parameter>
<code value="fcp-approved-specification"/>
<value value="false"/>
</parameter>
</definition>
</ImplementationGuide>

View File

@@ -5,4 +5,4 @@ Title: "ICD 11"
Description: "Condition coded with ICD-11"
* code 1..1 MS
* code from http://id.who.int/icd/release/11/mms (preferred)
* code from BDConditionICD11VS (preferred)

View File

@@ -4,6 +4,8 @@ Title: "Bangladesh Immunization Reaction Code System"
Description: "Codes for adverse reactions after vaccination in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-immunization-reaction"
* ^status = #active
* ^caseSensitive = true
* ^experimental = false
* ^content = #complete
* #NONE "No Reaction"

View File

@@ -6,6 +6,8 @@ Id: bd-blood-groups
Title: "Bangladesh Blood Group CodeSystem"
Description: "Blood group codes according to CCDS guideline"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-blood-groups"
* ^caseSensitive = true
* ^experimental = false
* ^content = #complete
* #1 "O Positive"
* #2 "O Negative"
@@ -20,7 +22,7 @@ Description: "Blood group codes according to CCDS guideline"
// ValueSet for BD Blood Groups
// ---------------------------
ValueSet: BDBloodGroupVS
Id: bd-blood-group-vs
Id: bd-blood-group-valueset
Title: "Bangladesh Blood Group ValueSet"
Description: "Blood group value set according to CCDS guideline"
* include codes from system BDBloodGroupCS

View File

@@ -1,7 +1,9 @@
CodeSystem: BDCountryListCS
Id: bd-country-list-cs
Id: bd-country-list
Title: "Nationality List"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-country-list"
* ^caseSensitive = true
* ^experimental = false
* #4 "Afghan"
* #8 "Albanian"
@@ -194,8 +196,8 @@ Title: "Nationality List"
ValueSet: BDCountryListVS
Id: bd-country-list-vs
Id: bd-country-list-valueset
Title: "Nationality ValueSet"
Description: "Nationality value set"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-country-list"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-country-list-valueset"
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-country-list

View File

@@ -1,8 +1,10 @@
CodeSystem: BDGeoCodesCS
Id: bd-geocodes-cs
Id: bd-geocodes
Title: "Bangladesh GeoCodes CodeSystem"
Description: "Bangladesh GeoCodes"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes"
* ^caseSensitive = true
* ^experimental = false
// DIvisions
* #30 "Dhaka"
* #20 "Chattogram"
@@ -1601,10 +1603,10 @@ Description: "Bangladesh GeoCodes"
* #4589009077 "Sreebardi Pourasabha"
ValueSet: BDDivisionsVS
Id: bd-division-code-vs
Id: bd-division-code-valueset
Title: "Bangladesh Division ValueSet"
Description: "Bangladesh Division Codes (only two-digit codes)"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-divisions"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-division-code-valueset"
// include only codes that are exactly 2 digits
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes
@@ -1612,10 +1614,10 @@ Description: "Bangladesh Division Codes (only two-digit codes)"
ValueSet: BDDistrictsVS
Id: bd-district-code-vs
Id: bd-district-code-valueset
Title: "Bangladesh district ValueSet"
Description: "Bangladesh district Codes (only two-digit codes)"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-districts"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-district-code-valueset"
// include only codes that are exactly 4 digits
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes
@@ -1623,10 +1625,10 @@ Description: "Bangladesh district Codes (only two-digit codes)"
ValueSet: BDCityCorporationsVS
Id: bd-city-corporations-code-vs
Id: bd-city-corporation-code-valueset
Title: "Bangladesh City Corperation ValueSet"
Description: "Bangladesh City Corperation Codes (only two-digit codes)"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-city-corporations"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-city-corporation-code-valueset"
// include only codes that are exactly 6 digits
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes
@@ -1634,20 +1636,20 @@ Description: "Bangladesh City Corperation Codes (only two-digit codes)"
ValueSet: BDUpazillasVS
Id: bd-upazillas-code-vs
Id: bd-upazilla-code-valueset
Title: "Bangladesh Upazila ValueSet"
Description: "Bangladesh Upazila Codes (only two-digit codes)"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-upazillas"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-upazilla-code-valueset"
// include only codes that are exactly 8 digits
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes
where code regex "^[0-9]{8}$"
ValueSet: BDMunicipalitiesVS
Id: bd-municipalities-code-vs
Id: bd-municipalities-code-valueset
Title: "Bangladesh Municipalities ValueSet"
Description: "Bangladesh Municipalities Codes (only two-digit codes)"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-municipalities"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-municipalities-code-valueset"
// include only codes that are exactly 10 digits
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-geocodes

View File

@@ -1,9 +1,12 @@
//// this code systems for Identifier types
CodeSystem: BangladeshIdentifierType
Id: bangladesh-identifier-type-cs
Id: bd-identifier-type
Title: "Bangladesh Identifier Types"
Description: "Codes identifying the type of identifiers used in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-identifier-type"
* ^caseSensitive = true
* ^experimental = false
* #NID "National ID"
* #BRN "Birth Registration Number"
@@ -11,10 +14,10 @@ Title: "Bangladesh Identifier Types"
ValueSet: BangladeshIdentifierTypeVS
Id: bangladesh-identifier-type-vs
Id: bd-identifier-type-valueset
Title: "Bangladesh Identifier Type"
Description: "Bangladesh Standard Identifier type"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type-valueset"
// * include codes from valueset http://hl7.org/fhir/ValueSet/identifier-type /// use name or uri
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-identifier-type

View File

@@ -4,6 +4,8 @@ Title: "Bangladesh Immunization Site Code System"
Description: "Codes for anatomical site of vaccine administration in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-immunization-site"
* ^status = #active
* ^caseSensitive = true
* ^experimental = false
* ^content = #complete
* #LA "Left Arm"

View File

@@ -1,8 +1,10 @@
CodeSystem: BDMedicationCodeSystem
Id: bd-medication-cs
Id: bd-medication-code
Title: "Bangladesh Medication Codes"
Description: "Bangladesh Medication Codes"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-medication-code"
* ^caseSensitive = true
* ^experimental = false
// DGDA DAR Code "Brand Name"
* #394-0010-030 "Tubutol" "Ethambutol"
* #394-0011-030 "AFDCDT-2" "Isoniazid + Rifampicin"
@@ -16,7 +18,7 @@ Description: "Bangladesh Medication Codes"
// ValueSet for BD Medication
// ---------------------------
ValueSet: BDMedicationVS
Id: bd-medication-vs
Id: bd-medication-valueset
Title: "Bangladesh Medication ValueSet"
Description: "Bangladesh Medication ValueSet"
* include codes from system BDMedicationCodeSystem

View File

@@ -34,8 +34,8 @@ Description: "Medication dose form codes according to CCDS guideline"
// ValueSet for BD Medication Dose Forms
// ---------------------------
ValueSet: BDMedicationDoseFormVS
Id: bd-dose-form-vs
Id: bd-dose-form-valueset
Title: "Bangladesh Medication Dose Form ValueSet"
Description: "Medication dose form value set according to CCDS guideline"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-dose-form-vs"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-dose-form-valueset"
* include codes from system BDMedicationDoseForm

View File

@@ -1,83 +1,84 @@
CodeSystem: BDOccupationsCS
Id: bangladesh-occupations-cs
Id: bd-occupations
Title: "Bangladesh Occupations"
Description: "Occupations code system according to CCDS guideline"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-occupations"
* #1 "Physical Scientists & Related Technicians" "ভৌত বিজ্ঞানী ও এতদসংক্রান্ত টেকনিশিয়ান"
* #2 "Engineering and Architects" "ইঞ্জিয়ারিং ও স্থপতি "
* #3 "Engineering and Architect-related Technicians" "ইঞ্জিয়ারিং ও স্থপতি সম্পর্কিত টেকনিশিয়ান "
* #4 "Officers of Aircraft and Ship" "বিমান ও জাহাজের কর্মকর্তা "
* #5 "Biologists and Related Technicians" "জীববিজ্ঞানী ও এতদসংক্রান্ত টেকনিশিয়ান "
* #6 "Physicians, Dentists, and Veterinarians" "চিকিৎসক, দন্ত চিকিৎসক ও পশু চিকিৎসক "
* #7 "Nurses and Other Medical Staffs" "নার্স ও চিকিৎসক সংক্রান্ত অন্যান্য কর্মী "
* #8 "Statisticians, Mathematicians, System Analysts, and Related Staff" "পরিসংখ্যানবিদ, গণিতবিদ, সিস্টেম এনালিস্ট ও এতদসংক্রান্ত কর্মী "
* #2 "Engineering and Architects" "ইঞ্জিয়ারিং ও স্থপতি"
* #3 "Engineering and Architect-related Technicians" "ইঞ্জিয়ারিং ও স্থপতি সম্পর্কিত টেকনিশিয়ান"
* #4 "Officers of Aircraft and Ship" "বিমান ও জাহাজের কর্মকর্তা"
* #5 "Biologists and Related Technicians" "জীববিজ্ঞানী ও এতদসংক্রান্ত টেকনিশিয়ান"
* #6 "Physicians, Dentists, and Veterinarians" "চিকিৎসক, দন্ত চিকিৎসক ও পশু চিকিৎসক"
* #7 "Nurses and Other Medical Staffs" "নার্স ও চিকিৎসক সংক্রান্ত অন্যান্য কর্মী"
* #8 "Statisticians, Mathematicians, System Analysts, and Related Staff" "পরিসংখ্যানবিদ, গণিতবিদ, সিস্টেম এনালিস্ট ও এতদসংক্রান্ত কর্মী"
* #9 "Economists" "অর্থনীতিবিদ"
* #10 "Accountants" "হিসাবরক্ষক"
* #12 "Judges" "বিচারক"
* #13 "Teachers" "শিক্ষক"
* #14 "Religious Workers" "ধর্মীয় কর্মী"
* #15 "Writers, Journalists, and Related Staffs" "লেখক, সাংবাদিক ও এতদসম্পর্কিত কর্মী "
* #16 "Painters, Photographers, and Other Creative Artists" "চিত্রশিল্পী, ফটোগ্রাফার ও এতদসংক্রান্ত সৃজনশীল শিল্পী "
* #17 "Actors, Singers, and Dancers" "অভিনয়, কণ্ঠশিল্পী ও নৃত্যশিল্পী "
* #18 "Sportspersons and Related Staffs" "খেলোয়াড় এবং এতদসম্পর্কিত কর্মী "
* #19 "Professional, Technical, and Other Related Workers (not elsewhere classified)" "পেশাগত, কারিগরি ও অন্যান্য অশ্রেণীভুক্ত এতদসম্পর্কিত কর্মী "
* #15 "Writers, Journalists, and Related Staffs" "লেখক, সাংবাদিক ও এতদসম্পর্কিত কর্মী"
* #16 "Painters, Photographers, and Other Creative Artists" "চিত্রশিল্পী, ফটোগ্রাফার ও এতদসংক্রান্ত সৃজনশীল শিল্পী"
* #17 "Actors, Singers, and Dancers" "অভিনয়, কণ্ঠশিল্পী ও নৃত্যশিল্পী"
* #18 "Sportspersons and Related Staffs" "খেলোয়াড় এবং এতদসম্পর্কিত কর্মী"
* #19 "Professional, Technical, and Other Related Workers (not elsewhere classified)" "পেশাগত, কারিগরি ও অন্যান্য অশ্রেণীভুক্ত এতদসম্পর্কিত কর্মী"
* #20 "Lawyers" "আইনজীবী"
* #21 "Managers" "ম্যানেজার"
* #30 "Government Executive Officers" "সরকারি নির্বাহী কর্মকর্তা "
* #30 "Government Executive Officers" "সরকারি নির্বাহী কর্মকর্তা"
* #31 "Clerks" "করণিক (কেরানী)"
* #32 "Typists, Stenographers and Computer Operators" "টাইপিস্ট/স্টেনোগ্রাফার/কম্পিউটার অপারেটর"
* #33 "Record Keepers, Cahiers and Related Staffs" "রেকর্ড কিপার, ক্যাশিয়ার ও এতদসম্পর্কিত কর্মী"
* #34 "Computer Professionals and Associate Staffs" "কম্পিউটার সম্পর্কিত কর্মী "
* #35 "Transport and Communication Supervisors" "যানবাহন ও যোগাযোগ তত্ত্বাবধায়ক "
* #36 "Drivers and Conductors (Mechanical and Manual)" "গাড়িচালক ও কন্টাক্টর (যান্ত্রিক ও কায়িক) "
* #37 "Mail Carriers / Postmen" "চিঠিপত্র বিলি (ডাক পিয়ন) "
* #34 "Computer Professionals and Associate Staffs" "কম্পিউটার সম্পর্কিত কর্মী"
* #35 "Transport and Communication Supervisors" "যানবাহন ও যোগাযোগ তত্ত্বাবধায়ক"
* #36 "Drivers and Conductors (Mechanical and Manual)" "গাড়িচালক ও কন্টাক্টর (যান্ত্রিক ও কায়িক)"
* #37 "Mail Carriers / Postmen" "চিঠিপত্র বিলি (ডাক পিয়ন)"
* #38 "Telephone and Telegraph Operators" "টেলিফোন ও টেলিগ্রাফ অপারেটর"
* #39 "Clerical Work, Not Elsewhere Classified" "অশ্রেণীভুক্ত দাপ্তরিক কাজ "
* #40 "Managers in Wholesale and Retail Trade" "ম্যানেজার (পাইকারি ও খুচরা ব্যাবসা) "
* #39 "Clerical Work, Not Elsewhere Classified" "অশ্রেণীভুক্ত দাপ্তরিক কাজ"
* #40 "Managers in Wholesale and Retail Trade" "ম্যানেজার (পাইকারি ও খুচরা ব্যাবসা)"
* #42 "Sales Supervisors" "বিক্রয় তত্ত্বাবধায়ক"
* #43 "Travel Attendants and Related Workers" "ভ্রমণ সংক্রান্ত কাজে নিয়োজিত কর্মী "
* #44 "Salespersons in Insurance, Real Estate, Business, and Related Services" "বীমা, রিয়েল এস্টেট, ব্যাবসা এবং এতদসংক্রান্ত সেবা বিক্রেতা "
* #45 "Street and Market Salespersons" "ফেরিওয়ালা "
* #46 "Sales Workers, Not Elsewhere Classified" "অশ্রেণীভুক্ত বিক্রয়কর্মী "
* #50 "Hotel and Lodging Managers" "আবাসিক হোটেল ম্যানেজার "
* #51 "Hotel Proprietors" "হোটেল মালিক "
* #43 "Travel Attendants and Related Workers" "ভ্রমণ সংক্রান্ত কাজে নিয়োজিত কর্মী"
* #44 "Salespersons in Insurance, Real Estate, Business, and Related Services" "বীমা, রিয়েল এস্টেট, ব্যাবসা এবং এতদসংক্রান্ত সেবা বিক্রেতা"
* #45 "Street and Market Salespersons" "ফেরিওয়ালা"
* #46 "Sales Workers, Not Elsewhere Classified" "অশ্রেণীভুক্ত বিক্রয়কর্মী"
* #50 "Hotel and Lodging Managers" "আবাসিক হোটেল ম্যানেজার"
* #51 "Hotel Proprietors" "হোটেল মালিক"
* #52 "Residential Hotel Supervisors" "আবাসিক হোটেল তত্ত্বাবধায়ক"
* #53 "Cooks, Waiters, and Related Hotel Workers" "বাবুর্চি, হোটেল বয় ও এতদসম্পর্কিত কর্মী "
* #54 "Unclassified Housemaids" "অশ্রেণীভুক্ত গৃহ পরিচারিকা "
* #55 "Caretakers, Janitors, and Related Domestic Workers" "বাড়ির কেয়ারটেকার, ঝাড়ুদার ও এতদসম্পর্কিত কর্মী "
* #56 "Laundry Workers" "ধোপা "
* #58 "Security Guards" "নিরাপত্তা কর্মী "
* #59 "Unclassified Service Workers" "অশ্রেণীভুক্ত সেবা কর্মী "
* #60 "Agricultural Farm Managers and Supervisors" "কৃষিখামার ব্যবস্থাপক ও তত্ত্বাবধায়ক "
* #61 "Crop and Livestock Farmers" "কৃষিকাজ "
* #63 "Forestry Workers" "বন কর্মী "
* #64 "Fishers, Hunters, and Related Workers" "জেলে, শিকারি ও এতদসম্পর্কিত কর্মী "
* #70 "Production Supervisors and Foremen" "উৎপাদন তত্ত্বাবধায়ক ও ফোরম্যান "
* #71 "Miners and Quarry Workers" "খননকর্মী ও খননকারী "
* #72 "Metal Processing and Finishing Workers" "ধাতু প্রক্রিয়াকারী "
* #74 "Chemical Products Processing Workers" "রাসায়নিক দ্রব্য প্রক্রিয়াকারী "
* #75 "Weavers, Knitters, Dyers, and Related Textile Workers" "তাঁতী, কাপড় বোনা ও রং করা "
* #76 "Tanners and Leather Processing Workers" "চামড়া প্রক্রিয়াকারী "
* #77 "Food and Beverage Processing Plant Operators" "খাদ্য ও পানীয় প্রক্রিয়াকারী "
* #78 "Tobacco Preparers and Tobacco Processing Workers" "তামাক প্রক্রিয়াকারী "
* #79 "Tailors, Dressmakers, and Sewing Workers" "দর্জি ও অন্যান্য সেলাই কর্মী "
* #80 "Footwear and Leather Goods Makers" "জুতা ও চামড়াজাত দ্রব্য প্রস্তুতকারী "
* #81 "Carpenters" "কাঠমিস্ত্রি "
* #82 "Stone Cutters and Processing Workers" "পাথর কাটা ও প্রক্রিয়াকারী "
* #83 "Blacksmiths, Toolmakers, and Related Trades Workers" "কর্মকার, ঢালাইকর্মী ও যন্ত্রাংশ প্রস্তুতকারী "
* #84 "Non-Electrical Machine Operators" "বৈদ্যুতিক ব্যতীত অন্যান্য মেশিনকর্মী "
* #53 "Cooks, Waiters, and Related Hotel Workers" "বাবুর্চি, হোটেল বয় ও এতদসম্পর্কিত কর্মী"
* #54 "Unclassified Housemaids" "অশ্রেণীভুক্ত গৃহ পরিচারিকা"
* #55 "Caretakers, Janitors, and Related Domestic Workers" "বাড়ির কেয়ারটেকার, ঝাড়ুদার ও এতদসম্পর্কিত কর্মী"
* #56 "Laundry Workers" "ধোপা"
* #58 "Security Guards" "নিরাপত্তা কর্মী"
* #59 "Unclassified Service Workers" "অশ্রেণীভুক্ত সেবা কর্মী"
* #60 "Agricultural Farm Managers and Supervisors" "কৃষিখামার ব্যবস্থাপক ও তত্ত্বাবধায়ক"
* #61 "Crop and Livestock Farmers" "কৃষিকাজ"
* #63 "Forestry Workers" "বন কর্মী"
* #64 "Fishers, Hunters, and Related Workers" "জেলে, শিকারি ও এতদসম্পর্কিত কর্মী"
* #70 "Production Supervisors and Foremen" "উৎপাদন তত্ত্বাবধায়ক ও ফোরম্যান"
* #71 "Miners and Quarry Workers" "খননকর্মী ও খননকারী"
* #72 "Metal Processing and Finishing Workers" "ধাতু প্রক্রিয়াকারী"
* #74 "Chemical Products Processing Workers" "রাসায়নিক দ্রব্য প্রক্রিয়াকারী"
* #75 "Weavers, Knitters, Dyers, and Related Textile Workers" "তাঁতী, কাপড় বোনা ও রং করা"
* #76 "Tanners and Leather Processing Workers" "চামড়া প্রক্রিয়াকারী"
* #77 "Food and Beverage Processing Plant Operators" "খাদ্য ও পানীয় প্রক্রিয়াকারী"
* #78 "Tobacco Preparers and Tobacco Processing Workers" "তামাক প্রক্রিয়াকারী"
* #79 "Tailors, Dressmakers, and Sewing Workers" "দর্জি ও অন্যান্য সেলাই কর্মী"
* #80 "Footwear and Leather Goods Makers" "জুতা ও চামড়াজাত দ্রব্য প্রস্তুতকারী"
* #81 "Carpenters" "কাঠমিস্ত্রি"
* #82 "Stone Cutters and Processing Workers" "পাথর কাটা ও প্রক্রিয়াকারী"
* #83 "Blacksmiths, Toolmakers, and Related Trades Workers" "কর্মকার, ঢালাইকর্মী ও যন্ত্রাংশ প্রস্তুতকারী"
* #84 "Non-Electrical Machine Operators" "বৈদ্যুতিক ব্যতীত অন্যান্য মেশিনকর্মী"
* #85 "Electricians" "বৈদ্যুতিক কর্মী"
* #86 "Broadcasting and Audio-Visual Technicians" "শব্দ প্রচার কর্মী ও চলচ্চিত্র প্রদর্শনকারী "
* #87 "Water and Sewerage Construction Workers and Welders" "পানি ও পয়োঃ নিষ্কাশন কাঠামো নির্মাণকারী ও ধাতু ঝালাইকারী "
* #88 "Jewellery and Precious Metal Workers" "স্বর্ণকার "
* #89 "Glass, Pottery, and Related Trades Workers" "গ্লাস ও মাটির জিনিস প্রস্তুতকারী "
* #86 "Broadcasting and Audio-Visual Technicians" "শব্দ প্রচার কর্মী ও চলচ্চিত্র প্রদর্শনকারী"
* #87 "Water and Sewerage Construction Workers and Welders" "পানি ও পয়োঃ নিষ্কাশন কাঠামো নির্মাণকারী ও ধাতু ঝালাইকারী"
* #88 "Jewellery and Precious Metal Workers" "স্বর্ণকার"
* #89 "Glass, Pottery, and Related Trades Workers" "গ্লাস ও মাটির জিনিস প্রস্তুতকারী"
* #90 "Rubber and Plastic Products Makers" "রাবার ও প্লাস্টিক দ্রব্য প্রস্তুতকারী"
* #91 "Paper and Paperboard Products Workers" "কাগজ ও কাগজের বোর্ড প্রস্তুতকারী "
* #91 "Paper and Paperboard Products Workers" "কাগজ ও কাগজের বোর্ড প্রস্তুতকারী"
* #92 "Printers and Related Workers" "মুদ্রণকাজ"
ValueSet: BDOccupationsVS
Id: bd-occupations-vs
Id: bd-occupations-valueset
Title: "Bangladesh Occupations ValueSet"
Description: "Occupations value set according to CCDS guideline"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-occupations"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-occupations-valueset"
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-occupations

View File

@@ -1,6 +1,6 @@
//codeSystems/bd-regions.fsh
CodeSystem: BDReligionsCS
Id: bangladesh-religions-cs
Id: bd-religions
Title: "Bangladesh Religions"
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-religions"
@@ -13,8 +13,8 @@ Title: "Bangladesh Religions"
* #0 "Other (specify)" "Other religion (to be specified in free text)"
ValueSet: BDReligionsVS
Id: bd-religions-vs
Id: bd-religions-valueset
Title: "Bangladesh Religions ValueSet"
Description: "Religions value set according to CCDS guideline"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-religions"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-religions-valueset"
* include codes from system https://fhir.dghs.gov.bd/core/CodeSystem/bd-religions

View File

@@ -4,6 +4,8 @@ Title: "Bangladesh Vaccine Code System"
Description: "Vaccine codes used in Bangladesh EPI and immunization program."
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-vaccine-code"
* ^status = #active
* ^caseSensitive = true
* ^experimental = false
* ^content = #complete
* #BCG "BCG Vaccine"

View File

@@ -4,6 +4,8 @@ Title: "Bangladesh Immunization Route Code System"
Description: "Codes for routes of vaccine administration in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/CodeSystem/bd-immunization-route"
* ^status = #active
* ^caseSensitive = true
* ^experimental = false
* ^content = #complete
* #IM "Intramuscular"

View File

@@ -10,4 +10,4 @@ Description: "Nationality of the patient based on Bangladesh country list."
// Only one value, bound to your ValueSet
* value[x] only CodeableConcept
* valueCodeableConcept from https://fhir.dghs.gov.bd/core/ValueSet/bd-country-list (required)
* valueCodeableConcept from https://fhir.dghs.gov.bd/core/ValueSet/bd-country-list-valueset (required)

View File

@@ -7,5 +7,5 @@ Context: Patient
// occupation using standard HL7 extension
* value[x] only string
* value[x] from https://fhir.dghs.gov.bd/core/ValueSet/bd-occupations (required)
* value[x] from https://fhir.dghs.gov.bd/core/ValueSet/bd-occupations-valueset (required)

View File

@@ -1,5 +1,3 @@
// @Name: Profile
// @Description: Immunization Profile of the Bangladeshi Patient.
Profile: BDImmunizationProfile
@@ -13,7 +11,6 @@ Description: "Bangladesh Immunization Profile"
* identifier 1..*
* identifier ^short = "Unique identifier"
* identifier ^definition = "Unique identifier for the vaccination event"
* ^url = "https://fhir.dghs.gov.bd/core/identifier/bd-immunization"
* reasonReference 0..*
* reasonReference only Reference(Condition or Observation or DiagnosticReport)
@@ -26,7 +23,7 @@ Description: "Bangladesh Immunization Profile"
* manufacturer 0..1
* manufacturer ^short = "Manufacturer"
* manufacturer ^definition = "Vaccine manufacturer"
* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-organization"
* manufacturer only Reference(BDOrganization)
* lotNumber 0..1
* lotNumber ^short = "Vaccine Lot Number"

View File

@@ -51,7 +51,7 @@ Patient profile for Bangladesh.
* identifier[NID].system = "http://dghs.gov.bd/identifier/nid"
* identifier[NID].type.coding.code = #NID
// * identifier[NID].type.coding.system = "http://terminology.hl7.org/CodeSystem/v2-0203"
* identifier[NID].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type"
* identifier[NID].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type-valueset"
* identifier[NID].type from BangladeshIdentifierTypeVS (extensible)
* identifier[NID].type.text = "Organization identifier"
// * identifier[NID].value = "Personal identifier National ID"
@@ -61,7 +61,7 @@ Patient profile for Bangladesh.
* identifier[BRN].system = "http://dghs.gov.bd/identifier/brn"
* identifier[BRN].type.coding.code = #BRN
* identifier[BRN].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type"
* identifier[BRN].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type-valueset"
* identifier[BRN].type from BangladeshIdentifierTypeVS (extensible)
* identifier[BRN].type.text = "Organization identifier"
// * identifier[BRN].value = "Personal identifier Birth Registration"
@@ -69,7 +69,7 @@ Patient profile for Bangladesh.
* identifier[UHID].system = "http://dghs.gov.bd/identifier/uhid"
* identifier[UHID].type.coding.code = #UHID
* identifier[UHID].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type"
* identifier[UHID].type.coding.system = "https://fhir.dghs.gov.bd/core/ValueSet/bd-identifier-type-valueset"
* identifier[UHID].type from BangladeshIdentifierTypeVS (extensible)
* identifier[UHID].type.text = "Organization identifier"
@@ -96,7 +96,7 @@ Patient profile for Bangladesh.
// Religion using standard HL7 extension
* extension contains http://hl7.org/fhir/StructureDefinition/patient-religion named religion 0..1
* extension[religion].valueCodeableConcept from https://fhir.dghs.gov.bd/core/ValueSet/bd-religions
* extension[religion].valueCodeableConcept from https://fhir.dghs.gov.bd/core/ValueSet/bd-religions-valueset
* address 1..* MS
* address only BDAddress

View File

@@ -0,0 +1,6 @@
ValueSet: BDConditionICD11VS
Id: bd-condition-icd11-valueset
Title: "Bangladesh ICD-11 MMS ValueSet"
Description: "ValueSet that includes the ICD-11 MMS CodeSystem for Condition.code"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-condition-icd11-valueset"
* include codes from system http://id.who.int/icd/release/11/mms

View File

@@ -1,6 +1,6 @@
// ---------- ValueSet ----------
ValueSet: BDEncounterClassSubsetVS
Id: bd-encounter-class-subset-vs
Id: bd-encounter-class-subset
Title: "BD Encounter Class Subset"
Description: "Subset of EncounterClass limited to inpatient, ambulatory, and emergency."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-encounter-class-subset"

View File

@@ -1,6 +1,6 @@
// ---------- ValueSet ----------
ValueSet: BDEncounterStatusSubsetVS
Id: bd-encounter-status-subset-vs
Id: bd-encounter-status-subset
Title: "BD Encounter Status Subset"
Description: "Subset of EncounterStatus limited to planned, in-progress, finished, and cancelled."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-encounter-status-subset"

View File

@@ -1,5 +1,5 @@
ValueSet: BDImmunizationReactionValueSet
Id: bd-immunization-reaction-vs
Id: bd-immunization-reaction-valueset
Title: "Bangladesh Immunization Reaction Value Set"
Description: "Allowed vaccine reactions for immunization in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-immunization-reaction-valueset"

View File

@@ -1,5 +1,5 @@
ValueSet: BDImmunizationRouteVS
Id: bd-immunization-route-vs
Id: bd-immunization-route-valueset
Title: "Bangladesh Immunization Route Value Set"
Description: "Allowed administration routes for vaccines in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-immunization-route-valueset"

View File

@@ -1,5 +1,5 @@
ValueSet: BDImmunizationSiteVS
Id: bd-immunization-site-vs
Id: bd-immunization-site-valueset
Title: "Bangladesh Immunization Site Value Set"
Description: "Allowed administration sites for vaccines in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-immunization-site-valueset"

View File

@@ -1,6 +1,8 @@
ValueSet: BDLanguageVS
Id: bd-language-vs
Id: bd-language-valueset
Title: "Allowed Languages"
Description: "Only English and Bengali are allowed"
* http://hl7.org/fhir/ValueSet/languages#en "English"
* http://hl7.org/fhir/ValueSet/languages#bn "Bengali"
* urn:ietf:bcp:47#en "English"
* urn:ietf:bcp:47#bn "Bengali"
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-language-valueset"

View File

@@ -1,5 +1,5 @@
ValueSet: BDVaccineVS
Id: bd-vaccine-vs
Id: bd-vaccine-valueset
Title: "Bangladesh Vaccine Value Set"
Description: "Allowed vaccines for immunization in Bangladesh."
* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-vaccine-valueset"

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

View File

@@ -38,4 +38,6 @@
</li>
</ul>
</li>
<li><a href="https://pdb.shrlive.dghs.gov.bd">SHR Dashboard</a></li>
<li><a href="https://en.info.shr.dghs.gov.bd">Learn More</a></li>
</ul>

View File

@@ -1,10 +1,34 @@
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hl7.org/fhir ../../input-cache/schemas/R5/fhir-single.xsd">
<h3>Heading 1</h3>
<p>
Some text
The Bangladesh Core FHIR Implementation Guide defines national base
profiles, code systems, and value sets to ensure interoperability across
digital health systems under DGHS and MoHFW.
</p>
<h3>Heading 2</h3>
<h3>Motivation</h3>
<p>
<img height="600" src="anImage.png" alt="A sample image"/>
Bangladesh has multiple health information systems developed over the
years, including DHIS2, multiple hospital automation systems, field automation systems, and HRIS. These systems use different data
standards, which makes interoperability difficult. This guide aligns
national systems with HL7® FHIR® R4 to ensure semantic consistency and
facilitate integration with global initiatives.
</p>
<h3>Scope</h3>
<ul>
<li>Patient identity management (UHID, NID, BRN)</li>
<li>Health facility and organization registry</li>
<li>Immunization, laboratory, and condition profiles</li>
<li>Terminology services (ICD-11, SNOMED subsets, local CodeSystems)</li>
</ul>
<h3>National Digital Health Architecture</h3>
<p>
The following diagram shows how FHIR-based services are integrated into
Bangladesh's national digital health architecture:
</p>
<p>
<img src="bd-core-architecture.png" alt="Bangladesh Digital Health Architecture" style="max-width:100%; height:auto"/>
</p>
</div>

View File

@@ -0,0 +1,14 @@
{
"package-id": "bd.fhir.core",
"version": "0.2.0",
"path": "https://fhir.dghs.gov.bd/core/0.2.0",
"mode": "working",
"status": "trial-use",
"sequence": "STU1",
"desc": "First draft release of the Bangladesh Core FHIR Implementation Guide",
"descmd": "# Bangladesh Core FHIR IG - Release 0.2.0\n\nThis is the first draft release of the Bangladesh Core FHIR Implementation Guide. It defines national base profiles, value sets, and extensions for health data interoperability in Bangladesh.\n\n## Key Features\n- Base profiles for common FHIR resources\n- National value sets and code systems\n- Extensions for Bangladesh-specific requirements\n\n## Status\nThis is a trial-use release. Implementers are encouraged to provide feedback.",
"first": true,
"category": "National Base",
"ci-build": "https://fhir.dghs.gov.bd/core/",
"package-list": "https://fhir.dghs.gov.bd/core/package-list.json"
}

33
package-feed.xml Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://fhir.dghs.gov.bd/core/package-feed.xml</id>
<title>Bangladesh Core FHIR IG Package Feed</title>
<subtitle>FHIR Package Feed for bd.fhir.core</subtitle>
<link rel="self" href="https://fhir.dghs.gov.bd/core/package-feed.xml"/>
<link rel="alternate" href="https://fhir.dghs.gov.bd/core/"/>
<updated>2025-10-02T00:00:00Z</updated>
<author>
<name>MIS, Directorate General of Health Services (DGHS), Bangladesh</name>
<uri>https://dghs.gov.bd</uri>
</author>
<!-- Entries will be automatically added by the CI/CD pipeline -->
<!-- Example entry structure (will be generated): -->
<!--
<entry>
<title>bd.fhir.core version 0.2.0</title>
<link rel="alternate" href="https://fhir.dghs.gov.bd/core/0.2.0/"/>
<id>https://fhir.dghs.gov.bd/core/0.2.0/</id>
<updated>2025-10-02T00:00:00Z</updated>
<summary>Release 0.2.0 of Bangladesh Core FHIR Implementation Guide</summary>
</entry>
-->
<entry>
<title>bd.fhir.core version 0.2.0</title>
<link rel="alternate" href="https://fhir.dghs.gov.bd/core/0.2.0/"/>
<id>https://fhir.dghs.gov.bd/core/0.2.0/</id>
<updated>2025-10-02T00:00:00Z</updated>
<summary>First draft release of Bangladesh Core FHIR Implementation Guide</summary>
</entry>
</feed>

23
package-list.backup Normal file
View File

@@ -0,0 +1,23 @@
{
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd",
"introduction": "The Bangladesh Core FHIR IG defines national base profiles, value sets, and extensions for health data interoperability.",
"list": [
{
"version": "current",
"desc": "Continuous Integration Build (latest development version)",
"path": "https://fhir.dghs.gov.bd/build",
"status": "ci-build",
"current": true
},
{
"version": "v0.2.0",
"date": "2025-10-02",
"desc": "First draft release of the Bangladesh Core FHIR IG.",
"path": "https://fhir.dghs.gov.bd/v0.2.0",
"status": "trial-use",
"sequence": "STU 1"
}
]
}

View File

@@ -1,20 +1,23 @@
{
"package-id" : "hl7.fhir.uv.myig",
"title" : "Your User Friendly Name for MyIG Here",
"canonical" : "http://hl7.org/fhir/uv/myig",
"introduction" : "The introduction that should appear in the FHIR IG registry",
"list" : [{
"version" : "current",
"desc" : "Continuous Integration Build (latest in version control)",
"path" : "http://hl7.org/fhir/ig/HL7/myig",
"status" : "ci-build",
"current" : true
},{
"version" : "0.1.0",
"date" : "2099-01-01",
"desc" : "Initial STU ballot (Mmm yyyy Ballot)",
"path" : "http://hl7.org/fhir/yyyyMmm/myig.html",
"status" : "ballot",
"sequence" : "DSTU 1"
}]
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd/core/",
"introduction": "The Bangladesh Core FHIR IG defines national base profiles, value sets, and extensions for health data interoperability.",
"list": [
{
"version": "current",
"desc": "Continuous Integration Build (latest in development)",
"path": "https://fhir.dghs.gov.bd/core/",
"status": "ci-build",
"current": true
},
{
"version": "0.2.0",
"date": "2025-10-02",
"desc": "First draft release of the Bangladesh Core FHIR IG",
"path": "https://fhir.dghs.gov.bd/core/0.2.0/",
"status": "trial-use",
"sequence": "STU 1"
}
]
}

View File

@@ -0,0 +1,12 @@
{
"package-id": "bd.fhir.core",
"title": "Bangladesh Core FHIR Implementation Guide",
"canonical": "https://fhir.dghs.gov.bd",
"version": "0.2.0",
"path": "https://fhir.dghs.gov.bd",
"status": "trial-use",
"sequence": "STU 1",
"mode": "milestone",
"desc": "First draft release of the Bangladesh Core FHIR IG.",
"first": true
}