PublicSchema

When programs serve the same people, their systems need a shared language. PublicSchema provides it: agreed definitions for concepts, fields, and value codes. Start here; adapt and extend for your country's context.

Why a shared vocabulary matters

A government wants to know whether the child enrolling in school is the same child registered at birth and the same child seen in the immunization roster. The civil registry has the authoritative record. The hospital recorded the delivery. The school admits a child whose age is estimated because no certificate was presented. The three records describe the same person, but their fields and values do not align, so reconciliation requires manual work that takes weeks and introduces errors.

System Field name Values
Hospital information system delivery_record Date and time of delivery, sex assigned, mother's hospital MRN
Civil registry birth_record Exact date, full legal name, parents' national identifiers, place of birth
School enrolment pupil_record Estimated age in years

Same person, three systems, three different models of who they are and when they were born.

This is the coordination tax: every time two programs need to share data, someone spends weeks mapping fields and translating codes. It is expensive, fragile, and starts over every time a system upgrades.

These aren't problems you solve with a lookup table. You cannot recover an exact date of birth from an estimated age, and the identifiers used by each system point to nothing the others can verify. Meanwhile, one system describes the family unit by hospital admission, another by parental link in a register, and a third not at all. The concepts themselves don't align. Shared definitions don't just save time; they make accurate exchange possible in the first place.

Without shared definitions Custom mapping per pair.
With shared definitions Each system maps once to the shared vocabulary

PublicSchema does not prescribe which representation is correct. It gives you a common reference point so you can see the differences, decide what fits your context, and extend it where your programs need more. Adopt the parts that work; leave the rest.

What the schema contains

PublicSchema is a shared set of definitions. When one program says "Person", "Household", or "Enrollment", another program reading the same schema knows exactly what is meant, not just what fields to expect.

01

Shared meaning, not shared software

Definitions for what the words mean. Your systems stay yours.

02

Use what fits

Everything is optional. Adopt the parts you need, extend the rest.

03

Built on what already exists

International standards (ISO, UN, FHIR) reused wherever they cover the ground.

04

Citable, permanently

Every definition has a stable web address that can be referenced or carried in a digital credential.

Concepts and properties

59 concepts, 391 properties

Entities like Person, Enrollment, and Payment get clear definitions written for program managers. Each concept carries named, typed properties (given_name, date_of_birth, enrollment_status) defined once and reused across concepts.

Aligned with OpenSPP · OpenCRVS · OpenIMIS · DHIS2

Vocabularies

115 vocabularies

Controlled value sets for fields like gender, country, benefit modality, and enrollment status. Where international standards exist (ISO, FHIR), we reference them. Where they don't, we define a common set based on observed convergence across systems.

Based on ISO · ILO · UN M49 · UNESCO · FHIR

How it relates to other standards

If you work with digital public infrastructure, you have probably encountered standards like the Digital Convergence Initiative (DCI), GovStack, or the EU Core Person Vocabulary. Here is how PublicSchema fits alongside them.

Standards like DCI and GovStack define how data moves between systems: API contracts, transport protocols, building blocks. They include data models, but those models serve the transport layer. PublicSchema starts from the other direction: what does "enrollment" mean? What properties describe a payment? What values are valid for benefit modality? The semantic model is the primary artifact.

The two approaches are complementary. DCI specifies how to move enrollment records between systems; PublicSchema specifies what "enrollment," "active," and "benefit_modality" mean in those records. EU Core Person Vocabulary handles identity attributes; PublicSchema extends into the delivery lifecycle beyond name and date of birth.

Grounded in evidence

PublicSchema is grounded in a comparative analysis of real-world systems spanning identity (MOSIP), social protection (OpenSPP, openIMIS), health (DHIS2), and civil registration (OpenCRVS), alongside the relevant interoperability standards (DCI, FHIR). Where international standards (ISO for gender, countries, currencies) cover the ground, we reference them. Where they don't, we define a common set based on how these systems actually work.

See how systems compare

Where to start

“I coordinate programs that serve overlapping populations”

You need consolidated numbers, deduplicated beneficiary lists, or referral pathways between services. PublicSchema gives you shared definitions so data from different programs can be compared and linked.

“I build or maintain integrations between systems”

You need shared field names and value codes so systems can exchange data without custom translation layers. Map your system once; every other mapped system becomes interoperable.

“I’m writing requirements for a new system”

You need concrete interoperability specifications for your RFP, not “the system must be interoperable.” Reference PublicSchema properties and vocabulary codes so vendors have a testable target. Where your country's programs need more (specific benefit categories, legacy identifiers), extend PublicSchema in your own namespace; interoperability is preserved.

“I’m analyzing programs across countries or sectors”

You need a structured framework for comparison so divergences become visible and nameable. PublicSchema's concept and property inventory gives you a common grid to map against.

Browse the schema

PublicSchema is maintained as an open project. Source on GitHub About the project