File size: 4,684 Bytes
6a1cba7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env bash
# STEM BIO-AI Clinical Adjacency Detection Scan
# Usage: bash ca_detection_scan.sh /path/to/repo
# Output: detected triggers with severity classification
set -euo pipefail

REPO_PATH="${1:-.}"

print_help() {
  echo "STEM BIO-AI Clinical Adjacency Detection Scan"
  echo ""
  echo "Usage: bash ca_detection_scan.sh [REPO_PATH]"
  echo ""
  echo "  REPO_PATH  Path to local repository clone (default: current directory)"
  echo ""
  echo "Scans import statements, dependencies, and README for clinical"
  echo "adjacency triggers. Classifies as CA-DIRECT / CA-INDIRECT / CA-PLANNED."
}

if [ "${1:-}" = "--help" ] || [ "${1:-}" = "-h" ]; then
  print_help
  exit 0
fi

if [ ! -d "$REPO_PATH" ]; then
  echo "ERROR: Directory not found: $REPO_PATH"
  exit 1
fi

echo "=== STEM BIO-AI Clinical Adjacency Detection ==="
echo "Target: $REPO_PATH"
echo "Date: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo ""

HIGHEST_SEVERITY="none"
TRIGGER_COUNT=0

check_import() {
  local pattern="$1"
  local label="$2"
  local severity="$3"

  FOUND=$(grep -rln "$pattern" --include="*.py" "$REPO_PATH" 2>/dev/null || true)
  if [ -n "$FOUND" ]; then
    echo "  [${severity}] ${label}"
    echo "    Files: $(echo "$FOUND" | tr '\n' ' ')"
    TRIGGER_COUNT=$((TRIGGER_COUNT + 1))
    case "$severity" in
      CA-DIRECT)  HIGHEST_SEVERITY="CA-DIRECT" ;;
      CA-INDIRECT)
        [ "$HIGHEST_SEVERITY" != "CA-DIRECT" ] && HIGHEST_SEVERITY="CA-INDIRECT" ;;
      CA-PLANNED)
        [ "$HIGHEST_SEVERITY" = "none" ] && HIGHEST_SEVERITY="CA-PLANNED" ;;
    esac
  fi
}

check_readme() {
  local pattern="$1"
  local label="$2"
  local severity="$3"

  README_FILES=$(find "$REPO_PATH" -maxdepth 2 -iname "readme*" -o -iname "SKILL.md" 2>/dev/null || true)
  for readme in $README_FILES; do
    if grep -qil "$pattern" "$readme" 2>/dev/null; then
      echo "  [${severity}] ${label} (README: $readme)"
      TRIGGER_COUNT=$((TRIGGER_COUNT + 1))
      case "$severity" in
        CA-DIRECT)  HIGHEST_SEVERITY="CA-DIRECT" ;;
        CA-INDIRECT)
          [ "$HIGHEST_SEVERITY" != "CA-DIRECT" ] && HIGHEST_SEVERITY="CA-INDIRECT" ;;
        CA-PLANNED)
          [ "$HIGHEST_SEVERITY" = "none" ] && HIGHEST_SEVERITY="CA-PLANNED" ;;
      esac
      break
    fi
  done
}

echo "--- CODE_PATH: Import/Dependency Scan ---"

# Medical imaging
check_import "import pydicom\|from pydicom" "pydicom (DICOM imaging)" "CA-INDIRECT"
check_import "import SimpleITK\|from SimpleITK" "SimpleITK (medical imaging)" "CA-INDIRECT"
check_import "import monai\|from monai" "MONAI (medical AI)" "CA-INDIRECT"
check_import "import pathml\|from pathml" "PathML (pathology)" "CA-INDIRECT"

# Drug discovery
check_import "import autodock\|AutoDock\|autodock_vina" "AutoDock Vina (docking)" "CA-INDIRECT"
check_import "import deepchem\|from deepchem" "DeepChem (drug discovery)" "CA-INDIRECT"
check_import "REINVENT\|reinvent" "REINVENT (molecular generation)" "CA-INDIRECT"

# Genomics
check_import "ClinVar\|clinvar" "ClinVar (clinical genomics)" "CA-INDIRECT"
check_import "CPIC\|cpic\|PharmGx\|pharmacogenomic" "Pharmacogenomics (CPIC/PharmGx)" "CA-DIRECT"
check_import "DPYD\|CYP2D6\|CYP2C19\|allele" "Pharmacogene alleles" "CA-DIRECT"
check_import "gnomAD\|gnomad" "gnomAD (population genomics)" "CA-INDIRECT"
check_import "GATK\|gatk" "GATK (diagnostic pipeline)" "CA-INDIRECT"

# Clinical NLP
check_import "import ctakes\|cTAKES" "cTAKES (clinical NLP)" "CA-INDIRECT"
check_import "import medspacy\|from medspacy" "MedSpaCy (clinical NLP)" "CA-INDIRECT"
check_import "ClinicalBERT\|clinicalbert" "ClinicalBERT" "CA-INDIRECT"

# Direct clinical output
check_import "AVOID\|contraindicated\|dosage_adjustment\|treatment_recommendation" "Direct clinical output patterns" "CA-DIRECT"
check_import "patient.*risk.*score\|diagnostic.*classif\|survival.*analysis" "Patient-facing analysis" "CA-DIRECT"

echo ""
echo "--- TEXT_PATH: README Keyword Scan ---"

check_readme "clinical trial" "Clinical trial reference" "CA-INDIRECT"
check_readme "patient data" "Patient data reference" "CA-INDIRECT"
check_readme "FDA clearance\|CE mark\|SaMD" "Regulatory reference" "CA-DIRECT"
check_readme "hospital deployment" "Hospital deployment" "CA-DIRECT"
check_readme "treatment recommendation" "Treatment recommendation" "CA-DIRECT"
check_readme "planned.*clinical\|future.*clinical\|roadmap.*clinical" "Planned clinical capability" "CA-PLANNED"

echo ""
echo "=== Summary ==="
echo "Triggers found: $TRIGGER_COUNT"
echo "Highest severity: $HIGHEST_SEVERITY"
echo ""

if [ "$HIGHEST_SEVERITY" = "none" ]; then
  echo "CLINICAL_ADJACENT: false"
else
  echo "CLINICAL_ADJACENT: true"
  echo "CA_SEVERITY: $HIGHEST_SEVERITY"
fi