DonorPerfect is a widely-used nonprofit fundraising CRM — a natural vendor #9 alongside CiviCRM (added in v0.4.0).
Follow the documented 6-file checklist in docs/adding-a-vendor.md. Register at Tier 3 (bootstrap — verify with real payloads), mirroring how Ellucian and CiviCRM were introduced.
Scope
Do not change the ConstituentEvent schema shape (see docs/schema-governance.md). The pattern is fully worked in the CiviCRM and Ellucian commits.
DonorPerfect is a widely-used nonprofit fundraising CRM — a natural vendor #9 alongside CiviCRM (added in v0.4.0).
Follow the documented 6-file checklist in
docs/adding-a-vendor.md. Register at Tier 3 (bootstrap — verify with real payloads), mirroring how Ellucian and CiviCRM were introduced.Scope
src/schema/master.ts— addDONORPERFECTtoSourceSystemSchemasrc/utils/sourceSystem.ts+src/utils/driftCapture.ts— register slug + drift configsrc/mappers/donorperfect.ts— Zod payload schema +mapDonorperfectToMaster(copysrc/mappers/civicrm.ts)src/mappers/resolve.ts+src/mappers/index.ts— wire the mappersrc/config/webhookRoutes.ts— Tier 3 + HMAC (DONORPERFECT_WEBHOOK_SECRET,x-donorperfect-signature)samples/donorperfect-*.json+ fixtures + unit/integration testsnpm run validatepassesDo not change the
ConstituentEventschema shape (seedocs/schema-governance.md). The pattern is fully worked in the CiviCRM and Ellucian commits.