volunteer-management-requirements

Use when designing or implementing volunteer management in Salesforce for nonprofits using NPSP or Nonprofit Cloud — covers V4S managed package objects vs. NPC-native volunteer objects, hours tracking, scheduling, and recognition workflows. NOT for HR systems, commercial employee volunteering programs, or Field Service Lightning crew management.

Best use case

volunteer-management-requirements is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use when designing or implementing volunteer management in Salesforce for nonprofits using NPSP or Nonprofit Cloud — covers V4S managed package objects vs. NPC-native volunteer objects, hours tracking, scheduling, and recognition workflows. NOT for HR systems, commercial employee volunteering programs, or Field Service Lightning crew management.

Teams using volunteer-management-requirements should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/volunteer-management-requirements/SKILL.md --create-dirs "https://raw.githubusercontent.com/PranavNagrecha/AwesomeSalesforceSkills/main/skills/data/volunteer-management-requirements/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/volunteer-management-requirements/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How volunteer-management-requirements Compares

Feature / Agentvolunteer-management-requirementsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use when designing or implementing volunteer management in Salesforce for nonprofits using NPSP or Nonprofit Cloud — covers V4S managed package objects vs. NPC-native volunteer objects, hours tracking, scheduling, and recognition workflows. NOT for HR systems, commercial employee volunteering programs, or Field Service Lightning crew management.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Volunteer Management Requirements

This skill activates when a practitioner needs to design or implement volunteer management in a Salesforce nonprofit org. It provides the critical platform bifurcation guidance between V4S (Volunteers for Salesforce, an open-source managed package for NPSP orgs) and NPC-native volunteer objects, and prevents the most common integration mistakes caused by namespace or rollup timing misunderstandings.

---

## Before Starting

Gather this context before working on anything in this domain:

- Determine whether the org is on **NPSP** (legacy, Nonprofit Success Pack with V4S managed package) or **Nonprofit Cloud (NPC)** — the object model, namespace, and feature set are entirely different between the two.
- As of December 2025, NPSP is no longer offered to new production orgs; new implementations use NPC. Existing NPSP orgs may continue to run V4S.
- Confirm whether the organization requires skills-based volunteer matching — neither V4S nor NPC provides this natively; it requires custom objects or a third-party app.
- Identify the TotalVolunteerHours source of truth: in NPC, this field is calculated by Data Processing Engine (DPE) as a scheduled batch job, not in real time.

---

## Core Concepts

### Platform Bifurcation: V4S vs. NPC-Native

Two entirely distinct object models govern volunteer management in the Salesforce nonprofit ecosystem:

**V4S (Volunteers for Salesforce)** is an open-source managed package (GW_Volunteers namespace) deployed in NPSP orgs. It ships with:
- `GW_Volunteers__Volunteer_Campaign__c` — top-level volunteer campaign aligned to a Salesforce Campaign record
- `GW_Volunteers__Volunteer_Job__c` — a specific volunteer role or task within a campaign
- `GW_Volunteers__Volunteer_Shift__c` — a time-bound slot tied to a Job
- `GW_Volunteers__Volunteer_Hours__c` — the individual volunteer hours record linking a Contact to a Shift
- No native skills-matching object; recognition is built custom using the hours record data

**NPC (Nonprofit Cloud) native** objects are platform-first, no namespace:
- `VolunteerInitiative__c` — the top-level program or initiative
- `JobPositionAssignment__c` — assignment of a volunteer to a specific role
- `TotalVolunteerHours__c` — a calculated field populated by DPE scheduled batch, not by a trigger

### Data Processing Engine Rollup Timing (NPC)

In NPC, `TotalVolunteerHours` is NOT a real-time rollup. It is computed by a Data Processing Engine (DPE) definition that runs on a scheduled basis. This means:
- Newly logged hours do not appear immediately in the volunteer's total
- Any process or flow that reads `TotalVolunteerHours` immediately after an hours insert will see a stale value until the next DPE run
- Production DPE schedules must be configured explicitly in Setup; there is no default trigger
- Recognition workflows based on hour thresholds must trigger after DPE completion, not on the hours record insert event

