Skip to main content

EcoWorld Academy -> ZAYAZ Evidence Integration

Decision

The existing Academy schema is sufficient to begin evidence integration without hard-coding Academy tables into the Evidence Context Resolver.

The resolver should consume Academy data through SSSR/CMID mappings exactly like any other ZAYAZ domain.

Evidence semantics added

  • training_coverage_percentage
  • esg_training_coverage
  • anti_corruption_training_coverage
  • training_competency_assessment
  • training_certification

Existing evidence types such as training_completion, health_safety_training, employee_training_hours, anti_bribery_training, and ethics_training remain reusable.

Canonical training dimensions

dimension_keyclasspurpose
reporting_periodtimeperiod used for training/compliance measurement
organizational_unitorganizationalbusiness unit, department, subsidiary, function
workforce_categoryworkforceemployees, contractors, managers, functions-at-risk, etc.
courselearningqualifying course/course set
training_topiclearningESG, anti-corruption, ethics, safety, cybersecurity, etc.
jurisdictionjurisdictionlegal/geographic scope where relevant

Tenant/E-C-O identity is intentionally not an evidence dimension. Authorization establishes the effective client scope before evidence resolution.

Existing Academy tables and evidence roles

Learner / organization identity

  • academy.users
  • academy.user_profiles
  • academy.academy_company_seat_assignments

Course qualification and taxonomy

  • academy.courses
  • academy.course_modules
  • academy.modules
  • academy.content_registry

Completion evidence

  • academy.module_progress
  • academy.certificates
  • academy.learning_signal_events (supporting telemetry)

Competency evidence

  • academy.quiz_attempts
  • academy.quiz_attempt_answers
  • academy.workbook_responses
  • academy.certificates

Certification evidence

  • academy.certificates

Access / assignment context

  • academy.entitlements
  • academy.academy_company_seat_assignments
  • academy.academy_client_tiers

Audit/support context

  • academy.consent_records
  • Academy feedback and telemetry tables where relevant

Important boundary: denominator population

Academy activity is excellent evidence for the numerator of training-coverage metrics: who completed qualifying training.

It is not automatically the authoritative denominator for regulatory percentages. The denominator may be:

  • total employees,
  • functions-at-risk,
  • managers,
  • employees in selected jurisdictions,
  • workers for whom the training is relevant,
  • or another governed workforce population.

That population should come from the authoritative ZAYAZ workforce/HR source via SSSR and be combined by a governed calculation. academy_company_seat_assignments may be useful context, but seat assignment is not assumed to equal regulatory workforce eligibility.

Course qualification

A course should not count toward an evidence type merely because its title contains a keyword.

The Evidence Admin UI should approve which Academy course/course versions qualify for each evidence type. The approved qualification can be represented by source-binding applicability/resolution metadata and the course / training_topic dimensions.

academy.content_registry remains valuable as semantic input for the Admin UI (frameworks, concepts, operational contexts), but legal/compliance qualification should be explicitly approved in the Evidence Registry.

The current tables are sufficient to start. If completion queries become repetitive, create a governed read model rather than a new source of truth, for example:

academy.v_training_evidence_fact

It could normalize:

  • learner ID,
  • course ID/version,
  • training topic,
  • completion status,
  • completion timestamp,
  • pass/fail,
  • score,
  • certificate ID/verification reference,
  • organizational context,
  • provenance/source event.

The view should be built only after the actual Academy column contracts are inspected. It should not duplicate mutable learning state into an unnecessary new operational table.


APPENDIX - Training Evidence Deepdive

There are really three different questions hiding inside a statement like:

87% of relevant employees completed anti-corruption training.

1. Who was supposed to be trained?

This is the eligible population.

Not necessarily:

number of Academy users

and not necessarily:

number of seats assigned

It should come from the authoritative HR/workforce system using whatever eligibility rule applies:

Employment during reporting period
+
applicable employee category
+
role/function
+
jurisdiction
+
training requirement
=
eligible training population

2. Did the organization actually assign/invite them?

This is the training deployment/control test.

Eligible population

Should have been invited

Actually invited/assigned

That produces a separate KPI:

training_invitation_coverage
=
eligible people invited
────────────────────────
eligible population

