Annual Security Compliance

...

Annual security compliance training. All employees must complete each year's certification by the end of that calendar year.

Scenario 1: Cohort-start-date
Scenario 2: Individual-completion-date
Dropdown options reference
Scenario: Annual compliance training. All employees must complete the current year's course. New hires only see the active cycle. Admin adds next year's course manually (or via "Copy as next cycle" shortcut).
# Collection Start extended End new Notify
1
🔒
Security Compliance 2025
COURSE ENDED
On date: Jan 1, 2025
On date: Dec 31, 2025
🔔
2
📘
Security Compliance 2026
COURSE ACTIVE
🔔
3
📗
Security Compliance 2027
COURSE FUTURE
🔔
New-assignee skip logic: If Joe joins on 2027-06-15, he skips "Security Compliance 2025" (end date passed before his assignment) and "Security Compliance 2026" (end date passed), but sees "Security Compliance 2027" (end date is Dec 31, 2027 > his assignment date).
LP completion: Dynamically computed. Joe is "complete" when all components whose end date hasn't passed AND whose start date has arrived are completed. The 2025 course (ended) doesn't count. The 2027 course (future) doesn't count until Jan 1, 2027.
Scenario: Product certification valid for 12 months after completion. Each learner's renewal activates individually, 365 days after they completed the previous certification. Uses "After previous completion" activation rule.
# Collection Start extended End Notify
1
🏆
Product Certification - Initial
COURSE
🔔
2
🔄
Product Certification - Renewal 1
COURSE
365 days after completing #1 ×
🔔
3
🔄
Product Certification - Renewal 2
COURSE
365 days after completing #2 ×
🔔
Stall semantics: If a learner never completes #1, Renewal 1 never activates. The learner is stuck — you can't renew a badge you never earned. No timeout or auto-advance.
Per-learner activation: Joe completes #1 on March 15. His Renewal 1 activates on March 15 + 365 days = next March 15. Jane completes #1 on July 1. Her Renewal 1 activates on July 1 next year. Each learner is on their own clock.
Reference: Available options in the Start and End dropdowns. Grey = existing behavior. Green = new in v1.

Start (activation rule)

When assigned (existing)
After: [previous component] (existing — 0 day delay)
On a specific date → [date picker] new
After completing [component] + [N] [days/weeks/months/years] new

Mapping to proposal:
"On a specific date" = ABSOLUTE activation rule
"After completing + delay" = DELAY_FROM_PREVIOUS_COMPLETION
Existing "After:" with 0 delay = today's sequential behavior (unchanged)

End (end date) new column

None (no end date — never expires)
On a specific date → [date picker] new
[N] [days/weeks/months] after start new

End date semantics (hard cancel):
When end date passes for a learner:
• Unfinished work marked CANCELLED
• Access to content revoked
• Progress/response data preserved
• Does NOT block LP completion
• Runs as nightly batch (end_date + 1 day)

End date ≠ Due date:
Due date = soft deadline (notifications only)
End date = hard deadline (cancels + revokes)

Actions menu (...) new option

Edit
Remove from program
Move up / Move down
Copy as next cycle new

"Copy as next cycle" deep-copies the Course AND its content items
(new entities, not references), appends as next component, and pre-fills
dates based on the source component's duration pattern.

Existing behavior (unchanged)
New in v1
Modified from existing