Skip to content
Back to skills

Prisma Tracking

ASecurity

Track PRISMA 2020 flow for systematic literature reviews. Updates counts at each stage of literature acquisition. Generates compliant flow diagrams.

  • 7 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
databasespythondatabase

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add rhowardstone/Claude-Code-Scientist --skill prisma-tracking --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Prisma Tracking?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Prisma Tracking
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rhowardstone-prisma-tracking/badge)](https://www.skillsdirectory.com/skills/rhowardstone-prisma-tracking)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: prisma-tracking
description: Track PRISMA 2020 flow for systematic literature reviews. Updates counts at each stage of literature acquisition. Generates compliant flow diagrams.
user-invocable: false
---

# PRISMA Flow Tracking

Track the PRISMA 2020 flow throughout literature acquisition.

## PRISMA 2020 Stages

```
Identification
├── Records from databases (OpenAlex, PubMed, Semantic Scholar)
├── Records from citation searching
└── Records from other sources

Screening
├── Records after duplicates removed
├── Records screened
└── Records excluded (with reasons)

Eligibility
├── Reports sought for retrieval
├── Reports not retrieved (with reasons)
├── Reports assessed for eligibility
└── Reports excluded (with reasons)

Included
├── Studies included in review
└── Reports of included studies
```

## World Model Integration

Track in `$SESSION_DIR/world_model.json`:

```json
{
  "prisma_flow": {
    "identification": {
      "databases": {
        "openalex": 250,
        "pubmed": 180,
        "semantic_scholar": 120
      },
      "citation_searching": 85,
      "other_sources": 15,
      "total_identified": 650
    },
    "screening": {
      "after_duplicates_removed": 420,
      "records_screened": 420,
      "records_excluded": 280,
      "exclusion_reasons": {
        "not_relevant_to_rqs": 150,
        "wrong_study_type": 80,
        "wrong_language": 30,
        "retracted": 20
      }
    },
    "eligibility": {
      "reports_sought": 140,
      "reports_not_retrieved": 25,
      "not_retrieved_reasons": {
        "paywalled": 15,
        "link_broken": 10
      },
      "reports_assessed": 115,
      "reports_excluded": 45,
      "exclusion_reasons": {
        "insufficient_data": 25,
        "duplicate_cohort": 12,
        "wrong_outcomes": 8
      }
    },
    "included": {
      "studies_in_review": 70,
      "reports_of_studies": 70
    }
  }
}
```

## Update Functions

After each literature acquisition step, update PRISMA counts:

### After Initial Search
```python
prisma_flow["identification"]["databases"]["openalex"] = len(openalex_results)
prisma_flow["identification"]["databases"]["pubmed"] = len(pubmed_results)
prisma_flow["identification"]["total_identified"] = sum(all_results)
```

### After Deduplication
```python
prisma_flow["screening"]["after_duplicates_removed"] = len(unique_papers)
```

### After Relevance Filtering
```python
prisma_flow["screening"]["records_excluded"] = excluded_count
prisma_flow["screening"]["exclusion_reasons"]["not_relevant_to_rqs"] = not_relevant
```

### After Citation Expansion
```python
prisma_flow["identification"]["citation_searching"] += new_from_citations
```

### After Full-Text Retrieval
```python
prisma_flow["eligibility"]["reports_sought"] = attempted
prisma_flow["eligibility"]["reports_not_retrieved"] = failed
```

### After Final Inclusion
```python
prisma_flow["included"]["studies_in_review"] = final_count
```

## Generate PRISMA Diagram

Use matplotlib to generate the flow diagram:

```python
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

def generate_prisma_diagram(prisma_flow, output_path):
    fig, ax = plt.subplots(1, 1, figsize=(12, 16))
    ax.set_xlim(0, 12)
    ax.set_ylim(0, 16)
    ax.axis('off')

    # Identification box
    id_box = mpatches.FancyBboxPatch((0.5, 13), 11, 2.5,
                                      boxstyle="round,pad=0.1",
                                      facecolor='lightblue', edgecolor='black')
    ax.add_patch(id_box)
    ax.text(6, 14.5, 'Identification', fontsize=14, fontweight='bold', ha='center')
    ax.text(6, 13.8, f"Records from databases (n={prisma_flow['identification']['total_identified']})",
            ha='center')

    # ... continue for Screening, Eligibility, Included

    plt.savefig(output_path.replace('.pdf', '.png'), dpi=300, bbox_inches='tight')
    plt.savefig(output_path, bbox_inches='tight')
```

## Validation

Before synthesis, verify PRISMA flow is complete:

```python
def validate_prisma(prisma_flow):
    errors = []

    if prisma_flow["identification"]["total_identified"] == 0:
        errors.append("No papers identified - literature search not run")

    if prisma_flow["screening"]["after_duplicates_removed"] == 0:
        errors.append("Deduplication not tracked")

    if prisma_flow["included"]["studies_in_review"] == 0:
        errors.append("No studies included - check filtering")

    # Flow consistency
    if prisma_flow["screening"]["after_duplicates_removed"] > prisma_flow["identification"]["total_identified"]:
        errors.append("More papers after dedup than identified - impossible")

    return errors
```

## Completion Checklist

- [ ] All identification sources logged with counts
- [ ] Duplicates removed count recorded
- [ ] Exclusion reasons documented at each stage
- [ ] Full-text retrieval attempts logged
- [ ] Final included count matches cited papers
- [ ] PRISMA diagram generated (PNG + PDF)

**Track every paper. Document every exclusion. Generate compliant diagrams.**

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.