That is extremely valuable evidence.

3. Did they complete it?

Then:

training_completion_coverage
=
eligible people completing qualifying training
──────────────────────────────────────────────
eligible population

Leavers/new hires can be handled properly instead of disappearing from the calculation.


4. The Training Compliance Cohort

For a reporting period:

                    FY2026


Eligible workforce cohort

┌────────────┼──────────────┐
│ │ │
▼ ▼ ▼
opening staff new starters leavers
│ │ │
└────────────┼──────────────┘

Required to be trained

┌────────┴────────┐
▼ ▼
invited not invited

┌─────┼──────┐
▼ ▼ ▼
completed active left-before-
completion

That gives us much better evidence than a single percentage.

For each person, conceptually we want to know:

person
employment_start
employment_end
eligibility_start
eligibility_end

training_required
training_requirement_reason

invited
invited_at
invitation_source
due_date

started
started_at

completed
completed_at
certificate

employment_status_at_due_date
exception_reason

Not all of these fields have to live in Academy.

5. Proper system ownership

HR / Workforce
────────────────────────
employment_start
employment_end
employment_status
organizational_unit
workforce_category
role/function
jurisdiction

Evidence / compliance logic
────────────────────────────
training eligibility
required course/topic
eligibility period
deadline
exception logic

Academy
────────────────────────
invitation / assignment
course access
course start
progress
completion
assessment
certificate

The Evidence Resolver combines them.


6. Reserving History

The academy.learning_assignment_events table gives us to possibility to see:

2026-01-04  eligible
2026-01-05 assigned
2026-01-05 invited
2026-01-20 reminded
2026-02-02 started
2026-02-07 completed

That is audit-grade.


7. New hires and leavers

Imagine:

Opening workforce               500
New hires during year 75
Leavers during year 60

A simple:

completed / average headcount

can obscure whether the training control actually worked.

Instead, the evidence layer could expose several related measures:

Eligible during reporting period            540
Invited 532
Not invited 8

Completed 490
In progress at period end 18
Left employment before completion 14
Still employed but overdue 8
Waived / documented exception 10

Now management—and an auditor—can understand what happened.

And we can derive:

Invitation coverage
532 / 540 = 98.5%

Completion coverage
490 / 540 = 90.7%

Completion among invited
490 / 532 = 92.1%

Unaddressed compliance gap
8 eligible people never invited

The exact regulatory KPI can use whatever denominator the applicable standard requires, while ZAYAZ still preserves the full underlying control story.

That's the important part.


8. New hires should create a control test

Example:

Did the new employees get an invitation to take the course—was it part of onboarding?

is particularly useful.

We create evidence semantics for this.

training_eligible_population
training_invitation_record
training_invitation_coverage
new_hire_training_invitation_coverage
training_completion
training_completion_coverage
training_noncompletion_reason
training_compliance_cohort

Then:

new_hire_training_invitation_coverage

can ask:

Employees joining during period
who are subject to training


Were they assigned the qualifying course
within required onboarding window?

That turns Academy into evidence not only that people learned something, but that an organizational control operated effectively.

That's materially more valuable.


9. The Evidence Resolver Resolve This:

For:

anti_corruption_training_coverage

the resolver might ultimately resolve:

anti_corruption_training_coverage

resolution = calculation

┌───────┴─────────┐
▼ ▼
training_compliance_ qualifying training
cohort completion evidence
│ │
▼ ▼
HR/workforce Academy
│ │
└────────┬────────┘

governed calculation


reported percentage

And an auditor clicking:

<AuditEvidenceLink evidence="anti_corruption_training" />

could see something like:

Anti-Corruption Training — FY2026
──────────────────────────────────────────

Eligible workforce 540
Invited 532
Completed 490
Left before completion 14
Overdue 8
Documented exemptions 10

Invitation coverage 98.5%
Completion coverage 90.7%

New hires subject to training 75
New hires invited 74
New-hire invitation coverage 98.7%

Supporting evidence
✓ HR population
✓ Academy assignments
✓ Academy invitation events
✓ Completion records
✓ Certificates
✓ Course qualification



GitHub RepoRequest for Change (RFC)