Igrantio dcql claim sets
DCQL pattern: claim_sets with fallback for selective disclosure - prefer a minimal boolean claim (is_over_21) and fall back to birth_date only when the preferred claim is unavailable, in an OpenID4VP verification of a PID SD-JWT on the iGrant.io Organisation Wallet Suite. Data-minimised age verification for EUDI Wallet (EUDIW) under eIDAS 2.0 and GDPR.From its SKILL.md
npx -y skills add L3-iGrant/skills --skill igrantio-dcql-claim-setsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.1 KB, 622 tokens by cl100k_base, as published. Nobody here has run it
DCQL: claim sets (preferred claim with fallback)
Scenario
A verifier needs an age check. It prefers the minimal boolean is_over_21;
if the wallet's PID lacks it, the query falls back to birth_date.
claim_sets are ordered - the wallet satisfies the first set it can.
Before you build: run the integrator intake in igrantio-ows-overview - environment, API key, tenancy, backend host, webhooks, frontend - one question at a time, a recommended default with each.
The DCQL query
{
"credentials": [
{
"id": "pid",
"format": "dc+sd-jwt",
"meta": {
"vct_values": [
"eu.europa.ec.eudi:pid.1"
]
},
"claims": [
{
"id": "over_21",
"path": [
"is_over_21"
]
},
{
"id": "birthdate",
"path": [
"birth_date"
]
}
],
"claim_sets": [
[
"over_21"
],
[
"birthdate"
]
]
}
]
}
Run it on OWS
- Store the query as a presentation definition, keep the
presentationDefinitionId(igrantio-ows-overviewapi-reference §3). - Send the verification request (v3), render QR / DC API, await
presentation_ackedwithverified === true(api-reference §2). - Read the disclosed claim from
presentation[0]- handle BOTH shapes: the boolean, or a birthdate you must compare yourself.
Adjust for your deployment
- Change the threshold claim (
is_over_18,is_over_65) andpathto match your PID profile;vct_valuesto your PID VCT. - Order
claim_setsmost-minimal first - that is the point of the pattern. - If regulators forbid receiving birthdate, drop the fallback set and handle "no match" in UX instead.
Cross-references
igrantio-eu-age-verification- the mdoc age attestation profile (boolean-only, no fallback).igrantio-dcql-credential-sets- alternatives across credentials rather than claims.
Source of truth
This workflow mirrors https://docs.igrant.io/docs/dcql-2-4-2-claim-set-age-verification/ (query detailed in https://docs.igrant.io/concepts/eudi-wallet-dcql-openid4vp-business-wallet-payments/, §2.4.2). Before implementing, fetch the doc page; if it disagrees with this skill, the documentation wins - follow it and report the drift so the skill can be updated.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.