@learncard/credential-library 2.0.5 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -1
- package/SOURCES.md +63 -0
- package/dist/credential-library.cjs.development.js +1577 -32
- package/dist/credential-library.cjs.development.js.map +4 -4
- package/dist/credential-library.cjs.production.min.js +3 -3
- package/dist/credential-library.cjs.production.min.js.map +4 -4
- package/dist/credential-library.esm.js +1563 -18
- package/dist/credential-library.esm.js.map +4 -4
- package/dist/fixtures/clr/military-comprehensive-record.d.ts +4 -0
- package/dist/fixtures/clr/military-comprehensive-record.d.ts.map +1 -0
- package/dist/fixtures/clr/mixed-role-portfolio.d.ts +3 -0
- package/dist/fixtures/clr/mixed-role-portfolio.d.ts.map +1 -0
- package/dist/fixtures/custom/course-enrollment.d.ts +3 -0
- package/dist/fixtures/custom/course-enrollment.d.ts.map +1 -0
- package/dist/fixtures/custom/exam-accommodation.d.ts +3 -0
- package/dist/fixtures/custom/exam-accommodation.d.ts.map +1 -0
- package/dist/fixtures/index.d.ts +16 -1
- package/dist/fixtures/index.d.ts.map +1 -1
- package/dist/fixtures/obv3/food-allergen-facilitator.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-facilitator.d.ts.map +1 -0
- package/dist/fixtures/obv3/food-allergen-practice-fr.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-practice-fr.d.ts.map +1 -0
- package/dist/fixtures/obv3/food-allergen-practice.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-practice.d.ts.map +1 -0
- package/dist/fixtures/obv3/phishing-transfer.d.ts +3 -0
- package/dist/fixtures/obv3/phishing-transfer.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-apprenticeship.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-apprenticeship.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-badge-override.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-badge-override.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-certification.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-certification.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-expired.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-expired.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-journeyman.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-journeyman.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-license.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-license.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-master.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-master.d.ts.map +1 -0
- package/package.json +7 -6
- package/src/__tests__/curated-examples.test.ts +248 -0
- package/src/__tests__/issuance.test.ts +35 -0
- package/src/fixtures/clr/military-comprehensive-record.ts +155 -0
- package/src/fixtures/clr/mixed-role-portfolio.ts +490 -0
- package/src/fixtures/custom/course-enrollment.ts +56 -0
- package/src/fixtures/custom/exam-accommodation.ts +56 -0
- package/src/fixtures/index.ts +49 -0
- package/src/fixtures/obv3/food-allergen-facilitator.ts +108 -0
- package/src/fixtures/obv3/food-allergen-practice-fr.ts +107 -0
- package/src/fixtures/obv3/food-allergen-practice.ts +105 -0
- package/src/fixtures/obv3/phishing-transfer.ts +163 -0
- package/src/fixtures/obv3/qualification-apprenticeship.ts +58 -0
- package/src/fixtures/obv3/qualification-badge-override.ts +64 -0
- package/src/fixtures/obv3/qualification-certification.ts +59 -0
- package/src/fixtures/obv3/qualification-expired.ts +59 -0
- package/src/fixtures/obv3/qualification-journeyman.ts +58 -0
- package/src/fixtures/obv3/qualification-license.ts +58 -0
- package/src/fixtures/obv3/qualification-master.ts +58 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { UnsignedVCValidator } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import type { CredentialFixture } from '../../types';
|
|
4
|
+
|
|
5
|
+
// Example corpus provenance and alignment attribution: ../../../SOURCES.md.
|
|
6
|
+
export const customCourseEnrollment: CredentialFixture = {
|
|
7
|
+
id: 'custom/course-enrollment',
|
|
8
|
+
name: 'Course Enrollment',
|
|
9
|
+
description:
|
|
10
|
+
'Administrative course enrollment claim without completion, assessment, or skill attainment.',
|
|
11
|
+
spec: 'custom',
|
|
12
|
+
profile: 'generic',
|
|
13
|
+
features: ['expiration'],
|
|
14
|
+
source: 'synthetic',
|
|
15
|
+
signed: false,
|
|
16
|
+
validity: 'valid',
|
|
17
|
+
validator: UnsignedVCValidator,
|
|
18
|
+
tags: ['enrollment', 'administrative', 'non-achievement'],
|
|
19
|
+
|
|
20
|
+
credential: {
|
|
21
|
+
'@context': [
|
|
22
|
+
'https://www.w3.org/ns/credentials/v2',
|
|
23
|
+
{
|
|
24
|
+
designation: 'https://fixtures.example.org/frenchfry/vocab/designation',
|
|
25
|
+
claimScope: 'https://fixtures.example.org/frenchfry/vocab/claimScope',
|
|
26
|
+
claimRole: 'https://fixtures.example.org/frenchfry/vocab/claimRole',
|
|
27
|
+
Profile: 'https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile',
|
|
28
|
+
url: {
|
|
29
|
+
'@id': 'https://schema.org/url',
|
|
30
|
+
'@type': 'https://www.w3.org/2001/XMLSchema#anyURI',
|
|
31
|
+
},
|
|
32
|
+
CourseEnrollmentCredential:
|
|
33
|
+
'https://fixtures.example.org/frenchfry/vocab/CourseEnrollmentCredential',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
id: 'urn:uuid:6ea43ad2-3fb5-55dd-aee8-6380b7ec0725',
|
|
37
|
+
type: ['VerifiableCredential', 'CourseEnrollmentCredential'],
|
|
38
|
+
issuer: {
|
|
39
|
+
id: 'did:web:registrar.metropolis-university-example.edu',
|
|
40
|
+
type: ['Profile'],
|
|
41
|
+
name: 'Metropolis University – Office of the Registrar',
|
|
42
|
+
url: 'https://metropolis-university-example.edu',
|
|
43
|
+
},
|
|
44
|
+
validFrom: '2026-09-01T00:00:00Z',
|
|
45
|
+
validUntil: '2027-09-01T00:00:00Z',
|
|
46
|
+
name: 'Course Enrollment',
|
|
47
|
+
description:
|
|
48
|
+
'Administrative course enrollment claim without completion, assessment, or skill attainment.',
|
|
49
|
+
credentialSubject: {
|
|
50
|
+
id: 'https://fixtures.example.org/frenchfry/personas/admin-5',
|
|
51
|
+
designation: 'Course enrollment',
|
|
52
|
+
claimRole: 'student',
|
|
53
|
+
claimScope: 'Enrollment in a fictional database course',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { UnsignedVCValidator } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import type { CredentialFixture } from '../../types';
|
|
4
|
+
|
|
5
|
+
// Example corpus provenance and alignment attribution: ../../../SOURCES.md.
|
|
6
|
+
export const customExamAccommodation: CredentialFixture = {
|
|
7
|
+
id: 'custom/exam-accommodation',
|
|
8
|
+
name: 'Extended Exam Time',
|
|
9
|
+
description:
|
|
10
|
+
'Administrative exam accommodation claim without a diagnosis or assessed achievement.',
|
|
11
|
+
spec: 'custom',
|
|
12
|
+
profile: 'generic',
|
|
13
|
+
features: ['expiration'],
|
|
14
|
+
source: 'synthetic',
|
|
15
|
+
signed: false,
|
|
16
|
+
validity: 'valid',
|
|
17
|
+
validator: UnsignedVCValidator,
|
|
18
|
+
tags: ['accommodation', 'administrative', 'non-achievement'],
|
|
19
|
+
|
|
20
|
+
credential: {
|
|
21
|
+
'@context': [
|
|
22
|
+
'https://www.w3.org/ns/credentials/v2',
|
|
23
|
+
{
|
|
24
|
+
designation: 'https://fixtures.example.org/frenchfry/vocab/designation',
|
|
25
|
+
claimScope: 'https://fixtures.example.org/frenchfry/vocab/claimScope',
|
|
26
|
+
claimRole: 'https://fixtures.example.org/frenchfry/vocab/claimRole',
|
|
27
|
+
Profile: 'https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile',
|
|
28
|
+
url: {
|
|
29
|
+
'@id': 'https://schema.org/url',
|
|
30
|
+
'@type': 'https://www.w3.org/2001/XMLSchema#anyURI',
|
|
31
|
+
},
|
|
32
|
+
ExamAccommodationCredential:
|
|
33
|
+
'https://fixtures.example.org/frenchfry/vocab/ExamAccommodationCredential',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
id: 'urn:uuid:0e341ee2-6006-51b9-a559-62d7ac21a4e1',
|
|
37
|
+
type: ['VerifiableCredential', 'ExamAccommodationCredential'],
|
|
38
|
+
issuer: {
|
|
39
|
+
id: 'did:web:university-example.edu',
|
|
40
|
+
type: ['Profile'],
|
|
41
|
+
name: 'State University',
|
|
42
|
+
url: 'https://university-example.edu',
|
|
43
|
+
},
|
|
44
|
+
validFrom: '2026-09-01T00:00:00Z',
|
|
45
|
+
validUntil: '2027-09-01T00:00:00Z',
|
|
46
|
+
name: 'Extended Exam Time',
|
|
47
|
+
description:
|
|
48
|
+
'Administrative exam accommodation claim without a diagnosis or assessed achievement.',
|
|
49
|
+
credentialSubject: {
|
|
50
|
+
id: 'https://fixtures.example.org/frenchfry/personas/admin-20',
|
|
51
|
+
designation: 'Extended exam time',
|
|
52
|
+
claimRole: 'recipient',
|
|
53
|
+
claimScope: 'Fictional extra time provision; no diagnosis included',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
package/src/fixtures/index.ts
CHANGED
|
@@ -31,6 +31,13 @@ import {
|
|
|
31
31
|
} from './obv3/student-sample-badges';
|
|
32
32
|
import { obv3StudentAdditionalCredentials } from './obv3/student-additional-credentials';
|
|
33
33
|
import { obv3RubricAlignedBadge } from './obv3/rubric-aligned-badge';
|
|
34
|
+
import { obv3QualificationLicense } from './obv3/qualification-license';
|
|
35
|
+
import { obv3QualificationCertification } from './obv3/qualification-certification';
|
|
36
|
+
import { obv3QualificationApprenticeship } from './obv3/qualification-apprenticeship';
|
|
37
|
+
import { obv3QualificationJourneyman } from './obv3/qualification-journeyman';
|
|
38
|
+
import { obv3QualificationMaster } from './obv3/qualification-master';
|
|
39
|
+
import { obv3QualificationExpired } from './obv3/qualification-expired';
|
|
40
|
+
import { obv3QualificationBadgeOverride } from './obv3/qualification-badge-override';
|
|
34
41
|
|
|
35
42
|
// CLR v2
|
|
36
43
|
import { clrMinimal } from './clr/minimal';
|
|
@@ -39,6 +46,7 @@ import { clrUniversityTranscript } from './clr/university-transcript';
|
|
|
39
46
|
import { clrStudentOfficialAcademicTranscript } from './clr/student-official-academic-transcript';
|
|
40
47
|
import { clrEmploymentRecord } from './clr/employment-record';
|
|
41
48
|
import { clrTrainingProviderRecord } from './clr/training-provider-record';
|
|
49
|
+
import { clrMilitaryComprehensiveRecord } from './clr/military-comprehensive-record';
|
|
42
50
|
import { clrMilitaryTrainingRecord } from './clr/military-training-record';
|
|
43
51
|
import { clrProfessionalOrganizationRecord } from './clr/professional-organization-record';
|
|
44
52
|
import { clrLicensingRegulatoryRecord } from './clr/licensing-regulatory-record';
|
|
@@ -79,6 +87,15 @@ import {
|
|
|
79
87
|
} from './clr/provisional-transcript';
|
|
80
88
|
import { clrDemoIsdDiplomaAssessments } from './clr/demo-isd-diploma-assessments';
|
|
81
89
|
|
|
90
|
+
// Curated practice, role, language, and administrative examples
|
|
91
|
+
import { obv3FoodAllergenPractice } from './obv3/food-allergen-practice';
|
|
92
|
+
import { obv3FoodAllergenFacilitator } from './obv3/food-allergen-facilitator';
|
|
93
|
+
import { obv3FoodAllergenPracticeFr } from './obv3/food-allergen-practice-fr';
|
|
94
|
+
import { obv3PhishingTransfer } from './obv3/phishing-transfer';
|
|
95
|
+
import { customCourseEnrollment } from './custom/course-enrollment';
|
|
96
|
+
import { customExamAccommodation } from './custom/exam-accommodation';
|
|
97
|
+
import { clrMixedRolePortfolio } from './clr/mixed-role-portfolio';
|
|
98
|
+
|
|
82
99
|
// SD-JWT VC
|
|
83
100
|
import { sdJwtVcCourseCompletion } from './sd-jwt-vc/course-completion';
|
|
84
101
|
|
|
@@ -105,6 +122,13 @@ export const ALL_FIXTURES: LibraryFixture[] = [
|
|
|
105
122
|
obv3PlugfestJff2,
|
|
106
123
|
obv3OneedtechFull,
|
|
107
124
|
obv3ProfessionalCert,
|
|
125
|
+
obv3QualificationLicense,
|
|
126
|
+
obv3QualificationCertification,
|
|
127
|
+
obv3QualificationApprenticeship,
|
|
128
|
+
obv3QualificationJourneyman,
|
|
129
|
+
obv3QualificationMaster,
|
|
130
|
+
obv3QualificationExpired,
|
|
131
|
+
obv3QualificationBadgeOverride,
|
|
108
132
|
obv3MicroCredential,
|
|
109
133
|
obv3CourseCompletion,
|
|
110
134
|
obv3StandaloneFullCourse,
|
|
@@ -125,6 +149,7 @@ export const ALL_FIXTURES: LibraryFixture[] = [
|
|
|
125
149
|
clrEmploymentRecord,
|
|
126
150
|
clrTrainingProviderRecord,
|
|
127
151
|
clrMilitaryTrainingRecord,
|
|
152
|
+
clrMilitaryComprehensiveRecord,
|
|
128
153
|
clrProfessionalOrganizationRecord,
|
|
129
154
|
clrLicensingRegulatoryRecord,
|
|
130
155
|
clrMixedCareerRecord,
|
|
@@ -158,6 +183,15 @@ export const ALL_FIXTURES: LibraryFixture[] = [
|
|
|
158
183
|
clrProvisionalTranscript,
|
|
159
184
|
clrDemoIsdDiplomaAssessments,
|
|
160
185
|
|
|
186
|
+
// Curated examples
|
|
187
|
+
obv3FoodAllergenPractice,
|
|
188
|
+
obv3FoodAllergenFacilitator,
|
|
189
|
+
obv3FoodAllergenPracticeFr,
|
|
190
|
+
obv3PhishingTransfer,
|
|
191
|
+
customCourseEnrollment,
|
|
192
|
+
customExamAccommodation,
|
|
193
|
+
clrMixedRolePortfolio,
|
|
194
|
+
|
|
161
195
|
// SD-JWT VC
|
|
162
196
|
sdJwtVcCourseCompletion,
|
|
163
197
|
];
|
|
@@ -186,6 +220,13 @@ export {
|
|
|
186
220
|
clrNdStudentTranscript,
|
|
187
221
|
obv3OneedtechFull,
|
|
188
222
|
obv3ProfessionalCert,
|
|
223
|
+
obv3QualificationLicense,
|
|
224
|
+
obv3QualificationCertification,
|
|
225
|
+
obv3QualificationApprenticeship,
|
|
226
|
+
obv3QualificationJourneyman,
|
|
227
|
+
obv3QualificationMaster,
|
|
228
|
+
obv3QualificationExpired,
|
|
229
|
+
obv3QualificationBadgeOverride,
|
|
189
230
|
obv3MicroCredential,
|
|
190
231
|
obv3CourseCompletion,
|
|
191
232
|
obv3StandaloneFullCourse,
|
|
@@ -202,6 +243,7 @@ export {
|
|
|
202
243
|
clrEmploymentRecord,
|
|
203
244
|
clrTrainingProviderRecord,
|
|
204
245
|
clrMilitaryTrainingRecord,
|
|
246
|
+
clrMilitaryComprehensiveRecord,
|
|
205
247
|
clrProfessionalOrganizationRecord,
|
|
206
248
|
clrLicensingRegulatoryRecord,
|
|
207
249
|
clrMixedCareerRecord,
|
|
@@ -221,5 +263,12 @@ export {
|
|
|
221
263
|
buildFinalTranscriptVariant,
|
|
222
264
|
REFRESH_SERVICE_INLINE_CONTEXT,
|
|
223
265
|
clrDemoIsdDiplomaAssessments,
|
|
266
|
+
obv3FoodAllergenPractice,
|
|
267
|
+
obv3FoodAllergenFacilitator,
|
|
268
|
+
obv3FoodAllergenPracticeFr,
|
|
269
|
+
obv3PhishingTransfer,
|
|
270
|
+
customCourseEnrollment,
|
|
271
|
+
customExamAccommodation,
|
|
272
|
+
clrMixedRolePortfolio,
|
|
224
273
|
sdJwtVcCourseCompletion,
|
|
225
274
|
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { UnsignedAchievementCredentialValidator } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import type { CredentialFixture } from '../../types';
|
|
4
|
+
|
|
5
|
+
// Example corpus provenance and alignment attribution: ../../../SOURCES.md.
|
|
6
|
+
export const obv3FoodAllergenFacilitator: CredentialFixture = {
|
|
7
|
+
id: 'obv3/food-allergen-facilitator',
|
|
8
|
+
name: 'Food Allergen Control Facilitation',
|
|
9
|
+
description:
|
|
10
|
+
'Matched teaching-performance assessment with an instructor role and O*NET Instructing alignment.',
|
|
11
|
+
spec: 'obv3',
|
|
12
|
+
profile: 'generic',
|
|
13
|
+
features: ['evidence', 'alignment', 'results', 'expiration'],
|
|
14
|
+
source: 'synthetic',
|
|
15
|
+
signed: false,
|
|
16
|
+
validity: 'valid',
|
|
17
|
+
validator: UnsignedAchievementCredentialValidator,
|
|
18
|
+
tags: ['food-safety', 'instructor', 'role-scope'],
|
|
19
|
+
|
|
20
|
+
credential: {
|
|
21
|
+
'@context': [
|
|
22
|
+
'https://www.w3.org/ns/credentials/v2',
|
|
23
|
+
'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json',
|
|
24
|
+
],
|
|
25
|
+
id: 'urn:uuid:04adda59-747f-5d5b-b287-1a9b1943b2ba',
|
|
26
|
+
type: ['VerifiableCredential', 'OpenBadgeCredential'],
|
|
27
|
+
name: 'Teaching Food allergen control — facilitator performance',
|
|
28
|
+
description:
|
|
29
|
+
'Train a simulated food-preparation team on cross-contact communication in a fictional order. Assesses teaching performance; independent learner skill is outside this assessment.',
|
|
30
|
+
issuer: {
|
|
31
|
+
id: 'did:example:lc2184-cedar-training',
|
|
32
|
+
type: ['Profile'],
|
|
33
|
+
name: 'Cedar Technical Training',
|
|
34
|
+
url: 'https://cedar-training.example',
|
|
35
|
+
},
|
|
36
|
+
validFrom: '2026-09-01T00:00:00Z',
|
|
37
|
+
validUntil: '2028-09-01T00:00:00Z',
|
|
38
|
+
credentialSubject: {
|
|
39
|
+
id: 'https://fixtures.example.org/frenchfry/personas/d56d0c592ac6',
|
|
40
|
+
type: ['AchievementSubject'],
|
|
41
|
+
achievement: {
|
|
42
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator',
|
|
43
|
+
type: ['Achievement'],
|
|
44
|
+
achievementType: 'Assessment',
|
|
45
|
+
name: 'Teaching Food allergen control — facilitator performance',
|
|
46
|
+
description:
|
|
47
|
+
'Train a simulated food-preparation team on cross-contact communication in a fictional order. Assesses teaching performance; independent learner skill is outside this assessment.',
|
|
48
|
+
criteria: {
|
|
49
|
+
narrative:
|
|
50
|
+
'Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims.',
|
|
51
|
+
},
|
|
52
|
+
fieldOfStudy: 'vocational',
|
|
53
|
+
inLanguage: 'en',
|
|
54
|
+
tag: ['vocational', 'Food allergen control', 'instructor'],
|
|
55
|
+
resultDescription: [
|
|
56
|
+
{
|
|
57
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator/rubric',
|
|
58
|
+
type: ['ResultDescription'],
|
|
59
|
+
name: 'Instruction performance',
|
|
60
|
+
resultType: 'PerformanceLevel',
|
|
61
|
+
allowedValue: ['Developing', 'Proficient', 'Advanced'],
|
|
62
|
+
requiredValue: 'Proficient',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
alignment: [
|
|
66
|
+
{
|
|
67
|
+
type: ['Alignment'],
|
|
68
|
+
targetName: 'Instructing',
|
|
69
|
+
targetUrl:
|
|
70
|
+
'https://www.onetcenter.org/ctdlasn/resources/ce-07c266f7-9119-11e8-b852-782bcb5df6ac',
|
|
71
|
+
targetFramework:
|
|
72
|
+
'O*NET Content Model Worker Requirements - Transferable Skills: U.S. Department of Labor (DOL)',
|
|
73
|
+
targetDescription: 'Teaching others how to do something.',
|
|
74
|
+
targetType: 'ceasn:Competency',
|
|
75
|
+
targetCode: '2.B.1.e',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
role: 'instructor',
|
|
80
|
+
narrative:
|
|
81
|
+
'Assesses teaching performance; independent learner skill is outside this assessment.',
|
|
82
|
+
activityStartDate: '2026-08-01T00:00:00Z',
|
|
83
|
+
activityEndDate: '2026-08-31T00:00:00Z',
|
|
84
|
+
result: [
|
|
85
|
+
{
|
|
86
|
+
type: ['Result'],
|
|
87
|
+
resultDescription:
|
|
88
|
+
'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator/rubric',
|
|
89
|
+
value: 'Proficient',
|
|
90
|
+
status: 'Completed',
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
evidence: [
|
|
95
|
+
{
|
|
96
|
+
id: 'https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/facilitator',
|
|
97
|
+
type: ['Evidence'],
|
|
98
|
+
name: 'Cross-contact training tabletop and communication rubric',
|
|
99
|
+
description:
|
|
100
|
+
'Train a simulated food-preparation team on cross-contact communication in a fictional order; evaluation considered: Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims.',
|
|
101
|
+
narrative:
|
|
102
|
+
'Train a simulated food-preparation team on cross-contact communication in a fictional order; evaluation considered: Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims.',
|
|
103
|
+
genre: 'Portfolio',
|
|
104
|
+
audience: 'Assessors',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { UnsignedAchievementCredentialValidator } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import type { CredentialFixture } from '../../types';
|
|
4
|
+
|
|
5
|
+
// Example corpus provenance and alignment attribution: ../../../SOURCES.md.
|
|
6
|
+
export const obv3FoodAllergenPracticeFr: CredentialFixture = {
|
|
7
|
+
id: 'obv3/food-allergen-practice-fr',
|
|
8
|
+
name: 'Prévention des contacts croisés avec des allergènes',
|
|
9
|
+
description:
|
|
10
|
+
'French counterpart of the food-allergen practice assessment, retaining its RubricScore and alignment.',
|
|
11
|
+
spec: 'obv3',
|
|
12
|
+
profile: 'generic',
|
|
13
|
+
features: ['evidence', 'alignment', 'results', 'expiration'],
|
|
14
|
+
source: 'synthetic',
|
|
15
|
+
signed: false,
|
|
16
|
+
validity: 'valid',
|
|
17
|
+
validator: UnsignedAchievementCredentialValidator,
|
|
18
|
+
tags: ['food-safety', 'rubric-score', 'french', 'localization', 'learner'],
|
|
19
|
+
|
|
20
|
+
credential: {
|
|
21
|
+
'@context': [
|
|
22
|
+
'https://www.w3.org/ns/credentials/v2',
|
|
23
|
+
'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json',
|
|
24
|
+
],
|
|
25
|
+
id: 'urn:uuid:14adf3a3-43d2-5271-90be-9812f906deef',
|
|
26
|
+
type: ['VerifiableCredential', 'OpenBadgeCredential'],
|
|
27
|
+
name: 'Prévention des contacts croisés avec des allergènes',
|
|
28
|
+
description:
|
|
29
|
+
"Évaluation d'un exercice de prévention des contacts croisés avec des allergènes.",
|
|
30
|
+
issuer: {
|
|
31
|
+
id: 'did:example:lc2184-cedar-training',
|
|
32
|
+
type: ['Profile'],
|
|
33
|
+
name: 'Cedar Technical Training',
|
|
34
|
+
url: 'https://cedar-training.example',
|
|
35
|
+
},
|
|
36
|
+
validFrom: '2026-09-01T00:00:00Z',
|
|
37
|
+
validUntil: '2028-09-01T00:00:00Z',
|
|
38
|
+
credentialSubject: {
|
|
39
|
+
id: 'https://fixtures.example.org/frenchfry/personas/d56d0c592ac6',
|
|
40
|
+
type: ['AchievementSubject'],
|
|
41
|
+
achievement: {
|
|
42
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr',
|
|
43
|
+
type: ['Achievement'],
|
|
44
|
+
achievementType: 'Assessment',
|
|
45
|
+
name: 'Prévention des contacts croisés avec des allergènes',
|
|
46
|
+
description:
|
|
47
|
+
"Planifie la préparation d'une commande fictive dans un exercice de cuisine simulé.",
|
|
48
|
+
criteria: {
|
|
49
|
+
narrative:
|
|
50
|
+
'Repère les possibilités de contact croisé, précise les étapes de communication et signale les incertitudes sans faire de diagnostic médical.',
|
|
51
|
+
},
|
|
52
|
+
fieldOfStudy: 'vocational',
|
|
53
|
+
inLanguage: 'fr',
|
|
54
|
+
tag: ['vocational', 'Food allergen control', 'learner'],
|
|
55
|
+
resultDescription: [
|
|
56
|
+
{
|
|
57
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr/rubric',
|
|
58
|
+
type: ['ResultDescription'],
|
|
59
|
+
name: "Points de la grille d'observation",
|
|
60
|
+
resultType: 'RubricScore',
|
|
61
|
+
valueMin: '0',
|
|
62
|
+
valueMax: '4',
|
|
63
|
+
requiredValue: '3',
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
alignment: [
|
|
67
|
+
{
|
|
68
|
+
type: ['Alignment'],
|
|
69
|
+
targetName: 'food safety principles',
|
|
70
|
+
targetUrl:
|
|
71
|
+
'http://data.europa.eu/esco/skill/3f4e4eab-a8e0-4aed-b8bb-79afe7c890e3',
|
|
72
|
+
targetFramework: 'ESCO (requested dataset v1.2.0)',
|
|
73
|
+
targetDescription:
|
|
74
|
+
'Scientific background of food safety which includes preparation, handling, and storage of food to minimise the risk of foodborne illness and other health hazards.',
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
role: 'learner',
|
|
79
|
+
narrative:
|
|
80
|
+
"Planifie la préparation d'une commande fictive dans un exercice de cuisine simulé.",
|
|
81
|
+
activityStartDate: '2026-08-01T00:00:00Z',
|
|
82
|
+
activityEndDate: '2026-08-31T00:00:00Z',
|
|
83
|
+
result: [
|
|
84
|
+
{
|
|
85
|
+
type: ['Result'],
|
|
86
|
+
resultDescription:
|
|
87
|
+
'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr/rubric',
|
|
88
|
+
value: '4',
|
|
89
|
+
status: 'Completed',
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
evidence: [
|
|
94
|
+
{
|
|
95
|
+
id: 'https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/practice/fr',
|
|
96
|
+
type: ['Evidence'],
|
|
97
|
+
name: "Liste de contrôle et compte rendu d'un exercice de simulation",
|
|
98
|
+
description:
|
|
99
|
+
"Planifie la préparation d'une commande fictive dans un exercice de cuisine simulé.",
|
|
100
|
+
narrative:
|
|
101
|
+
"Planifie la préparation d'une commande fictive dans un exercice de cuisine simulé.",
|
|
102
|
+
genre: "Compte rendu d'observation",
|
|
103
|
+
audience: 'Évaluateurs',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { UnsignedAchievementCredentialValidator } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import type { CredentialFixture } from '../../types';
|
|
4
|
+
|
|
5
|
+
// Example corpus provenance and alignment attribution: ../../../SOURCES.md.
|
|
6
|
+
export const obv3FoodAllergenPractice: CredentialFixture = {
|
|
7
|
+
id: 'obv3/food-allergen-practice',
|
|
8
|
+
name: 'Food Allergen Control Practice',
|
|
9
|
+
description:
|
|
10
|
+
'Observed food-preparation practice with a RubricScore result, evidence, and ESCO alignment.',
|
|
11
|
+
spec: 'obv3',
|
|
12
|
+
profile: 'generic',
|
|
13
|
+
features: ['evidence', 'alignment', 'results', 'expiration'],
|
|
14
|
+
source: 'synthetic',
|
|
15
|
+
signed: false,
|
|
16
|
+
validity: 'valid',
|
|
17
|
+
validator: UnsignedAchievementCredentialValidator,
|
|
18
|
+
tags: ['food-safety', 'rubric-score', 'learner'],
|
|
19
|
+
|
|
20
|
+
credential: {
|
|
21
|
+
'@context': [
|
|
22
|
+
'https://www.w3.org/ns/credentials/v2',
|
|
23
|
+
'https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json',
|
|
24
|
+
],
|
|
25
|
+
id: 'urn:uuid:7cc497f9-092a-5ea2-8cdb-7a2e60c25e68',
|
|
26
|
+
type: ['VerifiableCredential', 'OpenBadgeCredential'],
|
|
27
|
+
name: 'Food allergen control — observed practice',
|
|
28
|
+
description:
|
|
29
|
+
'Plan preparation for a fictional allergen-sensitive order. Demonstrate a controlled practice task with observer feedback.',
|
|
30
|
+
issuer: {
|
|
31
|
+
id: 'did:example:lc2184-cedar-training',
|
|
32
|
+
type: ['Profile'],
|
|
33
|
+
name: 'Cedar Technical Training',
|
|
34
|
+
url: 'https://cedar-training.example',
|
|
35
|
+
},
|
|
36
|
+
validFrom: '2026-09-01T00:00:00Z',
|
|
37
|
+
validUntil: '2028-09-01T00:00:00Z',
|
|
38
|
+
credentialSubject: {
|
|
39
|
+
id: 'https://fixtures.example.org/frenchfry/personas/d56d0c592ac6',
|
|
40
|
+
type: ['AchievementSubject'],
|
|
41
|
+
achievement: {
|
|
42
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice',
|
|
43
|
+
type: ['Achievement'],
|
|
44
|
+
achievementType: 'Assessment',
|
|
45
|
+
name: 'Food allergen control — observed practice',
|
|
46
|
+
description:
|
|
47
|
+
'Plan preparation for a fictional allergen-sensitive order. Demonstrate a controlled practice task with observer feedback.',
|
|
48
|
+
criteria: {
|
|
49
|
+
narrative: 'Identify cross-contact routes and communication steps',
|
|
50
|
+
},
|
|
51
|
+
fieldOfStudy: 'vocational',
|
|
52
|
+
inLanguage: 'en',
|
|
53
|
+
tag: ['vocational', 'Food allergen control', 'learner'],
|
|
54
|
+
resultDescription: [
|
|
55
|
+
{
|
|
56
|
+
id: 'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/rubric',
|
|
57
|
+
type: ['ResultDescription'],
|
|
58
|
+
name: 'Observed task rubric points',
|
|
59
|
+
resultType: 'RubricScore',
|
|
60
|
+
valueMin: '0',
|
|
61
|
+
valueMax: '4',
|
|
62
|
+
requiredValue: '3',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
alignment: [
|
|
66
|
+
{
|
|
67
|
+
type: ['Alignment'],
|
|
68
|
+
targetName: 'food safety principles',
|
|
69
|
+
targetUrl:
|
|
70
|
+
'http://data.europa.eu/esco/skill/3f4e4eab-a8e0-4aed-b8bb-79afe7c890e3',
|
|
71
|
+
targetFramework: 'ESCO (requested dataset v1.2.0)',
|
|
72
|
+
targetDescription:
|
|
73
|
+
'Scientific background of food safety which includes preparation, handling, and storage of food to minimise the risk of foodborne illness and other health hazards.',
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
role: 'learner',
|
|
78
|
+
narrative: 'Demonstrate a controlled practice task with observer feedback.',
|
|
79
|
+
activityStartDate: '2026-08-01T00:00:00Z',
|
|
80
|
+
activityEndDate: '2026-08-31T00:00:00Z',
|
|
81
|
+
result: [
|
|
82
|
+
{
|
|
83
|
+
type: ['Result'],
|
|
84
|
+
resultDescription:
|
|
85
|
+
'https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/rubric',
|
|
86
|
+
value: '4',
|
|
87
|
+
status: 'Completed',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
evidence: [
|
|
92
|
+
{
|
|
93
|
+
id: 'https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/practice',
|
|
94
|
+
type: ['Evidence'],
|
|
95
|
+
name: 'Kitchen simulation checklist',
|
|
96
|
+
description:
|
|
97
|
+
'Plan preparation for a fictional allergen-sensitive order; evaluation considered: Identify cross-contact routes and communication steps',
|
|
98
|
+
narrative:
|
|
99
|
+
'Plan preparation for a fictional allergen-sensitive order; evaluation considered: Identify cross-contact routes and communication steps',
|
|
100
|
+
genre: 'Observation record',
|
|
101
|
+
audience: 'Assessors',
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
};
|