### Skills Matching (Custom Build Required)

Neither V4S nor NPC ships native skills-matching functionality. Matching volunteers to roles based on skill attributes requires:
- A custom junction object linking Contact to a Skill picklist or taxonomy
- Custom matching logic in Flow or Apex that queries available shifts and filters by skill criteria
- Third-party apps (VolunteerHub, Galaxy Digital) integrated via API if the org cannot support custom development

---

## Common Patterns

### Pattern 1: V4S Shift-Based Scheduling (NPSP Orgs)

**When to use:** Org runs NPSP with V4S installed; volunteer programs are shift-based with defined time slots.

**How it works:**
1. Create a `GW_Volunteers__Volunteer_Campaign__c` record linked to a parent Salesforce Campaign
2. Create `GW_Volunteers__Volunteer_Job__c` records for each role category under the Campaign
3. Create `GW_Volunteers__Volunteer_Shift__c` records with start/end time and volunteer capacity
4. Volunteers sign up via the V4S website plugin or manually through staff; a `GW_Volunteers__Volunteer_Hours__c` record is created with Status = Confirmed
5. Hours are marked Completed post-shift; a rollup summary or trigger aggregates total hours to Contact

**Why not use Data Loader to insert directly to Opportunity:** V4S objects use the `GW_Volunteers__` namespace prefix. Any SOQL or Apex referencing these objects must use the fully qualified API name. Mixing raw API names without the prefix results in silent query failure or compile error.

### Pattern 2: NPC Initiative and Position Assignment with DPE Hours Rollup

**When to use:** Org is on Nonprofit Cloud; volunteer hours are tracked at the initiative level with DPE-based aggregation.

**How it works:**
1. Create `VolunteerInitiative__c` records for each program or event
2. Create `JobPositionAssignment__c` records linking a Contact to a defined role within an initiative
3. Log individual attendance or hours via a configured hours-tracking object or Flow
4. DPE definition reads hours logs and updates `TotalVolunteerHours__c` on the Contact during its next scheduled run
5. Recognition workflows trigger from DPE completion events or a scheduled flow, not immediately on hours logging

---

## Decision Guidance

| Situation | Recommended Approach | Reason |
|---|---|---|
| NPSP org, shift-based scheduling | V4S managed package (GW_Volunteers namespace) | Native shift and hours model; existing NPSP orgs likely already have V4S installed |
| New NPC org, initiative tracking | NPC-native VolunteerInitiative and JobPositionAssignment | No managed package required; integrated with NPC data model |
| Skills-based matching required | Custom junction object + Flow or Apex matching logic | Neither V4S nor NPC provides this natively; must be custom built |
| Real-time hours total needed | Custom rollup summary or Flow-based counter on hours object | DPE in NPC is batch, not real-time; V4S relies on trigger-based rollup |
| Volunteer self-service portal | V4S website plugin (NPSP) or Experience Cloud site with NPC objects | V4S ships a Salesforce Site plugin; NPC requires custom Experience Cloud build |
| Recognition automation at hour milestones | Flow triggered after DPE completion event (NPC) or trigger on hours record (V4S) | Timing of the trigger source must match rollup mechanism to avoid stale totals |

---

## Recommended Workflow

1. **Confirm platform** — Verify installed packages (Setup > Installed Packages) to determine if V4S (GW_Volunteers namespace) is present and whether the org is NPSP or NPC. This gates every downstream object model decision.
2. **Map volunteer lifecycle** — Document recruitment, scheduling, hours-logging, and recognition stages. Identify which are in scope and which require custom development.
3. **Select data model and document API names** — Based on platform, produce a complete object hierarchy map with fully qualified API names. For V4S, every object and field reference must include the `GW_Volunteers__` prefix.
4. **Design rollup and hours aggregation** — For NPC, document the DPE definition name, schedule frequency, and the time lag between hours logging and `TotalVolunteerHours` update. For NPSP/V4S, validate that the hours rollup trigger is active.
5. **Plan skills matching if required** — Confirm this is a custom build, not a native feature. Design the junction object model and matching logic in Flow or Apex.
6. **Design recognition workflows accounting for rollup lag** — For NPC, recognition flows must trigger after DPE completion, not on the hours insert event. Use DPE completion notification or schedule flows after the next DPE window.
7. **Validate with a pilot dataset** — Insert test volunteer records, complete a DPE run (NPC) or confirm rollup trigger fires (V4S), and verify hours totals before go-live.

