# SCORM Packages

Import industry-standard e-learning by uploading a SCORM zip to a **Course Chapter** (module). Smooth LMS extracts the package under `public/scorm/{course}/{title}`, parses `imsmanifest.xml`, creates launch files, and serves content via **SCORMRenderer**. Lessons in SCORM modules are auto-generated per Sharable Content Object (SCO).

> **Help URL:** [smoothhiring.com/help/lms/courses/scorm-packages](https://smoothhiring.com/help/lms/courses/scorm-packages)

---

## Table of Contents

1. [Supported standards](/#supported-standards)
2. [Upload flow](/#upload-flow)
3. [Storage and manifest fields](/#storage-and-manifest-fields)
4. [Learner experience](/#learner-experience)
5. [Deletion and cleanup](/#deletion-and-cleanup)
6. [Desk paths](/#desk-paths)
7. [Step-by-step import](/#step-by-step-import)
8. [Tips](/#tips)
9. [Troubleshooting](/#troubleshooting)
10. [Related guides](/#related-guides)
11. [HRMS integration](/#hrms-integration)

---

## Supported standards

The importer inspects manifest resources for `adlcp:scormtype` (or `scormType`) equal to **sco**. Multi-SCO packages become multiple lessons; single-SCO packages still create lesson rows for progress tracking.

Test SCORM 1.2 packages from your vendor before bulk import. xAPI-only packages may not be compatible without conversion.

---

## Upload flow

Portal/API (`add_chapter` in `lms.lms.api`):

1. Author provides title, course, `is_scorm_package = true`, and File attachment metadata.
2. `extract_package` copies zip to site `public/scorm/...`.
3. Manifest parsed; launch file path stored on chapter.
4. Lessons created when none exist post-extract.

If extraction yields zero lessons, API throws an error—verify zip structure.

---

## Storage and manifest fields

On **Course Chapter**:

| Field | Description |
|-------|-------------|
| **Is SCORM Package** | Enabled after upload |
| **SCORM Package** | File link |
| **SCORM Package Path** | Public URL fragment |
| **Manifest File** | Read-only diagnostic |
| **Launch File** | Entry HTML for player |

**Course Lesson** rows fetch `is_scorm_package` from chapter—read-only on lesson form.

---

## Learner experience

Learners open SCORM lesson; SCORM renderer loads launch file in controlled iframe/page. Completion status feeds enrollment progress when SCO reports completion to LMS scripts.

Do not mix manual markdown lessons in same SCORM module—dedicated SCORM chapter per package reduces support burden.

---

## Deletion and cleanup

Deleting SCORM chapter triggers `delete_scorm_package` removing filesystem directory under `public`. Ensure backups before delete on production.

If re-uploading updated package, delete module or use API that replaces files to avoid stale assets.

---

## Desk paths

| Item | Path |
|------|------|
| Modules | `/app/course-chapter` |
| Files | `/app/file` |
| Portal course editor | `/lms/courses/{course}/edit` |
| SCORM public files | `/files/scorm/...` (site-dependent) |

---

## Step-by-step import

1. Publish or draft **LMS Course** container.
2. Open portal editor → **Add Module** → choose SCORM upload.
3. Select `.zip` exported from authoring tool (Captivate, Storyline, etc.).
4. Wait for extraction success toast.
5. Open first lesson as learner—verify launch, audio, completion.
6. Adjust course mandatory/validity flags if compliance course.
7. Assign employees via training assignment or onboarding.

---

## Tips

- Keep package size reasonable; large media slows extract.
- Use relative paths in authoring tool export for portability.
- Test on browser without popup blockers.
- Maintain vendor manifest documentation for audit.

---

## Troubleshooting

| Issue | What to do |
|-------|------------|
| Extraction error | Re-export zip; verify imsmanifest.xml present |
| Blank player | Launch file path wrong; check nginx static rules for `/scorm` |
| Progress 0% after complete | SCO completion not communicated—check SCORM API settings in vendor |
| Cannot delete chapter | Permission; run cleanup API as Moderator |
| Mixed content HTTPS | Host SCORM on HTTPS site; fix insecure assets |

---

## Related guides

- [Chapters and lessons](https://smoothhiring.com/help/lms/courses/chapters-and-lessons)
- [Lesson content types](https://smoothhiring.com/help/lms/courses/lesson-content-types)
- [Mandatory training](https://smoothhiring.com/help/lms/courses/mandatory-training-and-validity)

---

## HRMS integration

Third-party SCORM often satisfies regulatory contact hours—attach completion certificates to [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance). Assign SCORM courses during [Employee Onboarding](https://smoothhiring.com/help/hrms/onboarding/overview) only after verifying mobile compatibility for field employees. User accounts must exist per [Employee records](https://smoothhiring.com/help/hrms/people/employee-records).

## Vendor package review

Before production import, IT should scan zip for external network calls and unsupported plugins. Maintain register of SCORM versions per vendor. When vendor updates package, upload new module and deprecate old module to avoid two conflicting OSHA courses.

Desk support: chapter record shows **SCORM Package Path** for technicians verifying nginx serves `/scorm` static files.

## Governance, auditing, and data retention

Training data in Smooth LMS is standard Frappe JSON in MariaDB plus files in `public/files` and `public/scorm`. HR audits typically require evidence of **who** completed **what** by **when**. Export desk lists (**LMS Enrollment**, **LMS Quiz Submission**, **LMS Training Assignment**, **LMS Certificate**) to CSV for sampling. Quiz submission print formats provide question-level detail suitable for safety investigations or harassment prevention audits.

Retention policy should align with HR document retention: keep LMS submissions at least as long as related [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) records. When employees depart, disable User accounts but retain enrollment history unless legal counsel approves purging. Version course content via amended records or annual duplicated courses so historical completions still reference the correct curriculum year.

System Managers should restrict **Moderator** role membership and enable login activity review on sensitive cohorts (executive leadership programs). Pair LMS reports with HR onboarding status from [Employee Onboarding overview](https://smoothhiring.com/help/hrms/onboarding/overview) to prove training preceded start date when required.

## Frequently asked questions

**Do employees need desk access?** No. **LMS Student** is portal-only by default; send `{site}/lms/courses` links.

**Can one user be both Course Creator and Moderator?** Yes on small teams; larger orgs should separate author vs publish duties.

**How do we handle contractors?** Create User + optional HR employee record; assign training like employees via [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) linkage or direct enrollment.

**What breaks if HRMS is down?** LMS continues serving published content; new hire auto-enrollment pauses until Employee/Onboarding APIs succeed.

**Are certificates legally equivalent to HR compliance rows?** Not automatically—store PDFs on compliance or document types when statute requires.

## Performance and scale notes

Large enrollments (5,000+ users) should batch assign overnight via `assign_mandatory_training` rather than manual enrollment rows. Rebuild website cache after bulk publish. Monitor background workers if email notifications queue heavily. SCORM packages should be optimized zip exports to reduce disk usage during large uploads.

## Additional troubleshooting

| Issue | What to do |
|-------|------------|
| Slow portal after publish | Hard-refresh browser; contact Smooth support if portal styling is broken |
| Wrong user on certificate | Certificate issued to enrollment member—fix User linkage in HR |
| Bulk import partial failure | Check error log; validate Course Instructor rows exist |
| Cohort vs course progress mismatch | Learner must open each course inside cohort; enrollments are per course |
| Timezone confusion on due dates | Training assignment due dates are date-only—communicate timezone in email |

## Operations calendar (recommended)

| Cadence | Action | Where |
|---------|--------|-------|
| Weekly | Review overdue **LMS Training Assignment** | `/app/lms-training-assignment` |
| Monthly | Publish content changelog to employees | Email + `/lms/courses` |
| Quarterly | Role audit (Moderator/Creator) | `/app/user` |
| Annually | Recertify mandatory courses | Re-assign with new due dates |
| After upgrade | Sign out/in; smoke-test `/lms` portal | `/desk/learning` |

## Integration smoke tests with HRMS

1. Create test **Employee** with user — confirm **LMS Student** role.
2. Submit test **Employee Onboarding** — confirm enrollments when courses mandatory.
3. Complete course — attach quiz PDF to test **Employee Compliance** row.
4. Archive evidence in document compliance SOP.

## Support runbook (L1)

Collect: user email, course/cohort name, screenshot of error, timestamp. Check enrollment exists, course published, role present. Escalate to System Manager if SCORM extract failed or permission hooks deny batch access. Reference [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) to fix missing `user_id` before reassigning training.

## Document history and change control

When updating this process, record the Smooth LMS app version, platform update date, and whether HRMS onboarding templates changed. Authors should note breaking changes in course release notes (quiz question changes may require reattempts). For regulated customers, maintain a binder linking LMS course ID to compliance control ID in [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance).

Desk administrators use `/desk/learning` for cross-course metrics; portal users rely on `/lms/courses` for consumption—both URLs should appear in internal SOP PDFs so auditors can reproduce learner steps without admin credentials.

## Quick reference card

| Item | Value |
|------|-------|
| Admin workspace | `/desk/learning` |
| Employee catalog | `/lms/courses` |
| HR employee link | [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) |
| Onboarding hook | [Employee Onboarding overview](https://smoothhiring.com/help/hrms/onboarding/overview) |
| Compliance ledger | [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) |

Keep this table in your L&D onboarding packet for new coordinators.

## Closing notes for administrators

Schedule annual review of this guide with HR compliance and L&D. Confirm your organization's backups include `public/scorm` and file attachments for quiz uploads. After major HR reorgs, rebuild cohort rosters from [Employee records](https://smoothhiring.com/help/hrms/people/employee-records) exports rather than stale distribution lists.

## SCORM test matrix (recommended)

| Test | Pass criteria |
|------|----------------|
| Desktop Chrome | Launch file loads, audio plays, completion registers |
| Mobile Safari | Usable layout; no plugin errors |
| Re-import | Second upload replaces assets without orphan directories |
| Audit export | Completion visible on `/app/lms-enrollment` and quiz PDF if bundled |

Authors should register vendor, SCORM version, and course mapping in your compliance binder alongside [Employee Compliance](https://smoothhiring.com/help/hrms/documents-compliance/employee-compliance) controls. Pilot learners should validate SCORM completion on `/lms/courses` before company-wide mandatory assignment rolls out.

---

_Last updated: May 2026_
