Skip to content
N1
CRM / Bitrix24 · training · compliance · testing

AML/CFT training and testing in the portal with anti-cheating protection

Client: Insurance company, NDA Category: CRM / Bitrix24 Stack: PHP 8.4, Bitrix24 D7 (ORM), MySQL, Vue, PHPUnit Timeline: a few days to the trial launch
Problem

The mandatory AML/CFT course lived on a separate Next.js site running in development mode, and the final tests were in Google Forms: full names were typed by hand (anyone could take the test for a colleague), 37 of 40 questions in the main test had an "all of the above" option, and the self-check in places taught the wrong thing.

Constraints

There was no access to the old site's server — only an archive. The boxed portal's stock learning module is built on old classes without ORM, so it could not simply be configured.

What I did
  • Course content restored from the old site's archive via sourcemaps; self-check errors fixed, explanations rewritten
  • A custom D7 ORM module (8 tables): courses, lessons, self-checks, final tests, attempts and employee results
  • Attempts, time limit and question order are handled by the server: shuffling is fixed at start, an answer after the deadline is rejected, the employee is taken from the portal session
  • Anti-cheating: copying and printing blocked, the question blurs when the window loses focus, a watermark with the full name and a violation counter per attempt
  • A Vue course editor for a group of editors; the course is stored in git as a package and installed by an importer
Architecture
Course package in git → Importer → D7 ORM module → Server-side attempts and timer → Vue: lessons, test, editor
Result

The first course has been migrated — 7 modules with self-checks and three final tests; the launch for employees is set for September 2026, once the compliance team has verified the answer key.

What can be reused
Testing module with a server-side timer and anti-cheating protection Storing a course as a package in git with an importer Vue course editor