---

## Review Checklist

- [ ] Platform confirmed: org is NPSP+V4S or NPC-native — not assuming one from the other
- [ ] All SOQL and Apex references to V4S objects use fully qualified namespace prefix (`GW_Volunteers__`)
- [ ] DPE schedule documented and downstream processes account for rollup lag (NPC)
- [ ] Skills-matching requirement scoped as custom build if needed — not expected to be native
- [ ] Recognition milestones trigger after DPE rollup completion, not on immediate hours insert
- [ ] Volunteer self-service portal approach selected (V4S plugin vs. Experience Cloud custom)
- [ ] End-to-end hours logging tested with confirmed rollup to Contact total

---

## Salesforce-Specific Gotchas

1. **Namespace prefix omission** — V4S objects and fields require `GW_Volunteers__` prefix in all API references. Apex classes, SOQL queries, and metadata that omit this prefix either fail at compile time or return no rows silently — a particularly dangerous silent failure mode in data migrations.
2. **DPE is not a trigger** — `TotalVolunteerHours` in NPC is updated by a scheduled DPE batch job. It will not reflect hours logged in the same session or even the same day if the DPE has not run. Any real-time display or recognition automation that reads this field immediately after an hours record insert will see a stale value.
3. **V4S and NPC objects must not be mixed** — An org on NPC that also has V4S installed for historical data must carefully segment processes. Cross-joining V4S shift records (GW namespace) with NPC initiative records in SOQL or Flows produces incorrect data associations and is not supported.

---

## Output Artifacts

| Artifact | Description |
|---|---|
| Platform selection recommendation | Written guidance confirming V4S or NPC-native with rationale |
| Object and field inventory | List of objects, fully qualified API names, and field mappings for the chosen platform |
| DPE schedule documentation | DPE job name, frequency, and lag impact on downstream processes (NPC only) |
| Custom build scope document | Specification for skills-matching and recognition if required |

---

## Related Skills

- `data/nonprofit-data-architecture` — For overall NPSP/NPC data model design and constituent data governance
- `data/constituent-data-migration` — For migrating volunteer contact records into NPSP using DataImport__c
- `architect/nonprofit-platform-architecture` — For architectural decisions spanning V4S, NPC, and third-party volunteer apps

Related Skills

session-management-and-timeout

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when configuring session timeout values, concurrent session limits, session IP locking, or logout behavior in Salesforce. Covers org-wide session settings, profile-level overrides, Connected App session policies, and Metadata API SecuritySettings deployment. NOT for OAuth token refresh flows, login IP ranges, or MFA/identity-provider configuration.

oauth-token-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when work depends on how Salesforce OAuth access and refresh tokens are issued, refreshed, rotated, revoked, or introspected for a Connected App or API client—including unexpected logouts, invalid_grant after refresh, or designing token incident response. NOT for choosing which OAuth grant or Connected App flow to implement (use integration/oauth-flows-and-connected-apps), Named Credential packaging (use integration/named-credentials-setup), or broad Connected App IP and PKCE policy hardening without a token-lifecycle angle (use security/connected-app-security-policies).

certificate-and-key-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when creating, uploading, or rotating certificates in Salesforce, configuring mutual TLS (mTLS) client authentication, managing the Java KeyStore for CA-signed certificates, diagnosing certificate expiry in JWT OAuth flows, or understanding which certificate types Salesforce supports and how to migrate them between orgs. NOT for Named Credential configuration (use named-credentials-setup skill), NOT for Shield Platform Encryption key management. Trigger keywords: Certificate and Key Management, self-signed certificate, CA-signed certificate, mutual TLS, mTLS, keystore, JKS, PKCS12, certificate rotation, certificate expiry, JWT certificate.

flexcard-state-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when designing FlexCard actions, conditional visibility, and state that must survive navigation, refresh, or parent/child card transitions. Triggers: 'flexcard state', 'flexcard conditional visibility', 'flexcard actions', 'flexcard refresh', 'child flexcard state'. NOT for raw LWC state or for OmniScript step state.

lwc-state-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Share state across LWCs using pub/sub, Lightning Message Service, @wire, and reactive stores. NOT for in-component reactivity.

lwc-focus-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when building LWCs that need to manage focus explicitly — modal dialogs, wizard flows, dynamic inserts, list updates, error summaries, and focus after async work. Covers focus restoration, focus traps, programmatic focus across shadow DOM, and patterns for announcing changes to assistive tech. Does NOT cover general LWC a11y audit (see lwc-accessibility).

revenue-lifecycle-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when implementing or troubleshooting Salesforce Revenue Lifecycle Management (RLM) — the native Revenue Cloud product covering order-to-cash lifecycle, Dynamic Revenue Orchestrator (DRO) fulfillment plan design, asset amendments, billing schedule creation via Connect API, and invoice management. Triggers on: Dynamic Revenue Orchestrator, RLM order decomposition, DRO fulfillment swimlanes, native Revenue Cloud billing schedule, asset lifecycle management Salesforce. NOT for CPQ quoting or pricing rules (use cpq-* skills), not for the legacy Salesforce Billing managed package with blng__* objects (different product entirely), not for standard Order objects without Revenue Cloud features.

loyalty-management-setup

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when setting up or extending Salesforce Loyalty Management — including program and currency creation, tier group design, qualifying vs. non-qualifying point currency separation, DPE batch job activation, partner loyalty configuration, and member portal setup on Experience Cloud. Triggers on: Loyalty Management setup, loyalty tier setup Salesforce, qualifying points vs redemption points, DPE batch job for loyalty, partner loyalty program Salesforce, loyalty member portal. NOT for Marketing Cloud engagement program design (separate product), not for B2B loyalty via Sales Cloud (standard opportunity, not loyalty program), not for general Experience Cloud site setup (use experience-cloud-setup skill).

scratch-org-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when designing, configuring, or troubleshooting scratch orgs: definition file structure, edition selection, allocation limits, Org Shape, CI automation via ScratchOrgInfo, and lifecycle management from the Dev Hub. NOT for SFDX CLI basics (use sf-cli-and-sfdx-essentials), sandbox management, or production org administration.

release-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when planning, coordinating, or governing Salesforce releases: version numbering, rollback strategy, release notes, go/no-go criteria, release calendar, and sandbox preview alignment. NOT for deployment mechanics (use devops/post-deployment-validation or devops/change-set-deployment).

pipeline-secrets-management

8
from PranavNagrecha/AwesomeSalesforceSkills

Store and inject Salesforce auth URLs, JWT keys, and API credentials into CI without leaking them. NOT for runtime secrets in Apex.

isv-license-management-and-trialforce

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when an ISV partner is wiring license enforcement, trial provisioning, or feature-flag distribution into a managed package — covers License Management App (LMA) install and registration, Lead/License object lifecycle, Trialforce Management Org (TMO) and Trialforce Source Org (TSO) split, Trialforce templates, SignupRequest API, AppExchange Checkout integration, and Feature Parameters (LmoToSubscriber / SubscriberToLmo) as the cross-org configuration channel. Triggers: 'register package with LMA', 'set up Trialforce', 'add feature parameter to managed package', 'license expired in subscriber org', 'AppExchange Checkout licensing'. NOT for general managed-package version creation, ancestor pinning, or PostInstall handler design (use managed-package-development); NOT for second-generation packaging mechanics (use second-generation-managed-packages); NOT for non-ISV experience-cloud login licensing (use experience-cloud-licensing-model).