{"product":"CAQA RTO OS","credit":"Developed by Sukh Sandhu","schema_version":1,"evidence_date":"9 September 2026","tested_release":"0.4.2","tested_commit":"ec74e47b47f87312fe9f609e53ec6367fb67866f","passed":2065,"skipped":2,"failed":0,"cases":2067,"test_files":110,"test_functions":1543,"test_method":"Full pytest suite on Windows with SQLite, synthetic fixtures and mocked external services. Parameterised cases are counted separately. No live regulator integration result is implied.","results_sha256":"5fff4feb1d6a0850211a27f897760fb02b5b5b3801a91ab90717ad2f5f9f81c6","areas":[{"id":"nat","title":"AVETMISS file generation","scope":"AVETMISS VET Provider Collection 8.0 / 8.1","behaviour":"Fixed-width files, field positions, date and numeric formatting, CRLF endings, outcome mappings, collection periods and supplementary records.","verified":"Tests check byte-exact records, published sample layouts, ten-file exports, funding filters, overseas addresses, USI substitutes and release-specific codes.","limit":"Correct output format is one part of reporting. Each actual collection still needs the appropriate external validation and submission.","files":["test_nat_files.py","test_nat_import.py","test_avetmiss_preview.py"],"passed":192},{"id":"validation","title":"Local AVETMISS validation","scope":"Mandatory data, classification and reference checks","behaviour":"Checks blanks, codes, duplicate records, file relationships, dates, scope and reference-dependent values. Findings identify the file, field, rule and affected records.","verified":"Tests exercise the captured rule catalogue, broken records, preliminary options, reference lookups and readable findings. Missing reference checks, fallback rule sets and truncated runs cannot establish finalisation readiness.","limit":"The captured 8.0 catalogue has 232 rule rows. Local rule interpretations and quality warnings are documented; this is not the NCVER validator.","files":["test_avetmiss_collections.py","test_avs_reference_rules.py","test_avs_reports.py","test_audit_regressions.py"],"passed":141},{"id":"collections","title":"Collections and reporting history","scope":"Prepare, review, finalise and reconcile","behaviour":"Collections retain the year, period, options, exports, validation summary, declaration and recorded external outcome. A reporting ledger tracks what was accepted.","verified":"Tests cover generation through finalisation, nil-return declarations, completion deduplication, reporting clocks and binding the validated archive to its SHA-256 digest.","limit":"Recording a submission reference in the system is different from receiving an acceptance acknowledgement from NCVER or an STA.","files":["test_avetmiss_collections.py","test_reporting_ledger.py","test_reporting_clock.py","test_reporting_calendar.py","test_usi_transcript_updates.py","test_avs_upload_client.py"],"passed":72},{"id":"vetis","title":"VET Information Standard and STARS","scope":"VET Information Standard 1.0.0","behaviour":"The model and export support the 94-element catalogue, lifecycle events, full and changed-record batches, third-party data, corrective actions and reconciliation.","verified":"Tests exercise classifications, element rules, status sequences, batch construction, upload/validation/submission responses, retries, removal and reconciliation using test responses.","limit":"STARS service tests use doubles. Live integration-environment and production conformance are not established by those tests.","files":["test_vetis_export.py","test_vetis_element_rules.py","test_vetis_classifications.py","test_stars_client.py","test_stars_completion.py","test_reporting.py","test_validation_rules_extended.py","test_third_party_intake.py"],"passed":187},{"id":"state","title":"State and funding pathways","scope":"Contract-specific state and territory reporting","behaviour":"Jurisdiction settings select the reporting pathway, layouts, funding rules, eligibility records, claims and submission registers.","verified":"Tests cover state layouts, pathway isolation, eligibility decisions, claim calculations and response handling, including supported WA submission workflows.","limit":"Coverage is configuration and contract dependent. National AVETMISS file support is not assurance of every state funding obligation or live authority acceptance.","files":["test_state_export.py","test_state_layouts.py","test_state_submissions.py","test_jurisdiction_catalogue.py","test_jurisdiction_models.py","test_jurisdiction_rules.py","test_funding_eligibility.py","test_funding_claims.py","test_funding_ui.py"],"passed":146},{"id":"dpr","title":"Data provision responsibilities","scope":"Data Provision Requirements and National VET Data Policy","behaviour":"Reporting calendars, exemptions, aggregate returns, quality-indicator summaries, cessation checklists and on-request reporting keep responsibilities visible.","verified":"Tests cover the workflow records, due-date calculations, declaration gates, export fields and tenant-scoped configuration.","limit":"An exemption must be granted by the relevant authority. Staff remain responsible for correct declarations, transition arrangements and actual lodgement.","files":["test_dpr_workflows.py","test_reporting_calendar.py","test_surveys.py","test_enrolment_form.py","test_enrolment_form_variants.py"],"passed":47},{"id":"admissions","title":"Admissions, identity and LLND","scope":"Learner suitability and pre-enrolment review","behaviour":"Enquiries lead to an application, identity evidence, a course-context LLND review and a combined staff decision before enrolment and class allocation.","verified":"Tests cover expiring invitations, immutable bank editions, identity categories and expiry, approval gates, prefill, guardian evidence, private uploads, repeat submissions and class handover.","limit":"The public LLND bank is a demonstration bank. A real assessment bank needs trainer validation. The 100-point identity example is a configurable provider policy, not a universal AVETMISS rule.","files":["test_admissions.py","test_admissions_rotation.py","test_student_support.py"],"passed":41},{"id":"assessment","title":"Assessment and credit decisions","scope":"2025 Outcome Standards: assessment and recognition","behaviour":"Assessment records connect the decision, assessor, evidence, tool review, RPL and credit-transfer process.","verified":"Tests cover assessment permissions and gates, result changes, supporting evidence and the relationship between recognition and enrolment status history.","limit":"Staff must supply valid assessment evidence and apply the training product and assessment requirements. A software check cannot make the competence judgement.","files":["test_assessments.py","test_assessment_qa.py","test_enrolment_status.py","test_domain_fixes.py"],"passed":81},{"id":"panels","title":"Validation and workforce","scope":"2025 Outcome Standards and Credential Policy","behaviour":"Validation planning links training products, schedules, panel declarations, credentials and recorded outcomes. Workforce records hold currency and professional development.","verified":"Tests check credential and independence gates, schedule-specific conflicts, external independence where required and rechecking evidence at completion.","limit":"Policy settings such as a first-three-year target are provider choices. The system needs genuine credentials, declarations, panel decisions and policy references.","files":["test_validation_planner.py","test_validation_panel.py","test_workforce.py","test_provider_policy.py"],"passed":49},{"id":"usi","title":"USI and credential issuance","scope":"USI requirements and certification controls","behaviour":"Issuance requires current verified USI evidence or a documented permitted exemption. Changes to identity or verification can affect eligibility to issue.","verified":"Tests cover blocked unverified issuance, exemption evidence, identity changes, revoked results, credentials, statements of attainment and related higher-education issue routes.","limit":"The Registry service contract, approved access and integration conformance remain separate requirements. The existing placeholder is not a live Verify/Locate/Create implementation; no administrator bypass is offered.","files":["test_usi_gate.py","test_credentials.py","test_pdfgen_he.py"],"passed":35},{"id":"support","title":"Student support and case handling","scope":"2025 Outcome Standards: student support","behaviour":"Information packs, support plans, complaints, appeals, surveys, attendance and portal change requests support the learner relationship.","verified":"Tests cover case records, provider-policy deadlines, support actions, survey summaries, attendance permissions and student/trainer portal access.","limit":"Published policies, support delivery, case decisions and actual communications must be maintained by the provider.","files":["test_student_support.py","test_registers.py","test_surveys.py","test_attendance.py","test_student_portal.py","test_trainer_portal.py","test_provider_policy.py"],"passed":87},{"id":"finance","title":"Fees and financial records","scope":"Agreements, receipts and provider fee policies","behaviour":"Fee schedules, invoices, payments, refunds and plans connect to the learner account. Admissions checks the applicable agreement and fee prerequisites.","verified":"Tests cover amount calculations, invoice/receipt outputs, payment and refund workflows, exposure calculations and enrolment agreement gates.","limit":"Providers must configure the applicable fee protection and refund policy. The public demo records fictional receipts and does not collect money.","files":["test_finance.py","test_admissions.py","test_governance.py"],"passed":59},{"id":"governance","title":"Governance and quality records","scope":"2025 Outcome and Compliance Standards","behaviour":"Registers hold risks, improvements, conflicts, insurance, fit-and-proper records, marketing reviews, resources and transition actions.","verified":"Tests cover register operations, linked evidence, tenant scope, governance workflows and the standards coverage page.","limit":"Recorded evidence supports oversight. It does not substitute for the governing body acting on risks or satisfy every obligation automatically.","files":["test_governance.py","test_registers.py","test_standards.py","test_records.py"],"passed":43},{"id":"privacy","title":"Privacy, retention and records","scope":"Privacy and record-handling controls","behaviour":"Private evidence storage, retention workflows, legal holds, access/correction requests, breach records and controlled data exports support record management.","verified":"Tests cover encryption round trips, private document access, retention/disposal gates, de-identification, consent-related records and export scoping.","limit":"Providers determine their lawful handling, retention and notification responsibilities. Tests do not establish blanket Privacy Act compliance.","files":["test_privacy.py","test_records.py","test_document_store.py","test_field_encryption.py","test_security_validation.py"],"passed":90},{"id":"international","title":"International and higher education","scope":"Where the provider scope makes these applicable","behaviour":"International workflows include course progress and intervention, transfers, deferrals, agents and a PRISMS task register. Higher-education workflows include admissions, credit, awards and reporting tools.","verified":"Dedicated tests cover ESOS, TEQSA, higher-education admissions/analytics, HELP and TCSI workflow behaviour with synthetic or mocked data.","limit":"CRICOS, National Code, HESF, HELP and TCSI obligations depend on provider registration and activity. A task register or mock API result is not a live PRISMS/TCSI submission.","files":["test_esos.py","test_teqsa.py","test_he_admissions.py","test_he_analytics.py","test_help_loans.py","test_tcsi.py","test_tcsi_ui.py"],"passed":112},{"id":"security","title":"Access and audit controls","scope":"Platform assurance supporting all modules","behaviour":"Roles, tenant boundaries, MFA, session controls, CSRF protections, private reporting responses and audit records protect operational work.","verified":"Tests include denied reporting access, cross-tenant downloads, session revocation, authentication/second-factor controls, audit-chain verification and no-store headers.","limit":"Automated tests are bounded evidence. They are not an external penetration test, security certification or guarantee that an operator has configured every control.","files":["test_audit_regressions.py","test_audit_log.py","test_auth.py","test_mfa_required.py","test_middleware.py","test_permission_map.py","test_security_fixes.py","test_platform_review.py","test_csp.py","test_users.py"],"passed":251},{"id":"recovery","title":"Recovery and operational reliability","scope":"Backup, restore and deployment controls","behaviour":"Recovery tooling verifies completed manifests and matching encrypted artifacts. Application readiness, jobs and release identity are observable.","verified":"Tests reject missing, mixed, changed and incomplete backup sets; transfer-failure tests preserve the previous good set. Migration, readiness and job retry tests cover failure paths.","limit":"Backup status, key custody, restore drills and alert delivery need current operational evidence. Code tests do not prove a future restore or notification will succeed.","files":["test_recovery_controls.py","test_ops_scripts.py","test_health.py","test_migrations.py","test_jobs.py","test_jobs_ui.py","test_observability.py","test_release_tooling.py","test_packaging_scripts.py"],"passed":76},{"id":"data","title":"Reference data and usability","scope":"Data integrity and usable operations","behaviour":"Reference importers, structured forms, organisation-scoped lists, pagination and accessible page structure support consistent day-to-day use.","verified":"Tests cover reference imports, classification mappings, model constraints, route/navigation coverage, form labels, templates, contrast checks and bounded query counts.","limit":"Reference lists need authorised, current data. Automated accessibility and query-count tests do not replace user testing, a full WCAG audit or production load testing.","files":["test_reference_ext.py","test_reference_import.py","test_reference_numbers.py","test_model_hardening.py","test_models.py","test_sqlite_uuid_storage.py","test_accessibility.py","test_template_lint.py","test_nav_routes.py","test_nav_structure.py","test_pagination.py","test_pagination_reporting.py","test_reporting_statements.py","test_students_api.py","test_programs_api.py","test_enrolments_api.py","test_ui_components.py"],"passed":306}],"tests":[{"file":"test_accessibility.py","name":"test_401_page_offers_sign_in","title":"401 page offers sign in","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_404_page_logged_in_uses_shell","title":"404 page logged in uses shell","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_404_page_logged_out_is_plain","title":"404 page logged out is plain","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_422_page_lists_fields","title":"422 page lists fields","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_500_page_from_unhandled_exception","title":"500 page from unhandled exception","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_dashboard_structure","title":"Dashboard structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_errors_stay_json_for_non_browser_clients","title":"Errors stay json for non browser clients","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_every_parameterless_page_meets_the_structural_rules","title":"Every parameterless page meets the structural rules","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_login_page_structure","title":"Login page structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_portal_shell_has_lang_skip_link_and_main","title":"Portal shell has lang skip link and main","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_redirect_http_exceptions_pass_through","title":"Redirect http exceptions pass through","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_registers_structure","title":"Registers structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_reports_hub_structure","title":"Reports hub structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_student_form_structure","title":"Student form structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_students_list_empty_state_and_filters","title":"Students list empty state and filters","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_students_list_structure","title":"Students list structure","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_students_list_uses_the_shared_components","title":"Students list uses the shared components","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_system_dark_block_matches_explicit_dark_block","title":"System dark block matches explicit dark block","passed":1,"skipped":0},{"file":"test_accessibility.py","name":"test_token_contrast_meets_aa","title":"Token contrast meets aa","passed":40,"skipped":0},{"file":"test_accessibility.py","name":"test_white_on_danger_button","title":"White on danger button","passed":2,"skipped":0},{"file":"test_admissions.py","name":"test_applicant_csrf_origin_and_stale_revision","title":"Applicant csrf origin and stale revision","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_application_prefill_llnd_snapshot_and_review_gates","title":"Application prefill llnd snapshot and review gates","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_bad_file_anonymous_and_csrf_uploads_are_refused","title":"Bad file anonymous and csrf uploads are refused","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_complete_enquiry_to_class_handover_is_idempotent","title":"Complete enquiry to class handover is idempotent","passed":2,"skipped":0},{"file":"test_admissions.py","name":"test_conversion_requires_applicant_confirmation","title":"Conversion requires applicant confirmation","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_create_bank_uses_context_and_immutable_edition","title":"Create bank uses context and immutable edition","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_demo_bank_cannot_invite_real_applicant","title":"Demo bank cannot invite real applicant","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_expired_and_revoked_access","title":"Expired and revoked access","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_fee_agreement_payment_gates","title":"Fee agreement payment gates","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_guardian_evidence_is_required_before_minor_accepts","title":"Guardian evidence is required before minor accepts","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_identity_points_do_not_double_count_category_or_expired_documents","title":"Identity points do not double count category or expired documents","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_identity_policy_sighting_and_retention","title":"Identity policy sighting and retention","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_invitation_get_does_not_burn_token_and_post_is_single_use","title":"Invitation get does not burn token and post is single use","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_linked_admissions_are_exported_and_deidentified","title":"Linked admissions are exported and deidentified","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_more_evidence_can_be_requested_before_identity_complete","title":"More evidence can be requested before identity complete","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_no_store_headers","title":"No store headers","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_prefill_validation_keeps_optional_demographics_optional","title":"Prefill validation keeps optional demographics optional","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_private_form_null_origin_still_requires_session_nonce","title":"Private form null origin still requires session nonce","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_public_product_and_demo_need_no_login","title":"Public product and demo need no login","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_returning_student_links_only_after_identity_match","title":"Returning student links only after identity match","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_staff_queue_and_bank_editor_render","title":"Staff queue and bank editor render","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_tenant_isolation","title":"Tenant isolation","passed":1,"skipped":0},{"file":"test_admissions.py","name":"test_upload_uses_private_encrypted_storage_and_ignores_filename","title":"Upload uses private encrypted storage and ignores filename","passed":1,"skipped":0},{"file":"test_admissions_rotation.py","name":"test_rotation_includes_all_admissions_snapshots","title":"Rotation includes all admissions snapshots","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_all_section_pages_render","title":"All section pages render","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_approve_rejects_non_draft","title":"Approve rejects non draft","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_approving_tas_writes_history_and_audit","title":"Approving tas writes history and audit","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_assessment_requires_auth","title":"Assessment requires auth","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_engagement_create_audits_os_1_2","title":"Engagement create audits os 1 2","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_new_version_increments_version_and_resets_to_draft","title":"New version increments version and resets to draft","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_non_tae_schedule_keeps_independent_flag_off","title":"Non tae schedule keeps independent flag off","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_standalone_tae_unit_uses_ordinary_panel_rule","title":"Standalone tae unit uses ordinary panel rule","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_tae_program_schedule_forces_independent_validator","title":"Tae program schedule forces independent validator","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_tool_review_changes_required_flagged_on_overview","title":"Tool review changes required flagged on overview","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_validation_outcome_completes_schedule","title":"Validation outcome completes schedule","passed":1,"skipped":0},{"file":"test_assessment_qa.py","name":"test_validation_status_states","title":"Validation status states","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_admin_override_requires_justification_and_is_audited","title":"Admin override requires justification and is audited","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_changes_required_review_withdraws_approval_and_expiry","title":"Changes required review withdraws approval and expiry","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_competent_requires_tasks_and_full_checklist_then_concludes","title":"Competent requires tasks and full checklist then concludes","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_credit_transfer_not_granted_leaves_enrolment_open","title":"Credit transfer not granted leaves enrolment open","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_credit_transfer_workflow_end_to_end","title":"Credit transfer workflow end to end","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_dashboard_widgets_shape","title":"Dashboard widgets shape","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_evidence_and_resubmission_links_must_belong_to_the_same_enrolment","title":"Evidence and resubmission links must belong to the same enrolment","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_future_offering_accepts_unapproved_tool_but_plan_flags_it","title":"Future offering accepts unapproved tool but plan flags it","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_gate_requires_vocational_competency_for_training_package","title":"Gate requires vocational competency for training package","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_judgement_blocked_for_expired_or_working_towards_credential","title":"Judgement blocked for expired or working towards credential","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_judgement_blocked_for_user_without_staff_link","title":"Judgement blocked for user without staff link","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_nav_items_registered","title":"Nav items registered","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_not_yet_competent_and_resubmission_outcomes","title":"Not yet competent and resubmission outcomes","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_program_completion_offered_and_credential_queued","title":"Program completion offered and credential queued","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_program_completion_refused_while_subjects_open","title":"Program completion refused while subjects open","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_queue_lists_pending_and_filters","title":"Queue lists pending and filters","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_queue_requires_auth","title":"Queue requires auth","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_registered_enrolment_is_commenced_before_concluding","title":"Registered enrolment is commenced before concluding","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_rpl_gap_training_leaves_unit_open","title":"Rpl gap training leaves unit open","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_rpl_partial_decision_and_overdue_clock","title":"Rpl partial decision and overdue clock","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_rpl_workflow_end_to_end","title":"Rpl workflow end to end","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_settings_change_timeframe_clock","title":"Settings change timeframe clock","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_smoke_pages_render","title":"Smoke pages render","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_task_results_via_htmx_partial_with_attempts_and_evidence","title":"Task results via htmx partial with attempts and evidence","passed":1,"skipped":0},{"file":"test_assessments.py","name":"test_unapproved_instrument_cannot_attach_to_live_offering","title":"Unapproved instrument cannot attach to live offering","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_api_summary_json_and_auth","title":"Api summary json and auth","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_bulk_mark_and_students_below_threshold","title":"Bulk mark and students below threshold","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_commence_blocked_when_parent_program_not_commenced","title":"Commence blocked when parent program not commenced","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_first_present_offers_commenced_and_trainer_confirms","title":"First present offers commenced and trainer confirms","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_generate_recurring_sessions_skips_duplicates","title":"Generate recurring sessions skips duplicates","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_generate_rejects_bad_input","title":"Generate rejects bad input","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_generate_via_http","title":"Generate via http","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_index_and_detail_pages","title":"Index and detail pages","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_nav_and_dashboard_widgets","title":"Nav and dashboard widgets","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_roster_marking_and_summary","title":"Roster marking and summary","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_summary_without_sessions","title":"Summary without sessions","passed":1,"skipped":0},{"file":"test_attendance.py","name":"test_threshold_setting_via_http","title":"Threshold setting via http","passed":1,"skipped":0},{"file":"test_audit_log.py","name":"test_chain_validates_across_entries","title":"Chain validates across entries","passed":1,"skipped":0},{"file":"test_audit_log.py","name":"test_chains_are_isolated_per_org","title":"Chains are isolated per org","passed":1,"skipped":0},{"file":"test_audit_log.py","name":"test_postgres_concurrent_appends_keep_one_chain","title":"Postgres concurrent appends keep one chain","passed":0,"skipped":1},{"file":"test_audit_log.py","name":"test_tampering_breaks_chain","title":"Tampering breaks chain","passed":1,"skipped":0},{"file":"test_audit_regressions.py","name":"test_complete_validation_binds_the_finalised_archive","title":"Complete validation binds the finalised archive","passed":2,"skipped":0},{"file":"test_audit_regressions.py","name":"test_failed_validation_allows_diagnostic_draft_but_not_finalisation","title":"Failed validation allows diagnostic draft but not finalisation","passed":1,"skipped":0},{"file":"test_audit_regressions.py","name":"test_incomplete_checks_cannot_finalise_even_with_stale_ready_status","title":"Incomplete checks cannot finalise even with stale ready status","passed":5,"skipped":0},{"file":"test_audit_regressions.py","name":"test_missing_reference_checks_cannot_be_finalised","title":"Missing reference checks cannot be finalised","passed":1,"skipped":0},{"file":"test_audit_regressions.py","name":"test_other_tenant_cannot_download_reporting_archive","title":"Other tenant cannot download reporting archive","passed":1,"skipped":0},{"file":"test_audit_regressions.py","name":"test_reporting_download_is_not_browser_cacheable","title":"Reporting download is not browser cacheable","passed":1,"skipped":0},{"file":"test_audit_regressions.py","name":"test_reporting_download_respects_role","title":"Reporting download respects role","passed":8,"skipped":0},{"file":"test_audit_regressions.py","name":"test_trainer_denied_every_reporting_get","title":"Trainer denied every reporting get","passed":45,"skipped":0},{"file":"test_auth.py","name":"test_account_locks_after_ten_failures","title":"Account locks after ten failures","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_bearer_token_header_also_authenticates","title":"Bearer token header also authenticates","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_change_password_rejects_same_and_mismatched_password","title":"Change password rejects same and mismatched password","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_change_password_rejects_short_password","title":"Change password rejects short password","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_change_password_success_unlocks_dashboard_and_retires_old_password","title":"Change password success unlocks dashboard and retires old password","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_development_defaults_are_relaxed","title":"Development defaults are relaxed","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_expired_reset_token_is_rejected","title":"Expired reset token is rejected","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_flagged_session_is_gated_until_password_changed","title":"Flagged session is gated until password changed","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_forgot_password_does_not_reveal_accounts","title":"Forgot password does not reveal accounts","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_forgot_password_flow_through_outbox","title":"Forgot password flow through outbox","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_gate_can_be_disabled_by_setting","title":"Gate can be disabled by setting","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_generated_secret_key_is_persisted_and_reused","title":"Generated secret key is persisted and reused","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_lock_expires_and_success_resets_counter","title":"Lock expires and success resets counter","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_email_is_case_insensitive","title":"Login email is case insensitive","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_records_session_and_logout_revokes_it","title":"Login records session and logout revokes it","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_success_sets_cookie","title":"Login success sets cookie","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_unknown_email","title":"Login unknown email","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_with_default_password_redirects_to_change_password","title":"Login with default password redirects to change password","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_login_wrong_password_renders_error","title":"Login wrong password renders error","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_logout_clears_cookie","title":"Logout clears cookie","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_logout_form_in_the_topbar_posts","title":"Logout form in the topbar posts","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_logout_get_never_ends_the_session","title":"Logout get never ends the session","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_logout_get_sends_an_anonymous_visitor_to_login","title":"Logout get sends an anonymous visitor to login","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_me_lists_permissions","title":"Me lists permissions","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_me_requires_auth","title":"Me requires auth","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_me_returns_user","title":"Me returns user","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_mfa_enrol_and_verify_flow","title":"Mfa enrol and verify flow","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_mfa_routes_hidden_when_disabled","title":"Mfa routes hidden when disabled","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_must_change_password_flag_forces_change","title":"Must change password flag forces change","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_non_default_password_is_not_gated","title":"Non default password is not gated","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_password_change_revokes_other_sessions","title":"Password change revokes other sessions","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_production_defaults_are_strict","title":"Production defaults are strict","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_production_refuses_default_secret_or_root_password","title":"Production refuses default secret or root password","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_secret_key_is_never_default_or_short","title":"Secret key is never default or short","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_sqlite_secret_key_lives_next_to_database","title":"Sqlite secret key lives next to database","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_strong_env_secret_key_is_honoured","title":"Strong env secret key is honoured","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_test_environment_is_auto_detected_and_relaxed","title":"Test environment is auto detected and relaxed","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_tokens_issued_before_password_change_are_rejected","title":"Tokens issued before password change are rejected","passed":1,"skipped":0},{"file":"test_auth.py","name":"test_totp_reference_vector","title":"Totp reference vector","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_3252_reads_the_final_month_of_the_collection_period","title":"3252 reads the final month of the collection period","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_4729_subject_equal_to_program_only_off_the_tga_master_list","title":"4729 subject equal to program only off the tga master list","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_annual_collection_widget_tones","title":"Annual collection widget tones","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_avetmiss_pages_meet_the_accessibility_contract","title":"Avetmiss pages meet the accessibility contract","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_broken_records_produce_avs_style_errors_with_ncver_numbers","title":"Broken records produce avs style errors with ncver numbers","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_collection_periods_and_version","title":"Collection periods and version","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_cross_reference_checks_mirror_the_spec_file_relationships","title":"Cross reference checks mirror the spec file relationships","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_csv_exports_neutralise_spreadsheet_formulas","title":"Csv exports neutralise spreadsheet formulas","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_date_and_period_rules_follow_the_options","title":"Date and period rules follow the options","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_det_field_limits_match_the_captured_forms","title":"Det field limits match the captured forms","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_every_code_our_tables_emit_is_in_the_det_dropdowns","title":"Every code our tables emit is in the det dropdowns","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_format_and_file_set_checks","title":"Format and file set checks","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_full_workflow_generate_check_validate_finalise_record","title":"Full workflow generate check validate finalise record","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_generate_shows_export_reasons_instead_of_a_500","title":"Generate shows export reasons instead of a 500","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_house_style_no_dashes_in_avetmiss_modules","title":"House style no dashes in avetmiss modules","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_include_client_contact_off_leaves_nat00085_out_with_a_warning","title":"Include client contact off leaves nat00085 out with a warning","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_migration_0013_declares_only_the_new_tables","title":"Migration 0013 declares only the new tables","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_models_round_trip","title":"Models round trip","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_nat00030a_recognition_16_may_leave_anzsco_field_and_level_blank","title":"Nat00030a recognition 16 may leave anzsco field and level blank","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_nat00060_nominal_hour_bands_follow_the_rule_wording","title":"Nat00060 nominal hour bands follow the rule wording","passed":5,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_nav_and_index_pages","title":"Nav and index pages","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_ncver_samples_validate_with_zero_errors_as_2019_jan_mar","title":"Ncver samples validate with zero errors as 2019 jan mar","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_new_collection_records_avs_details_and_chooses_the_version","title":"New collection records avs details and chooses the version","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_nil_return_declaration","title":"Nil return declaration","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_rule_catalogue_is_ncvers_export","title":"Rule catalogue is ncvers export","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_specific_funding_identifier_and_level_rules_follow_the_release","title":"Specific funding identifier and level rules follow the release","passed":10,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_supplementary_samples_report_their_unreferenced_rows_and_exclusions_switch_them_off","title":"Supplementary samples report their unreferenced rows and exclusions switch them off","passed":1,"skipped":0},{"file":"test_avetmiss_collections.py","name":"test_validate_reports_an_avs_error_for_a_broken_record","title":"Validate reports an avs error for a broken record","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_activity_sections_carry_their_own_subject","title":"Activity sections carry their own subject","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_missing_mandatory_values_are_flagged_with_reasons","title":"Missing mandatory values are flagged with reasons","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_organisation_and_delivery_location_previews","title":"Organisation and delivery location previews","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_preview_endpoint_returns_the_htmx_partial","title":"Preview endpoint returns the htmx partial","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_program_enrolment_subject_enrolment_program_and_subject_previews","title":"Program enrolment subject enrolment program and subject previews","passed":1,"skipped":0},{"file":"test_avetmiss_preview.py","name":"test_student_preview_uses_det_client_labels_and_export_values","title":"Student preview uses det client labels and export values","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_3869_and_3870_outcome_61_needs_a_superseded_subject_and_its_replacement","title":"3869 and 3870 outcome 61 needs a superseded subject and its replacement","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4612_name_must_match_the_register_and_4645_code_must_exist","title":"4612 name must match the register and 4645 code must exist","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4630_postal_suburb_must_exist_and_po_box_postcodes_are_allowed","title":"4630 postal suburb must exist and po box postcodes are allowed","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4644_supplementary_name_belongs_to_another_rto","title":"4644 supplementary name belongs to another rto","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4646_3725_3720_check_the_loaded_code_tables","title":"4646 3725 3720 check the loaded code tables","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4652_suburb_must_match_postcode_on_every_address_file","title":"4652 suburb must match postcode on every address file","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4744_error_above_the_local_threshold_warning_below","title":"4744 error above the local threshold warning below","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4757_program_never_on_scope","title":"4757 program never on scope","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4758_4759_4760_4761_activity_against_the_scope_periods","title":"4758 4759 4760 4761 activity against the scope periods","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_4763_and_4764_overseas_postcode_with_an_australian_suburb","title":"4763 and 4764 overseas postcode with an australian suburb","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_clean_files_pass_every_reference_rule","title":"Clean files pass every reference rule","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_country_and_language_lists_when_present","title":"Country and language lists when present","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_empty_tables_answer_none","title":"Empty tables answer none","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_empty_tables_report_not_evaluated_with_the_load_instruction","title":"Empty tables report not evaluated with the load instruction","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_house_style_no_dashes_in_the_new_modules","title":"House style no dashes in the new modules","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_import_script_builds_localities_from_the_abs_allocation_sheets","title":"Import script builds localities from the abs allocation sheets","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_import_script_derives_superseded_relationships_from_training_products","title":"Import script derives superseded relationships from training products","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_import_script_parses_the_organisation_service_and_loads_the_tables","title":"Import script parses the organisation service and loads the tables","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_lookups_answer_from_the_loaded_tables","title":"Lookups answer from the loaded tables","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_postcode_rules_use_the_locality_list_when_loaded","title":"Postcode rules use the locality list when loaded","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_release_8_1_rules_file_fallback_and_use","title":"Release 8 1 rules file fallback and use","passed":1,"skipped":0},{"file":"test_avs_reference_rules.py","name":"test_scope_and_superseded_tables_empty_but_products_loaded","title":"Scope and superseded tables empty but products loaded","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_duplicate_clients_report_reproduces_each_criterion","title":"Duplicate clients report reproduces each criterion","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_duplicate_employers_report_uses_the_apprenticeship_identifiers","title":"Duplicate employers report uses the apprenticeship identifiers","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_house_style_no_dashes_in_the_avs_report_modules","title":"House style no dashes in the avs report modules","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_ncver_samples_have_no_duplicate_clients_under_the_default_criteria","title":"Ncver samples have no duplicate clients under the default criteria","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_ncver_samples_produce_only_local_warnings_not_errors","title":"Ncver samples produce only local warnings not errors","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_profile_report_counts_values_with_det_labels_and_suppresses_personal_fields","title":"Profile report counts values with det labels and suppresses personal fields","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_profile_treats_not_specified_fillers_as_blank","title":"Profile treats not specified fillers as blank","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_quality_checks_fire_on_the_documented_patterns","title":"Quality checks fire on the documented patterns","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_quality_checks_skip_share_checks_on_small_files_and_annual_only_on_interim","title":"Quality checks skip share checks on small files and annual only on interim","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_report_pages_meet_the_accessibility_contract","title":"Report pages meet the accessibility contract","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_report_pages_run_on_current_data_and_on_a_collection","title":"Report pages run on current data and on a collection","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_reports_home_is_in_the_nav_and_lists_the_reports","title":"Reports home is in the nav and lists the reports","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_reports_require_authentication","title":"Reports require authentication","passed":1,"skipped":0},{"file":"test_avs_reports.py","name":"test_threshold_normalisation_ignores_bad_values","title":"Threshold normalisation ignores bad values","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_db_token_store_keeps_only_ciphertext","title":"Db token store keeps only ciphertext","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_device_code_flow_activates_stores_token_uploads_and_reads_status","title":"Device code flow activates stores token uploads and reads status","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_expired_access_token_is_refreshed_before_an_upload","title":"Expired access token is refreshed before an upload","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_nothing_is_called_without_a_client_id_or_token","title":"Nothing is called without a client id or token","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_polling_handles_slow_down_denied_and_expiry","title":"Polling handles slow down denied and expiry","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_settings_urls_and_registration_note","title":"Settings urls and registration note","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_token_encryption_round_trip_is_bound_to_the_secret","title":"Token encryption round trip is bound to the secret","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_token_status_survives_a_rotated_secret","title":"Token status survives a rotated secret","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_upload_refuses_unfinalised_collections","title":"Upload refuses unfinalised collections","passed":1,"skipped":0},{"file":"test_avs_upload_client.py","name":"test_upload_settings_activation_and_upload_through_the_pages","title":"Upload settings activation and upload through the pages","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_assessor_cannot_create_or_issue_credentials","title":"Assessor cannot create or issue credentials","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_audit_entry_standard_ref_after_issue","title":"Audit entry standard ref after issue","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_can_issue_allows_documented_exemption_intoff","title":"Can issue allows documented exemption intoff","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_can_issue_blocked_when_usi_pending","title":"Can issue blocked when usi pending","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_can_issue_needs_a_registry_verification_not_a_format_check","title":"Can issue needs a registry verification not a format check","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_create_via_api_sets_sla_due_completion_plus_30_days","title":"Create via api sets sla due completion plus 30 days","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_issue_generates_pdf","title":"Issue generates pdf","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_issue_statement_of_attainment_uses_portrait","title":"Issue statement of attainment uses portrait","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_public_verify_page_shows_qualification","title":"Public verify page shows qualification","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_public_verify_unknown_token_404","title":"Public verify unknown token 404","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_registry_verifier_raises_without_credentials","title":"Registry verifier raises without credentials","passed":1,"skipped":0},{"file":"test_credentials.py","name":"test_required_content_elements","title":"Required content elements","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_confirm_dialog_is_wired_through_data_attributes","title":"Confirm dialog is wired through data attributes","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_every_inline_script_and_style_block_carries_the_nonce_placeholder","title":"Every inline script and style block carries the nonce placeholder","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_every_page_renders_without_inline_handlers_or_unnonced_scripts","title":"Every page renders without inline handlers or unnonced scripts","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_logo_route_keeps_its_own_sandbox_policy","title":"Logo route keeps its own sandbox policy","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_no_template_carries_an_inline_event_handler","title":"No template carries an inline event handler","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_nonce_is_empty_outside_a_request","title":"Nonce is empty outside a request","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_policy_has_a_nonce_and_no_unsafe_script_sources","title":"Policy has a nonce and no unsafe script sources","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_public_and_error_pages_are_clean","title":"Public and error pages are clean","passed":1,"skipped":0},{"file":"test_csp.py","name":"test_static_scripts_avoid_eval_and_htmx_style_injection","title":"Static scripts avoid eval and htmx style injection","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_alias_still_shows_when_the_canonical_tile_is_quiet","title":"Alias still shows when the canonical tile is quiet","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_arrange_hides_higher_education_and_state_tiles_for_a_vet_only_rto","title":"Arrange hides higher education and state tiles for a vet only rto","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_arrange_keeps_today_tiles_out_of_the_area_cards_and_unavailable_tiles_separate","title":"Arrange keeps today tiles out of the area cards and unavailable tiles separate","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_backups_copy_is_plain_english_with_help","title":"Backups copy is plain english with help","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_attention_rows_are_sentences_with_a_button","title":"Dashboard attention rows are sentences with a button","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_calendar_uses_friendly_dates_and_due_phrases","title":"Dashboard calendar uses friendly dates and due phrases","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_checklist_hidden_once_every_step_is_done","title":"Dashboard checklist hidden once every step is done","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_for_a_dual_sector_provider_shows_the_higher_education_area","title":"Dashboard for a dual sector provider shows the higher education area","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_getting_started_until_complete","title":"Dashboard getting started until complete","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_dashboard_visible_copy_has_no_codes","title":"Dashboard visible copy has no codes","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_decorate_fallbacks_for_an_unknown_widget","title":"Decorate fallbacks for an unknown widget","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_decorate_moves_the_reference_into_the_tooltip_and_keeps_the_raw_hint","title":"Decorate moves the reference into the tooltip and keeps the raw hint","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_due_phrase","title":"Due phrase","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_friendly_copy_keys_exist_and_have_no_codes","title":"Friendly copy keys exist and have no codes","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_friendly_date","title":"Friendly date","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_getting_started_detects_organisation_users_and_jurisdictions","title":"Getting started detects organisation users and jurisdictions","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_humanise_removes_codes_and_keeps_references","title":"Humanise removes codes and keeps references","passed":12,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_information_tiles_show_no_tone_label_and_are_quiet_when_empty","title":"Information tiles show no tone label and are quiet when empty","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_jinja_filters_registered","title":"Jinja filters registered","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_needs_attention_dedupes_by_key_and_alias_and_sorts_critical_first","title":"Needs attention dedupes by key and alias and sorts critical first","passed":1,"skipped":0},{"file":"test_dashboard_friendly.py","name":"test_quarter_label","title":"Quarter label","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_current_org_resolves_to_user_org","title":"Current org resolves to user org","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_dashboard_greets_with_organisation_and_date","title":"Dashboard greets with organisation and date","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_dashboard_requires_auth","title":"Dashboard requires auth","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_dashboard_shows_counts","title":"Dashboard shows counts","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_new_tenant_validation","title":"New tenant validation","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_non_root_cannot_create_tenants","title":"Non root cannot create tenants","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_organisation_add_campus","title":"Organisation add campus","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_organisation_update_is_audited","title":"Organisation update is audited","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_organisation_view_and_update","title":"Organisation view and update","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_root_can_pick_org_via_header","title":"Root can pick org via header","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_root_creates_tenant_and_invites_admin","title":"Root creates tenant and invites admin","passed":1,"skipped":0},{"file":"test_dashboard_org.py","name":"test_root_sees_new_organisation_link","title":"Root sees new organisation link","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_built_in_widgets_compute_against_seeded_db","title":"Built in widgets compute against seeded db","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_calendar_items_include_overdue_complaint_first","title":"Calendar items include overdue complaint first","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_compute_all_orders_by_nav_section_then_order_then_title","title":"Compute all orders by nav section then order then title","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_compute_widget_catches_exceptions_and_renders_unavailable","title":"Compute widget catches exceptions and renders unavailable","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_compute_widget_non_dict_result_is_unavailable","title":"Compute widget non dict result is unavailable","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_compute_widget_normalises_tone_value_and_labels","title":"Compute widget normalises tone value and labels","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_dashboard_needs_attention_lists_critical_before_warn","title":"Dashboard needs attention lists critical before warn","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_dashboard_renders_failed_widget_as_unavailable_not_500","title":"Dashboard renders failed widget as unavailable not 500","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_discover_widgets_collects_from_api_modules_and_they_are_valid","title":"Discover widgets collects from api modules and they are valid","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_discover_widgets_later_key_overrides_earlier","title":"Discover widgets later key overrides earlier","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_discover_widgets_skips_invalid_declarations","title":"Discover widgets skips invalid declarations","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_group_by_section_and_needs_attention","title":"Group by section and needs attention","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_validate_widget_fills_defaults","title":"Validate widget fills defaults","passed":1,"skipped":0},{"file":"test_dashboard_widgets.py","name":"test_validate_widget_requires_key_title_and_callable_compute","title":"Validate widget requires key title and callable compute","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_issue_writes_through_the_store_and_download_checks_the_hash","title":"Issue writes through the store and download checks the hash","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_migrate_documents_moves_legacy_files_and_updates_references","title":"Migrate documents moves legacy files and updates references","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_open_verify_and_overwrite","title":"Open verify and overwrite","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_record_issued_document_upserts_and_reports_missing","title":"Record issued document upserts and reports missing","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_store_honours_the_issue_year_and_validates_kind_and_name","title":"Store honours the issue year and validates kind and name","passed":1,"skipped":0},{"file":"test_document_store.py","name":"test_store_layout_is_org_kind_year_on_the_upload_volume","title":"Store layout is org kind year on the upload volume","passed":1,"skipped":0},{"file":"test_domain_fixes.py","name":"test_complete_program_refuses_until_every_unit_is_achieved","title":"Complete program refuses until every unit is achieved","passed":1,"skipped":0},{"file":"test_domain_fixes.py","name":"test_credit_transfer_and_rpl_count_as_achieved","title":"Credit transfer and rpl count as achieved","passed":1,"skipped":0},{"file":"test_domain_fixes.py","name":"test_funding_source_80_is_a_reason_unless_the_organisation_is_a_tafe","title":"Funding source 80 is a reason unless the organisation is a tafe","passed":1,"skipped":0},{"file":"test_domain_fixes.py","name":"test_intoff_is_left_out_of_the_vetis_payload_and_may_repeat","title":"Intoff is left out of the vetis payload and may repeat","passed":1,"skipped":0},{"file":"test_domain_fixes.py","name":"test_migration_0025_widens_the_usi_index_and_adds_the_packaging_marker","title":"Migration 0025 widens the usi index and adds the packaging marker","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_aggregate_return_counts_per_course_and_registers_due_date","title":"Aggregate return counts per course and registers due date","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_aggregate_return_respects_course_codes_and_renders_csv_and_pdf","title":"Aggregate return respects course codes and renders csv and pdf","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_cessation_dates_and_checklist","title":"Cessation dates and checklist","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_cessation_evidence_reads_the_reporting_modules","title":"Cessation evidence reads the reporting modules","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_cessation_page_create_tick_and_close","title":"Cessation page create tick and close","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_contact_block_missing_lists_gaps","title":"Contact block missing lists gaps","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_exempt_training_notice_text_and_download","title":"Exempt training notice text and download","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_exemption_pages_and_downloads","title":"Exemption pages and downloads","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_migration_0020_adds_contact_columns_and_workflow_tables","title":"Migration 0020 adds contact columns and workflow tables","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_nav_entry_and_calendar_pickup","title":"Nav entry and calendar pickup","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_on_request_page_and_download","title":"On request page and download","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_on_request_report_assembles_s8_sections","title":"On request report assembles s8 sections","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_organisation_form_saves_contact_fields","title":"Organisation form saves contact fields","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_qi_clock_and_due_dates","title":"Qi clock and due dates","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_qi_dashboard_widget_tones","title":"Qi dashboard widget tones","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_quality_indicator_pages","title":"Quality indicator pages","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_quality_indicator_summary_metrics_and_outputs","title":"Quality indicator summary metrics and outputs","passed":1,"skipped":0},{"file":"test_dpr_workflows.py","name":"test_tick_checklist_item_records_actor_and_reassigns_json","title":"Tick checklist item records actor and reassigns json","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_form_renders_with_org_and_questions","title":"Form renders with org and questions","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_gender_and_study_reason_options_come_from_catalogue","title":"Gender and study reason options come from catalogue","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_markdown_export","title":"Markdown export","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_prefill_from_student","title":"Prefill from student","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_prefill_rejects_other_tenant_and_unknown_student","title":"Prefill rejects other tenant and unknown student","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_privacy_notice_alone","title":"Privacy notice alone","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_question_set_matches_sample_form","title":"Question set matches sample form","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_routes_reject_unauthenticated","title":"Routes reject unauthenticated","passed":1,"skipped":0},{"file":"test_enrolment_form.py","name":"test_unrecoverable_passage_is_marked_not_paraphrased","title":"Unrecoverable passage is marked not paraphrased","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_avetmiss8_prefill_and_single_legal_name","title":"Avetmiss8 prefill and single legal name","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_avetmiss8_question_set_is_complete_and_bound_to_the_catalogue","title":"Avetmiss8 question set is complete and bound to the catalogue","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_avetmiss8_question_variant","title":"Avetmiss8 question variant","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_contact_block_comes_from_the_organisation_record","title":"Contact block comes from the organisation record","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_default_form_is_unchanged","title":"Default form is unchanged","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_markdown_export_honours_the_variants","title":"Markdown export honours the variants","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_nvdp_2021_notice_variant","title":"Nvdp 2021 notice variant","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_tenant_setting_selects_the_variants_and_the_query_overrides","title":"Tenant setting selects the variants and the query overrides","passed":1,"skipped":0},{"file":"test_enrolment_form_variants.py","name":"test_unknown_variant_is_rejected","title":"Unknown variant is rejected","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_activity_date_rules","title":"Activity date rules","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_allowed_targets_reads_the_table","title":"Allowed targets reads the table","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_brdg00064_program_cannot_conclude_with_open_subjects","title":"Brdg00064 program cannot conclude with open subjects","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_brdg00072_concluded_requires_reason_unless_superseded","title":"Brdg00072 concluded requires reason unless superseded","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_brdg00128_subject_cannot_commence_before_program","title":"Brdg00128 subject cannot commence before program","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_brdg00153_deferred_invalid_for_subject","title":"Brdg00153 deferred invalid for subject","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_brdg00153_record_status_rejects_deferred_subject","title":"Brdg00153 record status rejects deferred subject","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_is_superseded_follows_the_reverse_link","title":"Is superseded follows the reverse link","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_is_superseded_sees_a_pending_superseding_row","title":"Is superseded sees a pending superseding row","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_not_applicable_reason_only_for_deceased_student","title":"Not applicable reason only for deceased student","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_packaging_allows_re_attempts_markers_and_other_conclusions","title":"Packaging allows re attempts markers and other conclusions","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_packaging_blockers_name_units_not_achieved","title":"Packaging blockers name units not achieved","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_program_invalid_transitions","title":"Program invalid transitions","passed":10,"skipped":0},{"file":"test_enrolment_status.py","name":"test_program_valid_transitions","title":"Program valid transitions","passed":14,"skipped":0},{"file":"test_enrolment_status.py","name":"test_record_status_appends_event_and_audit","title":"Record status appends event and audit","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_record_status_falls_back_to_the_cached_status_without_events","title":"Record status falls back to the cached status without events","passed":1,"skipped":0},{"file":"test_enrolment_status.py","name":"test_subject_transition_table_includes_credit_transfer","title":"Subject transition table includes credit transfer","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_auditor_can_read_but_not_write_enrolments","title":"Auditor can read but not write enrolments","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_404_for_other_org","title":"Enrolment 404 for other org","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_create_appends_initial_registered_event","title":"Enrolment create appends initial registered event","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_create_is_idempotent","title":"Enrolment create is idempotent","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_create_records_the_privacy_notice_once","title":"Enrolment create records the privacy notice once","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_create_rejects_invented_study_reason","title":"Enrolment create rejects invented study reason","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_create_requires_the_privacy_notice_unless_deferral_is_allowed","title":"Enrolment create requires the privacy notice unless deferral is allowed","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_new_form_requires_offering","title":"Enrolment new form requires offering","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolment_view_shows_event_timeline","title":"Enrolment view shows event timeline","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolments_list_filters_by_published_status","title":"Enrolments list filters by published status","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_enrolments_list_loads_students_and_programs_in_bounded_queries","title":"Enrolments list loads students and programs in bounded queries","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_status_change_appends_event_and_updates_cache","title":"Status change appends event and updates cache","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_status_change_rejects_invalid_transition","title":"Status change rejects invalid transition","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_subject_enrolment_create_edit_and_status","title":"Subject enrolment create edit and status","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_subject_enrolment_form_records_one_predominant_venue_per_usage_type","title":"Subject enrolment form records one predominant venue per usage type","passed":1,"skipped":0},{"file":"test_enrolments_api.py","name":"test_successful_completion_is_refused_while_a_unit_is_not_achieved","title":"Successful completion is refused while a unit is not achieved","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_agent_register_and_dec2025_checklist","title":"Agent register and dec2025 checklist","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_agreement_rejects_an_enrolment_of_another_organisation","title":"Agreement rejects an enrolment of another organisation","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_attendance_flags_and_elicos_floor","title":"Attendance flags and elicos floor","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_attendance_period_flags_and_task","title":"Attendance period flags and task","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_cancellation_of_registered_enrolment_uses_cancelled","title":"Cancellation of registered enrolment uses cancelled","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_course_progress_triggers_intervention_then_report","title":"Course progress triggers intervention then report","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_dashboard_widget_at_risk","title":"Dashboard widget at risk","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_deferment_and_cancellation_record_vetis_status","title":"Deferment and cancellation record vetis status","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_duplicate_record_redirects_to_existing","title":"Duplicate record redirects to existing","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_esos_requires_auth","title":"Esos requires auth","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_evaluate_periods_consecutive_run_triggers_report","title":"Evaluate periods consecutive run triggers report","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_every_tab_and_record_page_render","title":"Every tab and record page render","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_prisms_task_register","title":"Prisms task register","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_progress_percentage_and_threshold","title":"Progress percentage and threshold","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_transfer_outside_restriction_period_needs_no_release","title":"Transfer outside restriction period needs no release","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_transfer_request_and_decision","title":"Transfer request and decision","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_transfer_restriction_period","title":"Transfer restriction period","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_under_18_welfare_flag_and_prisms_task","title":"Under 18 welfare flag and prisms task","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_working_days_skip_weekends","title":"Working days skip weekends","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_written_agreement_fee_total_is_decimal_and_bad_input_is_422","title":"Written agreement fee total is decimal and bad input is 422","passed":1,"skipped":0},{"file":"test_esos.py","name":"test_written_agreement_register","title":"Written agreement register","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_backfill_cli_dry_run_exits_clean","title":"Backfill cli dry run exits clean","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_backfill_decrypt_restores_plaintext_for_a_downgrade","title":"Backfill decrypt restores plaintext for a downgrade","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_backfill_rotation_reencrypts_and_rehashes","title":"Backfill rotation reencrypts and rehashes","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_backfill_script_encrypts_hashes_and_is_idempotent","title":"Backfill script encrypts hashes and is idempotent","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_blind_index_is_keyed_and_purpose_bound","title":"Blind index is keyed and purpose bound","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_changing_the_usi_or_dob_keeps_the_hashes_in_step","title":"Changing the usi or dob keeps the hashes in step","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_disposal_anonymises_the_student_and_drops_the_hashes","title":"Disposal anonymises the student and drops the hashes","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_disposal_keeps_identity_while_a_certification_record_exists","title":"Disposal keeps identity while a certification record exists","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_fallback_key_is_only_for_development","title":"Fallback key is only for development","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_hash_lookup_finds_the_student_and_substitutes_stay_plain","title":"Hash lookup finds the student and substitutes stay plain","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_key_decoding_accepts_base64_and_hex_and_rejects_short_keys","title":"Key decoding accepts base64 and hex and rejects short keys","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_legacy_plaintext_reads_unchanged_and_wrong_key_is_loud","title":"Legacy plaintext reads unchanged and wrong key is loud","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_legacy_plaintext_rows_read_through_the_orm","title":"Legacy plaintext rows read through the orm","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_mask_personal_data_replaces_identifiers_only","title":"Mask personal data replaces identifiers only","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_migration_0027_adds_hash_columns_and_refuses_to_downgrade_ciphertext","title":"Migration 0027 adds hash columns and refuses to downgrade ciphertext","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_production_refuses_to_run_without_a_configured_key","title":"Production refuses to run without a configured key","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_record_event_masks_personal_values_and_the_chain_verifies","title":"Record event masks personal values and the chain verifies","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_rotate_moves_a_value_between_keys","title":"Rotate moves a value between keys","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_round_trip_and_fresh_nonce_per_write","title":"Round trip and fresh nonce per write","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_search_hash_helpers_skip_substitutes_and_tombstone","title":"Search hash helpers skip substitutes and tombstone","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_student_columns_are_ciphertext_but_attributes_are_plain","title":"Student columns are ciphertext but attributes are plain","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_tcsi_chessn_is_encrypted_with_its_hash","title":"Tcsi chessn is encrypted with its hash","passed":1,"skipped":0},{"file":"test_field_encryption.py","name":"test_unique_index_sits_on_the_usi_hash","title":"Unique index sits on the usi hash","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_audit_entries_written","title":"Audit entries written","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_concession_and_manual_credit_note","title":"Concession and manual credit note","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_credit_note_rejects_an_invoice_from_another_account","title":"Credit note rejects an invoice from another account","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_cross_org_isolation","title":"Cross org isolation","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_default_tax_treatment_and_gst","title":"Default tax treatment and gst","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_fee_protection_page_widgets_and_csv","title":"Fee protection page widgets and csv","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_finance_role_reads_and_writes_but_cannot_approve_refunds","title":"Finance role reads and writes but cannot approve refunds","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_invoice_numbering_unique_per_org","title":"Invoice numbering unique per org","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_invoice_receipt_and_statement_pdfs","title":"Invoice receipt and statement pdfs","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_number_sequence_is_read_with_a_row_lock","title":"Number sequence is read with a row lock","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_offering_fee_summary_hook","title":"Offering fee summary hook","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_payment_plan_instalments_and_overdue","title":"Payment plan instalments and overdue","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_payments_and_balances","title":"Payments and balances","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_prepaid_exposure_by_offering_dates","title":"Prepaid exposure by offering dates","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_prepaid_exposure_weighted_by_subjects","title":"Prepaid exposure weighted by subjects","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_read_only_role_and_auth","title":"Read only role and auth","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_refund_policy_rules_and_admin_approval","title":"Refund policy rules and admin approval","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_refund_requests_cannot_double_count_money_already_requested","title":"Refund requests cannot double count money already requested","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_reports_and_csv_exports","title":"Reports and csv exports","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_reports_as_of_in_the_past_does_not_rewrite_invoice_statuses","title":"Reports as of in the past does not rewrite invoice statuses","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_schedule_to_invoice_generation","title":"Schedule to invoice generation","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_trainer_holds_no_finance_permission","title":"Trainer holds no finance permission","passed":1,"skipped":0},{"file":"test_finance.py","name":"test_void_invoice_releases_charges_and_blocks_when_paid","title":"Void invoice releases charges and blocks when paid","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_code_badge_and_help_macros","title":"Code badge and help macros","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_empty_lists_explain_themselves_and_offer_the_next_step","title":"Empty lists explain themselves and offer the next step","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_enrol_form_uses_staff_language","title":"Enrol form uses staff language","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_error_summary_names_the_field_and_links_to_it","title":"Error summary names the field and links to it","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_every_code_badge_in_a_template_is_hidden_behind_the_toggle","title":"Every code badge in a template is hidden behind the toggle","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_every_rendered_shell_page_has_a_header_purpose_and_toggle_when_needed","title":"Every rendered shell page has a header purpose and toggle when needed","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_every_shell_page_uses_the_page_header_component","title":"Every shell page uses the page header component","passed":136,"skipped":0},{"file":"test_friendly_copy.py","name":"test_forms_use_staff_language_and_say_required","title":"Forms use staff language and say required","passed":2,"skipped":0},{"file":"test_friendly_copy.py","name":"test_friendly_css_hides_codes_until_the_toggle_is_on","title":"Friendly css hides codes until the toggle is on","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_page_header_renders_purpose_actions_and_toggle","title":"Page header renders purpose actions and toggle","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_reporting_pages_speak_in_plain_quarters_and_dates","title":"Reporting pages speak in plain quarters and dates","passed":3,"skipped":0},{"file":"test_friendly_copy.py","name":"test_router_messages_are_plain_sentences","title":"Router messages are plain sentences","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_router_messages_never_end_in_a_bare_field_name","title":"Router messages never end in a bare field name","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_student_wizard_steps_are_named_for_staff","title":"Student wizard steps are named for staff","passed":1,"skipped":0},{"file":"test_friendly_copy.py","name":"test_text_macros_format_dates_quarters_and_statuses","title":"Text macros format dates quarters and statuses","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_act_per_unit_with_rpl_cap_and_credit_transfer","title":"Act per unit with rpl cap and credit transfer","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_act_rpl_cap_counts_granted_rpl_only","title":"Act rpl cap counts granted rpl only","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_claim_status_transitions","title":"Claim status transitions","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_expected_payments_for_context_without_price","title":"Expected payments for context without price","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_nsw_milestones","title":"Nsw milestones","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_nsw_stages_follow_contract_clause_17_3","title":"Nsw stages follow contract clause 17 3","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_payment_models_are_data_and_fractions_sum_to_one","title":"Payment models are data and fractions sum to one","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_qld_vic_wa_sa_models","title":"Qld vic wa sa models","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_readiness_and_remittance_use_the_derived_program_enrolment_identifier","title":"Readiness and remittance use the derived program enrolment identifier","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_readiness_blockers_then_ready","title":"Readiness blockers then ready","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_reconcile_remittance_marks_rows_paid","title":"Reconcile remittance marks rows paid","passed":1,"skipped":0},{"file":"test_funding_claims.py","name":"test_tas_split_payments","title":"Tas split payments","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_act_skilled_capital_and_apprenticeship_conditions","title":"Act skilled capital and apprenticeship conditions","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_concurrent_cap_ignores_fee_for_service_siblings","title":"Concurrent cap ignores fee for service siblings","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_evidence_templates_checklist_and_missing_items","title":"Evidence templates checklist and missing items","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_labour_force_helper","title":"Labour force helper","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_nsw_visa_lists_and_training_contract","title":"Nsw visa lists and training contract","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_qld_ten_year_prior_qualification_test","title":"Qld ten year prior qualification test","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_spec_lookup_and_conditions_listing","title":"Spec lookup and conditions listing","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_unknown_scheme_is_pending_not_eligible","title":"Unknown scheme is pending not eligible","passed":1,"skipped":0},{"file":"test_funding_eligibility.py","name":"test_vic_eligible_ineligible_and_pending","title":"Vic eligible ineligible and pending","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_assess_eligibility_persists_reasons_and_shows_them_with_rule_findings","title":"Assess eligibility persists reasons and shows them with rule findings","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_column_code_lists_come_from_the_capture","title":"Column code lists come from the capture","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_dashboard_widget_counts_jurisdictions_deadlines_and_evidence","title":"Dashboard widget counts jurisdictions deadlines and evidence","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_deadlines_page_renders_after_materialise","title":"Deadlines page renders after materialise","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_dynamic_fields_skip_columns_and_derived_fields_and_find_code_lists","title":"Dynamic fields skip columns and derived fields and find code lists","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_enable_scheme_persists","title":"Enable scheme persists","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_enable_vic_with_pathway_sta_only_persists","title":"Enable vic with pathway sta only persists","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_enrolment_funding_form_creates_and_updates_a_row_with_extra_json","title":"Enrolment funding form creates and updates a row with extra json","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_enrolment_funding_rejects_invalid_codes_with_422","title":"Enrolment funding rejects invalid codes with 422","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_enrolment_funding_without_jurisdictions_points_to_settings","title":"Enrolment funding without jurisdictions points to settings","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_every_new_page_returns_200_for_an_admin","title":"Every new page returns 200 for an admin","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_evidence_tick_persists_and_eligibility_and_claim_update","title":"Evidence tick persists and eligibility and claim update","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_nav_entries_and_dashboard_widget_present","title":"Nav entries and dashboard widget present","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_settings_page_renders_all_ten_jurisdictions","title":"Settings page renders all ten jurisdictions","passed":1,"skipped":0},{"file":"test_funding_ui.py","name":"test_settings_requires_auth","title":"Settings requires auth","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_current_product_is_not_in_transition","title":"Current product is not in transition","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_every_tab_renders_after_seeding","title":"Every tab renders after seeding","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_fee_protection_reads_the_finance_ledger_once_accounts_exist","title":"Fee protection reads the finance ledger once accounts exist","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_fee_protection_threshold","title":"Fee protection threshold","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_fit_proper_next_due_defaults_to_twelve_months","title":"Fit proper next due defaults to twelve months","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_governance_requires_auth","title":"Governance requires auth","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_insurance_expiring_within_60_days_is_flagged","title":"Insurance expiring within 60 days is flagged","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_marketing_checks_flag_superseded_title_mismatch_and_block_approval","title":"Marketing checks flag superseded title mismatch and block approval","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_marketing_checks_pass_and_approval_allowed","title":"Marketing checks pass and approval allowed","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_nav_items_declared","title":"Nav items declared","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_transition_dates_with_successor","title":"Transition dates with successor","passed":1,"skipped":0},{"file":"test_governance.py","name":"test_transition_without_successor_uses_one_year_teach_out","title":"Transition without successor uses one year teach out","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_admissions_workflow_to_enrolment","title":"Admissions workflow to enrolment","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_application_integrity_and_racism_references_continue_from_stored_rows","title":"Application integrity and racism references continue from stored rows","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_award_numbers_continue_from_stored_rows_and_restart_each_year","title":"Award numbers continue from stored rows and restart each year","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_award_register_confer_issue_verify_revoke","title":"Award register confer issue verify revoke","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_committee_meeting_quorum_decisions_and_review","title":"Committee meeting quorum decisions and review","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_credit_decision_requires_written_outcome_and_integrity_statement","title":"Credit decision requires written outcome and integrity statement","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_duplicate_application_refused","title":"Duplicate application refused","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_governance_review_completed_on_29_february_rolls_to_28_february","title":"Governance review completed on 29 february rolls to 28 february","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_he_pages_render_for_empty_org","title":"He pages render for empty org","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_he_routes_scoped_to_own_org","title":"He routes scoped to own org","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_intake_rejects_vocational_program_and_requires_criteria","title":"Intake rejects vocational program and requires criteria","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_integrity_case_decision_requires_procedural_fairness","title":"Integrity case decision requires procedural fairness","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_nav_items_and_dashboard_widgets","title":"Nav items and dashboard widgets","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_public_information_register_verify_and_attest","title":"Public information register verify and attest","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_racism_incident_workflow_and_anonymised_report","title":"Racism incident workflow and anonymised report","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_referencing_and_moderation_registers","title":"Referencing and moderation registers","passed":1,"skipped":0},{"file":"test_he_admissions.py","name":"test_rejected_assessment_and_lapsed_offer","title":"Rejected assessment and lapsed offer","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_analytics_page_shows_numbers_and_detection_endpoint","title":"Analytics page shows numbers and detection endpoint","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_at_risk_rules_on_fixture","title":"At risk rules on fixture","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_cohort_rates_empty_denominator_is_none","title":"Cohort rates empty denominator is none","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_cohort_rates_maths","title":"Cohort rates maths","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_cohort_table_groups_by_intake_and_adds_total","title":"Cohort table groups by intake and adds total","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_run_detection_persists_once","title":"Run detection persists once","passed":1,"skipped":0},{"file":"test_he_analytics.py","name":"test_vocational_programs_are_excluded_from_he_cohorts","title":"Vocational programs are excluded from he cohorts","passed":1,"skipped":0},{"file":"test_health.py","name":"test_health_endpoint","title":"Health endpoint","passed":1,"skipped":0},{"file":"test_health.py","name":"test_login_page_renders","title":"Login page renders","passed":1,"skipped":0},{"file":"test_health.py","name":"test_root_keeps_product_page_when_logged_in","title":"Root keeps product page when logged in","passed":1,"skipped":0},{"file":"test_health.py","name":"test_root_shows_public_product_when_anonymous","title":"Root shows public product when anonymous","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_can_clock_and_section_17_content","title":"Can clock and section 17 content","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_can_statements_use_the_administration_guidelines_wording","title":"Can statements use the administration guidelines wording","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_census_date_rules","title":"Census date rules","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_cgs_band_and_maximum_contribution_by_field_of_education","title":"Cgs band and maximum contribution by field of education","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_check_student_contribution_flags_amounts_over_the_band_maximum","title":"Check student contribution flags amounts over the band maximum","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_cluster_table_matches_every_row_of_the_2026_allocation","title":"Cluster table matches every row of the 2026 allocation","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_e392_codes_follow_the_element_392_code_list","title":"E392 codes follow the element 392 code list","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_ecaf_windows_and_ssaf_publication","title":"Ecaf windows and ssaf publication","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_fee_help_applies_20_percent_loan_fee_to_undergraduate_units_only","title":"Fee help applies 20 percent loan fee to undergraduate units only","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_hecs_help_loan_has_no_fee_and_sets_e490","title":"Hecs help loan has no fee and sets e490","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_help_debt_total_reads_unit_enrolment_amounts","title":"Help debt total reads unit enrolment amounts","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_help_limit_tracking_2026","title":"Help limit tracking 2026","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_os_help_limits","title":"Os help limits","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_professional_pathway_placement_is_opt_in","title":"Professional pathway placement is opt in","passed":1,"skipped":0},{"file":"test_help_loans.py","name":"test_vsl_loan_capped_by_the_course_cap_with_loan_fee_on_covered_amount","title":"Vsl loan capped by the course cap with loan fee on covered amount","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_cancel_a_queued_job_keeps_it_from_running","title":"Cancel a queued job keeps it from running","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_cancel_while_running_stops_at_the_next_progress_call","title":"Cancel while running stops at the next progress call","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_claim_moves_the_row_to_running_and_hands_it_out_once","title":"Claim moves the row to running and hands it out once","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_claim_respects_run_after_and_takes_the_oldest_first","title":"Claim respects run after and takes the oldest first","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_claim_statement_skips_locked_rows_on_postgres_only","title":"Claim statement skips locked rows on postgres only","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_coalesce_returns_the_active_job_instead_of_a_second_row","title":"Coalesce returns the active job instead of a second row","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_enqueue_writes_a_queued_row_with_subject_and_creator","title":"Enqueue writes a queued row with subject and creator","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_inline_hook_reraises_unexpected_errors_but_records_the_failure","title":"Inline hook reraises unexpected errors but records the failure","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_inline_hook_runs_the_job_inside_the_request_session","title":"Inline hook runs the job inside the request session","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_job_error_fails_at_once_with_the_staff_sentence","title":"Job error fails at once with the staff sentence","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_purge_removes_only_old_finished_rows","title":"Purge removes only old finished rows","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_run_job_records_progress_result_and_success","title":"Run job records progress result and success","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_sqlite_claim_is_serialised_by_the_conditional_update","title":"Sqlite claim is serialised by the conditional update","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_stale_running_jobs_are_queued_again_or_failed_after_the_last_attempt","title":"Stale running jobs are queued again or failed after the last attempt","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_unexpected_error_is_retried_with_backoff_then_fails_with_a_plain_sentence","title":"Unexpected error is retried with backoff then fails with a plain sentence","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_unknown_kind_fails_without_a_traceback","title":"Unknown kind fails without a traceback","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_worker_handles_signals_and_parses_arguments","title":"Worker handles signals and parses arguments","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_worker_once_drains_the_queue_and_reports_exit_codes","title":"Worker once drains the queue and reports exit codes","passed":1,"skipped":0},{"file":"test_jobs.py","name":"test_worker_serve_stops_on_request_and_counts_work","title":"Worker serve stops on request and counts work","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_background_tasks_is_in_the_settings_section","title":"Background tasks is in the settings section","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_cancel_by_creator_or_admin_only","title":"Cancel by creator or admin only","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_detail_page_and_result_link","title":"Detail page and result link","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_document_render_refuses_unknown_kinds_and_bad_ids","title":"Document render refuses unknown kinds and bad ids","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_document_render_zips_invoices_and_the_page_offers_the_download","title":"Document render zips invoices and the page offers the download","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_job_progress_component_renders_nothing_without_a_job","title":"Job progress component renders nothing without a job","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_jobs_are_scoped_to_the_organisation","title":"Jobs are scoped to the organisation","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_list_page_shows_tasks_filters_and_the_running_block","title":"List page shows tasks filters and the running block","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_reporting_page_reads_the_cached_delta_and_refreshes_on_demand","title":"Reporting page reads the cached delta and refreshes on demand","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_reporting_page_shows_progress_for_a_queued_build","title":"Reporting page shows progress for a queued build","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_status_partial_for_a_failed_job_shows_the_sentence","title":"Status partial for a failed job shows the sentence","passed":1,"skipped":0},{"file":"test_jobs_ui.py","name":"test_status_partial_polls_while_active_and_redirects_when_done","title":"Status partial polls while active and redirects when done","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_blank_code_is_a_warning_and_prose_state_codes_are_info","title":"Blank code is a warning and prose state codes are info","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_deadline_schedule_object_is_kept","title":"Deadline schedule object is kept","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_malformed_capture_produces_problems_not_exceptions","title":"Malformed capture produces problems not exceptions","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_missing_root_and_pending_folders","title":"Missing root and pending folders","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_one_based_capture_is_detected_and_normalised","title":"One based capture is detected and normalised","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_reload_and_lazy_thread_safe_singleton","title":"Reload and lazy thread safe singleton","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_restated_repurposed_sta_gap_and_extension_beyond_full_length","title":"Restated repurposed sta gap and extension beyond full length","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_state_code_lists_are_found_by_description_and_unioned","title":"State code lists are found by description and unioned","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_unknown_jurisdiction_raises_key_error","title":"Unknown jurisdiction raises key error","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_vic_accessors_return_typed_data","title":"Vic accessors return typed data","passed":1,"skipped":0},{"file":"test_jurisdiction_catalogue.py","name":"test_vic_loads_without_errors","title":"Vic loads without errors","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_business_days_after_year_end_is_a_dated_rule","title":"Business days after year end is a dated rule","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_enable_jurisdiction_and_scheme","title":"Enable jurisdiction and scheme","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_enable_scheme_switches_its_jurisdiction_on","title":"Enable scheme switches its jurisdiction on","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_enrolment_funding_and_related_rows","title":"Enrolment funding and related rows","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_materialise_deadlines_for_a_year","title":"Materialise deadlines for a year","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_migration_0016_creates_and_drops_the_module_tables","title":"Migration 0016 creates and drops the module tables","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_plan_deadline_honours_structured_schedule","title":"Plan deadline honours structured schedule","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_plan_deadline_keeps_every_quarter_when_examples_are_partial","title":"Plan deadline keeps every quarter when examples are partial","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_plan_deadline_rule_kinds","title":"Plan deadline rule kinds","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_seed_catalogue_at_startup_seeds","title":"Seed catalogue at startup seeds","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_seed_catalogue_at_startup_swallows_failures","title":"Seed catalogue at startup swallows failures","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_seed_catalogue_is_idempotent","title":"Seed catalogue is idempotent","passed":1,"skipped":0},{"file":"test_jurisdiction_models.py","name":"test_seed_updates_from_a_changed_capture_and_never_deletes","title":"Seed updates from a changed capture and never deletes","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_act_rules_pass_and_fail","title":"Act rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_concurrency_caps_count_only_funded_siblings","title":"Concurrency caps count only funded siblings","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_coverage_reports_counts_per_jurisdiction","title":"Coverage reports counts per jurisdiction","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_cth_rules_pass_and_fail","title":"Cth rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_each_jurisdiction_has_field_code_lists_that_exist","title":"Each jurisdiction has field code lists that exist","passed":9,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_evaluate_builds_a_state_check_report","title":"Evaluate builds a state check report","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_nsw_rules_pass_and_fail","title":"Nsw rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_nt_rules_pass_and_fail","title":"Nt rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_program_enrolment_identifier_is_derived_when_not_stored","title":"Program enrolment identifier is derived when not stored","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_qld_rules_pass_and_fail","title":"Qld rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_sa_rules_pass_and_fail","title":"Sa rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_sa_upload_within_fifteen_business_days","title":"Sa upload within fifteen business days","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_state_and_national_helpers","title":"State and national helpers","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_tas_rules_pass_and_fail","title":"Tas rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_vic_rules_pass_and_fail","title":"Vic rules pass and fail","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_vic_two_programs_at_a_time","title":"Vic two programs at a time","passed":1,"skipped":0},{"file":"test_jurisdiction_rules.py","name":"test_wa_rules_pass_and_fail","title":"Wa rules pass and fail","passed":1,"skipped":0},{"file":"test_mfa_required.py","name":"test_enrolled_account_owes_a_code_at_next_sign_in","title":"Enrolled account owes a code at next sign in","passed":1,"skipped":0},{"file":"test_mfa_required.py","name":"test_enrolment_on_the_pending_session_upgrades_it","title":"Enrolment on the pending session upgrades it","passed":1,"skipped":0},{"file":"test_mfa_required.py","name":"test_switching_the_second_factor_off_is_refused","title":"Switching the second factor off is refused","passed":1,"skipped":0},{"file":"test_mfa_required.py","name":"test_unenrolled_account_is_sent_to_enrol_and_can_reach_nothing_else","title":"Unenrolled account is sent to enrol and can reach nothing else","passed":1,"skipped":0},{"file":"test_mfa_required.py","name":"test_without_the_setting_sign_in_is_unchanged","title":"Without the setting sign in is unchanged","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_accepts_matching_form_field_or_header","title":"Csrf accepts matching form field or header","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_exempts_bearer_api_clients_and_json","title":"Csrf exempts bearer api clients and json","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_not_injected_when_not_enforced","title":"Csrf not injected when not enforced","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_rejects_cross_origin_post","title":"Csrf rejects cross origin post","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_rejects_form_post_without_token","title":"Csrf rejects form post without token","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_csrf_token_field_is_injected_into_forms_when_enforced","title":"Csrf token field is injected into forms when enforced","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_fresh_session_cookie_is_not_refreshed","title":"Fresh session cookie is not refreshed","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_health_and_ready","title":"Health and ready","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_hsts_only_behind_tls_via_trusted_proxy","title":"Hsts only behind tls via trusted proxy","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_inject_helper_skips_get_forms_and_existing_fields","title":"Inject helper skips get forms and existing fields","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_login_form_carries_csrf_field_once","title":"Login form carries csrf field once","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_login_is_rate_limited_per_ip","title":"Login is rate limited per ip","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_ready_reports_database_failure","title":"Ready reports database failure","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_request_id_is_echoed_or_generated","title":"Request id is echoed or generated","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_security_headers_on_every_response","title":"Security headers on every response","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_session_cookie_is_refreshed_when_close_to_expiry","title":"Session cookie is refreshed when close to expiry","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_session_cookie_secure_flag_follows_setting","title":"Session cookie secure flag follows setting","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_token_bucket_limits_and_refills","title":"Token bucket limits and refills","passed":1,"skipped":0},{"file":"test_middleware.py","name":"test_trusted_hosts_reject_foreign_host","title":"Trusted hosts reject foreign host","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_0003_migrates_legacy_rows","title":"0003 migrates legacy rows","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_admissions_upgrade_from_0030_and_numeric_uuid_storage","title":"Admissions upgrade from 0030 and numeric uuid storage","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_app_lifespan_runs_the_startup_hook","title":"App lifespan runs the startup hook","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_fresh_migration_creates_all_tables_and_vetis_columns","title":"Fresh migration creates all tables and vetis columns","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_migration_0015_adds_only_the_privacy_notice_columns","title":"Migration 0015 adds only the privacy notice columns","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_migration_downgrade_base_removes_schema","title":"Migration downgrade base removes schema","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_migration_head_is_not_empty","title":"Migration head is not empty","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_postgres_offline_render_emits_uuid_and_jsonb","title":"Postgres offline render emits uuid and jsonb","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_revision_ids_fit_the_alembic_version_column","title":"Revision ids fit the alembic version column","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_startup_hook_creates_and_stamps_empty_database","title":"Startup hook creates and stamps empty database","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_startup_hook_upgrades_legacy_sqlite_file","title":"Startup hook upgrades legacy sqlite file","passed":1,"skipped":0},{"file":"test_migrations.py","name":"test_startup_hook_upgrades_pre_alembic_create_all_database","title":"Startup hook upgrades pre alembic create all database","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_enrolment_foreign_keys_restrict_deletes","title":"Enrolment foreign keys restrict deletes","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_migration_0023_declares_its_place_in_the_chain","title":"Migration 0023 declares its place in the chain","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_migration_0023_round_trips_on_sqlite","title":"Migration 0023 round trips on sqlite","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_one_open_removal_request_per_resource","title":"One open removal request per resource","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_open_status_predicates_name_every_open_status","title":"Open status predicates name every open status","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_program_reenrolment_allowed_after_conclusion_but_not_while_open","title":"Program reenrolment allowed after conclusion but not while open","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_students_and_offerings_with_enrolments_cannot_be_deleted","title":"Students and offerings with enrolments cannot be deleted","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_subject_reenrolment_allowed_after_conclusion_but_not_while_open","title":"Subject reenrolment allowed after conclusion but not while open","passed":1,"skipped":0},{"file":"test_model_hardening.py","name":"test_third_party_organisations_are_unique_per_organisation","title":"Third party organisations are unique per organisation","passed":1,"skipped":0},{"file":"test_models.py","name":"test_delivery_location_identifier_generated","title":"Delivery location identifier generated","passed":1,"skipped":0},{"file":"test_models.py","name":"test_enum_values_match_value_list_codes","title":"Enum values match value list codes","passed":1,"skipped":0},{"file":"test_models.py","name":"test_no_outcome_identifier_enum_survives","title":"No outcome identifier enum survives","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_address_helpers","title":"Student address helpers","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_defaults_are_valid_classifications","title":"Student defaults are valid classifications","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_id_is_uuid","title":"Student id is uuid","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_identifier_is_generated_and_unique","title":"Student identifier is generated and unique","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_usi_index_ignores_null_and_indiv","title":"Student usi index ignores null and indiv","passed":1,"skipped":0},{"file":"test_models.py","name":"test_student_usi_unique_per_org_enforced_at_object_level","title":"Student usi unique per org enforced at object level","passed":1,"skipped":0},{"file":"test_models.py","name":"test_submission_and_credential_enums","title":"Submission and credential enums","passed":1,"skipped":0},{"file":"test_models.py","name":"test_tenant_mixin_carries_organisation_id","title":"Tenant mixin carries organisation id","passed":1,"skipped":0},{"file":"test_models.py","name":"test_user_roles_are_documented","title":"User roles are documented","passed":1,"skipped":0},{"file":"test_models.py","name":"test_value_lists_are_non_empty_and_paired","title":"Value lists are non empty and paired","passed":1,"skipped":0},{"file":"test_models.py","name":"test_value_lists_come_from_the_published_catalogue","title":"Value lists come from the published catalogue","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_all_ten_files_fixed_width_crlf_no_header","title":"All ten files fixed width crlf no header","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_code_tables_cover_the_published_tokens","title":"Code tables cover the published tokens","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_commencing_program_identifier_4_for_prior_year_commencement","title":"Commencing program identifier 4 for prior year commencement","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_concluded_outcome_mapping","title":"Concluded outcome mapping","passed":12,"skipped":0},{"file":"test_nat_files.py","name":"test_continuing_activity_reports_70_with_end_beyond_period","title":"Continuing activity reports 70 with end beyond period","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_continuing_activity_with_end_inside_year_is_a_reported_reason","title":"Continuing activity with end inside year is a reported reason","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_delivery_mode_flags","title":"Delivery mode flags","passed":8,"skipped":0},{"file":"test_nat_files.py","name":"test_delivery_mode_needs_some_delivery_information","title":"Delivery mode needs some delivery information","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_exclusions_relax_the_local_pass_without_changing_record_bytes","title":"Exclusions relax the local pass without changing record bytes","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_export_query_count_does_not_grow_with_the_population","title":"Export query count does not grow with the population","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_format_value_rules","title":"Format value rules","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_funding_filter_keeps_only_the_chosen_funding_sources","title":"Funding filter keeps only the chosen funding sources","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_funding_source_national","title":"Funding source national","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_generate_files_direct_window_and_supplementary","title":"Generate files direct window and supplementary","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_house_style_no_dashes_in_new_modules","title":"House style no dashes in new modules","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_include_client_contact_false_omits_nat00085_only","title":"Include client contact false omits nat00085 only","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_indiv_usi_substitute_is_honoured","title":"Indiv usi substitute is honoured","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_layout_positions_match_spec","title":"Layout positions match spec","passed":17,"skipped":0},{"file":"test_nat_files.py","name":"test_layout_widths_sum_to_spec_record_lengths","title":"Layout widths sum to spec record lengths","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_missing_delivery_location_and_postcode_are_reasons","title":"Missing delivery location and postcode are reasons","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_missing_usi_and_intoff_rules_are_reasons","title":"Missing usi and intoff rules are reasons","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_nat00010_nat00020_nat00030_nat00060_records","title":"Nat00010 nat00020 nat00030 nat00060 records","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_nat00030_exclusion_relaxes_program_file_reasons_only","title":"Nat00030 exclusion relaxes program file reasons only","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_nat00080_and_nat00085_records_are_byte_exact","title":"Nat00080 and nat00085 records are byte exact","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_nat00120_record_is_byte_exact","title":"Nat00120 record is byte exact","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_ncver_sample_field_values_land_in_the_right_columns","title":"Ncver sample field values land in the right columns","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_ncver_sample_files_parse_against_layouts","title":"Ncver sample files parse against layouts","passed":12,"skipped":0},{"file":"test_nat_files.py","name":"test_non_ascii_names_are_folded","title":"Non ascii names are folded","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_outcome_mapping_end_to_end","title":"Outcome mapping end to end","passed":8,"skipped":0},{"file":"test_nat_files.py","name":"test_over_long_names_are_truncated_with_a_warning","title":"Over long names are truncated with a warning","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_overseas_address_uses_ospc_and_state_99","title":"Overseas address uses ospc and state 99","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_overseas_delivery_location","title":"Overseas delivery location","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_partial_date_of_birth_masks","title":"Partial date of birth masks","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_postal_address_gaps_are_nat00085_reasons","title":"Postal address gaps are nat00085 reasons","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_program_completion_nat00130","title":"Program completion nat00130","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_quarter_window_scoping","title":"Quarter window scoping","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_registered_not_yet_started_is_85_only_inside_the_window","title":"Registered not yet started is 85 only inside the window","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_release_8_1_uses_osca_and_reports_free_tafe_as_71","title":"Release 8 1 uses osca and reports free tafe as 71","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_release_defaults_and_windows","title":"Release defaults and windows","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_short_usi_is_a_reason_for_activity_after_2017","title":"Short usi is a reason for activity after 2017","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_single_legal_name_exports_family_name_with_blank_first_name","title":"Single legal name exports family name with blank first name","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_specific_funding_identifier_and_apprenticeship_fields","title":"Specific funding identifier and apprenticeship fields","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_sta_only_activity_with_a_gap_does_not_block_the_national_export","title":"Sta only activity with a gap does not block the national export","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_subject_only_enrolment_has_blank_program_and_commencing_8","title":"Subject only enrolment has blank program and commencing 8","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_superseded_subject_enrolment_reports_61","title":"Superseded subject enrolment reports 61","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_superseded_subject_enrolment_with_blank_reason_reports_61","title":"Superseded subject enrolment with blank reason reports 61","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_unknown_token_is_a_reason_not_a_filler","title":"Unknown token is a reason not a filler","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_unknown_token_raises_instead_of_emitting_not_specified","title":"Unknown token raises instead of emitting not specified","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_vocational_degree_level_is_315_in_release_8_1_only","title":"Vocational degree level is 315 in release 8 1 only","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_workplace_and_online_delivery_modes_end_to_end","title":"Workplace and online delivery modes end to end","passed":1,"skipped":0},{"file":"test_nat_files.py","name":"test_year_window_excludes_activity_wholly_outside","title":"Year window excludes activity wholly outside","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_cli_dry_run_and_import","title":"Cli dry run and import","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_cli_reads_a_directory","title":"Cli reads a directory","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_client_matched_by_usi_keeps_its_activity_and_completion","title":"Client matched by usi keeps its activity and completion","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_conflicting_final_outcome_is_reported_not_rewritten","title":"Conflicting final outcome is reported not rewritten","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_control_characters_inside_a_record_do_not_split_it","title":"Control characters inside a record do not split it","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_delivery_mode_flags_and_predominance","title":"Delivery mode flags and predominance","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_dry_run_makes_no_changes","title":"Dry run makes no changes","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_every_token_the_importer_writes_is_published","title":"Every token the importer writes is published","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_external_delivery_without_predominant_flag_defaults_and_notes","title":"External delivery without predominant flag defaults and notes","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_family_name_only_imports_as_a_single_legal_name","title":"Family name only imports as a single legal name","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_file_id_for","title":"File id for","passed":7,"skipped":0},{"file":"test_nat_import.py","name":"test_free_tafe_71_round_trips_through_a_release_8_1_export","title":"Free tafe 71 round trips through a release 8 1 export","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_funding_13_without_specific_identifier_warns","title":"Funding 13 without specific identifier warns","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_funding_source_maps_to_financial_elements","title":"Funding source maps to financial elements","passed":10,"skipped":0},{"file":"test_nat_import.py","name":"test_import_needs_the_organisation_rto_code","title":"Import needs the organisation rto code","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_page_accepts_loose_text_files","title":"Import page accepts loose text files","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_page_rejects_an_empty_upload","title":"Import page rejects an empty upload","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_pages_preview_then_confirm","title":"Import pages preview then confirm","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_query_count_does_not_grow_with_the_file","title":"Import query count does not grow with the file","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_result_serialises","title":"Import result serialises","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_samples_sets_up_the_organisation","title":"Import samples sets up the organisation","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_import_twice_changes_nothing","title":"Import twice changes nothing","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_invalid_usi_is_kept_with_a_warning","title":"Invalid usi is kept with a warning","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_later_collection_year_extends_the_history","title":"Later collection year extends the history","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_masked_dates_of_birth","title":"Masked dates of birth","passed":4,"skipped":0},{"file":"test_nat_import.py","name":"test_migration_0014_creates_nat_import_jobs","title":"Migration 0014 creates nat import jobs","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_names_and_contact_with_and_without_nat00085","title":"Names and contact with and without nat00085","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_organisation_details_are_filled_from_nat00010","title":"Organisation details are filled from nat00010","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_outcome_codes_become_status_histories","title":"Outcome codes become status histories","passed":12,"skipped":0},{"file":"test_nat_import.py","name":"test_over_long_imported_names_are_truncated_with_a_warning","title":"Over long imported names are truncated with a warning","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_date_of_birth_masks","title":"Parse date of birth masks","passed":7,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_directory_with_lf_and_trimmed_trailing_spaces","title":"Parse directory with lf and trimmed trailing spaces","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_reports_structural_problems","title":"Parse reports structural problems","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_sample_zip_reads_all_twelve_files","title":"Parse sample zip reads all twelve files","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_typed_fields_flag_bad_numbers_and_dates","title":"Parse typed fields flag bad numbers and dates","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_parse_windows_1252_bytes_and_bom","title":"Parse windows 1252 bytes and bom","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_program_completion_concludes_the_program_enrolment","title":"Program completion concludes the program enrolment","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_records_for_another_rto_are_skipped","title":"Records for another rto are skipped","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_round_trip_reproduces_ncver_sample_activity","title":"Round trip reproduces ncver sample activity","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_scheduled_hours_fill_missing_subject_hours","title":"Scheduled hours fill missing subject hours","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_subject_only_activity_has_no_program_enrolment","title":"Subject only activity has no program enrolment","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_supplementary_files_are_read_without_the_national_ones","title":"Supplementary files are read without the national ones","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_unknown_references_are_skipped_with_errors","title":"Unknown references are skipped with errors","passed":1,"skipped":0},{"file":"test_nat_import.py","name":"test_usi_values","title":"Usi values","passed":4,"skipped":0},{"file":"test_nat_import.py","name":"test_zip_member_over_the_size_cap_is_reported_not_inflated","title":"Zip member over the size cap is reported not inflated","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_compliance_redirects_to_standards","title":"Compliance redirects to standards","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_compliance_stub_requires_auth","title":"Compliance stub requires auth","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_csrf_token_in_header_or_field_is_accepted_on_a_real_route","title":"Csrf token in header or field is accepted on a real route","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_counts_match_filter","title":"Enrolments list counts match filter","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_empty","title":"Enrolments list empty","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_link_from_nav_resolves","title":"Enrolments list link from nav resolves","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_requires_auth","title":"Enrolments list requires auth","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_shows_enrolment","title":"Enrolments list shows enrolment","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_enrolments_list_status_filter","title":"Enrolments list status filter","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_every_nav_href_resolves_for_authenticated_user","title":"Every nav href resolves for authenticated user","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_every_protected_get_route_refuses_an_anonymous_browser","title":"Every protected get route refuses an anonymous browser","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_every_state_changing_route_rejects_a_form_post_without_a_csrf_token","title":"Every state changing route rejects a form post without a csrf token","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_nav_hrefs_require_authentication","title":"Nav hrefs require authentication","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_nav_icons_resolve","title":"Nav icons resolve","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_nav_registry_is_well_formed","title":"Nav registry is well formed","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_public_allow_list_only_names_routes_that_exist","title":"Public allow list only names routes that exist","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_reports_hub_renders","title":"Reports hub renders","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_route_table_walker_finds_the_modules","title":"Route table walker finds the modules","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_settings_stub_renders","title":"Settings stub renders","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_sidebar_for_the_seeded_rto_omits_higher_education","title":"Sidebar for the seeded rto omits higher education","passed":1,"skipped":0},{"file":"test_nav_routes.py","name":"test_sidebar_sections_follow_the_staff_facing_order","title":"Sidebar sections follow the staff facing order","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_every_item_has_a_one_line_description_without_codes_or_dashes","title":"Every item has a one line description without codes or dashes","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_every_legacy_key_survives_the_regrouping","title":"Every legacy key survives the regrouping","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_finance_hidden_from_roles_without_finance_read","title":"Finance hidden from roles without finance read","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_higher_education_hidden_for_a_vet_only_rto","title":"Higher education hidden for a vet only rto","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_higher_education_shown_for_he_and_dual_sector_providers","title":"Higher education shown for he and dual sector providers","passed":6,"skipped":0},{"file":"test_nav_structure.py","name":"test_legacy_section_names_map_onto_the_new_sections","title":"Legacy section names map onto the new sections","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_nav_json_payload_still_serialises_the_full_registry","title":"Nav json payload still serialises the full registry","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_other_provider_types_do_not_show_higher_education","title":"Other provider types do not show higher education","passed":4,"skipped":0},{"file":"test_nav_structure.py","name":"test_overrides_only_name_keys_that_exist","title":"Overrides only name keys that exist","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_page_title_pattern_and_favicon","title":"Page title pattern and favicon","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_quick_actions_follow_permissions","title":"Quick actions follow permissions","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_renamed_items","title":"Renamed items","passed":13,"skipped":0},{"file":"test_nav_structure.py","name":"test_rendered_sidebar_is_collapsible_and_hides_higher_education_for_the_rto","title":"Rendered sidebar is collapsible and hides higher education for the rto","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_rendered_sidebar_shows_higher_education_for_a_dual_sector_org","title":"Rendered sidebar shows higher education for a dual sector org","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_root_sees_everything_for_a_dual_sector_provider","title":"Root sees everything for a dual sector provider","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_sections_in_order_with_plain_english_wording","title":"Sections in order with plain english wording","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_title_block_falls_back_to_the_app_name","title":"Title block falls back to the app name","passed":1,"skipped":0},{"file":"test_nav_structure.py","name":"test_trainer_portal_only_for_trainers_assessors_and_root","title":"Trainer portal only for trainers assessors and root","passed":1,"skipped":0},{"file":"test_observability.py","name":"test_dsn_starts_the_sdk_without_personal_data","title":"Dsn starts the sdk without personal data","passed":1,"skipped":0},{"file":"test_observability.py","name":"test_no_dsn_leaves_the_process_untouched","title":"No dsn leaves the process untouched","passed":1,"skipped":0},{"file":"test_ops_scripts.py","name":"test_collection_is_created_once_per_year_and_period","title":"Collection is created once per year and period","passed":1,"skipped":0},{"file":"test_ops_scripts.py","name":"test_find_organisation_single_tenant_and_by_code","title":"Find organisation single tenant and by code","passed":1,"skipped":0},{"file":"test_ops_scripts.py","name":"test_invite_again_keeps_one_row_and_updates_the_role","title":"Invite again keeps one row and updates the role","passed":1,"skipped":0},{"file":"test_ops_scripts.py","name":"test_invite_creates_the_user_and_queues_the_invitation","title":"Invite creates the user and queues the invitation","passed":1,"skipped":0},{"file":"test_packaging_scripts.py","name":"test_build_scripts_reference_expected_artifacts","title":"Build scripts reference expected artifacts","passed":1,"skipped":0},{"file":"test_packaging_scripts.py","name":"test_entry_py_handles_smoke_flag","title":"Entry py handles smoke flag","passed":1,"skipped":0},{"file":"test_packaging_scripts.py","name":"test_iss_has_version_and_working_dir","title":"Iss has version and working dir","passed":1,"skipped":0},{"file":"test_packaging_scripts.py","name":"test_packaging_files_exist","title":"Packaging files exist","passed":1,"skipped":0},{"file":"test_packaging_scripts.py","name":"test_spec_bundles_templates_as_datas_and_names_exe","title":"Spec bundles templates as datas and names exe","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_clamp_defaults_and_limits","title":"Clamp defaults and limits","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_every_paginated_list_route_renders_with_page_parameters","title":"Every paginated list route renders with page parameters","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_he_racism_register_pages_but_summary_counts_every_incident","title":"He racism register pages but summary counts every incident","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_invoice_list_derives_status_without_writing","title":"Invoice list derives status without writing","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_material_changes_page_size_default_and_cap","title":"Material changes page size default and cap","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_pager_dict_never_points_past_the_last_page","title":"Pager dict never points past the last page","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_paginate_list_slices_and_reports_totals","title":"Paginate list slices and reports totals","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_paginate_query_counts_the_whole_set","title":"Paginate query counts the whole set","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_reports_and_accounts_pages_do_not_rewrite_statuses","title":"Reports and accounts pages do not rewrite statuses","passed":1,"skipped":0},{"file":"test_pagination.py","name":"test_workforce_list_pages_and_keeps_filters","title":"Workforce list pages and keeps filters","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_collection_zip_members_are_capped_before_they_are_held_in_memory","title":"Collection zip members are capped before they are held in memory","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_import_upload_is_read_in_chunks_and_stops_at_the_cap","title":"Import upload is read in chunks and stops at the cap","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_import_upload_over_the_cap_is_refused_with_a_422","title":"Import upload over the cap is refused with a 422","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_pending_records_matches_build_batch_without_writing","title":"Pending records matches build batch without writing","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_programs_and_enrolments_lists_page","title":"Programs and enrolments lists page","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_removal_requests_refresh_on_submit_and_poll_not_on_get","title":"Removal requests refresh on submit and poll not on get","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_reporting_index_pages_the_batches","title":"Reporting index pages the batches","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_reporting_pages_read_only_after_the_settings_row_exists","title":"Reporting pages read only after the settings row exists","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_rules_export_filename_carries_the_release","title":"Rules export filename carries the release","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_stars_operations_lists_render_the_pager","title":"Stars operations lists render the pager","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_stored_zip_over_the_cap_is_a_409_not_a_server_error","title":"Stored zip over the cap is a 409 not a server error","passed":1,"skipped":0},{"file":"test_pagination_reporting.py","name":"test_students_list_pages_by_fifty_and_caps_the_page_size","title":"Students list pages by fifty and caps the page size","passed":1,"skipped":0},{"file":"test_pdf_fonts.py","name":"test_bundled_dejavu_faces_register_with_their_licence","title":"Bundled dejavu faces register with their licence","passed":1,"skipped":0},{"file":"test_pdf_fonts.py","name":"test_he_testamur_and_transcript_show_a_non_latin_graduate_name","title":"He testamur and transcript show a non latin graduate name","passed":1,"skipped":0},{"file":"test_pdf_fonts.py","name":"test_helvetica_is_kept_for_latin_1_and_swapped_otherwise","title":"Helvetica is kept for latin 1 and swapped otherwise","passed":1,"skipped":0},{"file":"test_pdf_fonts.py","name":"test_invoice_receipt_and_statement_show_a_non_latin_student_name","title":"Invoice receipt and statement show a non latin student name","passed":1,"skipped":0},{"file":"test_pdf_fonts.py","name":"test_unicode_canvas_draws_every_string_kind_and_restores_the_font","title":"Unicode canvas draws every string kind and restores the font","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_ahegs_sections_follow_guideline_order_with_placeholders","title":"Ahegs sections follow guideline order with placeholders","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_he_testamur_content_elements","title":"He testamur content elements","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_institution_profile_overrides_replace_placeholders","title":"Institution profile overrides replace placeholders","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_retention_until_is_thirty_years","title":"Retention until is thirty years","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_three_renderers_produce_pdfs_with_mandatory_headings","title":"Three renderers produce pdfs with mandatory headings","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_transcript_with_many_results_paginates","title":"Transcript with many results paginates","passed":1,"skipped":0},{"file":"test_pdfgen_he.py","name":"test_vet_renderer_signatures_unchanged","title":"Vet renderer signatures unchanged","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_allow_list_entries_still_exist","title":"Allow list entries still exist","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_allow_list_only_shrinks","title":"Allow list only shrinks","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_every_write_route_in_an_operational_module_is_gated","title":"Every write route in an operational module is gated","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_every_write_route_is_gated_or_on_the_allow_list","title":"Every write route is gated or on the allow list","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_permission_list_is_alphabetical_and_paired","title":"Permission list is alphabetical and paired","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_role_grants_match_the_security_page","title":"Role grants match the security page","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_roles_are_refused_where_the_map_says_so","title":"Roles are refused where the map says so","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_roles_pass_the_permission_check_where_their_job_needs_it","title":"Roles pass the permission check where their job needs it","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_route_table_has_the_operational_modules","title":"Route table has the operational modules","passed":1,"skipped":0},{"file":"test_permission_map.py","name":"test_security_doc_lists_every_permission","title":"Security doc lists every permission","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_a_commit_inside_a_test_is_a_savepoint_on_the_shared_connection","title":"A commit inside a test is a savepoint on the shared connection","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_audit_chain_window_verifies_newest_entries_only","title":"Audit chain window verifies newest entries only","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_client_address_is_the_rightmost_forwarded_for_entry","title":"Client address is the rightmost forwarded for entry","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_decrypt_secret_handles_plaintext_and_a_rotated_key","title":"Decrypt secret handles plaintext and a rotated key","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_each_test_starts_from_an_empty_database","title":"Each test starts from an empty database","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_error_page_reads_the_configured_session_cookie","title":"Error page reads the configured session cookie","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_flash_query_string_is_ignored_and_only_signed_cookies_render","title":"Flash query string is ignored and only signed cookies render","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_funding_subject_save_refuses_another_organisations_subject_enrolment","title":"Funding subject save refuses another organisations subject enrolment","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_ipv6_host_header_is_parsed","title":"Ipv6 host header is parsed","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_last_seen_is_written_at_most_every_interval","title":"Last seen is written at most every interval","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_login_next_and_switch_org_next_are_sanitised","title":"Login next and switch org next are sanitised","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_login_page_ignores_an_error_query_string","title":"Login page ignores an error query string","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_logo_upload_checks_bytes_and_serves_with_a_sandbox_policy","title":"Logo upload checks bytes and serves with a sandbox policy","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_outbox_is_only_shown_to_users_who_can_manage_accounts","title":"Outbox is only shown to users who can manage accounts","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_portal_mail_log_fallback_never_logs_the_link","title":"Portal mail log fallback never logs the link","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_portal_mail_uses_the_platform_mailer","title":"Portal mail uses the platform mailer","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_production_startup_fails_fast_when_migration_fails","title":"Production startup fails fast when migration fails","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_repeated_wrong_totp_codes_lock_the_account","title":"Repeated wrong totp codes lock the account","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_runtime_flags_are_refreshed_from_the_registered_loader","title":"Runtime flags are refreshed from the registered loader","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_safe_next_rejects_anything_but_an_app_path","title":"Safe next rejects anything but an app path","passed":6,"skipped":0},{"file":"test_platform_review.py","name":"test_set_flash_round_trips_and_a_rotated_key_invalidates_it","title":"Set flash round trips and a rotated key invalidates it","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_smtp_password_is_encrypted_at_rest_and_never_rendered","title":"Smtp password is encrypted at rest and never rendered","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_startup_lock_serialises_on_postgres_and_is_a_noop_elsewhere","title":"Startup lock serialises on postgres and is a noop elsewhere","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_startup_tasks_load_saved_flags_after_migrating_and_seeding","title":"Startup tasks load saved flags after migrating and seeding","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_tenant_admin_cannot_change_instance_settings_on_shared_instance","title":"Tenant admin cannot change instance settings on shared instance","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_token_bucket_memory_is_bounded_under_a_flood_of_addresses","title":"Token bucket memory is bounded under a flood of addresses","passed":1,"skipped":0},{"file":"test_platform_review.py","name":"test_unknown_email_still_fails_closed","title":"Unknown email still fails closed","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_access_request_thirty_day_clock_and_response","title":"Access request thirty day clock and response","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_adm_disclosure_upsert","title":"Adm disclosure upsert","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_app_mapping_save_updates_row","title":"App mapping save updates row","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_breach_and_request_references_continue_from_stored_rows","title":"Breach and request references continue from stored rows","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_breach_ndb_clock_overdue_assess_notify_statement","title":"Breach ndb clock overdue assess notify statement","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_clocks_are_thirty_calendar_days","title":"Clocks are thirty calendar days","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_notice_versions_and_inventory","title":"Notice versions and inventory","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_notices_tab_counts_students_with_a_recorded_notice","title":"Notices tab counts students with a recorded notice","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_overview_seeds_thirteen_app_rows_and_adm_default","title":"Overview seeds thirteen app rows and adm default","passed":1,"skipped":0},{"file":"test_privacy.py","name":"test_privacy_requires_auth","title":"Privacy requires auth","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_auditor_cannot_write_programs","title":"Auditor cannot write programs","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_offering_create","title":"Offering create","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_create_auto_seeds_subjects_from_qualification","title":"Program create auto seeds subjects from qualification","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_create_basic","title":"Program create basic","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_create_is_idempotent_on_subject_seeding","title":"Program create is idempotent on subject seeding","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_create_legacy_type_value_is_mapped","title":"Program create legacy type value is mapped","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_create_rejects_invented_classification","title":"Program create rejects invented classification","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_details_update","title":"Program details update","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_name_is_limited_to_the_published_width","title":"Program name is limited to the published width","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_new_form_renders","title":"Program new form renders","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_view_404_for_other_org","title":"Program view 404 for other org","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_program_view_shows_offerings_and_subjects","title":"Program view shows offerings and subjects","passed":1,"skipped":0},{"file":"test_programs_api.py","name":"test_programs_list_requires_auth","title":"Programs list requires auth","passed":1,"skipped":0},{"file":"test_provider_policy.py","name":"test_complaint_creation_uses_configured_deadline","title":"Complaint creation uses configured deadline","passed":1,"skipped":0},{"file":"test_provider_policy.py","name":"test_policy_save_requires_reference_and_has_tenant_scope","title":"Policy save requires reference and has tenant scope","passed":1,"skipped":0},{"file":"test_records.py","name":"test_backup_status","title":"Backup status","passed":1,"skipped":0},{"file":"test_records.py","name":"test_disposal_refuses_certification_records","title":"Disposal refuses certification records","passed":1,"skipped":0},{"file":"test_records.py","name":"test_export_bundle_contains_json_and_is_audited","title":"Export bundle contains json and is audited","passed":1,"skipped":0},{"file":"test_records.py","name":"test_export_bundle_covers_every_student_keyed_record_family","title":"Export bundle covers every student keyed record family","passed":1,"skipped":0},{"file":"test_records.py","name":"test_export_is_an_administrator_action","title":"Export is an administrator action","passed":1,"skipped":0},{"file":"test_records.py","name":"test_legal_hold_blocks_then_lifting_releases","title":"Legal hold blocks then lifting releases","passed":1,"skipped":0},{"file":"test_records.py","name":"test_records_page_seeds_classes","title":"Records page seeds classes","passed":1,"skipped":0},{"file":"test_records.py","name":"test_records_requires_auth","title":"Records requires auth","passed":1,"skipped":0},{"file":"test_records.py","name":"test_retention_class_cannot_go_below_cs_s10_minimum","title":"Retention class cannot go below cs s10 minimum","passed":1,"skipped":0},{"file":"test_records.py","name":"test_retention_dates","title":"Retention dates","passed":1,"skipped":0},{"file":"test_records.py","name":"test_schedule_computes_dates_and_certification_is_never_proposed","title":"Schedule computes dates and certification is never proposed","passed":1,"skipped":0},{"file":"test_records.py","name":"test_two_step_disposal_workflow_is_audited_and_soft","title":"Two step disposal workflow is audited and soft","passed":1,"skipped":0},{"file":"test_recovery_controls.py","name":"test_pc_pull_retains_good_set_and_returns_failure","title":"Pc pull retains good set and returns failure","passed":3,"skipped":0},{"file":"test_recovery_controls.py","name":"test_restore_rejects_incomplete_or_untrusted_set","title":"Restore rejects incomplete or untrusted set","passed":6,"skipped":0},{"file":"test_reference_ext.py","name":"test_agreed_hours_parse_and_import","title":"Agreed hours parse and import","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_cached_skillset_records_and_import_idempotent","title":"Cached skillset records and import idempotent","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_from_env_requires_credentials_for_production","title":"From env requires credentials for production","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_import_asced_into_db","title":"Import asced into db","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_import_osca_into_db_is_idempotent","title":"Import osca into db is idempotent","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_migration_0004_creates_reference_tables","title":"Migration 0004 creates reference tables","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_models_round_trip_on_sqlite","title":"Models round trip on sqlite","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_parse_asced_structures_and_avetmiss_codes","title":"Parse asced structures and avetmiss codes","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_parse_ncver_osca_file","title":"Parse ncver osca file","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_parse_osca_correspondence","title":"Parse osca correspondence","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_parse_search_result_and_summary_records","title":"Parse search result and summary records","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_read_xlsx_and_parse_osca_structure","title":"Read xlsx and parse osca structure","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_record_from_rest","title":"Record from rest","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_record_from_soap_details_qualification","title":"Record from soap details qualification","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_record_from_soap_details_unit_and_course","title":"Record from soap details unit and course","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_scope_csv_codes_reads_repo_files","title":"Scope csv codes reads repo files","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_soap_client_get_details_end_to_end_with_fake_transport","title":"Soap client get details end to end with fake transport","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_soap_client_raises_tga_error_on_fault","title":"Soap client raises tga error on fault","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_superseded_chain_and_is_current","title":"Superseded chain and is current","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_superseded_chain_stops_on_cycle","title":"Superseded chain stops on cycle","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_supersession_links_semantics","title":"Supersession links semantics","passed":1,"skipped":0},{"file":"test_reference_ext.py","name":"test_upsert_is_idempotent_and_keeps_details_over_summaries","title":"Upsert is idempotent and keeps details over summaries","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_import_skillsets_also_fills_training_products_superset","title":"Import skillsets also fills training products superset","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_import_skillsets_can_skip_products","title":"Import skillsets can skip products","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_import_skillsets_inserts_tp_skillset_units_links","title":"Import skillsets inserts tp skillset units links","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_import_skillsets_is_idempotent","title":"Import skillsets is idempotent","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_import_skillsets_respects_limit","title":"Import skillsets respects limit","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_reference_browse_empty_when_no_query","title":"Reference browse empty when no query","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_reference_browse_requires_auth","title":"Reference browse requires auth","passed":1,"skipped":0},{"file":"test_reference_import.py","name":"test_reference_browse_search_finds_seed_data","title":"Reference browse search finds seed data","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_abandoned_draw_on_sqlite_is_committed_with_the_caller","title":"Abandoned draw on sqlite is committed with the caller","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_award_numbers_restart_each_year_through_the_kind","title":"Award numbers restart each year through the kind","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_first_draw_continues_from_existing_count_based_references","title":"First draw continues from existing count based references","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_locking_path_survives_losing_the_insert_race","title":"Locking path survives losing the insert race","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_postgres_path_reads_the_counter_for_update","title":"Postgres path reads the counter for update","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_prefix_table_matches_the_registers","title":"Prefix table matches the registers","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_references_are_sequential_per_kind_and_organisation","title":"References are sequential per kind and organisation","passed":1,"skipped":0},{"file":"test_reference_numbers.py","name":"test_sqlite_threads_on_a_file_database_never_share_a_number","title":"Sqlite threads on a file database never share a number","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_add_business_days_friday_lands_monday","title":"Add business days friday lands monday","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_add_business_days_skips_weekends_over_range","title":"Add business days skips weekends over range","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_annual_declaration_upsert_per_period","title":"Annual declaration upsert per period","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_appeal_create_with_independent_review_and_audit","title":"Appeal create with independent review and audit","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_asqa_and_teqsa_due_dates_differ","title":"Asqa and teqsa due dates differ","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_complaint_and_appeal_references_continue_from_stored_rows","title":"Complaint and appeal references continue from stored rows","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_complaint_overdue_flagged","title":"Complaint overdue flagged","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_complaint_resolve_sets_outcome_and_ci_link","title":"Complaint resolve sets outcome and ci link","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_every_tab_renders_after_seeding_one_of_each","title":"Every tab renders after seeding one of each","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_material_change_audit_standard_ref","title":"Material change audit standard ref","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_material_change_teqsa_uses_calendar_clock","title":"Material change teqsa uses calendar clock","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_registers_overview_requires_auth","title":"Registers overview requires auth","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_risk_rating_high_high_is_critical","title":"Risk rating high high is critical","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_risk_rating_matrix","title":"Risk rating matrix","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_third_party_asqa_start_due_and_overdue","title":"Third party asqa start due and overdue","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_third_party_notification_due_is_30_calendar_days","title":"Third party notification due is 30 calendar days","passed":1,"skipped":0},{"file":"test_registers.py","name":"test_third_party_notify_start_clears_overdue","title":"Third party notify start clears overdue","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_changelog_has_unreleased_and_the_current_version","title":"Changelog has unreleased and the current version","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_git_sha_comes_from_the_environment","title":"Git sha comes from the environment","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_health_reports_the_pyproject_version","title":"Health reports the pyproject version","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_no_url_means_sqlite_and_create_all","title":"No url means sqlite and create all","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_other_dialects_are_refused_before_connecting","title":"Other dialects are refused before connecting","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_postgres_marked_tests_run_only_on_postgres","title":"Postgres marked tests run only on postgres","passed":0,"skipped":1},{"file":"test_release_tooling.py","name":"test_postgres_url_selects_the_migration_chain","title":"Postgres url selects the migration chain","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_the_session_engine_matches_the_switch","title":"The session engine matches the switch","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_unknown_schema_strategy_is_a_usage_error","title":"Unknown schema strategy is a usage error","passed":1,"skipped":0},{"file":"test_release_tooling.py","name":"test_version_comes_from_pyproject","title":"Version comes from pyproject","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_abandoned_batch_hours_is_a_setting","title":"Abandoned batch hours is a setting","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_dashboard_label_reads_stars_reporting","title":"Dashboard label reads stars reporting","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_download_nat_shows_export_reasons_instead_of_500","title":"Download nat shows export reasons instead of 500","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_download_nat_zip_is_fixed_width_crlf_without_header","title":"Download nat zip is fixed width crlf without header","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_download_stars_json_per_entity_and_whole_batch","title":"Download stars json per entity and whole batch","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_full_extract_and_local_validate_transitions","title":"Full extract and local validate transitions","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_generate_creates_draft_batch_with_published_rules","title":"Generate creates draft batch with published rules","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_index_shows_clock_header_and_stars_note","title":"Index shows clock header and stars note","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_nat_lodged_records_completions_and_excludes_them_next_time","title":"Nat lodged records completions and excludes them next time","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_nil_activity_report_declaration","title":"Nil activity report declaration","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_production_upload_refused_until_base_url_published","title":"Production upload refused until base url published","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_reporting_index_lists_batches","title":"Reporting index lists batches","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_reporting_writes_need_reporting_submit_and_settings_write","title":"Reporting writes need reporting submit and settings write","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_rows_left_uploaded_by_an_abandoned_batch_re_enter_the_next_delta","title":"Rows left uploaded by an abandoned batch re enter the next delta","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_settings_page_saves_secret_references_only","title":"Settings page saves secret references only","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_settings_reject_foreign_env_var_names_and_plain_http_overrides","title":"Settings reject foreign env var names and plain http overrides","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_stars_blocking_failures_reject_batch_and_show_corrective_action","title":"Stars blocking failures reject batch and show corrective action","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_stars_validate_submit_and_poll_accept_the_batch","title":"Stars validate submit and poll accept the batch","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_stars_validation_still_running_is_reported_not_failed","title":"Stars validation still running is reported not failed","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_submit_error_after_stars_accepted_is_recovered","title":"Submit error after stars accepted is recovered","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_submit_stays_submitted_until_stars_reports_submitted","title":"Submit stays submitted until stars reports submitted","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_upload_blocked_until_local_errors_fixed_then_uploads","title":"Upload blocked until local errors fixed then uploads","passed":1,"skipped":0},{"file":"test_reporting.py","name":"test_upload_failure_records_problem_details","title":"Upload failure records problem details","passed":1,"skipped":0},{"file":"test_reporting_calendar.py","name":"test_empty_tenant_is_calm","title":"Empty tenant is calm","passed":1,"skipped":0},{"file":"test_reporting_calendar.py","name":"test_overdue_and_mark_done","title":"Overdue and mark done","passed":1,"skipped":0},{"file":"test_reporting_calendar.py","name":"test_summary_and_widgets","title":"Summary and widgets","passed":1,"skipped":0},{"file":"test_reporting_calendar.py","name":"test_upcoming_combines_state_rows_ncver_and_census","title":"Upcoming combines state rows ncver and census","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_annual_avetmiss_collection_date_is_unchanged","title":"Annual avetmiss collection date is unchanged","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_clock_status_follows_the_dpr_deadline","title":"Clock status follows the dpr deadline","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_grace_days_only_bring_the_due_date_forward","title":"Grace days only bring the due date forward","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_nil_activity_is_not_recommended_while_a_student_is_still_training","title":"Nil activity is not recommended while a student is still training","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_overdue_quarters_use_the_dpr_deadline","title":"Overdue quarters use the dpr deadline","passed":1,"skipped":0},{"file":"test_reporting_clock.py","name":"test_quarter_due_dates_are_the_end_of_the_month_after_the_quarter","title":"Quarter due dates are the end of the month after the quarter","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_changed_records_selects_new_changed_and_rejected_rows","title":"Changed records selects new changed and rejected rows","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_content_hash_ignores_version_keys_and_key_order","title":"Content hash ignores version keys and key order","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_last_accepted_batch_prefers_latest_submitted","title":"Last accepted batch prefers latest submitted","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_mark_uploaded_upserts_and_batch_status_propagates","title":"Mark uploaded upserts and batch status propagates","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_nat00130_parse_record_and_exclusion_set","title":"Nat00130 parse record and exclusion set","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_stamp_adds_deterministic_change_tracking_identifier","title":"Stamp adds deterministic change tracking identifier","passed":1,"skipped":0},{"file":"test_reporting_ledger.py","name":"test_sync_parchment_dates_from_issuance_records","title":"Sync parchment dates from issuance records","passed":1,"skipped":0},{"file":"test_reporting_statements.py","name":"test_reporting_landing_page_stays_under_thirty_statements_at_500_enrolments","title":"Reporting landing page stays under thirty statements at 500 enrolments","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_absolute_limit_is_configurable","title":"Absolute limit is configurable","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_anonymous_multipart_post_is_refused_before_the_body_is_read","title":"Anonymous multipart post is refused before the body is read","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_apache_include_caps_request_bodies","title":"Apache include caps request bodies","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_assessor_without_finance_status_sees_no_fee_column","title":"Assessor without finance status sees no fee column","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_avetmiss_and_avs_writes_need_reporting_submit","title":"Avetmiss and avs writes need reporting submit","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_avs_settings_and_import_need_a_gate_before_the_body_is_read","title":"Avs settings and import need a gate before the body is read","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_compliance_officer_grants_match_the_decision","title":"Compliance officer grants match the decision","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_compliance_officer_routes","title":"Compliance officer routes","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_csrf_scan_enforces_the_size_cap_while_streaming","title":"Csrf scan enforces the size cap while streaming","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_csrf_scan_of_a_chunked_multipart_body_stops_at_the_field","title":"Csrf scan of a chunked multipart body stops at the field","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_delivered_mail_keeps_only_a_hashed_token","title":"Delivered mail keeps only a hashed token","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_derive_key_matches_a_reference_hkdf_sha256","title":"Derive key matches a reference hkdf sha256","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_derived_keys_differ_per_purpose_and_are_deterministic","title":"Derived keys differ per purpose and are deterministic","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_dpr_on_request_report_needs_reporting_read","title":"Dpr on request report needs reporting read","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_enforced_csrf_accepts_a_multipart_upload_with_the_field_first","title":"Enforced csrf accepts a multipart upload with the field first","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_fee_status_helper_reveals_only_paid_or_unpaid","title":"Fee status helper reveals only paid or unpaid","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_fernet_key_is_urlsafe_base64_of_32_bytes","title":"Fernet key is urlsafe base64 of 32 bytes","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_flash_signature_uses_the_flash_key_not_the_raw_secret","title":"Flash signature uses the flash key not the raw secret","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_form_body_above_the_cap_is_refused_before_reading","title":"Form body above the cap is refused before reading","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_integrity_error_becomes_a_409_page","title":"Integrity error becomes a 409 page","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_integrity_error_from_a_real_route_is_a_409_not_a_500","title":"Integrity error from a real route is a 409 not a 500","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_integrity_errors_are_described_in_plain_sentences","title":"Integrity errors are described in plain sentences","passed":7,"skipped":0},{"file":"test_security_fixes.py","name":"test_legacy_plaintext_outbox_rows_still_read","title":"Legacy plaintext outbox rows still read","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_multipart_post_with_a_valid_session_reaches_the_handler","title":"Multipart post with a valid session reaches the handler","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_organisation_writes_are_gated_as_a_dependency","title":"Organisation writes are gated as a dependency","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_outbox_bodies_are_encrypted_at_rest","title":"Outbox bodies are encrypted at rest","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_outbox_is_scoped_by_organisation_and_fails_closed","title":"Outbox is scoped by organisation and fails closed","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_outbox_page_masks_tokens_with_a_fingerprint","title":"Outbox page masks tokens with a fingerprint","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_outbox_rows_older_than_the_retention_window_are_purged","title":"Outbox rows older than the retention window are purged","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_portal_cookie_is_signed_with_its_own_derived_key","title":"Portal cookie is signed with its own derived key","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_portal_cookie_secure_flag_follows_scheme_and_environment","title":"Portal cookie secure flag follows scheme and environment","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_redact_tokens_hashes_every_token_parameter","title":"Redact tokens hashes every token parameter","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_secrets_written_with_the_old_derivation_still_decrypt","title":"Secrets written with the old derivation still decrypt","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_session_older_than_the_absolute_limit_is_refused","title":"Session older than the absolute limit is refused","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_session_tokens_signed_with_the_raw_secret_still_decode","title":"Session tokens signed with the raw secret still decode","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_settings_notice_comes_from_the_allow_list_only","title":"Settings notice comes from the allow list only","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_sliding_refresh_never_passes_the_absolute_limit","title":"Sliding refresh never passes the absolute limit","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_stale_session_cookie_is_not_a_csrf_target","title":"Stale session cookie is not a csrf target","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_student_cookie_carries_secure_over_https","title":"Student cookie carries secure over https","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_student_support_reads_finance_but_cannot_write","title":"Student support reads finance but cannot write","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_tenant_admin_sees_only_their_own_outbox","title":"Tenant admin sees only their own outbox","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_tokens_without_the_auth_claim_fall_back_to_iat","title":"Tokens without the auth claim fall back to iat","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_trainer_sees_paid_or_unpaid_without_amounts","title":"Trainer sees paid or unpaid without amounts","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_user_actions_redirect_with_a_key_and_no_personal_data","title":"User actions redirect with a key and no personal data","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_users_notice_comes_from_the_allow_list_only","title":"Users notice comes from the allow list only","passed":1,"skipped":0},{"file":"test_security_fixes.py","name":"test_users_page_offers_the_new_role","title":"Users page offers the new role","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_every_alphabet_character_is_accepted_in_every_position","title":"Every alphabet character is accepted in every position","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_hash_and_verify_password","title":"Hash and verify password","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_hash_is_unique_per_call","title":"Hash is unique per call","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_is_usi_substitute","title":"Is usi substitute","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_is_valid_usi_check_character_not_implemented","title":"Is valid usi check character not implemented","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_is_valid_usi_default_is_format_only","title":"Is valid usi default is format only","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_is_valid_usi_format","title":"Is valid usi format","passed":22,"skipped":0},{"file":"test_security_validation.py","name":"test_is_valid_usi_format_normalises_lower_case","title":"Is valid usi format normalises lower case","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_jwt_expires_in_future","title":"Jwt expires in future","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_jwt_rejects_tampered_token","title":"Jwt rejects tampered token","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_jwt_rejects_wrong_secret","title":"Jwt rejects wrong secret","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_jwt_round_trip","title":"Jwt round trip","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_normalise_usi_uppercases_and_strips","title":"Normalise usi uppercases and strips","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_offline_verifier_has_no_attestation_switch","title":"Offline verifier has no attestation switch","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_offline_verifier_indiv_needs_a_documented_exemption","title":"Offline verifier indiv needs a documented exemption","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_offline_verifier_never_verifies_only_checks_format","title":"Offline verifier never verifies only checks format","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_offline_verifier_rejects_digits_0_and_1_with_real_alphabet_message","title":"Offline verifier rejects digits 0 and 1 with real alphabet message","passed":1,"skipped":0},{"file":"test_security_validation.py","name":"test_usi_alphabet_is_digits_2_to_9_and_letters_without_i_and_o","title":"Usi alphabet is digits 2 to 9 and letters without i and o","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_create_tenant_creates_org_and_invites_admin","title":"Create tenant creates org and invites admin","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_create_tenant_without_admin","title":"Create tenant without admin","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_seed_creates_org_and_root_user","title":"Seed creates org and root user","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_seed_flags_default_password_for_forced_change","title":"Seed flags default password for forced change","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_seed_is_idempotent","title":"Seed is idempotent","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_seed_silent_when_custom_root_password_is_used","title":"Seed silent when custom root password is used","passed":1,"skipped":0},{"file":"test_seed.py","name":"test_seed_warns_when_default_root_password_is_used","title":"Seed warns when default root password is used","passed":1,"skipped":0},{"file":"test_seed_avs_history.py","name":"test_avs_dates_parse","title":"Avs dates parse","passed":1,"skipped":0},{"file":"test_seed_avs_history.py","name":"test_capture_has_one_latest_row_per_period","title":"Capture has one latest row per period","passed":1,"skipped":0},{"file":"test_seed_avs_history.py","name":"test_dry_run_writes_nothing","title":"Dry run writes nothing","passed":1,"skipped":0},{"file":"test_seed_avs_history.py","name":"test_refuses_history_for_another_rto","title":"Refuses history for another rto","passed":1,"skipped":0},{"file":"test_seed_avs_history.py","name":"test_seed_creates_collections_and_nil_return_idempotently","title":"Seed creates collections and nil return idempotently","passed":1,"skipped":0},{"file":"test_seed_staging.py","name":"test_cli_refuses_the_production_host","title":"Cli refuses the production host","passed":1,"skipped":0},{"file":"test_seed_staging.py","name":"test_cli_seeds_a_temporary_sqlite_database","title":"Cli seeds a temporary sqlite database","passed":1,"skipped":0},{"file":"test_seed_staging.py","name":"test_seed_builds_the_population_and_only_synthetic_data","title":"Seed builds the population and only synthetic data","passed":1,"skipped":0},{"file":"test_seed_staging.py","name":"test_seed_is_idempotent_and_reset_rebuilds","title":"Seed is idempotent and reset rebuilds","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_branding_rejects_bad_timezone_and_retention","title":"Branding rejects bad timezone and retention","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_claimed_paths_descend_into_included_routers","title":"Claimed paths descend into included routers","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_csrf_flag_cannot_be_disabled_in_production","title":"Csrf flag cannot be disabled in production","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_defaults_when_nothing_saved","title":"Defaults when nothing saved","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_feature_flags_update_runtime","title":"Feature flags update runtime","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_logo_upload_and_download","title":"Logo upload and download","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_nav_has_users_and_settings_entries","title":"Nav has users and settings entries","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_outbox_shown_when_smtp_unset_and_hidden_when_set","title":"Outbox shown when smtp unset and hidden when set","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_save_branding_retention_and_timezone","title":"Save branding retention and timezone","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_scaffold_no_longer_lists_settings","title":"Scaffold no longer lists settings","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_send_test_message_lands_in_outbox","title":"Send test message lands in outbox","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_settings_are_scoped_per_organisation","title":"Settings are scoped per organisation","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_settings_page_replaces_the_scaffold","title":"Settings page replaces the scaffold","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_settings_route_is_served_by_the_settings_module","title":"Settings route is served by the settings module","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_settings_write_requires_permission","title":"Settings write requires permission","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_smtp_rejects_bad_port","title":"Smtp rejects bad port","passed":1,"skipped":0},{"file":"test_settings.py","name":"test_smtp_settings_saved_globally_and_override_env","title":"Smtp settings saved globally and override env","passed":1,"skipped":0},{"file":"test_sqlite_uuid_storage.py","name":"test_numeric_uuid_retains_exact_identifier_on_sqlite","title":"Numeric uuid retains exact identifier on sqlite","passed":1,"skipped":0},{"file":"test_standards.py","name":"test_standards_page_renders_both_frameworks","title":"Standards page renders both frameworks","passed":1,"skipped":0},{"file":"test_standards.py","name":"test_standards_page_requires_auth","title":"Standards page requires auth","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_401_triggers_one_token_refresh","title":"401 triggers one token refresh","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_declaration_and_reconciliation_paths","title":"Declaration and reconciliation paths","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_extract_items_accepts_list_or_wrapped_object","title":"Extract items accepts list or wrapped object","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_load_credentials_reads_secret_references_only","title":"Load credentials reads secret references only","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_msal_provider_reports_failed_token_request","title":"Msal provider reports failed token request","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_msal_provider_uses_certificate_assertion_and_caches_token","title":"Msal provider uses certificate assertion and caches token","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_normalise_scope","title":"Normalise scope","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_not_found_problem_details_for_unknown_batch","title":"Not found problem details for unknown batch","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_paged_envelope_stops_at_number_of_pages","title":"Paged envelope stops at number of pages","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_problem_details_are_parsed","title":"Problem details are parsed","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_resolve_base_url_refuses_unpublished_production","title":"Resolve base url refuses unpublished production","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_retries_exhausted_raise_problem_details","title":"Retries exhausted raise problem details","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_retries_on_429_and_5xx_then_succeeds","title":"Retries on 429 and 5xx then succeeds","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_retry_after_is_capped_and_accepts_an_http_date","title":"Retry after is capped and accepts an http date","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_summarise_validation_results_groups_by_rule_and_fills_corrective_action","title":"Summarise validation results groups by rule and fills corrective action","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_transaction_batch_workflow_calls_documented_endpoints","title":"Transaction batch workflow calls documented endpoints","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_transport_errors_are_retried_then_raised","title":"Transport errors are retried then raised","passed":1,"skipped":0},{"file":"test_stars_client.py","name":"test_upload_rejects_unknown_entity_and_missing_token","title":"Upload rejects unknown entity and missing token","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_avs_overlap_flags_double_reporting","title":"Avs overlap flags double reporting","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_data_quality_endpoint_reports_not_published_without_a_request","title":"Data quality endpoint reports not published without a request","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_data_quality_page_shows_local_defaults_and_ncver_note","title":"Data quality page shows local defaults and ncver note","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_deletion_records_survive_ledger_marking","title":"Deletion records survive ledger marking","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_export_lists_every_third_party_and_keeps_the_legacy_column","title":"Export lists every third party and keeps the legacy column","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_migration_0021_creates_the_completion_tables","title":"Migration 0021 creates the completion tables","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_offline_readiness_passes_four_use_cases_and_reports_the_fifth","title":"Offline readiness passes four use cases and reports the fifth","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_readiness_page_runs_offline_and_keeps_results","title":"Readiness page runs offline and keeps results","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_reconciliation_classifies_records_and_records_runs","title":"Reconciliation classifies records and records runs","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_reconciliation_page_runs_and_shows_differences","title":"Reconciliation page runs and shows differences","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_reference_data_page_lists_datasets","title":"Reference data page lists datasets","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_reference_data_sync_pages_upserts_and_keeps_watermark_on_failure","title":"Reference data sync pages upserts and keeps watermark on failure","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_removal_page_only_accepts_previously_submitted_records","title":"Removal page only accepts previously submitted records","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_removal_request_travels_as_deletion_record_and_excludes_content","title":"Removal request travels as deletion record and excludes content","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_stars_operations_writes_need_reporting_submit","title":"Stars operations writes need reporting submit","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_subject_form_multi_select_writes_link_rows","title":"Subject form multi select writes link rows","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_supersede_concludes_old_and_registers_new_with_link","title":"Supersede concludes old and registers new with link","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_transfer_moves_subject_enrolment_and_flags_the_target","title":"Transfer moves subject enrolment and flags the target","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_transfer_refuses_another_students_program_enrolment","title":"Transfer refuses another students program enrolment","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_upload_removals_refuses_full_records","title":"Upload removals refuses full records","passed":1,"skipped":0},{"file":"test_stars_completion.py","name":"test_usi_check_character_is_a_pluggable_hook","title":"Usi check character is a pluggable hook","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_completions_follow_the_same_filter","title":"Completions follow the same filter","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_direct_ncver_keeps_national_and_limits_the_state_file","title":"Direct ncver keeps national and limits the state file","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_enrolment_records_never_borrow_extra_from_another_enrolment","title":"Enrolment records never borrow extra from another enrolment","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_funded_record_without_a_mandatory_indicator_is_a_reason_not_a_default","title":"Funded record without a mandatory indicator is a reason not a default","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_funding_index_indexes_rows_by_student","title":"Funding index indexes rows by student","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_funding_rows_without_configuration_do_not_change_the_national_export","title":"Funding rows without configuration do not change the national export","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_mandatory_for_funded_reads_the_capture_phrasing","title":"Mandatory for funded reads the capture phrasing","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_money_fields_follow_the_jurisdiction_unit_and_rounding","title":"Money fields follow the jurisdiction unit and rounding","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_national_export_is_unchanged_when_nothing_is_configured","title":"National export is unchanged when nothing is configured","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_parser_pads_ncver_records_to_the_state_length","title":"Parser pads ncver records to the state length","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_pathway_both_includes_everything_in_both_exports","title":"Pathway both includes everything in both exports","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_populate_state_fields_for_the_organisation_record","title":"Populate state fields for the organisation record","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_populate_state_fields_leaves_national_fields_alone","title":"Populate state fields leaves national fields alone","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_round_trip_state_files","title":"Round trip state files","passed":8,"skipped":0},{"file":"test_state_export.py","name":"test_sta_only_excludes_funded_activity_from_the_national_export","title":"Sta only excludes funded activity from the national export","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_subject_level_override_wins_over_the_program_row","title":"Subject level override wins over the program row","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_supplementary_files_render_at_their_state_length","title":"Supplementary files render at their state length","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_unknown_jurisdiction_is_rejected","title":"Unknown jurisdiction is rejected","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_unknown_state_codes_block_the_export","title":"Unknown state codes block the export","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_values_that_do_not_fit_are_reasons_not_truncation","title":"Values that do not fit are reasons not truncation","passed":1,"skipped":0},{"file":"test_state_export.py","name":"test_wa_export_rounds_fees_up_and_tas_rounds_half_up","title":"Wa export rounds fees up and tas rounds half up","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_aliases_are_not_duplicated_fields","title":"Aliases are not duplicated fields","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_check_passes_for_all_eight_vet_jurisdictions","title":"Check passes for all eight vet jurisdictions","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_check_reports_a_gap_and_a_wrong_length","title":"Check reports a gap and a wrong length","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_choices_refer_to_real_layouts","title":"Choices refer to real layouts","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_every_capture_extension_is_placed","title":"Every capture extension is placed","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_every_national_field_keeps_its_position","title":"Every national field keeps its position","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_format_and_parse_round_trip_vic_nat00120","title":"Format and parse round trip vic nat00120","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_he_resource_key_lengths_come_from_element_widths","title":"He resource key lengths come from element widths","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_layout_lookup_errors","title":"Layout lookup errors","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_no_layout_related_catalogue_errors_remain","title":"No layout related catalogue errors remain","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_queensland_lui_replaces_the_statistical_areas","title":"Queensland lui replaces the statistical areas","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_record_lengths_match_the_captures","title":"Record lengths match the captures","passed":8,"skipped":0},{"file":"test_state_layouts.py","name":"test_supplementary_files_have_their_own_tails","title":"Supplementary files have their own tails","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_tasmania_fields_and_normalised_names","title":"Tasmania fields and normalised names","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_victoria_places_its_fields_after_ncver","title":"Victoria places its fields after ncver","passed":1,"skipped":0},{"file":"test_state_layouts.py","name":"test_western_australia_tafe_superset","title":"Western australia tafe superset","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_dashboard_widgets_from_the_calendar_service_render","title":"Dashboard widgets from the calendar service render","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_every_new_page_returns_200_for_an_admin_and_meets_the_page_contract","title":"Every new page returns 200 for an admin and meets the page contract","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_generate_shows_export_reasons_instead_of_a_500","title":"Generate shows export reasons instead of a 500","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_generate_vic_zip_full_length_then_validate_submit_and_respond","title":"Generate vic zip full length then validate submit and respond","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_generate_wa_zip_contains_the_two_tams_files","title":"Generate wa zip contains the two tams files","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_house_style_no_dashes_in_the_submissions_module","title":"House style no dashes in the submissions module","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_list_and_create_for_vic_and_wa","title":"List and create for vic and wa","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_nav_entry_and_empty_index","title":"Nav entry and empty index","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_pathway_split_partial_counts_sta_only_exclusions","title":"Pathway split partial counts sta only exclusions","passed":1,"skipped":0},{"file":"test_state_submissions.py","name":"test_submissions_require_auth","title":"Submissions require auth","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_admin_page_shows_unattributed_login_attempts_only_to_root","title":"Admin page shows unattributed login attempts only to root","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_admin_toggle_invite_and_audit","title":"Admin toggle invite and audit","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_change_request_created_then_approved_by_staff","title":"Change request created then approved by staff","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_change_request_rejected_and_validation","title":"Change request rejected and validation","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_csrf_required_on_portal_posts","title":"Csrf required on portal posts","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_disabled_portal_sends_nothing","title":"Disabled portal sends nothing","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_expired_token_rejected","title":"Expired token rejected","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_forged_student_cookie_rejected","title":"Forged student cookie rejected","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_garbage_token_rejected","title":"Garbage token rejected","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_invoices_page_lists_the_students_invoices","title":"Invoices page lists the students invoices","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_login_page_and_neutral_reply_for_unknown_email","title":"Login page and neutral reply for unknown email","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_logout_clears_cookie","title":"Logout clears cookie","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_magic_link_end_to_end_and_single_use","title":"Magic link end to end and single use","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_nav_and_widget","title":"Nav and widget","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_portal_administration_needs_students_write","title":"Portal administration needs students write","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_portal_pages_render","title":"Portal pages render","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_portal_switched_off_blocks_signed_in_student","title":"Portal switched off blocks signed in student","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_rate_limit_per_email","title":"Rate limit per email","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_staff_token_cannot_open_portal","title":"Staff token cannot open portal","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_status_text_is_plain_and_escaped","title":"Status text is plain and escaped","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_student_acknowledges_the_privacy_notice_once","title":"Student acknowledges the privacy notice once","passed":1,"skipped":0},{"file":"test_student_portal.py","name":"test_student_cookie_cannot_open_staff_routes","title":"Student cookie cannot open staff routes","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_case_links_complaint_and_rejects_bad_ids","title":"Case links complaint and rejects bad ids","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_case_plan_adjustments_and_close_out","title":"Case plan adjustments and close out","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_commence_blocked_until_reviewed_then_allowed","title":"Commence blocked until reviewed then allowed","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_commence_override_is_audited","title":"Commence override is audited","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_dashboard_widgets_compute","title":"Dashboard widgets compute","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_every_tab_renders","title":"Every tab renders","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_nav_item_registered","title":"Nav item registered","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_pack_checklist_versioning_issue_and_markdown","title":"Pack checklist versioning issue and markdown","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_pack_reads_real_finance_fee_schedule","title":"Pack reads real finance fee schedule","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_pack_uses_finance_module_when_present","title":"Pack uses finance module when present","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_plan_active_window","title":"Plan active window","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_requirements_review_and_gap_detection","title":"Requirements review and gap detection","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_review_validation_errors","title":"Review validation errors","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_suitability_json_endpoint","title":"Suitability json endpoint","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_support_case_references_continue_from_stored_rows","title":"Support case references continue from stored rows","passed":1,"skipped":0},{"file":"test_student_support.py","name":"test_support_requires_auth","title":"Support requires auth","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_auditor_cannot_save_students","title":"Auditor cannot save students","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_intoff_is_accepted_for_an_offshore_student_with_an_overseas_address","title":"Intoff is accepted for an offshore student with an overseas address","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_intoff_is_refused_while_the_student_has_an_onshore_enrolment","title":"Intoff is refused while the student has an onshore enrolment","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_intoff_is_refused_with_an_australian_or_missing_address","title":"Intoff is refused with an australian or missing address","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_new_student_can_be_created_with_the_notice_recorded","title":"New student can be created with the notice recorded","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_privacy_notice_record_is_stamped_shown_and_clearable","title":"Privacy notice record is stamped shown and clearable","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_create_rejects_bad_usi","title":"Student create rejects bad usi","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_create_rejects_invented_classification","title":"Student create rejects invented classification","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_create_rejects_no_disability_combined","title":"Student create rejects no disability combined","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_create_valid","title":"Student create valid","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_create_validation_error","title":"Student create validation error","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_duplicate_usi_rejected_with_message","title":"Student duplicate usi rejected with message","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_edit_and_update","title":"Student edit and update","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_indiv_sets_exemption_and_allows_duplicates","title":"Student indiv sets exemption and allows duplicates","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_names_use_the_published_width_and_reference_lists","title":"Student names use the published width and reference lists","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_new_form_renders_published_classifications","title":"Student new form renders published classifications","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_student_view_404_for_other_org","title":"Student view 404 for other org","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_students_list_empty","title":"Students list empty","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_students_list_loads_addresses_and_enrolments_in_bounded_queries","title":"Students list loads addresses and enrolments in bounded queries","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_students_list_requires_auth","title":"Students list requires auth","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_students_list_shows_seeded_student","title":"Students list shows seeded student","passed":1,"skipped":0},{"file":"test_students_api.py","name":"test_students_list_state_filter_uses_permanent_address","title":"Students list state filter uses permanent address","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_closed_distribution_rejects_responses","title":"Closed distribution rejects responses","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_distribution_validation","title":"Distribution validation","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_distribution_view_ignores_a_ci_item_of_another_organisation","title":"Distribution view ignores a ci item of another organisation","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_feed_to_continuous_improvement","title":"Feed to continuous improvement","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_public_response_flow_and_summary","title":"Public response flow and summary","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_surveys_requires_auth_but_public_form_does_not","title":"Surveys requires auth but public form does not","passed":1,"skipped":0},{"file":"test_surveys.py","name":"test_template_seeds_default_questions_and_parses_extra","title":"Template seeds default questions and parses extra","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_builders_produce_every_mandatory_element","title":"Builders produce every mandatory element","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_catalogue_element_formats_and_codes","title":"Catalogue element formats and codes","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_catalogue_loads_36_packets_and_143_elements","title":"Catalogue loads 36 packets and 143 elements","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_catalogue_packet_membership_and_deadlines","title":"Catalogue packet membership and deadlines","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_clean_provider_has_no_errors","title":"Clean provider has no errors","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_client_refuses_without_credentials","title":"Client refuses without credentials","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_client_submits_in_dependency_order_and_skips_children_of_rejected_parents","title":"Client submits in dependency order and skips children of rejected parents","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_element_map_matches_model_comments","title":"Element map matches model comments","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_high_help_limit_applies_to_medicine_dentistry_and_veterinary_fields_only","title":"High help limit applies to medicine dentistry and veterinary fields only","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_migration_0017_creates_and_drops_the_tcsi_tables","title":"Migration 0017 creates and drops the tcsi tables","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_pir_variant_strips_help_elements","title":"Pir variant strips help elements","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_proda_token_provider_posts_jwt_bearer_assertion","title":"Proda token provider posts jwt bearer assertion","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rate_limiter_throttles_at_1200_calls_a_minute","title":"Rate limiter throttles at 1200 calls a minute","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_can_older_than_28_days","title":"Rules flag can older than 28 days","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_census_date_before_commencement","title":"Rules flag census date before commencement","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_census_date_under_20_percent","title":"Rules flag census date under 20 percent","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_fee_help_loan_fee_and_withdrawal_liability","title":"Rules flag fee help loan fee and withdrawal liability","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_help_debt_over_remaining_limit","title":"Rules flag help debt over remaining limit","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_rules_flag_invalid_e490","title":"Rules flag invalid e490","passed":1,"skipped":0},{"file":"test_tcsi.py","name":"test_scheduled_validation_window","title":"Scheduled validation window","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_admission_and_unit_enrolment_forms_compute_the_loan","title":"Admission and unit enrolment forms compute the loan","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_build_packets_persists_drafts_and_packet_view_renders","title":"Build packets persists drafts and packet view renders","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_can_issue_and_pdf","title":"Can issue and pdf","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_notifications_record_and_clear","title":"Notifications record and clear","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_pages_render_empty_for_admin","title":"Pages render empty for admin","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_pages_render_with_data","title":"Pages render with data","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_pages_require_authentication","title":"Pages require authentication","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_sa_help_debts_count_toward_the_balance_when_a_unit_loan_is_created","title":"Sa help debts count toward the balance when a unit loan is created","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_structure_forms_create_rows","title":"Structure forms create rows","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_submit_refuses_without_proda_credentials","title":"Submit refuses without proda credentials","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_submit_with_mocked_client_records_the_log","title":"Submit with mocked client records the log","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_tcsi_is_in_the_sidebar","title":"Tcsi is in the sidebar","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_tcsi_submission_and_structure_writes_need_reporting_permissions","title":"Tcsi submission and structure writes need reporting permissions","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_unit_loan_is_capped_by_the_help_balance_left_after_prior_unit_debts","title":"Unit loan is capped by the help balance left after prior unit debts","passed":1,"skipped":0},{"file":"test_tcsi_ui.py","name":"test_validation_page_lists_findings","title":"Validation page lists findings","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_autoescape_is_enabled_for_html_templates","title":"Autoescape is enabled for html templates","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_components_documented_in_the_ui_guide_exist","title":"Components documented in the ui guide exist","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_confirm_delete_macro_renders_an_injectable_post_form","title":"Confirm delete macro renders an injectable post form","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_every_state_changing_form_is_covered_by_the_csrf_layer","title":"Every state changing form is covered by the csrf layer","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_every_template_is_rendered_by_a_route_or_included_by_a_template","title":"Every template is rendered by a route or included by a template","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_htmx_evaluation_features_are_switched_off","title":"Htmx evaluation features are switched off","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_htmx_requests_carry_the_csrf_header_from_app_js","title":"Htmx requests carry the csrf header from app js","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_hx_verbs_are_only_used_on_forms_or_with_the_global_header","title":"Hx verbs are only used on forms or with the global header","passed":4,"skipped":0},{"file":"test_template_lint.py","name":"test_inline_event_handlers_stay_within_budget","title":"Inline event handlers stay within budget","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_json_embedded_in_scripts_uses_tojson","title":"Json embedded in scripts uses tojson","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_markup_is_constructed_only_where_the_input_is_escaped_first","title":"Markup is constructed only where the input is escaped first","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_no_em_or_en_dashes_in_templates_static_or_guide","title":"No em or en dashes in templates static or guide","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_no_javascript_urls_or_eval_in_static_js","title":"No javascript urls or eval in static js","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_no_positive_tabindex_in_templates","title":"No positive tabindex in templates","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_none_is_never_shown_as_an_option_or_cell","title":"None is never shown as an option or cell","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_placeholders_do_not_ask_staff_for_uuids","title":"Placeholders do not ask staff for uuids","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_safe_filter_only_wraps_icon_svg_or_developer_attribute_literals","title":"Safe filter only wraps icon svg or developer attribute literals","passed":1,"skipped":0},{"file":"test_template_lint.py","name":"test_tables_scroll_inside_table_wrap","title":"Tables scroll inside table wrap","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_approval_by_independent_user_succeeds_and_audits","title":"Approval by independent user succeeds and audits","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_approval_create_via_api_is_pending","title":"Approval create via api is pending","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_course_create_schedules_comprehensive_review_within_7_years","title":"Course create schedules comprehensive review within 7 years","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_material_change_notify_due_is_14_calendar_days","title":"Material change notify due is 14 calendar days","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_material_change_overdue_flag","title":"Material change overdue flag","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_material_change_within_window_not_overdue","title":"Material change within window not overdue","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_multi_stage_approval_routing_with_quorum_and_independence","title":"Multi stage approval routing with quorum and independence","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_needs_renewal_warning_unit_boundaries","title":"Needs renewal warning unit boundaries","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_pir_snapshot_counts_match_seeded_data","title":"Pir snapshot counts match seeded data","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_pir_snapshot_has_element_groups_and_exports","title":"Pir snapshot has element groups and exports","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_renewal_warning_api_level","title":"Renewal warning api level","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_review_complete_records_hesf_53","title":"Review complete records hesf 53","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_self_approval_rejected","title":"Self approval rejected","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_stage_of_another_organisation_is_not_found","title":"Stage of another organisation is not found","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_stage_rejection_rejects_item_and_return_reopens","title":"Stage rejection rejects item and return reopens","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_stages_can_be_added_to_a_direct_item","title":"Stages can be added to a direct item","passed":1,"skipped":0},{"file":"test_teqsa.py","name":"test_teqsa_routes_scoped_to_own_org","title":"Teqsa routes scoped to own org","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_csv_import_records_events_links_third_party_and_reports_findings","title":"Csv import records events links third party and reports findings","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_dry_run_validates_without_writing","title":"Dry run validates without writing","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_intake_page_import_route","title":"Intake page import route","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_missing_activity_date_is_an_error_not_today","title":"Missing activity date is an error not today","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_nat00120_rows_map_outcomes_to_vetis_status","title":"Nat00120 rows map outcomes to vetis status","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_superseded_subject_enrolment_may_conclude_without_reason_but_not_the_new_one","title":"Superseded subject enrolment may conclude without reason but not the new one","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_unchanged_rows_and_unknown_headings","title":"Unchanged rows and unknown headings","passed":1,"skipped":0},{"file":"test_third_party_intake.py","name":"test_usi_is_masked_in_findings","title":"Usi is masked in findings","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_assessments_link_follows_mounted_routes","title":"Assessments link follows mounted routes","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_assessor_role_allowed_and_students_page","title":"Assessor role allowed and students page","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_marking_statuses_available","title":"Marking statuses available","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_my_sessions_match_staff_member_link","title":"My sessions match staff member link","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_nav_item","title":"Nav item","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_requires_login","title":"Requires login","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_root_admin_can_open_trainer_portal","title":"Root admin can open trainer portal","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_staff_link_by_email_is_case_insensitive","title":"Staff link by email is case insensitive","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_staff_role_without_trainer_gets_403","title":"Staff role without trainer gets 403","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_trainer_home_lists_my_sessions_and_reminders","title":"Trainer home lists my sessions and reminders","passed":1,"skipped":0},{"file":"test_trainer_portal.py","name":"test_trainer_quick_mark_and_commence","title":"Trainer quick mark and commence","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_app_js_adds_the_csrf_header_and_manages_focus_after_swaps","title":"App js adds the csrf header and manages focus after swaps","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_base_shell_exposes_nav_json_and_no_hard_coded_palette","title":"Base shell exposes nav json and no hard coded palette","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_checkbox_textarea_and_fieldset","title":"Checkbox textarea and fieldset","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_chips_carry_text_and_tone_class","title":"Chips carry text and tone class","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_code_badge_help_and_required_tag","title":"Code badge help and required tag","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_confirm_delete_and_print_button","title":"Confirm delete and print button","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_confirm_forms_use_the_shared_dialog_attributes","title":"Confirm forms use the shared dialog attributes","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_css_has_responsive_theme_and_motion_rules","title":"Css has responsive theme and motion rules","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_data_table_empty_state_when_no_rows","title":"Data table empty state when no rows","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_data_table_sortable_headers_and_row_scope","title":"Data table sortable headers and row scope","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_dialog_and_trigger","title":"Dialog and trigger","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_enrolment_form_page_has_one_h1","title":"Enrolment form page has one h1","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_error_summary_links_to_fields","title":"Error summary links to fields","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_field_attrs_are_emitted_as_real_attributes","title":"Field attrs are emitted as real attributes","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_field_binds_label_help_and_error","title":"Field binds label help and error","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_filter_bar_inputs_are_labelled","title":"Filter bar inputs are labelled","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_flash_messages_come_from_the_signed_cookie_only","title":"Flash messages come from the signed cookie only","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_flash_stack_renders_role_status","title":"Flash stack renders role status","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_form_section_and_labelled_error_summary","title":"Form section and labelled error summary","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_js_wires_palette_dialogs_and_htmx_announcements","title":"Js wires palette dialogs and htmx announcements","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_link_tabs_and_tablist","title":"Link tabs and tablist","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_nav_payload_is_json_serialisable_and_matches_sidebar","title":"Nav payload is json serialisable and matches sidebar","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_page_header_breadcrumbs_and_single_h1","title":"Page header breadcrumbs and single h1","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_pagination_hidden_for_single_page","title":"Pagination hidden for single page","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_pagination_marks_current_and_keeps_params","title":"Pagination marks current and keeps params","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_reports_hub_page_has_single_heading","title":"Reports hub page has single heading","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_set_flash_sets_one_shot_cookie","title":"Set flash sets one shot cookie","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_vetis_field_macros_bind_labels_and_carry_rules","title":"Vetis field macros bind labels and carry rules","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_vetis_select_attrs_are_emitted_as_real_attributes","title":"Vetis select attrs are emitted as real attributes","passed":1,"skipped":0},{"file":"test_ui_components.py","name":"test_vetis_select_uses_classification_catalogue","title":"Vetis select uses classification catalogue","passed":1,"skipped":0},{"file":"test_users.py","name":"test_cannot_deactivate_self_or_root","title":"Cannot deactivate self or root","passed":1,"skipped":0},{"file":"test_users.py","name":"test_change_role_is_audited","title":"Change role is audited","passed":1,"skipped":0},{"file":"test_users.py","name":"test_deactivate_revokes_sessions_and_blocks_login","title":"Deactivate revokes sessions and blocks login","passed":1,"skipped":0},{"file":"test_users.py","name":"test_expired_invite_is_rejected","title":"Expired invite is rejected","passed":1,"skipped":0},{"file":"test_users.py","name":"test_force_reset_revokes_sessions_and_mails_link","title":"Force reset revokes sessions and mails link","passed":1,"skipped":0},{"file":"test_users.py","name":"test_invite_flow_through_outbox","title":"Invite flow through outbox","passed":1,"skipped":0},{"file":"test_users.py","name":"test_invite_rejects_duplicate_and_bad_email","title":"Invite rejects duplicate and bad email","passed":1,"skipped":0},{"file":"test_users.py","name":"test_non_root_cannot_switch_organisation","title":"Non root cannot switch organisation","passed":1,"skipped":0},{"file":"test_users.py","name":"test_permission_map_is_consistent","title":"Permission map is consistent","passed":1,"skipped":0},{"file":"test_users.py","name":"test_require_permission_returns_403","title":"Require permission returns 403","passed":1,"skipped":0},{"file":"test_users.py","name":"test_require_role_still_works","title":"Require role still works","passed":1,"skipped":0},{"file":"test_users.py","name":"test_resend_invite_issues_new_token","title":"Resend invite issues new token","passed":1,"skipped":0},{"file":"test_users.py","name":"test_root_holds_every_permission","title":"Root holds every permission","passed":1,"skipped":0},{"file":"test_users.py","name":"test_root_switches_organisation","title":"Root switches organisation","passed":1,"skipped":0},{"file":"test_users.py","name":"test_tenant_isolation_on_user_actions","title":"Tenant isolation on user actions","passed":1,"skipped":0},{"file":"test_users.py","name":"test_trainer_cannot_open_settings_or_users","title":"Trainer cannot open settings or users","passed":1,"skipped":0},{"file":"test_users.py","name":"test_unknown_permission_is_an_error","title":"Unknown permission is an error","passed":1,"skipped":0},{"file":"test_users.py","name":"test_users_page_lists_accounts_and_roles","title":"Users page lists accounts and roles","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_attestation_is_refused_with_422_and_audited","title":"Attestation is refused with 422 and audited","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_changing_the_usi_after_verification_makes_the_student_unverified","title":"Changing the usi after verification makes the student unverified","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_create_form_exemption_needs_evidence","title":"Create form exemption needs evidence","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_exemption_requires_type_and_evidence","title":"Exemption requires type and evidence","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_exemption_route_requires_evidence_and_then_allows_issue","title":"Exemption route requires evidence and then allows issue","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_he_award_confer_and_issue_refuse_unverified_usi","title":"He award confer and issue refuse unverified usi","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_indiv_students_are_exempt_only_with_the_registrar_letter","title":"Indiv students are exempt only with the registrar letter","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_issuance_state_is_unverified_by_default","title":"Issuance state is unverified by default","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_issuance_state_verified_registry_after_registry_result","title":"Issuance state verified registry after registry result","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_issue_refused_while_unverified_with_message_and_audit","title":"Issue refused while unverified with message and audit","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_malformed_usi_is_not_sent_to_the_registry","title":"Malformed usi is not sent to the registry","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_no_verifier_other_than_the_registry_can_mark_verified","title":"No verifier other than the registry can mark verified","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_registry_success_verifies_then_issue_succeeds","title":"Registry success verifies then issue succeeds","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_registry_unreachable_blocks_rather_than_attests","title":"Registry unreachable blocks rather than attests","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_registry_verifier_refuses_without_credentials_or_integration","title":"Registry verifier refuses without credentials or integration","passed":1,"skipped":0},{"file":"test_usi_gate.py","name":"test_statement_of_attainment_issue_uses_the_same_gate","title":"Statement of attainment issue uses the same gate","passed":1,"skipped":0},{"file":"test_usi_transcript_updates.py","name":"test_compare_files_lists_outcome_date_presence_and_completion_changes","title":"Compare files lists outcome date presence and completion changes","passed":1,"skipped":0},{"file":"test_usi_transcript_updates.py","name":"test_layouts_used_by_the_comparison_are_the_national_ones","title":"Layouts used by the comparison are the national ones","passed":1,"skipped":0},{"file":"test_usi_transcript_updates.py","name":"test_prepare_is_blocked_for_unlodged_or_fileless_collections","title":"Prepare is blocked for unlodged or fileless collections","passed":1,"skipped":0},{"file":"test_usi_transcript_updates.py","name":"test_prepare_register_and_move_statuses_through_the_api","title":"Prepare register and move statuses through the api","passed":1,"skipped":0},{"file":"test_validation_panel.py","name":"test_missing_declarations_block_completion_but_complete_evidence_passes","title":"Missing declarations block completion but complete evidence passes","passed":2,"skipped":0},{"file":"test_validation_panel.py","name":"test_ordinary_outcome_cannot_be_solely_designer_or_deliverer","title":"Ordinary outcome cannot be solely designer or deliverer","passed":4,"skipped":0},{"file":"test_validation_panel.py","name":"test_other_product_delivery_cannot_be_declared_external","title":"Other product delivery cannot be declared external","passed":1,"skipped":0},{"file":"test_validation_panel.py","name":"test_outcome_route_rechecks_evidence_and_freezes_completed_activity","title":"Outcome route rechecks evidence and freezes completed activity","passed":1,"skipped":0},{"file":"test_validation_panel.py","name":"test_tae_internal_person_without_scope_link_is_not_independent","title":"Tae internal person without scope link is not independent","passed":2,"skipped":0},{"file":"test_validation_panel.py","name":"test_tae_skill_set_below_target_level_does_not_pass","title":"Tae skill set below target level does not pass","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_commit_plan_rejects_uncredentialled_or_non_independent_validators","title":"Commit plan rejects uncredentialled or non independent validators","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_commit_plan_writes_schedules_with_linked_validators","title":"Commit plan writes schedules with linked validators","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_coverage_states","title":"Coverage states","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_manual_schedule_requires_credentialled_staff_validator","title":"Manual schedule requires credentialled staff validator","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_plan_balances_medium_risk_products_across_years","title":"Plan balances medium risk products across years","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_plan_covers_every_product_once_high_risk_first","title":"Plan covers every product once high risk first","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_plan_front_loads_half_of_scope","title":"Plan front loads half of scope","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_plan_page_renders_and_commits_via_api","title":"Plan page renders and commits via api","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_sample_size_rules","title":"Sample size rules","passed":7,"skipped":0},{"file":"test_validation_planner.py","name":"test_sampling_method_is_documented","title":"Sampling method is documented","passed":1,"skipped":0},{"file":"test_validation_planner.py","name":"test_validator_check_credentials_and_independence","title":"Validator check credentials and independence","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_address_rules","title":"Address rules","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_at_least_150_published_rules_are_evaluated_locally","title":"At least 150 published rules are evaluated locally","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_delivery_location_and_organisation_rules","title":"Delivery location and organisation rules","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_delivery_rules_on_the_subject_enrolment","title":"Delivery rules on the subject enrolment","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_nominal_hours_and_rpl_quality_rules","title":"Nominal hours and rpl quality rules","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_overdue_conclusion_and_commencement_warnings","title":"Overdue conclusion and commencement warnings","passed":2,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_program_and_subject_rules","title":"Program and subject rules","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_results_carry_catalogue_ids_status_and_thresholds","title":"Results carry catalogue ids status and thresholds","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_rto_closed_and_activity_date_consistency","title":"Rto closed and activity date consistency","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_student_rules","title":"Student rules","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_superseded_program_pair_checked_against_reference_chain","title":"Superseded program pair checked against reference chain","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_superseded_subject_pair_uses_the_reference_data_api_cache","title":"Superseded subject pair uses the reference data api cache","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_superseding_enrolment_concluded_without_reason_is_brdg00072","title":"Superseding enrolment concluded without reason is brdg00072","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_third_party_rules_identity_involvement_and_abn","title":"Third party rules identity involvement and abn","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_thresholds_are_configurable_and_marked_local","title":"Thresholds are configurable and marked local","passed":1,"skipped":0},{"file":"test_validation_rules_extended.py","name":"test_transfer_rules","title":"Transfer rules","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_classification_columns_are_wide_enough","title":"Classification columns are wide enough","passed":30,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_csv_tokens_are_the_stored_values","title":"Csv tokens are the stored values","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_every_classification_column_default_is_a_published_value","title":"Every classification column default is a published value","passed":12,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_every_element_in_the_json_loads","title":"Every element in the json loads","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_indicator_elements_are_booleans","title":"Indicator elements are booleans","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_is_valid_rejects_invented_codes","title":"Is valid rejects invented codes","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_status_enums_match_the_catalogue","title":"Status enums match the catalogue","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_unknown_element_raises","title":"Unknown element raises","passed":1,"skipped":0},{"file":"test_vetis_classifications.py","name":"test_widths_and_rules","title":"Widths and rules","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_abs_caches_are_shipped_and_shaped","title":"Abs caches are shipped and shaped","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_ascl_valid","title":"Ascl valid","passed":9,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_commencing_a_subject_needs_a_predominant_venue_per_usage_type","title":"Commencing a subject needs a predominant venue per usage type","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_country_and_language_rules_quote_the_published_rule","title":"Country and language rules quote the published rule","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_migration_0019_narrows_names_and_adds_the_single_name_indicator","title":"Migration 0019 narrows names and adds the single name indicator","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_model_widths_match_the_published_elements","title":"Model widths match the published elements","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_occupation_and_field_of_education_lookups_run_when_the_lists_are_loaded","title":"Occupation and field of education lookups run when the lists are loaded","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_postcode_rule_brdg00182","title":"Postcode rule brdg00182","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_predominant_venue_rules","title":"Predominant venue rules","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_program_form_enforces_name_width_and_reference_lists","title":"Program form enforces name width and reference lists","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_program_or_subject_name_width","title":"Program or subject name width","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_run_all_reports_the_element_rules_over_stored_data","title":"Run all reports the element rules over stored data","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_sacc_valid","title":"Sacc valid","passed":10,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_single_legal_name_is_held_in_the_family_name","title":"Single legal name is held in the family name","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_student_form_offers_the_reference_lists_and_the_single_name_tick","title":"Student form offers the reference lists and the single name tick","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_student_form_rejects_codes_off_the_abs_lists_and_bad_postcodes","title":"Student form rejects codes off the abs lists and bad postcodes","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_student_form_rejects_name_rule_breaches","title":"Student form rejects name rule breaches","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_student_form_saves_a_single_legal_name","title":"Student form saves a single legal name","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_student_name_rules","title":"Student name rules","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_subject_update_enforces_six_digit_field_of_education","title":"Subject update enforces six digit field of education","passed":1,"skipped":0},{"file":"test_vetis_element_rules.py","name":"test_superseded_link_is_checked_against_the_tga_chain","title":"Superseded link is checked against the tga chain","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_batch_build_syncs_parchment_date_from_issuance","title":"Batch build syncs parchment date from issuance","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_build_batch_full_then_delta","title":"Build batch full then delta","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_change_tracking_identifier_is_deterministic_and_content_sensitive","title":"Change tracking identifier is deterministic and content sensitive","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_deletion_record_shape","title":"Deletion record shape","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_delivery_location_program_offering_subject_shapes","title":"Delivery location program offering subject shapes","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_export_strips_whitespace_and_blanks_become_null","title":"Export strips whitespace and blanks become null","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_lifecycle_fallback_dates_from_created_at_when_enrolment_date_blank","title":"Lifecycle fallback dates from created at when enrolment date blank","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_lifecycle_states_fall_back_to_current_status","title":"Lifecycle states fall back to current status","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_program_enrolment_shape_and_child_objects","title":"Program enrolment shape and child objects","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_student_matches_stub_shape","title":"Student matches stub shape","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_subject_enrolment_matches_stub_shape","title":"Subject enrolment matches stub shape","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_subject_enrolment_synthesises_location_from_delivery_location","title":"Subject enrolment synthesises location from delivery location","passed":1,"skipped":0},{"file":"test_vetis_export.py","name":"test_to_json_and_payload_envelope","title":"To json and payload envelope","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_audit_entries_for_other_subregisters","title":"Audit entries for other subregisters","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_audit_entry_recorded_on_credential_create","title":"Audit entry recorded on credential create","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_credential_far_from_expiry_not_flagged","title":"Credential far from expiry not flagged","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_expired_credential_flagged_on_dashboard","title":"Expired credential flagged on dashboard","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_expiring_credential_flagged_on_dashboard","title":"Expiring credential flagged on dashboard","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_scope_link_flagged_when_cp1c_only_working_towards","title":"Scope link flagged when cp1c only working towards","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_scope_link_flagged_when_no_cp1a_cp1b","title":"Scope link flagged when no cp1a cp1b","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_scope_link_not_flagged_with_valid_cp1a","title":"Scope link not flagged with valid cp1a","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_create_validation_error","title":"Staff create validation error","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_create_via_endpoint","title":"Staff create via endpoint","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_detail_404_for_other_org","title":"Staff detail 404 for other org","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_detail_and_update","title":"Staff detail and update","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_detail_renders_subrecords","title":"Staff detail renders subrecords","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_list_shows_member_and_badges","title":"Staff list shows member and badges","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_staff_new_form_renders","title":"Staff new form renders","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_stale_vocational_currency_flagged","title":"Stale vocational currency flagged","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_workforce_requires_auth","title":"Workforce requires auth","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_working_towards_deadline_in_past_flagged","title":"Working towards deadline in past flagged","passed":1,"skipped":0},{"file":"test_workforce.py","name":"test_working_towards_future_deadline_pending_not_breached","title":"Working towards future deadline pending not breached","passed":1,"skipped":0}],"requirements":[{"key":0,"id":"DPR-s2","section":"3 Data Provision Requirements 2026","title":"Commencement: the amended DPRs commence on 1 October 2026","status":"Implementation recorded","files":[]},{"key":1,"id":"DPR-s6(2)","section":"3 Data Provision Requirements 2026","title":"VET dataset must contain all data for each relevant VET IS Part A element for every student enrolled and every VET course provided (including on the RTO's behalf)","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":2,"id":"DPR-s6(1)","section":"3 Data Provision Requirements 2026","title":"Provide data so that the VET dataset held by NCVER complies (ongoing provision)","status":"Provider or external action","files":["test_reporting.py"]},{"key":3,"id":"DPR-s6(3)","section":"3 Data Provision Requirements 2026","title":"Data is available once the RTO, a contractor, subcontractor, employee, volunteer or a third party delivering training or assessment generates or possesses it","status":"Implementation recorded","files":["test_third_party_intake.py"]},{"key":4,"id":"DPR-s6A(1)-(3)","section":"3 Data Provision Requirements 2026","title":"Exemptions may be granted by the regulator under the VET Data Provision Exemptions Policy, in writing, stating the data kind, period and conditions","status":"Provider or external action","files":[]},{"key":5,"id":"DPR-s6A(4)-(5)","section":"3 Data Provision Requirements 2026","title":"An exempted RTO must provide aggregate data per quarter (RTO name and ID, quarter, students commenced per VET course, students completed per VET course) by one month after the start of the next quarter","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":6,"id":"DPR-s6B","section":"3 Data Provision Requirements 2026","title":"Reportable data must be provided by the direct or the indirect reporting pathway","status":"Provider or external action","files":[]},{"key":7,"id":"DPR-s6C","section":"3 Data Provision Requirements 2026","title":"Direct pathway: provide to NCVER through a National VET data system (STARS), in VET IS format, within the period ending one month after the start of the next quarter","status":"Partial or context dependent","files":["test_stars_completion.py"]},{"key":8,"id":"DPR-s6D","section":"3 Data Provision Requirements 2026","title":"Indirect pathway: provide to a state training authority under an arrangement, within the same period","status":"Implementation recorded","files":["test_state_export.py","test_state_submissions.py"]},{"key":9,"id":"DPR-s6E","section":"3 Data Provision Requirements 2026","title":"Inaccurate or incomplete reportable data is taken not to have been provided; corrections must be provided","status":"Implementation recorded","files":["test_reporting_ledger.py","test_vetis_export.py"]},{"key":10,"id":"DPR-s6F(1)(a)","section":"3 Data Provision Requirements 2026","title":"Maintain a VET data system that collects and stores reportable data in digital form","status":"Implementation recorded","files":[]},{"key":11,"id":"DPR-s6F(1)(b)","section":"3 Data Provision Requirements 2026","title":"The VET data system must be capable of providing reportable data by the direct pathway","status":"Partial or context dependent","files":["test_stars_completion.py"]},{"key":12,"id":"DPR-s6F(1)(c)","section":"3 Data Provision Requirements 2026","title":"The VET data system must be capable of the indirect pathway where that pathway is used","status":"Implementation recorded","files":[]},{"key":13,"id":"DPR-s6F(2)","section":"3 Data Provision Requirements 2026","title":"Reportable data must be provided using the RTO's own VET data system","status":"Implementation recorded","files":[]},{"key":14,"id":"DPR-s6G","section":"3 Data Provision Requirements 2026","title":"Nil activity report to NCVER when no new students enrolled and no VET courses provided in a quarter, before the end of one month after the start of the next quarter, through the National VET data system","status":"Implementation recorded","files":["test_reporting.py","test_reporting_clock.py"]},{"key":15,"id":"DPR-s6H(1)","section":"3 Data Provision Requirements 2026","title":"Give every enrolling individual a privacy notice in the form set out in Schedule 1","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":16,"id":"DPR-s6H(2)","section":"3 Data Provision Requirements 2026","title":"Provide the privacy notice before or at the time of enrolment","status":"Implementation recorded","files":["test_enrolments_api.py","test_students_api.py"]},{"key":17,"id":"DPR-s6J(1)-(2)","section":"3 Data Provision Requirements 2026","title":"On cancellation or withdrawal of registration, provide all reportable data available immediately before cessation","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":18,"id":"DPR-s6J(3)-(5)","section":"3 Data Provision Requirements 2026","title":"After cessation, more accurate or complete data must be provided within the 30 day extended reporting period","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":19,"id":"DPR-s7","section":"3 Data Provision Requirements 2026","title":"Nationally recognised school training: continue to report under the National VET Provider Collection Data Requirements Policy (AVETMISS, VET in Schools collection) until VET IS covers it","status":"Implementation recorded","files":[]},{"key":20,"id":"DPR-s7A","section":"3 Data Provision Requirements 2026","title":"Outstanding AVETMISS school training data must be submitted before the switch day","status":"Implementation recorded","files":[]},{"key":21,"id":"DPR-s8(1A)-(1C)","section":"3 Data Provision Requirements 2026","title":"Provide data on request to the National VET Regulator within the period and in the manner specified (business registration, governing persons, FPP and FVRA information, scope, trainer and assessor credentials, overseas delivery sites)","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":22,"id":"DPR-s8(1)(oa)","section":"3 Data Provision Requirements 2026","title":"Evidence that each trainer and assessor holds the required credentials and industry competencies for every product delivered","status":"Implementation recorded","files":["test_workforce.py"]},{"key":23,"id":"DPR-s9 (Part 4)","section":"3 Data Provision Requirements 2026","title":"Annual reporting on quality indicators (learner engagement and employer satisfaction) to the regulator by 30 June","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":24,"id":"DPR-s11(2)-(3)","section":"3 Data Provision Requirements 2026","title":"Transition day: 1 January 2029 for an RTO registered before 1 January 2028 and still registered, earlier by arrangement; AVETMISS continues until then","status":"Provider or external action","files":[]},{"key":25,"id":"DPR-s11(4)","section":"3 Data Provision Requirements 2026","title":"Submit all outstanding AVETMISS data before the transition day","status":"Implementation recorded","files":[]},{"key":26,"id":"DPR-s11(5)-(6)","section":"3 Data Provision Requirements 2026","title":"Voluntary early provision of VET IS data before the transition day satisfies the corresponding AVETMISS requirement where accurate and complete","status":"Implementation recorded","files":["test_stars_completion.py"]},{"key":27,"id":"DPR-s11(7)-(8)","section":"3 Data Provision Requirements 2026","title":"Early or late transition where an STA arrangement requires it","status":"Provider or external action","files":[]},{"key":28,"id":"DPR-s12","section":"3 Data Provision Requirements 2026","title":"School training: new law applies from 1 October 2026 (alternative start day)","status":"Implementation recorded","files":[]},{"key":29,"id":"DPR-Sch1","section":"3 Data Provision Requirements 2026","title":"Schedule 1 privacy notice: minimum mandatory content (see the itemised rows in section 4)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":30,"id":"GUIDE-5 quarters","section":"3 Data Provision Requirements 2026","title":"Quarterly submission deadlines: Q1 by 30 April, Q2 by 31 July, Q3 by 31 October, Q4 by 31 January","status":"Implementation recorded","files":["test_reporting_clock.py"]},{"key":31,"id":"GUIDE-5 frequency","section":"3 Data Provision Requirements 2026","title":"Report progressively (as you go) or as a single end of quarter batch; quarterly is the minimum","status":"Implementation recorded","files":[]},{"key":32,"id":"GUIDE-5 relevant","section":"3 Data Provision Requirements 2026","title":"Data is relevant when specified in the in force VET IS version for the RTO's jurisdiction; future mandatory elements may be published early","status":"Implementation recorded","files":[]},{"key":33,"id":"GUIDE-8 standard declaration","section":"3 Data Provision Requirements 2026","title":"End of quarter declaration by an authorised representative: data complete and accurate, corrections complete and accurate, acknowledgement of the Terms and Conditions","status":"Implementation recorded","files":["test_reporting.py"]},{"key":34,"id":"GUIDE-8 no activity declaration","section":"3 Data Provision Requirements 2026","title":"Where training continued but no status change occurred, the RTO confirms a standard declaration rather than a nil activity report","status":"Implementation recorded","files":["test_reporting_clock.py"]},{"key":35,"id":"GUIDE-8 NAR","section":"3 Data Provision Requirements 2026","title":"Nil activity report through the National VET data system when no new students and no courses in the quarter","status":"Implementation recorded","files":[]},{"key":36,"id":"GUIDE-10","section":"3 Data Provision Requirements 2026","title":"Failure to report or to correct inaccurate data may breach a condition of registration","status":"Provider or external action","files":[]},{"key":37,"id":"GUIDE-11 changes","section":"3 Data Provision Requirements 2026","title":"Advise ASQA of changes in circumstances affecting information provided under the DPRs, and of FVRA and FPP non-compliance","status":"Provider or external action","files":[]},{"key":38,"id":"GUIDE-12","section":"3 Data Provision Requirements 2026","title":"Cessation: provide all outstanding data through the approved pathway; correct within 30 days","status":"Implementation recorded","files":[]},{"key":39,"id":"EXPOL-6","section":"3 Data Provision Requirements 2026","title":"Before commencement, tell students in exempt training that it will not appear on their transcript","status":"Implementation recorded","files":["test_dpr_workflows.py"]},{"key":40,"id":"EXPOL-7","section":"3 Data Provision Requirements 2026","title":"Quarterly aggregate report format for exempt activity","status":"Implementation recorded","files":[]},{"key":41,"id":"NVDP-B-TVA","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Collect and submit full AVETMISS data on all nationally recognised training (Total VET Activity), irrespective of funding","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":42,"id":"NVDP-B-annual","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Submit to the annual National VET Provider Collection (January to February of the following year, closes 28 February)","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":43,"id":"NVDP-B-quarterly","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Optional quarterly submission of fee for service activity (cumulative from 1 January; windows open four weeks after quarter end for two weeks)","status":"Implementation recorded","files":[]},{"key":44,"id":"NVDP-B-one-set","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Only one NAT file set per period; a later submission overwrites the earlier one; remove any activity already reported to an STA","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":45,"id":"NVDP-B-Sch1","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Give students the Schedule 1 Privacy Notice (wording in force from 1 January 2021) at enrolment","status":"Implementation recorded","files":["test_enrolment_form_variants.py"]},{"key":46,"id":"NVDP-B-Sch2","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Acknowledge the Schedule 2 VET Data Use Statement and RTO Declaration and Understanding when submitting data (in AVS at Finalise Submission)","status":"Provider or external action","files":[]},{"key":47,"id":"NVDP-B-USI","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Include the USI in data submissions so students can obtain a transcript of all training since 1 January 2015","status":"Implementation recorded","files":["test_domain_fixes.py","test_nat_files.py","test_students_api.py"]},{"key":48,"id":"NVDP-B-exemptions","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Exemptions under Part B sections 5.1 to 5.15 (previously granted) continue for AVETMISS reporters","status":"Provider or external action","files":[]},{"key":49,"id":"NVDP-B-nil","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Nil return through AVS when no nationally recognised training was delivered in the calendar year","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":50,"id":"SEQ-8.0","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Standard enrolment questions 1 to 18 (AVETMISS wording) collected in sequence","status":"Implementation recorded","files":["test_enrolment_form_variants.py"]},{"key":51,"id":"SEQ-8.0-USI","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"USI section: collect the USI, or apply for one on the student's behalf and destroy identity documents under s 11 Student Identifiers Act","status":"Implementation recorded","files":[]},{"key":52,"id":"NVDP-C-access","section":"4 National VET Data Policy v3 (while reporting under AVETMISS)","title":"Part C data access and disclosure (open access principle) applies to data held by NCVER","status":"Partial or context dependent","files":[]},{"key":53,"id":"SCH1-1","section":"3 Data Provision Requirements 2026","title":"Heading and text: Why we collect your personal information","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":54,"id":"SCH1-2","section":"3 Data Provision Requirements 2026","title":"Note to RTOs: APP 5.2(e) consequences of not providing information","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":55,"id":"SCH1-3","section":"3 Data Provision Requirements 2026","title":"How we use your personal information","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":56,"id":"SCH1-4","section":"3 Data Provision Requirements 2026","title":"How we disclose your personal information (NVETR Act, NCVER, state training authority, National VET Data Custodian)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":57,"id":"SCH1-5","section":"3 Data Provision Requirements 2026","title":"Note to RTOs: overseas disclosures under APP 5.2(i) and (j)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":58,"id":"SCH1-6","section":"3 Data Provision Requirements 2026","title":"How NCVER and other bodies handle your personal information (Privacy Act, NVETR Act, Student Identifiers Regulation, transcripts, research, disclosure to DEWR and authorities, no overseas disclosure)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":59,"id":"SCH1-7","section":"3 Data Provision Requirements 2026","title":"VET data system operators paragraph (contracted IT operators, APP obligations)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":60,"id":"SCH1-8","section":"3 Data Provision Requirements 2026","title":"Validation and quality assurance checks against other systems (USI Registry, Australian Business Register)","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":61,"id":"SCH1-9","section":"3 Data Provision Requirements 2026","title":"Link to NCVER Privacy Policy https://www.ncver.edu.au/privacy","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":62,"id":"SCH1-10","section":"3 Data Provision Requirements 2026","title":"DEWR authorisation paragraph and DAT Act public sector data paragraph","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":63,"id":"SCH1-11","section":"3 Data Provision Requirements 2026","title":"Link to DEWR VET Privacy Notice","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":64,"id":"SCH1-12","section":"3 Data Provision Requirements 2026","title":"Note to RTOs: hard copy of the DEWR notice where the student cannot access it online","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":65,"id":"SCH1-13","section":"3 Data Provision Requirements 2026","title":"Note to RTOs: state or territory authority privacy notice where applicable","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":66,"id":"SCH1-14","section":"3 Data Provision Requirements 2026","title":"Surveys paragraph with opt out","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":67,"id":"SCH1-15","section":"3 Data Provision Requirements 2026","title":"Contact information: access, correct, complain, ask about the notice, with RTO contact details and privacy policy link","status":"Implementation recorded","files":["test_enrolment_form_variants.py"]},{"key":68,"id":"SCH1-16","section":"3 Data Provision Requirements 2026","title":"Note to RTOs: give in addition to the RTO's standard privacy notice","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":69,"id":"NAT-format","section":"5 AVETMISS 8.0 NAT files and fields","title":"Fixed width records, no header, alphanumeric left justified space filled, numeric right justified zero filled, dates DDMMYYYY, CR LF terminator, printable ASCII","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":70,"id":"NAT-lengths","section":"5 AVETMISS 8.0 NAT files and fields","title":"Record lengths: NAT00010 268 (448 with STA fields), NAT00020 180, NAT00030 130, NAT00060 123, NAT00080 327 (347), NAT00085 557, NAT00090 12, NAT00100 13, NAT00120 111 (158), NAT00130 39 (72)","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":71,"id":"NAT-relationships","section":"5 AVETMISS 8.0 NAT files and fields","title":"File relationships: every identifier referenced in NAT00120 or NAT00130 must exist in its master file and every master row must be referenced","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":72,"id":"NAT-uniqueness","section":"5 AVETMISS 8.0 NAT files and fields","title":"Only one record per key in each file (organisation, location, program, subject, client, activity key, completion key)","status":"Implementation recorded","files":[]},{"key":73,"id":"NAT-not-previously-reported","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 must not contain completions already reported to the National VET Provider Collection","status":"Implementation recorded","files":["test_reporting.py"]},{"key":74,"id":"NAT-supplementary","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A and NAT00030A are only for organisations not on training.gov.au or locally recognised programs, never for an RTO submitting directly to NCVER","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":75,"id":"NAT00010","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 Training organisation file: one record for the reporting RTO","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":76,"id":"NAT00010A","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A Training organisation (supplementary) file: same positions as NAT00010 plus type and address rules for non-registered organisations","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":77,"id":"NAT00020","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 Training organisation delivery location file: one per location referenced by NAT00120","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":78,"id":"NAT00030","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 Program file: one per program referenced by NAT00120 or NAT00130","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":79,"id":"NAT00030A","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A Program (supplementary) file: adds recognition, level, field of education, occupation and VET flag for non-TGA programs","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":80,"id":"NAT00060","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 Subject file: one per subject referenced by NAT00120","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":81,"id":"NAT00080","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 Client file: one per client with activity or a completion","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":82,"id":"NAT00085","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 Client contact details file: one per NAT00080 client","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":83,"id":"NAT00090","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00090 Disability file: one per client and disability type","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":84,"id":"NAT00100","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00100 Prior educational achievement file: one per client and prior achievement","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":85,"id":"NAT00120","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 Training activity file: one per subject enrolment with activity in the period","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":86,"id":"NAT00130","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 Program completed file: one per program completion (Concluded with Successful_completion)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":87,"id":"NAT00010.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field training organisation identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":88,"id":"NAT00010.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field training organisation name: position 11, length 100, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":89,"id":"NAT00010.111","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field training organisation type identifier: position 111, length 2, type A","status":"Implementation recorded","files":[]},{"key":90,"id":"NAT00010.113","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field address first line: position 113, length 50, type A","status":"Implementation recorded","files":[]},{"key":91,"id":"NAT00010.163","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field address second line: position 163, length 50, type A","status":"Implementation recorded","files":[]},{"key":92,"id":"NAT00010.213","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field address suburb: position 213, length 50, type A","status":"Implementation recorded","files":[]},{"key":93,"id":"NAT00010.263","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field postcode: position 263, length 4, type A","status":"Implementation recorded","files":[]},{"key":94,"id":"NAT00010.267","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field state identifier: position 267, length 2, type A","status":"Implementation recorded","files":[]},{"key":95,"id":"NAT00010.269","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field contact name: position 269, length 60, type A (STA field)","status":"Implementation recorded","files":[]},{"key":96,"id":"NAT00010.329","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field telephone number: position 329, length 20, type A (STA field)","status":"Implementation recorded","files":[]},{"key":97,"id":"NAT00010.349","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field facsimile number: position 349, length 20, type A (STA field)","status":"Implementation recorded","files":[]},{"key":98,"id":"NAT00010.369","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010 field email address: position 369, length 80, type A (STA field)","status":"Implementation recorded","files":[]},{"key":99,"id":"NAT00010A.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field training organisation identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":100,"id":"NAT00010A.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field training organisation name: position 11, length 100, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":101,"id":"NAT00010A.111","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field training organisation type identifier: position 111, length 2, type A","status":"Implementation recorded","files":[]},{"key":102,"id":"NAT00010A.113","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field address first line: position 113, length 50, type A","status":"Implementation recorded","files":[]},{"key":103,"id":"NAT00010A.163","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field address second line: position 163, length 50, type A","status":"Implementation recorded","files":[]},{"key":104,"id":"NAT00010A.213","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field address suburb: position 213, length 50, type A","status":"Implementation recorded","files":[]},{"key":105,"id":"NAT00010A.263","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field postcode: position 263, length 4, type A","status":"Implementation recorded","files":[]},{"key":106,"id":"NAT00010A.267","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field state identifier: position 267, length 2, type A","status":"Implementation recorded","files":[]},{"key":107,"id":"NAT00010A.269","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field contact name: position 269, length 60, type A (STA field)","status":"Implementation recorded","files":[]},{"key":108,"id":"NAT00010A.329","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field telephone number: position 329, length 20, type A (STA field)","status":"Implementation recorded","files":[]},{"key":109,"id":"NAT00010A.349","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field facsimile number: position 349, length 20, type A (STA field)","status":"Implementation recorded","files":[]},{"key":110,"id":"NAT00010A.369","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00010A field email address: position 369, length 80, type A (STA field)","status":"Implementation recorded","files":[]},{"key":111,"id":"NAT00020.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field training organisation identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":112,"id":"NAT00020.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field delivery location identifier: position 11, length 10, type A","status":"Implementation recorded","files":[]},{"key":113,"id":"NAT00020.21","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field delivery location name: position 21, length 100, type A","status":"Implementation recorded","files":[]},{"key":114,"id":"NAT00020.121","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field postcode: position 121, length 4, type A","status":"Implementation recorded","files":[]},{"key":115,"id":"NAT00020.125","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field state identifier: position 125, length 2, type A","status":"Implementation recorded","files":[]},{"key":116,"id":"NAT00020.127","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field address suburb: position 127, length 50, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":117,"id":"NAT00020.177","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00020 field country identifier: position 177, length 4, type A","status":"Implementation recorded","files":[]},{"key":118,"id":"NAT00030.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field program identifier: position 1, length 10, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":119,"id":"NAT00030.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field program name: position 11, length 100, type A","status":"Implementation recorded","files":[]},{"key":120,"id":"NAT00030.111","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field nominal hours: position 111, length 4, type N","status":"Implementation recorded","files":[]},{"key":121,"id":"NAT00030.115","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field program recognition identifier: position 115, length 2, type A","status":"Implementation recorded","files":[]},{"key":122,"id":"NAT00030.117","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field program level of education identifier: position 117, length 3, type A","status":"Implementation recorded","files":[]},{"key":123,"id":"NAT00030.120","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field program field of education identifier: position 120, length 4, type A","status":"Implementation recorded","files":[]},{"key":124,"id":"NAT00030.124","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field occupation identifier: position 124, length 6, type A","status":"Implementation recorded","files":[]},{"key":125,"id":"NAT00030.130","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030 field vet flag: position 130, length 1, type A","status":"Implementation recorded","files":[]},{"key":126,"id":"NAT00030A.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field program identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":127,"id":"NAT00030A.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field program name: position 11, length 100, type A","status":"Implementation recorded","files":[]},{"key":128,"id":"NAT00030A.111","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field nominal hours: position 111, length 4, type N","status":"Implementation recorded","files":[]},{"key":129,"id":"NAT00030A.115","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field program recognition identifier: position 115, length 2, type A","status":"Implementation recorded","files":[]},{"key":130,"id":"NAT00030A.117","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field program level of education identifier: position 117, length 3, type A","status":"Implementation recorded","files":[]},{"key":131,"id":"NAT00030A.120","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field program field of education identifier: position 120, length 4, type A","status":"Implementation recorded","files":[]},{"key":132,"id":"NAT00030A.124","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field occupation identifier: position 124, length 6, type A","status":"Implementation recorded","files":[]},{"key":133,"id":"NAT00030A.130","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00030A field vet flag: position 130, length 1, type A","status":"Implementation recorded","files":[]},{"key":134,"id":"NAT00060.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 field subject identifier: position 1, length 12, type A","status":"Implementation recorded","files":[]},{"key":135,"id":"NAT00060.13","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 field subject name: position 13, length 100, type A","status":"Implementation recorded","files":[]},{"key":136,"id":"NAT00060.113","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 field subject field of education identifier: position 113, length 6, type A","status":"Implementation recorded","files":[]},{"key":137,"id":"NAT00060.119","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 field vet flag: position 119, length 1, type A","status":"Implementation recorded","files":[]},{"key":138,"id":"NAT00060.120","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00060 field nominal hours: position 120, length 4, type N","status":"Implementation recorded","files":[]},{"key":139,"id":"NAT00080.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field client identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":140,"id":"NAT00080.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field name for encryption: position 11, length 60, type A","status":"Implementation recorded","files":[]},{"key":141,"id":"NAT00080.71","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field highest school level completed identifier: position 71, length 2, type A","status":"Implementation recorded","files":[]},{"key":142,"id":"NAT00080.73","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field gender: position 73, length 1, type A","status":"Implementation recorded","files":[]},{"key":143,"id":"NAT00080.74","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field date of birth: position 74, length 8, type A","status":"Implementation recorded","files":[]},{"key":144,"id":"NAT00080.82","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field postcode: position 82, length 4, type A","status":"Implementation recorded","files":[]},{"key":145,"id":"NAT00080.86","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field indigenous status identifier: position 86, length 1, type A","status":"Implementation recorded","files":[]},{"key":146,"id":"NAT00080.87","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field language identifier: position 87, length 4, type A","status":"Implementation recorded","files":[]},{"key":147,"id":"NAT00080.91","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field labour force status identifier: position 91, length 2, type A","status":"Implementation recorded","files":[]},{"key":148,"id":"NAT00080.93","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field country identifier: position 93, length 4, type A","status":"Implementation recorded","files":[]},{"key":149,"id":"NAT00080.97","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field disability flag: position 97, length 1, type A","status":"Implementation recorded","files":[]},{"key":150,"id":"NAT00080.98","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field prior educational achievement flag: position 98, length 1, type A","status":"Implementation recorded","files":[]},{"key":151,"id":"NAT00080.99","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field at school flag: position 99, length 1, type A","status":"Implementation recorded","files":[]},{"key":152,"id":"NAT00080.100","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field address suburb: position 100, length 50, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":153,"id":"NAT00080.150","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field unique student identifier: position 150, length 10, type A","status":"Implementation recorded","files":["test_nat_files.py","test_students_api.py"]},{"key":154,"id":"NAT00080.160","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field state identifier: position 160, length 2, type A","status":"Implementation recorded","files":[]},{"key":155,"id":"NAT00080.162","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field address building property name: position 162, length 50, type A","status":"Implementation recorded","files":[]},{"key":156,"id":"NAT00080.212","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field address flat unit details: position 212, length 30, type A","status":"Implementation recorded","files":[]},{"key":157,"id":"NAT00080.242","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field address street number: position 242, length 15, type A","status":"Implementation recorded","files":[]},{"key":158,"id":"NAT00080.257","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field address street name: position 257, length 70, type A","status":"Implementation recorded","files":[]},{"key":159,"id":"NAT00080.327","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field survey contact status: position 327, length 1, type A","status":"Implementation recorded","files":[]},{"key":160,"id":"NAT00080.328","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field statistical area level 1 identifier: position 328, length 11, type A (STA field)","status":"Implementation recorded","files":[]},{"key":161,"id":"NAT00080.339","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00080 field statistical area level 2 identifier: position 339, length 9, type A (STA field)","status":"Implementation recorded","files":[]},{"key":162,"id":"NAT00085.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field client identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":163,"id":"NAT00085.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field client title: position 11, length 4, type A","status":"Implementation recorded","files":[]},{"key":164,"id":"NAT00085.15","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field client first given name: position 15, length 40, type A","status":"Implementation recorded","files":["test_nat_files.py","test_nat_import.py"]},{"key":165,"id":"NAT00085.55","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field client family name: position 55, length 40, type A","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":166,"id":"NAT00085.95","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address building property name: position 95, length 50, type A","status":"Implementation recorded","files":[]},{"key":167,"id":"NAT00085.145","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address flat unit details: position 145, length 30, type A","status":"Implementation recorded","files":[]},{"key":168,"id":"NAT00085.175","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address street number: position 175, length 15, type A","status":"Implementation recorded","files":[]},{"key":169,"id":"NAT00085.190","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address street name: position 190, length 70, type A","status":"Implementation recorded","files":[]},{"key":170,"id":"NAT00085.260","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address postal delivery box: position 260, length 22, type A","status":"Implementation recorded","files":[]},{"key":171,"id":"NAT00085.282","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field address suburb: position 282, length 50, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":172,"id":"NAT00085.332","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field postcode: position 332, length 4, type A","status":"Implementation recorded","files":[]},{"key":173,"id":"NAT00085.336","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field state identifier: position 336, length 2, type A","status":"Implementation recorded","files":[]},{"key":174,"id":"NAT00085.338","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field telephone number home: position 338, length 20, type A","status":"Implementation recorded","files":[]},{"key":175,"id":"NAT00085.358","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field telephone number work: position 358, length 20, type A","status":"Implementation recorded","files":[]},{"key":176,"id":"NAT00085.378","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field telephone number mobile: position 378, length 20, type A","status":"Implementation recorded","files":[]},{"key":177,"id":"NAT00085.398","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field email address: position 398, length 80, type A","status":"Implementation recorded","files":[]},{"key":178,"id":"NAT00085.478","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00085 field email address alternative: position 478, length 80, type A","status":"Implementation recorded","files":[]},{"key":179,"id":"NAT00090.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00090 field client identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":180,"id":"NAT00090.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00090 field disability type identifier: position 11, length 2, type A","status":"Implementation recorded","files":[]},{"key":181,"id":"NAT00100.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00100 field client identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":182,"id":"NAT00100.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00100 field prior educational achievement identifier: position 11, length 3, type A","status":"Implementation recorded","files":[]},{"key":183,"id":"NAT00120.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field training organisation identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":184,"id":"NAT00120.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field delivery location identifier: position 11, length 10, type A","status":"Implementation recorded","files":[]},{"key":185,"id":"NAT00120.21","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field client identifier: position 21, length 10, type A","status":"Implementation recorded","files":[]},{"key":186,"id":"NAT00120.31","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field subject identifier: position 31, length 12, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":187,"id":"NAT00120.43","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field program identifier: position 43, length 10, type A","status":"Implementation recorded","files":[]},{"key":188,"id":"NAT00120.53","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field activity start date: position 53, length 8, type D","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":189,"id":"NAT00120.61","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field activity end date: position 61, length 8, type D","status":"Implementation recorded","files":[]},{"key":190,"id":"NAT00120.69","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field delivery mode identifier: position 69, length 3, type A","status":"Implementation recorded","files":[]},{"key":191,"id":"NAT00120.72","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field outcome identifier national: position 72, length 2, type A","status":"Implementation recorded","files":[]},{"key":192,"id":"NAT00120.74","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field funding source national: position 74, length 2, type A","status":"Implementation recorded","files":[]},{"key":193,"id":"NAT00120.76","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field commencing program identifier: position 76, length 1, type A","status":"Implementation recorded","files":[]},{"key":194,"id":"NAT00120.77","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field training contract identifier: position 77, length 10, type A","status":"Implementation recorded","files":[]},{"key":195,"id":"NAT00120.87","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field client identifier apprenticeships: position 87, length 10, type A","status":"Implementation recorded","files":[]},{"key":196,"id":"NAT00120.97","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field study reason identifier: position 97, length 2, type A","status":"Implementation recorded","files":[]},{"key":197,"id":"NAT00120.99","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field vet in schools flag: position 99, length 1, type A","status":"Implementation recorded","files":[]},{"key":198,"id":"NAT00120.100","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field specific funding identifier: position 100, length 10, type A","status":"Implementation recorded","files":[]},{"key":199,"id":"NAT00120.110","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field school type identifier: position 110, length 2, type A","status":"Implementation recorded","files":[]},{"key":200,"id":"NAT00120.112","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field outcome identifier training organisation: position 112, length 3, type A (STA field)","status":"Implementation recorded","files":[]},{"key":201,"id":"NAT00120.115","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field funding source state training authority: position 115, length 3, type A (STA field)","status":"Implementation recorded","files":[]},{"key":202,"id":"NAT00120.118","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field client tuition fee: position 118, length 5, type N (STA field)","status":"Implementation recorded","files":[]},{"key":203,"id":"NAT00120.123","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field fee exemption concession type identifier: position 123, length 2, type A (STA field)","status":"Implementation recorded","files":[]},{"key":204,"id":"NAT00120.125","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field purchasing contract identifier: position 125, length 12, type A (STA field)","status":"Implementation recorded","files":[]},{"key":205,"id":"NAT00120.137","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field purchasing contract schedule identifier: position 137, length 3, type A (STA field)","status":"Implementation recorded","files":[]},{"key":206,"id":"NAT00120.140","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field hours attended: position 140, length 4, type N (STA field)","status":"Implementation recorded","files":[]},{"key":207,"id":"NAT00120.144","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field associated course identifier: position 144, length 10, type A (STA field)","status":"Implementation recorded","files":[]},{"key":208,"id":"NAT00120.154","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field scheduled hours: position 154, length 4, type N (STA field)","status":"Implementation recorded","files":[]},{"key":209,"id":"NAT00120.158","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00120 field predominant delivery mode: position 158, length 1, type A (STA field)","status":"Implementation recorded","files":[]},{"key":210,"id":"NAT00130.1","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field training organisation identifier: position 1, length 10, type A","status":"Implementation recorded","files":[]},{"key":211,"id":"NAT00130.11","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field program identifier: position 11, length 10, type A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":212,"id":"NAT00130.21","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field client identifier: position 21, length 10, type A","status":"Implementation recorded","files":[]},{"key":213,"id":"NAT00130.31","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field date program completed: position 31, length 8, type A","status":"Implementation recorded","files":[]},{"key":214,"id":"NAT00130.39","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field issued flag: position 39, length 1, type A","status":"Implementation recorded","files":[]},{"key":215,"id":"NAT00130.40","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field parchment issue date: position 40, length 8, type D (STA field)","status":"Implementation recorded","files":[]},{"key":216,"id":"NAT00130.48","section":"5 AVETMISS 8.0 NAT files and fields","title":"NAT00130 field parchment number: position 48, length 25, type A (STA field)","status":"Implementation recorded","files":[]},{"key":217,"id":"8.1-version","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"Release 8.1 applies to all training activity from 1 January 2027; AVS shows 8.0 up to 2026 and 8.1 from 2027","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":218,"id":"8.1-NAT00030A-OSCA","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"NAT00030A: OSCA identifier replaces ANZSCO identifier at position 124, length 6; may be blank when the program is on the National Training Register or recognition is 13 or 16","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":219,"id":"8.1-OSCA-rules","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"OSCA identifier rules: 6 digit occupation preferred, may be a higher level; must not be blank for recognition 14 or 15 programs; NONVET when VET flag is N","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":220,"id":"8.1-SFI-71","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"Specific funding identifier 71 Free TAFE Waiver must be reported against Funding source national 11; SFI may now accompany funding source 11 or 13","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py","test_nat_import.py"]},{"key":221,"id":"8.1-PLoE-315","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"Program level of education identifier gains 315 Vocational degree","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py","test_nat_import.py"]},{"key":222,"id":"8.1-NTR-wording","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"All references change from National Register of VET to National Training Register","status":"Partial or context dependent","files":[]},{"key":223,"id":"8.1-ABN","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"Edition 2.4 adds ABN as a data element (Apprentice and Trainee Collection, employers)","status":"Partial or context dependent","files":[]},{"key":224,"id":"8.1-Apprenticeship-id","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"Edition 2.4 adds Apprenticeship identifier national (ADMS, Apprentice and Trainee Collection, from 1 January 2027)","status":"Implementation recorded","files":[]},{"key":225,"id":"8.1-positions","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"All other file positions, lengths and types are unchanged from 8.0","status":"Implementation recorded","files":[]},{"key":226,"id":"8.1-AVS-rules","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"AVS validation rules for release 8.1 collections","status":"Partial or context dependent","files":["test_avs_reference_rules.py"]},{"key":227,"id":"8.1-mapping-guide","section":"6 AVETMISS 8.1 changes (activity from 1 January 2027)","title":"AVETMISS to VET IS mapping guide will add 8.1 updates closer to 1 January 2027","status":"Provider or external action","files":[]},{"key":228,"id":"AVS-NAT00010","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":229,"id":"AVS-NAT00010A","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":230,"id":"AVS-NAT00020","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00020","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":231,"id":"AVS-NAT00030","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":232,"id":"AVS-NAT00030A","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":233,"id":"AVS-NAT00060","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00060","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":234,"id":"AVS-NAT00080","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":235,"id":"AVS-NAT00085","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":236,"id":"AVS-NAT00090","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00090","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":237,"id":"AVS-NAT00100","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00100","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":238,"id":"AVS-NAT00120","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":239,"id":"AVS-NAT00130","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":240,"id":"AVS-total","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-total","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":241,"id":"AVS-NAT00010-3801","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010: Training Organisation Identifier (error rule 3801)","status":"Implementation recorded","files":[]},{"key":242,"id":"AVS-NAT00010-3830-training-organisation-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010-3830-training-organisation-identifier","status":"Implementation recorded","files":[]},{"key":243,"id":"AVS-NAT00010-4613","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010: Training Organisation Identifier (error rule 4613)","status":"Implementation recorded","files":[]},{"key":244,"id":"AVS-NAT00010-4645","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010: Training Organisation Identifier (error rule 4645)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":245,"id":"AVS-NAT00010-4704","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010: Training Organisation Identifier (error rule 4704)","status":"Implementation recorded","files":[]},{"key":246,"id":"AVS-NAT00010-3830-training-organisation-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010-3830-training-organisation-name","status":"Implementation recorded","files":[]},{"key":247,"id":"AVS-NAT00010-4612","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010: Training Organisation Name (error rule 4612)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":248,"id":"AVS-NAT00010A-4652","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Address - Suburb, Locality or Town (error rule 4652)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":249,"id":"AVS-NAT00010A-3830-address-first-line","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010A-3830-address-first-line","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":250,"id":"AVS-NAT00010A-3705","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Postcode (error rule 3705)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":251,"id":"AVS-NAT00010A-3704","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: State Identifier (error rule 3704)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":252,"id":"AVS-NAT00010A-3707","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: State Identifier (error rule 3707)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":253,"id":"AVS-NAT00010A-3801","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Training Organisation Identifier (error rule 3801)","status":"Implementation recorded","files":[]},{"key":254,"id":"AVS-NAT00010A-3830-training-organisation-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010A-3830-training-organisation-identifier","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":255,"id":"AVS-NAT00010A-4613","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Training Organisation Identifier (error rule 4613)","status":"Implementation recorded","files":[]},{"key":256,"id":"AVS-NAT00010A-3830-training-organisation-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010A-3830-training-organisation-name","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":257,"id":"AVS-NAT00010A-4612","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Training Organisation Name (error rule 4612)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":258,"id":"AVS-NAT00010A-4644W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00010A-4644W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":259,"id":"AVS-NAT00010A-4614","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00010A: Training Organisation Type Identifier (error rule 4614)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":260,"id":"AVS-NAT00020-3830-address-suburb-locality-or-town","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00020-3830-address-suburb-locality-or-town","status":"Implementation recorded","files":[]},{"key":261,"id":"AVS-NAT00020-4652","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Address - Suburb, Locality or Town (error rule 4652)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":262,"id":"AVS-NAT00020-4763","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Address - Suburb, Locality or Town (error rule 4763)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":263,"id":"AVS-NAT00020-3715","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Country Identifier (error rule 3715)","status":"Implementation recorded","files":[]},{"key":264,"id":"AVS-NAT00020-4648","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Country Identifier (error rule 4648)","status":"Implementation recorded","files":[]},{"key":265,"id":"AVS-NAT00020-4665","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Country Identifier (error rule 4665)","status":"Implementation recorded","files":[]},{"key":266,"id":"AVS-NAT00020-3705","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Postcode (error rule 3705)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":267,"id":"AVS-NAT00020-4639","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Postcode (error rule 4639)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":268,"id":"AVS-NAT00020-4689","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Postcode (error rule 4689)","status":"Implementation recorded","files":[]},{"key":269,"id":"AVS-NAT00020-3704","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: State Identifier (error rule 3704)","status":"Implementation recorded","files":[]},{"key":270,"id":"AVS-NAT00020-3707","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: State Identifier (error rule 3707)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":271,"id":"AVS-NAT00020-3802","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Training Organisation Delivery Location Identifier (error rule 3802)","status":"Implementation recorded","files":[]},{"key":272,"id":"AVS-NAT00020-3830-training-organisation-delivery-location-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00020-3830-training-organisation-delivery-location-identifier","status":"Implementation recorded","files":[]},{"key":273,"id":"AVS-NAT00020-4500","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Training Organisation Delivery Location Identifier (error rule 4500)","status":"Implementation recorded","files":[]},{"key":274,"id":"AVS-NAT00020-3830-training-organisation-delivery-location-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00020-3830-training-organisation-delivery-location-name","status":"Implementation recorded","files":[]},{"key":275,"id":"AVS-NAT00020-4615","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00020: Training Organisation Identifier (error rule 4615)","status":"Implementation recorded","files":[]},{"key":276,"id":"AVS-NAT00030-3401W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030-3401W","status":"Implementation recorded","files":[]},{"key":277,"id":"AVS-NAT00030-3402","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Nominal Hours (error rule 3402)","status":"Implementation recorded","files":[]},{"key":278,"id":"AVS-NAT00030-3419","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Nominal Hours (error rule 3419)","status":"Implementation recorded","files":[]},{"key":279,"id":"AVS-NAT00030-3830-program-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030-3830-program-name","status":"Implementation recorded","files":[]},{"key":280,"id":"AVS-NAT00030-4727","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Program Name (error rule 4727)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":281,"id":"AVS-NAT00030-3803","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Program identifier (error rule 3803)","status":"Implementation recorded","files":[]},{"key":282,"id":"AVS-NAT00030-3830-program-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030-3830-program-identifier","status":"Implementation recorded","files":[]},{"key":283,"id":"AVS-NAT00030-4501","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Program identifier (error rule 4501)","status":"Implementation recorded","files":[]},{"key":284,"id":"AVS-NAT00030-4726","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030: Program identifier (error rule 4726)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":285,"id":"AVS-NAT00030-4757W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030-4757W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":286,"id":"AVS-NAT00030A-3417","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: ANZSCO Identifier (error rule 3417)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":287,"id":"AVS-NAT00030A-3418","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: ANZSCO Identifier (error rule 3418)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":288,"id":"AVS-NAT00030A-3830-anzsco-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3830-anzsco-identifier","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":289,"id":"AVS-NAT00030A-4646","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: ANZSCO Identifier (error rule 4646)","status":"Implementation recorded","files":[]},{"key":290,"id":"AVS-NAT00030A-3401W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3401W","status":"Implementation recorded","files":[]},{"key":291,"id":"AVS-NAT00030A-3402","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Nominal Hours (error rule 3402)","status":"Implementation recorded","files":[]},{"key":292,"id":"AVS-NAT00030A-3419","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Nominal Hours (error rule 3419)","status":"Implementation recorded","files":[]},{"key":293,"id":"AVS-NAT00030A-3725","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Field of Education Identifier (error rule 3725)","status":"Implementation recorded","files":[]},{"key":294,"id":"AVS-NAT00030A-3830-program-field-of-education-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3830-program-field-of-education-identifier","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":295,"id":"AVS-NAT00030A-3733","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Level of Education Identifier (error rule 3733)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":296,"id":"AVS-NAT00030A-3830-program-level-of-education-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3830-program-level-of-education-identifier","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":297,"id":"AVS-NAT00030A-3848","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Level of Education Identifier (error rule 3848)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":298,"id":"AVS-NAT00030A-3851","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Level of Education Identifier (error rule 3851)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":299,"id":"AVS-NAT00030A-3830-program-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3830-program-name","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":300,"id":"AVS-NAT00030A-4699","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Name (error rule 4699)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":301,"id":"AVS-NAT00030A-3709","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Recognition Identifier (error rule 3709)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":302,"id":"AVS-NAT00030A-4519W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-4519W","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":303,"id":"AVS-NAT00030A-4681","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program Recognition Identifier (error rule 4681)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":304,"id":"AVS-NAT00030A-3803","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program identifier (error rule 3803)","status":"Implementation recorded","files":[]},{"key":305,"id":"AVS-NAT00030A-3830-program-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-3830-program-identifier","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":306,"id":"AVS-NAT00030A-4501","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program identifier (error rule 4501)","status":"Implementation recorded","files":[]},{"key":307,"id":"AVS-NAT00030A-4741","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: Program identifier (error rule 4741)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":308,"id":"AVS-NAT00030A-4757W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00030A-4757W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":309,"id":"AVS-NAT00030A-3004","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: VET Flag (error rule 3004)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":310,"id":"AVS-NAT00030A-4617","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00030A: VET Flag (error rule 4617)","status":"Implementation recorded","files":[]},{"key":311,"id":"AVS-NAT00060-3404W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00060-3404W","status":"Implementation recorded","files":[]},{"key":312,"id":"AVS-NAT00060-3420","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Nominal Hours (error rule 3420)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":313,"id":"AVS-NAT00060-4723","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Nominal Hours (error rule 4723)","status":"Implementation recorded","files":[]},{"key":314,"id":"AVS-NAT00060-3720","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Subject Field of Education Identifier (error rule 3720)","status":"Implementation recorded","files":[]},{"key":315,"id":"AVS-NAT00060-3830-subject-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00060-3830-subject-name","status":"Implementation recorded","files":[]},{"key":316,"id":"AVS-NAT00060-4722","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Subject Name (error rule 4722)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":317,"id":"AVS-NAT00060-3808","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Subject identifier (error rule 3808)","status":"Implementation recorded","files":[]},{"key":318,"id":"AVS-NAT00060-3830-subject-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00060-3830-subject-identifier","status":"Implementation recorded","files":[]},{"key":319,"id":"AVS-NAT00060-4502","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Subject identifier (error rule 4502)","status":"Implementation recorded","files":[]},{"key":320,"id":"AVS-NAT00060-4728","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: Subject identifier (error rule 4728)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":321,"id":"AVS-NAT00060-3004","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00060: VET Flag (error rule 3004)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":322,"id":"AVS-NAT00080-3830-address-suburb-locality-or-town","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-3830-address-suburb-locality-or-town","status":"Implementation recorded","files":[]},{"key":323,"id":"AVS-NAT00080-4652","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Address - Suburb, Locality or Town (error rule 4652)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":324,"id":"AVS-NAT00080-4764W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4764W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":325,"id":"AVS-NAT00080-3830-address-street-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-3830-address-street-name","status":"Implementation recorded","files":[]},{"key":326,"id":"AVS-NAT00080-3830-address-street-number","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-3830-address-street-number","status":"Implementation recorded","files":[]},{"key":327,"id":"AVS-NAT00080-3009","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: At School Flag (error rule 3009)","status":"Implementation recorded","files":[]},{"key":328,"id":"AVS-NAT00080-3745","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: At School Flag (error rule 3745)","status":"Implementation recorded","files":[]},{"key":329,"id":"AVS-NAT00080-3840W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-3840W","status":"Implementation recorded","files":[]},{"key":330,"id":"AVS-NAT00080-3811","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Client identifier (error rule 3811)","status":"Implementation recorded","files":[]},{"key":331,"id":"AVS-NAT00080-4503","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Client identifier (error rule 4503)","status":"Implementation recorded","files":[]},{"key":332,"id":"AVS-NAT00080-4619","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Client identifier (error rule 4619)","status":"Implementation recorded","files":[]},{"key":333,"id":"AVS-NAT00080-4649","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Client identifier (error rule 4649)","status":"Implementation recorded","files":[]},{"key":334,"id":"AVS-NAT00080-4692W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4692W","status":"Implementation recorded","files":[]},{"key":335,"id":"AVS-NAT00080-4730","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Client identifier (error rule 4730)","status":"Implementation recorded","files":[]},{"key":336,"id":"AVS-NAT00080-3715","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Country Identifier (error rule 3715)","status":"Implementation recorded","files":[]},{"key":337,"id":"AVS-NAT00080-3201","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Date of Birth (error rule 3201)","status":"Implementation recorded","files":[]},{"key":338,"id":"AVS-NAT00080-3204","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Date of Birth (error rule 3204)","status":"Implementation recorded","files":[]},{"key":339,"id":"AVS-NAT00080-3234","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Date of Birth (error rule 3234)","status":"Implementation recorded","files":[]},{"key":340,"id":"AVS-NAT00080-3835","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Date of Birth (error rule 3835)","status":"Implementation recorded","files":[]},{"key":341,"id":"AVS-NAT00080-3010","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Disability Flag (error rule 3010)","status":"Implementation recorded","files":[]},{"key":342,"id":"AVS-NAT00080-4000","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Disability Flag (error rule 4000)","status":"Implementation recorded","files":[]},{"key":343,"id":"AVS-NAT00080-4015","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Disability Flag (error rule 4015)","status":"Implementation recorded","files":[]},{"key":344,"id":"AVS-NAT00080-3007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Gender (error rule 3007)","status":"Implementation recorded","files":[]},{"key":345,"id":"AVS-NAT00080-3740","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Highest School Level Completed Identifier (error rule 3740)","status":"Implementation recorded","files":[]},{"key":346,"id":"AVS-NAT00080-3008","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Indigenous Status Identifier (error rule 3008)","status":"Implementation recorded","files":[]},{"key":347,"id":"AVS-NAT00080-4618W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4618W","status":"Implementation recorded","files":[]},{"key":348,"id":"AVS-NAT00080-3723","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Labour Force Status Identifier (error rule 3723)","status":"Implementation recorded","files":[]},{"key":349,"id":"AVS-NAT00080-3726","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Language identifier (error rule 3726)","status":"Implementation recorded","files":[]},{"key":350,"id":"AVS-NAT00080-3853","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Name for Encryption (error rule 3853)","status":"Implementation recorded","files":[]},{"key":351,"id":"AVS-NAT00080-4734W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4734W","status":"Implementation recorded","files":[]},{"key":352,"id":"AVS-NAT00080-3705","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Postcode (error rule 3705)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":353,"id":"AVS-NAT00080-3013","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Prior Educational Achievement Flag (error rule 3013)","status":"Implementation recorded","files":[]},{"key":354,"id":"AVS-NAT00080-3832","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Prior Educational Achievement Flag (error rule 3832)","status":"Implementation recorded","files":[]},{"key":355,"id":"AVS-NAT00080-4001","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Prior Educational Achievement Flag (error rule 4001)","status":"Implementation recorded","files":[]},{"key":356,"id":"AVS-NAT00080-4016","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Prior Educational Achievement Flag (error rule 4016)","status":"Implementation recorded","files":[]},{"key":357,"id":"AVS-NAT00080-3707","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: State Identifier (error rule 3707)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":358,"id":"AVS-NAT00080-3708","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: State Identifier (error rule 3708)","status":"Implementation recorded","files":[]},{"key":359,"id":"AVS-NAT00080-4701","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: State Identifier (error rule 4701)","status":"Implementation recorded","files":[]},{"key":360,"id":"AVS-NAT00080-4731","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Survey contact status (error rule 4731)","status":"Implementation recorded","files":[]},{"key":361,"id":"AVS-NAT00080-4732","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Survey contact status (error rule 4732)","status":"Implementation recorded","files":[]},{"key":362,"id":"AVS-NAT00080-4733","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Survey contact status (error rule 4733)","status":"Implementation recorded","files":[]},{"key":363,"id":"AVS-NAT00080-3864","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 3864)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":364,"id":"AVS-NAT00080-3865","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 3865)","status":"Implementation recorded","files":[]},{"key":365,"id":"AVS-NAT00080-3867","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 3867)","status":"Implementation recorded","files":[]},{"key":366,"id":"AVS-NAT00080-3868","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 3868)","status":"Implementation recorded","files":[]},{"key":367,"id":"AVS-NAT00080-4735","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 4735)","status":"Implementation recorded","files":[]},{"key":368,"id":"AVS-NAT00080-4744","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (warning rule 4744)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":369,"id":"AVS-NAT00080-4744W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4744W","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":370,"id":"AVS-NAT00080-4746W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00080-4746W","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":371,"id":"AVS-NAT00080-4750","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00080: Unique student identifier (error rule 4750)","status":"Implementation recorded","files":[]},{"key":372,"id":"AVS-NAT00085-3830-address-suburb-locality-or-town","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-3830-address-suburb-locality-or-town","status":"Implementation recorded","files":[]},{"key":373,"id":"AVS-NAT00085-4630","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Address - Suburb, Locality or Town (error rule 4630)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":374,"id":"AVS-NAT00085-4652","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Address - Suburb, Locality or Town (error rule 4652)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":375,"id":"AVS-NAT00085-3830-address-street-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-3830-address-street-name","status":"Implementation recorded","files":[]},{"key":376,"id":"AVS-NAT00085-3837","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Address Street Name (error rule 3837)","status":"Implementation recorded","files":[]},{"key":377,"id":"AVS-NAT00085-3833W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-3833W","status":"Implementation recorded","files":[]},{"key":378,"id":"AVS-NAT00085-4631-client-first-given-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4631-client-first-given-name","status":"Implementation recorded","files":[]},{"key":379,"id":"AVS-NAT00085-4631-client-last-name","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4631-client-last-name","status":"Implementation recorded","files":[]},{"key":380,"id":"AVS-NAT00085-4637","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Client Last Name (error rule 4637)","status":"Implementation recorded","files":[]},{"key":381,"id":"AVS-NAT00085-3811","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Client identifier (error rule 3811)","status":"Implementation recorded","files":[]},{"key":382,"id":"AVS-NAT00085-4007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Client identifier (error rule 4007)","status":"Implementation recorded","files":[]},{"key":383,"id":"AVS-NAT00085-4635-email-address","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4635-email-address","status":"Implementation recorded","files":[]},{"key":384,"id":"AVS-NAT00085-4635-email-address-alternative","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4635-email-address-alternative","status":"Implementation recorded","files":[]},{"key":385,"id":"AVS-NAT00085-3705","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Postcode (error rule 3705)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":386,"id":"AVS-NAT00085-3706","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: Postcode (error rule 3706)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":387,"id":"AVS-NAT00085-3707","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: State Identifier (error rule 3707)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":388,"id":"AVS-NAT00085-4701","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00085: State Identifier (error rule 4701)","status":"Implementation recorded","files":[]},{"key":389,"id":"AVS-NAT00085-4633-telephone-number","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4633-telephone-number","status":"Implementation recorded","files":[]},{"key":390,"id":"AVS-NAT00085-4633-telephone-number-2","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4633-telephone-number-2","status":"Implementation recorded","files":[]},{"key":391,"id":"AVS-NAT00085-4633-telephone-number-3","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4633-telephone-number-3","status":"Implementation recorded","files":[]},{"key":392,"id":"AVS-NAT00085-4690W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00085-4690W","status":"Implementation recorded","files":[]},{"key":393,"id":"AVS-NAT00090-3812","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00090: Client identifier (error rule 3812)","status":"Implementation recorded","files":[]},{"key":394,"id":"AVS-NAT00090-4000","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00090: Client identifier (error rule 4000)","status":"Implementation recorded","files":[]},{"key":395,"id":"AVS-NAT00090-4007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00090: Client identifier (error rule 4007)","status":"Implementation recorded","files":[]},{"key":396,"id":"AVS-NAT00090-3718","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00090: Disability Type Identifier (error rule 3718)","status":"Implementation recorded","files":[]},{"key":397,"id":"AVS-NAT00100-3813","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00100: Client identifier (error rule 3813)","status":"Implementation recorded","files":[]},{"key":398,"id":"AVS-NAT00100-4001","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00100: Client identifier (error rule 4001)","status":"Implementation recorded","files":[]},{"key":399,"id":"AVS-NAT00100-4007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00100: Client identifier (error rule 4007)","status":"Implementation recorded","files":[]},{"key":400,"id":"AVS-NAT00100-3731","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00100: Prior Educational Achievement Identifier (error rule 3731)","status":"Implementation recorded","files":[]},{"key":401,"id":"AVS-NAT00120-3213","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity End Date (error rule 3213)","status":"Implementation recorded","files":[]},{"key":402,"id":"AVS-NAT00120-3214W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-3214W","status":"Implementation recorded","files":[]},{"key":403,"id":"AVS-NAT00120-3251","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity End Date (error rule 3251)","status":"Implementation recorded","files":[]},{"key":404,"id":"AVS-NAT00120-3252","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity End Date (error rule 3252)","status":"Implementation recorded","files":[]},{"key":405,"id":"AVS-NAT00120-3253","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity End Date (error rule 3253)","status":"Implementation recorded","files":[]},{"key":406,"id":"AVS-NAT00120-4737W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4737W","status":"Implementation recorded","files":[]},{"key":407,"id":"AVS-NAT00120-4738W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4738W","status":"Implementation recorded","files":[]},{"key":408,"id":"AVS-NAT00120-4739W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4739W","status":"Implementation recorded","files":[]},{"key":409,"id":"AVS-NAT00120-3210","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity Start Date (error rule 3210)","status":"Implementation recorded","files":[]},{"key":410,"id":"AVS-NAT00120-3211","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity Start Date (warning rule 3211)","status":"Implementation recorded","files":[]},{"key":411,"id":"AVS-NAT00120-3211W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-3211W","status":"Implementation recorded","files":[]},{"key":412,"id":"AVS-NAT00120-3212","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity Start Date (error rule 3212)","status":"Implementation recorded","files":[]},{"key":413,"id":"AVS-NAT00120-3216","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity Start Date (error rule 3216)","status":"Implementation recorded","files":[]},{"key":414,"id":"AVS-NAT00120-4752","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Activity Start Date (error rule 4752)","status":"Implementation recorded","files":[]},{"key":415,"id":"AVS-NAT00120-4759W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4759W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":416,"id":"AVS-NAT00120-4760W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4760W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":417,"id":"AVS-NAT00120-4624","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Client Identifier - Apprenticeships (error rule 4624)","status":"Implementation recorded","files":[]},{"key":418,"id":"AVS-NAT00120-4007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Client identifier (error rule 4007)","status":"Implementation recorded","files":[]},{"key":419,"id":"AVS-NAT00120-4693","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Client identifier (error rule 4693)","status":"Implementation recorded","files":[]},{"key":420,"id":"AVS-NAT00120-4736","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Client identifier (error rule 4736)","status":"Implementation recorded","files":[]},{"key":421,"id":"AVS-NAT00120-3261","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Delivery Mode Identifier (error rule 3261)","status":"Implementation recorded","files":[]},{"key":422,"id":"AVS-NAT00120-3716","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Delivery Mode Identifier (error rule 3716)","status":"Implementation recorded","files":[]},{"key":423,"id":"AVS-NAT00120-3742","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 3742)","status":"Implementation recorded","files":[]},{"key":424,"id":"AVS-NAT00120-3747","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 3747)","status":"Implementation recorded","files":[]},{"key":425,"id":"AVS-NAT00120-4684","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 4684)","status":"Implementation recorded","files":[]},{"key":426,"id":"AVS-NAT00120-4700","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 4700)","status":"Implementation recorded","files":[]},{"key":427,"id":"AVS-NAT00120-4725W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4725W","status":"Implementation recorded","files":[]},{"key":428,"id":"AVS-NAT00120-4751","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 4751)","status":"Implementation recorded","files":[]},{"key":429,"id":"AVS-NAT00120-4762","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Funding Source - national (error rule 4762)","status":"Implementation recorded","files":[]},{"key":430,"id":"AVS-NAT00120-3260","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Outcome identifier - national (error rule 3260)","status":"Implementation recorded","files":[]},{"key":431,"id":"AVS-NAT00120-3727","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Outcome identifier - national (error rule 3727)","status":"Implementation recorded","files":[]},{"key":432,"id":"AVS-NAT00120-3830","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Outcome identifier - national (error rule 3830)","status":"Implementation recorded","files":[]},{"key":433,"id":"AVS-NAT00120-4747","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Outcome identifier - national (error rule 4747)","status":"Implementation recorded","files":[]},{"key":434,"id":"AVS-NAT00120-4006","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Program identifier (error rule 4006)","status":"Implementation recorded","files":[]},{"key":435,"id":"AVS-NAT00120-4643","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Program identifier (error rule 4643)","status":"Implementation recorded","files":[]},{"key":436,"id":"AVS-NAT00120-4748","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Program identifier (error rule 4748)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":437,"id":"AVS-NAT00120-4685","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Specific Funding Identifier (error rule 4685)","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":438,"id":"AVS-NAT00120-4694","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Specific Funding Identifier (error rule 4694)","status":"Implementation recorded","files":[]},{"key":439,"id":"AVS-NAT00120-4696W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4696W","status":"Implementation recorded","files":[]},{"key":440,"id":"AVS-NAT00120-4651","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Study Reason Identifier (error rule 4651)","status":"Implementation recorded","files":[]},{"key":441,"id":"AVS-NAT00120-3869","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (error rule 3869)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":442,"id":"AVS-NAT00120-3870","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (error rule 3870)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":443,"id":"AVS-NAT00120-4010","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (error rule 4010)","status":"Implementation recorded","files":[]},{"key":444,"id":"AVS-NAT00120-4729","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (error rule 4729)","status":"Implementation recorded","files":[]},{"key":445,"id":"AVS-NAT00120-4749","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (error rule 4749)","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":446,"id":"AVS-NAT00120-4754","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (warning rule 4754)","status":"Implementation recorded","files":[]},{"key":447,"id":"AVS-NAT00120-4754W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4754W","status":"Implementation recorded","files":[]},{"key":448,"id":"AVS-NAT00120-4755","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Subject identifier (warning rule 4755)","status":"Implementation recorded","files":[]},{"key":449,"id":"AVS-NAT00120-4755W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4755W","status":"Implementation recorded","files":[]},{"key":450,"id":"AVS-NAT00120-4756W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4756W","status":"Implementation recorded","files":[]},{"key":451,"id":"AVS-NAT00120-4758W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4758W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":452,"id":"AVS-NAT00120-4620","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Training Contract Identifier (error rule 4620)","status":"Implementation recorded","files":[]},{"key":453,"id":"AVS-NAT00120-4622W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00120-4622W","status":"Implementation recorded","files":[]},{"key":454,"id":"AVS-NAT00120-4623","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Training Contract Identifier (error rule 4623)","status":"Implementation recorded","files":[]},{"key":455,"id":"AVS-NAT00120-4011","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Training Organisation Delivery Location Identifier (error rule 4011)","status":"Implementation recorded","files":[]},{"key":456,"id":"AVS-NAT00120-4765","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: Training Organisation Delivery Location Identifier (error rule 4765)","status":"Implementation recorded","files":[]},{"key":457,"id":"AVS-NAT00120-4691","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00120: VET In Schools Flag (error rule 4691)","status":"Implementation recorded","files":[]},{"key":458,"id":"AVS-NAT00130-4007","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Client identifier (error rule 4007)","status":"Implementation recorded","files":[]},{"key":459,"id":"AVS-NAT00130-4017","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Client identifier (error rule 4017)","status":"Implementation recorded","files":[]},{"key":460,"id":"AVS-NAT00130-4518-client-identifier","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-4518-client-identifier","status":"Implementation recorded","files":[]},{"key":461,"id":"AVS-NAT00130-4518-client-identifier-2","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-4518-client-identifier-2","status":"Implementation recorded","files":[]},{"key":462,"id":"AVS-NAT00130-3217","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Date Program Completed (error rule 3217)","status":"Implementation recorded","files":[]},{"key":463,"id":"AVS-NAT00130-3241-date-program-completed","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-3241-date-program-completed","status":"Implementation recorded","files":[]},{"key":464,"id":"AVS-NAT00130-3241-date-program-completed-2","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-3241-date-program-completed-2","status":"Implementation recorded","files":[]},{"key":465,"id":"AVS-NAT00130-3242","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Date Program Completed (warning rule 3242)","status":"Implementation recorded","files":[]},{"key":466,"id":"AVS-NAT00130-3242W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-3242W","status":"Implementation recorded","files":[]},{"key":467,"id":"AVS-NAT00130-4753","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Date Program Completed (error rule 4753)","status":"Implementation recorded","files":[]},{"key":468,"id":"AVS-NAT00130-4761W","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"Captured validation catalogue group: AVS-NAT00130-4761W","status":"Implementation recorded","files":["test_avs_reference_rules.py"]},{"key":469,"id":"AVS-NAT00130-3250","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Issued Flag (error rule 3250)","status":"Implementation recorded","files":[]},{"key":470,"id":"AVS-NAT00130-4006","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Program identifier (error rule 4006)","status":"Implementation recorded","files":[]},{"key":471,"id":"AVS-NAT00130-4009","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Program identifier (error rule 4009)","status":"Implementation recorded","files":[]},{"key":472,"id":"AVS-NAT00130-4526","section":"7 AVS validation rules (VET Provider Collection 8.0)","title":"NAT00130: Training Organisation Identifier (error rule 4526)","status":"Implementation recorded","files":[]},{"key":473,"id":"AVS-registration","section":"8 AVS and Data Entry Tool workflow features","title":"Register the RTO for AVS and maintain users and roles (Data Submitter, Organisation Administrator, Primary Contact)","status":"Provider or external action","files":[]},{"key":474,"id":"AVS-collection-details","section":"8 AVS and Data Entry Tool workflow features","title":"Collection Details: organisation, type VET Provider Collection, year 2014 onwards, period Jan-Mar, Jan-Jun, Jan-Sep, Jan-Dec, AVETMISS version, derived period dates","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":475,"id":"AVS-options","section":"8 AVS and Data Entry Tool workflow features","title":"The four processing options: Validate RTO collection, Suppress data quality checks, Allow continuing outcomes for activity ending this year, Enforce collection period dates","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":476,"id":"AVS-upload","section":"8 AVS and Data Entry Tool workflow features","title":"Add Files and Upload Files: the ten NAT files (NAT00010A and NAT00030A when applicable)","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":477,"id":"AVS-preliminary","section":"8 AVS and Data Entry Tool workflow features","title":"Preliminary Data Checks with the nine exclusions (cross reference, NAT00030, NAT00030A, NAT00060, activity end date, activity start date, apprenticeships, outcome identifier, blank outcome identifier); lenient rules report as warnings","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":478,"id":"AVS-validate","section":"8 AVS and Data Entry Tool workflow features","title":"Validate: NCVER rule numbers, fields and messages; statuses Validated, Error, Error limit reached, Invalid format, Part validated, Quality exemption approved","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_avs_reference_rules.py"]},{"key":479,"id":"AVS-quality-checks","section":"8 AVS and Data Entry Tool workflow features","title":"Export Quality Checks (data quality workbook) and the data quality results AVS produces","status":"Partial or context dependent","files":["test_avs_reports.py"]},{"key":480,"id":"AVS-finalise","section":"8 AVS and Data Entry Tool workflow features","title":"Finalise Submission: submitter name and position, declaration; CEO confirmation email","status":"Provider or external action","files":["test_avetmiss_collections.py"]},{"key":481,"id":"AVS-record-result","section":"8 AVS and Data Entry Tool workflow features","title":"Collection History status after submission (collection number, status, submitted date)","status":"Implementation recorded","files":[]},{"key":482,"id":"AVS-exports","section":"8 AVS and Data Entry Tool workflow features","title":"Export Summary, Export Details and Export AVS Rules downloads","status":"Implementation recorded","files":[]},{"key":483,"id":"AVS-nil-return","section":"8 AVS and Data Entry Tool workflow features","title":"Nil Returns screen: organisation, type, year, period, declaration (no training, none by a third party, no AQF certification issued), submitter name and position","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":484,"id":"AVS-usi-transcript-tool","section":"8 AVS and Data Entry Tool workflow features","title":"USI Transcript Update Tool inside AVS (search by USI, pending updates, submit updates, full date program completed)","status":"Implementation recorded","files":["test_usi_transcript_updates.py"]},{"key":485,"id":"AVS-duplicate-clients","section":"8 AVS and Data Entry Tool workflow features","title":"Duplicate Clients report (APP70 series criteria) and Duplicate Employers report","status":"Implementation recorded","files":["test_avs_reports.py"]},{"key":486,"id":"AVS-profile-frequency","section":"8 AVS and Data Entry Tool workflow features","title":"Profile / Frequency report per collection and file","status":"Implementation recorded","files":["test_avs_reports.py"]},{"key":487,"id":"AVS-submissions-report","section":"8 AVS and Data Entry Tool workflow features","title":"Submissions report (type, year, period, submitter name and position, date time)","status":"Implementation recorded","files":[]},{"key":488,"id":"AVS-oauth","section":"8 AVS and Data Entry Tool workflow features","title":"AVS OAuth device code token (Activate OAuth Token) for programmatic upload","status":"Partial or context dependent","files":["test_avs_upload_client.py"]},{"key":489,"id":"AVS-annual-window","section":"8 AVS and Data Entry Tool workflow features","title":"Annual Jan-Dec collection open 1 January to 28 February; quarterly windows open four weeks after quarter end for two weeks","status":"Implementation recorded","files":[]},{"key":490,"id":"DET-forms","section":"8 AVS and Data Entry Tool workflow features","title":"Data Entry Tool maintenance forms: Training organisation, Delivery location, Program, Subject, Client (personal, address, postal, background, disability, prior education), Client training activity, Program completion","status":"Implementation recorded","files":["test_avetmiss_preview.py"]},{"key":491,"id":"DET-code-lists","section":"8 AVS and Data Entry Tool workflow features","title":"DET dropdown code lists and field length limits","status":"Implementation recorded","files":["test_avetmiss_collections.py"]},{"key":492,"id":"DET-export-funding","section":"8 AVS and Data Entry Tool workflow features","title":"DET export choice: all, fee for service only, or publicly funded only","status":"Implementation recorded","files":["test_nat_files.py"]},{"key":493,"id":"DET-export-contact","section":"8 AVS and Data Entry Tool workflow features","title":"DET export choice: include client postal data (NAT00085)","status":"Implementation recorded","files":["test_avetmiss_collections.py","test_nat_files.py"]},{"key":494,"id":"DET-export-format","section":"8 AVS and Data Entry Tool workflow features","title":"DET exports TXT (AVS accepts TXT only) or XML","status":"Implementation recorded","files":[]},{"key":495,"id":"DET-supplementary","section":"8 AVS and Data Entry Tool workflow features","title":"DET cannot produce NAT00010A or NAT00030A","status":"Implementation recorded","files":[]},{"key":496,"id":"NAT-import","section":"8 AVS and Data Entry Tool workflow features","title":"Import an existing NAT file set (previous submissions or a legacy SMS export) into the SMS","status":"Implementation recorded","files":["test_nat_import.py"]},{"key":497,"id":"AVS-compliant-register","section":"8 AVS and Data Entry Tool workflow features","title":"AVETMISS Compliant Software Register vendor registration after a clean AVS validation; trademark attribution rule","status":"Provider or external action","files":[]},{"key":498,"id":"DELN0001","section":"9 VET Information Standard 1.0.0","title":"Address line 1 description (addressLine1Description), grouping Training organisation, Part A, width 50, type Alphanumeric; published rules: BRDG00001, BRDG00204","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":499,"id":"DELN0002","section":"9 VET Information Standard 1.0.0","title":"Address line 2 description (addressLine2Description), grouping Training organisation, Part A, width 50, type Alphanumeric; published rules: BRDG00205","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":500,"id":"DELN0004","section":"9 VET Information Standard 1.0.0","title":"Flat or unit details (flatOrUnitDetails), grouping Student, Part A, width 30, type Alphanumeric; published rules: BRDG00228, BRDG00229, BRDG00230","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":501,"id":"DELN0005","section":"9 VET Information Standard 1.0.0","title":"Building type (buildingType), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDG00208, BRDG00209, BRDG00210, BRDG00211","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":502,"id":"DELN0006","section":"9 VET Information Standard 1.0.0","title":"Building property name (buildingPropertyName), grouping Student, Part A, width 50, type Alphanumeric; published rules: BRDG00206, BRDG00207, BRDG00212","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":503,"id":"DELN0009","section":"9 VET Information Standard 1.0.0","title":"Email address primary (emailAddressPrimary), grouping Student, Part A, width 80, type Alphanumeric; published rules: BRDG00017, BRDG00224, BRDG00332, BRDQ00015","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":504,"id":"DELN0010","section":"9 VET Information Standard 1.0.0","title":"Floor level number (floorLevelNumber), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDG00231, BRDG00232, BRDG00233","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":505,"id":"DELN0011","section":"9 VET Information Standard 1.0.0","title":"Delivery location name (deliveryLocationName), grouping Delivery location, Part A, width 100, type Alphanumeric; published rules: BRDE00008","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":506,"id":"DELN0012","section":"9 VET Information Standard 1.0.0","title":"Delivery location identifier (deliveryLocationIdentifier), grouping Delivery location, Part A, width 10, type Alphanumeric; published rules: BRDE00005","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":507,"id":"DELN0015","section":"9 VET Information Standard 1.0.0","title":"Lot number (lotNumber), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDG00245, BRDG00246, BRDG00247, BRDG00248","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":508,"id":"DELN0017","section":"9 VET Information Standard 1.0.0","title":"Training venue type (trainingVenueType), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00127, BRDG00164, BRDG00173, BRDG00200, BRDG00346","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":509,"id":"DELN0018","section":"9 VET Information Standard 1.0.0","title":"Post box or bag number (postBoxOrBagNumber), grouping Student, Part A, width 22, type Alphanumeric; published rules: BRDG00260, BRDG00334","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":510,"id":"DELN0019","section":"9 VET Information Standard 1.0.0","title":"Postal delivery type (postalDeliveryType), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00261","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":511,"id":"DELN0020","section":"9 VET Information Standard 1.0.0","title":"Postcode (postcode), grouping Delivery location/Student/Training organisation, Part A, width 25, type Alphanumeric; published rules: BRDG00010, BRDG00015, BRDG00022, BRDG00032, BRDG00174, BRDG00182, BRDG00183, BRDG00194, BRDG00262, BRDG00263, BRDG00264, BRDG00265, BRDG00266, BRDQ00014, BRDQ00103","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":512,"id":"DELN0021","section":"9 VET Information Standard 1.0.0","title":"Predominant training venue (predominantTrainingVenue), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00035, BRDG00340, BRDG00344, BRDG00364","status":"Implementation recorded","files":["test_enrolments_api.py","test_vetis_element_rules.py"]},{"key":513,"id":"DELN0022","section":"9 VET Information Standard 1.0.0","title":"Location usage type code (locationUsageType), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00141, BRDG00156, BRDG00244","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":514,"id":"DELN0025","section":"9 VET Information Standard 1.0.0","title":"State code (stateCode), grouping Delivery location/Student/Training organisation, Part A, width n/a, type Alphanumeric; published rules: BRDG00012, BRDG00013, BRDG00014, BRDG00105, BRDG00185, BRDG00186, BRDG00187, BRDG00282, BRDG00283, BRDG00284, BRDG00285, BRDG00286, BRDG00287","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":515,"id":"DELN0026","section":"9 VET Information Standard 1.0.0","title":"Street name (streetName), grouping Student, Part A, width 70, type Alphanumeric; published rules: BRDG00106, BRDG00289, BRDG00290, BRDG00291","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":516,"id":"DELN0027","section":"9 VET Information Standard 1.0.0","title":"Street property number (streetPropertyNumber), grouping Student, Part A, width 15, type Alphanumeric; published rules: BRDG00107, BRDG00288, BRDG00292, BRDG00293","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":517,"id":"DELN0028","section":"9 VET Information Standard 1.0.0","title":"Street type (streetType), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDG00294, BRDG00295, BRDG00296","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":518,"id":"DELN0029","section":"9 VET Information Standard 1.0.0","title":"Suburb or town name (suburbOrTownName), grouping Delivery location/Student/Training organisation, Part A, width 100, type Alphanumeric; published rules: BRDE00030, BRDG00188, BRDG00189, BRDG00308, BRDG00309, BRDG00310, BRDG00311, BRDG00312, BRDQ00103","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":519,"id":"DELN0031_01","section":"9 VET Information Standard 1.0.0","title":"Home telephone number (homeTelephoneNumber), grouping Student, Part A, width 20, type Alphanumeric; published rules: BRDE00012, BRDG00236","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":520,"id":"DELN0031_02","section":"9 VET Information Standard 1.0.0","title":"Mobile telephone number (mobileTelephoneNumber), grouping Student, Part A, width 20, type Alphanumeric; published rules: BRDE00013, BRDG00249","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":521,"id":"DELN0031_03","section":"9 VET Information Standard 1.0.0","title":"Work telephone number (workTelephoneNumber), grouping Student, Part A, width 20, type Alphanumeric; published rules: BRDE00032, BRDG00329","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":522,"id":"DELN0032_01","section":"9 VET Information Standard 1.0.0","title":"Country of birth code (countryOfBirthCode), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDE00037, BRDG00115, BRDG00218, BRDQ00005","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":523,"id":"DELN0032_02","section":"9 VET Information Standard 1.0.0","title":"Country of address code (countryOfAddressCode), grouping Delivery location/Student, Part A, width 25, type Alphanumeric; published rules: BRDE00033, BRDE00034, BRDG00005, BRDG00023, BRDG00111, BRDG00125, BRDG00214, BRDG00215, BRDG00216, BRDG00217","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":524,"id":"DELN0033","section":"9 VET Information Standard 1.0.0","title":"Email address secondary (emailAddressSecondary), grouping Student, Part A, width 80, type Alphanumeric; published rules: BRDG00223, BRDG00333","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":525,"id":"DELN0036","section":"9 VET Information Standard 1.0.0","title":"Delivery location UID (deliveryLocationUID), grouping Delivery location/Subject enrolment, Part A, width 38, type Alphanumeric; published rules: BRDE00006, BRDE00007, BRDG00009, BRDG00341","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":526,"id":"DEOF0003","section":"9 VET Information Standard 1.0.0","title":"Parent program of subject offering UID (parentProgramOfferingUID), grouping Program enrolment/Subject offering, Part A, width 38, type Alphanumeric; published rules: BRDE00023, BRDG00357","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":527,"id":"DEPR0001","section":"9 VET Information Standard 1.0.0","title":"Occupation identifier (occupationIdentifier), grouping Program, Part A, width 50, type Alphanumeric; published rules: BRDE00014, BRDG00028, BRDG00029, BRDG00099, BRDG00252","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":528,"id":"DEPR0002","section":"9 VET Information Standard 1.0.0","title":"Subject field of education code (subjectFieldOfEducationCode), grouping Subject, Part A, width 25, type Alphanumeric; published rules: BRDE00035, BRDG00167, BRDG00307","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":529,"id":"DEPR0003","section":"9 VET Information Standard 1.0.0","title":"Program level of education (programLevelOfEducation), grouping Program, Part A, width n/a, type Alphanumeric; published rules: BRDG00085, BRDG00086, BRDG00087, BRDG00270","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":530,"id":"DEPR0004","section":"9 VET Information Standard 1.0.0","title":"Program field of education code (programFieldOfEducationCode), grouping Program, Part A, width 25, type Alphanumeric; published rules: BRDE00036, BRDG00084, BRDG00269","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":531,"id":"DEPR0005","section":"9 VET Information Standard 1.0.0","title":"Nominal hours (nominalHours), grouping Program/Subject, Part A, width n/a, type Numeric; published rules: BRDG00025, BRDG00026, BRDG00027, BRDG00089, BRDG00090, BRDG00250, BRDG00251, BRDG00336, BRDG00337, BRDQ00012, BRDQ00013","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":532,"id":"DEPR0009","section":"9 VET Information Standard 1.0.0","title":"Program or subject name (programOrSubjectName), grouping Program/Subject, Part A, width 100, type Alphanumeric; published rules: BRDG00038, BRDG00039, BRDG00271, BRDG00272","status":"Implementation recorded","files":["test_programs_api.py","test_vetis_element_rules.py"]},{"key":533,"id":"DEPR0011","section":"9 VET Information Standard 1.0.0","title":"Program or subject reference number (programOrSubjectReferenceNumber), grouping Program/Subject, Part A, width 25, type Alphanumeric; published rules: BRDE00016, BRDG00040, BRDG00044, BRDG00093, BRDG00096, BRDG00169, BRDG00171, BRDG00191, BRDG00273, BRDG00274, BRDG00366, BRDG00367","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":534,"id":"DEPR0015","section":"9 VET Information Standard 1.0.0","title":"Program type (programType), grouping Program, Part A, width n/a, type Alphanumeric; published rules: BRDG00045, BRDG00097, BRDG00098, BRDG00275","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":535,"id":"DEPR0022","section":"9 VET Information Standard 1.0.0","title":"Vocational education indicator (vocationalEducationIndicator), grouping Program/Subject, Part A, width n/a, type Alphanumeric; published rules: BRDG00088, BRDG00091, BRDG00168, BRDG00201, BRDG00328, BRDG00338, BRDG00339","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":536,"id":"DEPR0023","section":"9 VET Information Standard 1.0.0","title":"Program UID (programUID), grouping Program/Program offering, Part A, width 38, type Alphanumeric; published rules: BRDE00017, BRDE00021, BRDG00365","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":537,"id":"DEPR0024","section":"9 VET Information Standard 1.0.0","title":"Program offering UID (programOfferingUID), grouping Program enrolment/Program offering, Part A, width 38, type Alphanumeric; published rules: BRDE00022, BRDG00031, BRDG00055, BRDG00349, BRDG00359","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":538,"id":"DEPR0026","section":"9 VET Information Standard 1.0.0","title":"Subject offering UID (subjectOfferingUID), grouping Subject enrolment/Subject offering, Part A, width 38, type Alphanumeric; published rules: BRDE00028, BRDG00030, BRDG00162, BRDG00350","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":539,"id":"DEPR0027","section":"9 VET Information Standard 1.0.0","title":"Subject UID (subjectUID), grouping Subject/Subject offering, Part A, width 38, type Alphanumeric; published rules: BRDE00018, BRDG00342, BRDG00368","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":540,"id":"DERP0011","section":"9 VET Information Standard 1.0.0","title":"Payment contribution type (paymentContributionType), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: none","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":541,"id":"DERP0014","section":"9 VET Information Standard 1.0.0","title":"International student type (internationalStudentType), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00238, BRDG00239","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":542,"id":"DERP0015","section":"9 VET Information Standard 1.0.0","title":"Learning channel type (learningChannelType), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00135, BRDG00136, BRDG00148, BRDG00242","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":543,"id":"DERP0016","section":"9 VET Information Standard 1.0.0","title":"Learning delivery type (learningDeliveryType), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00024, BRDG00138, BRDG00243","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":544,"id":"DERP0017","section":"9 VET Information Standard 1.0.0","title":"Predominant learning channel (predominantLearningChannel), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00033, BRDG00267, BRDG00330","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":545,"id":"DERP0018","section":"9 VET Information Standard 1.0.0","title":"Predominant learning delivery (predominantLearningDelivery), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00268, BRDG00363","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":546,"id":"DERP0020","section":"9 VET Information Standard 1.0.0","title":"Parchment issued date (parchmentIssuedDate), grouping Program enrolment, Part A, width n/a, type Date; published rules: BRDG00254, BRDG00331","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":547,"id":"DERP0025","section":"9 VET Information Standard 1.0.0","title":"Financial category (financialCategory), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00018, BRDG00019, BRDG00020, BRDG00051, BRDG00132, BRDQ00116, BRDQ00160","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":548,"id":"DERP0027","section":"9 VET Information Standard 1.0.0","title":"Financial type (financialType), grouping Program enrolment/Subject enrolment, Part A, width 25, type Alphanumeric; published rules: none","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":549,"id":"DERP0030","section":"9 VET Information Standard 1.0.0","title":"Student activity date (studentActivityDate), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Date; published rules: BRDE00003, BRDG00042, BRDG00049, BRDG00052, BRDG00056, BRDG00108, BRDG00109, BRDG00116, BRDG00146, BRDG00147, BRDG00220, BRDG00276, BRDG00297, BRDG00298, BRDQ00007, BRDQ00073, BRDQ00088","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":550,"id":"DERP0032","section":"9 VET Information Standard 1.0.0","title":"Student status reason (studentStatusReason), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00066, BRDG00072, BRDG00073, BRDG00120, BRDG00121, BRDG00154, BRDG00160, BRDG00161, BRDG00301, BRDG00302, BRDQ00114, BRDQ00158","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":551,"id":"DERP0033","section":"9 VET Information Standard 1.0.0","title":"Student status (studentStatus), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00064, BRDG00068, BRDG00118, BRDG00128, BRDG00153, BRDG00155, BRDG00300, BRDG00303","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":552,"id":"DERP0034","section":"9 VET Information Standard 1.0.0","title":"Training relationship type (trainingRelationshipType), grouping Program enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00323, BRDG00324, BRDQ00001, BRDQ00002, BRDQ00003, BRDQ00004, BRDQ00099, BRDQ00100, BRDQ00101, BRDQ00102","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":553,"id":"DERP0034_04","section":"9 VET Information Standard 1.0.0","title":"Supersedes subject enrolment UID (supersedesSubjectEnrolmentUID), grouping Subject enrolment, Part A, width 38, type Alphanumeric; published rules: BRDG00139, BRDG00163, BRDG00352, BRDG00355, BRDG00361","status":"Implementation recorded","files":["test_stars_completion.py","test_validation_rules_extended.py"]},{"key":554,"id":"DERP0034_05","section":"9 VET Information Standard 1.0.0","title":"Transferred from program enrolment UID (transferredFromProgramEnrolmentUID), grouping Program enrolment, Part A, width 38, type Alphanumeric; published rules: BRDG00343, BRDG00353, BRDG00356, BRDG00358","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":555,"id":"DERP0034_06","section":"9 VET Information Standard 1.0.0","title":"Supersedes program enrolment UID (supersedesProgramEnrolmentUID), grouping Program enrolment, Part A, width 38, type Alphanumeric; published rules: BRDG00041, BRDG00082, BRDG00083, BRDG00351, BRDG00354, BRDG00362","status":"Implementation recorded","files":["test_validation_rules_extended.py"]},{"key":556,"id":"DERP0036","section":"9 VET Information Standard 1.0.0","title":"Scheduled completion date (scheduledCompletionDate), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Date; published rules: BRDE00020, BRDG00142, BRDG00143, BRDG00277, BRDG00278, BRDQ00059, BRDQ00113","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":557,"id":"DERP0037","section":"9 VET Information Standard 1.0.0","title":"Scheduled start date (scheduledStartDate), grouping Subject enrolment, Part A, width n/a, type Date; published rules: BRDG00144, BRDG00280, BRDQ00060, BRDQ00112","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":558,"id":"DERP0039","section":"9 VET Information Standard 1.0.0","title":"Participant involvement type (participantInvolvementType), grouping Program enrolment/Subject enrolment/Training organisation, Part A, width n/a, type Alphanumeric; published rules: BRDG00255, BRDG00256, BRDG00257, BRDG00258","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":559,"id":"DERP0041","section":"9 VET Information Standard 1.0.0","title":"Study reason (studyReason), grouping Program enrolment/Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00304, BRDG00305","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":560,"id":"DERP0042","section":"9 VET Information Standard 1.0.0","title":"Subject assessment type (subjectAssessmentType), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00126, BRDG00306, BRDQ00081, BRDQ00082","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":561,"id":"DERP0047","section":"9 VET Information Standard 1.0.0","title":"VET in School indicator (vetInSchoolIndicator), grouping Subject enrolment, Part A, width n/a, type Alphanumeric; published rules: BRDG00166, BRDG00327, BRDQ00118, BRDQ00162","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":562,"id":"DERP0048","section":"9 VET Information Standard 1.0.0","title":"Parent program of subject enrolment UID (parentProgramEnrolmentUID), grouping Subject enrolment, Part A, width 38, type Alphanumeric; published rules: BRDG00140, BRDG00165","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":563,"id":"DERP0049","section":"9 VET Information Standard 1.0.0","title":"Program enrolment UID (programEnrolmentUID), grouping Program enrolment, Part A, width 38, type Alphanumeric; published rules: BRDE00019, BRDG00054, BRDG00095, BRDQ00018, BRDQ00022, BRDQ00023, BRDQ00026, BRDQ00028, BRDQ00029, BRDQ00035, BRDQ00046, BRDQ00049, BRDQ00050, BRDQ00051, BRDQ00052, BRDQ00053, BRDQ00104, BRDQ00110, BRDQ00111","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":564,"id":"DERP0050","section":"9 VET Information Standard 1.0.0","title":"Subject enrolment UID (subjectEnrolmentUID), grouping Subject enrolment, Part A, width 38, type Alphanumeric; published rules: BRDE00024, BRDG00100, BRDG00101, BRDG00170, BRDQ00016, BRDQ00017, BRDQ00019, BRDQ00020, BRDQ00021, BRDQ00027, BRDQ00045, BRDQ00047, BRDQ00054, BRDQ00055, BRDQ00056, BRDQ00057, BRDQ00058, BRDQ00083, BRDQ00087, BRDQ00105, BRDQ00108, BRDQ00109","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":565,"id":"DESH0001","section":"9 VET Information Standard 1.0.0","title":"ABN (trainingOrganisationABN), grouping Program enrolment/Subject enrolment, Part A, width 11, type Alphanumeric; published rules: BRDE00001, BRDE00029, BRDG00202, BRDG00203","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":566,"id":"DESH0002","section":"9 VET Information Standard 1.0.0","title":"Date of birth (dateOfBirth), grouping Student, Part A, width n/a, type Date; published rules: BRDG00221, BRDQ00006, BRDQ00126, BRDQ00144","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":567,"id":"DESH0006","section":"9 VET Information Standard 1.0.0","title":"Deceased indicator (deceasedIndicator), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDE00004, BRDG00008, BRDG00112, BRDG00222","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":568,"id":"DESH0007","section":"9 VET Information Standard 1.0.0","title":"Disability type (disabilityType), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00016, BRDQ00008, BRDQ00136, BRDQ00154","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":569,"id":"DESH0008","section":"9 VET Information Standard 1.0.0","title":"Previous qualifications achieved (previousQualificationsAchieved), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00037, BRDQ00138, BRDQ00156","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":570,"id":"DESH0009","section":"9 VET Information Standard 1.0.0","title":"Family name (familyName), grouping Student, Part A, width 40, type Alphanumeric; published rules: BRDE00009, BRDE00010, BRDG00225","status":"Implementation recorded","files":["test_students_api.py","test_vetis_element_rules.py"]},{"key":571,"id":"DESH0010","section":"9 VET Information Standard 1.0.0","title":"First given name (firstGivenName), grouping Student, Part A, width 40, type Alphanumeric; published rules: BRDE00011, BRDG00226, BRDG00227","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":572,"id":"DESH0011","section":"9 VET Information Standard 1.0.0","title":"Gender (gender), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00234, BRDQ00009, BRDQ00128","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":573,"id":"DESH0014","section":"9 VET Information Standard 1.0.0","title":"Highest school level completed (highestSchoolLevelCompleted), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00235, BRDQ00010, BRDQ00130, BRDQ00142","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":574,"id":"DESH0015","section":"9 VET Information Standard 1.0.0","title":"Indigenous status (indigenousStatus), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00237, BRDQ00011","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":575,"id":"DESH0016","section":"9 VET Information Standard 1.0.0","title":"Labour force status (labourForceStatus), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00240, BRDQ00132, BRDQ00150","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":576,"id":"DESH0019","section":"9 VET Information Standard 1.0.0","title":"Other given name (otherGivenName), grouping Student, Part A, width 40, type Alphanumeric; published rules: BRDE00015, BRDG00253","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":577,"id":"DESH0020_01","section":"9 VET Information Standard 1.0.0","title":"Language spoken at home (languageSpokenAtHome), grouping Student, Part A, width 25, type Alphanumeric; published rules: BRDG00241, BRDG00345","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":578,"id":"DESH0021","section":"9 VET Information Standard 1.0.0","title":"Person title (personTitle), grouping Student, Part A, width 4, type Alphanumeric; published rules: BRDG00259","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":579,"id":"DESH0024","section":"9 VET Information Standard 1.0.0","title":"At school indicator (atSchoolIndicator), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00021, BRDG00281, BRDQ00061, BRDQ00134, BRDQ00152","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":580,"id":"DESH0028_01","section":"9 VET Information Standard 1.0.0","title":"Training contract identifier (trainingContractIdentifier), grouping Program enrolment, Part A, width 10, type Alphanumeric; published rules: BRDG00003, BRDG00181, BRDG00195, BRDG00315, BRDG00335, BRDQ00120, BRDQ00164","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":581,"id":"DESH0030_01","section":"9 VET Information Standard 1.0.0","title":"Training organisation identifier (trainingOrganisationIdentifier), grouping Program enrolment/Subject enrolment/Training organisation, Part A, width 25, type Alphanumeric; published rules: BRDG00179, BRDG00180, BRDG00190, BRDG00317, BRDG00318, BRDG00319","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":582,"id":"DESH0030_02","section":"9 VET Information Standard 1.0.0","title":"Student identifier (studentIdentifier), grouping Student, Part A, width 10, type Alphanumeric; published rules: BRDG00113, BRDG00114, BRDG00299","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":583,"id":"DESH0030_03","section":"9 VET Information Standard 1.0.0","title":"Client identifier - apprenticeships (clientIdentifierApprenticeships), grouping Student, Part A, width 10, type Alphanumeric; published rules: BRDE00002, BRDG00004, BRDG00050, BRDG00213, BRDQ00124, BRDQ00148","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":584,"id":"DESH0030_06","section":"9 VET Information Standard 1.0.0","title":"Unique student identifier (uniqueStudentIdentifier), grouping Student, Part A, width 10, type Alphanumeric; published rules: BRDG00196, BRDG00197, BRDG00198, BRDG00199, BRDG00325, BRDQ00093, BRDQ00094, BRDQ00095, BRDQ00096, BRDQ00106, BRDQ00107, BRDQ00122, BRDQ00140","status":"Partial or context dependent","files":["test_stars_completion.py"]},{"key":585,"id":"DESH0033_01","section":"9 VET Information Standard 1.0.0","title":"Training organisation name (trainingOrganisationName), grouping Program enrolment/Subject enrolment/Training organisation, Part A, width 100, type Alphanumeric; published rules: BRDG00193, BRDG00316, BRDG00320, BRDG00321","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":586,"id":"DESH0035","section":"9 VET Information Standard 1.0.0","title":"Survey non-contact reason (surveyNonContactReason), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00178, BRDG00314","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":587,"id":"DESH0037","section":"9 VET Information Standard 1.0.0","title":"Survey availability (surveyAvailability), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00175, BRDG00176, BRDG00177, BRDG00313","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":588,"id":"DESH0041","section":"9 VET Information Standard 1.0.0","title":"Training organisation type (trainingOrganisationType), grouping Training organisation, Part A, width n/a, type Alphanumeric; published rules: BRDG00192, BRDG00322","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":589,"id":"DESH0043","section":"9 VET Information Standard 1.0.0","title":"USI exemption indicator (usiExemptionIndicator), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00326","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":590,"id":"DESH0044","section":"9 VET Information Standard 1.0.0","title":"Date of birth accuracy code (dateOfBirthAccuracy), grouping Student, Part A, width n/a, type Alphanumeric; published rules: BRDG00006, BRDG00219","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":591,"id":"DESH0045","section":"9 VET Information Standard 1.0.0","title":"Student UID (studentUID), grouping Program enrolment/Student/Subject enrolment, Part A, width 38, type Alphanumeric; published rules: BRDE00026, BRDE00027, BRDG00053, BRDG00347, BRDG00348, BRDG00360, BRDG00369, BRDQ00064, BRDQ00065, BRDQ00067, BRDQ00072","status":"Implementation recorded","files":["test_vetis_classifications.py","test_vetis_export.py"]},{"key":592,"id":"VETIS-transactional","section":"9 VET Information Standard 1.0.0","title":"Transactional reporting: every student status change is reported, progressively or by the end of the quarter; previously reported data is not re-sent; changes and corrections are reported","status":"Implementation recorded","files":["test_vetis_export.py"]},{"key":593,"id":"VETIS-status-model","section":"9 VET Information Standard 1.0.0","title":"Student status model: five statuses (Registered, Commenced, Deferred, Cancelled, Concluded) and nine status reasons; Deferred is program only, Credit transfer applied is subject only, Not applicable only for a deceased student","status":"Implementation recorded","files":["test_enrolment_status.py","test_vetis_classifications.py"]},{"key":594,"id":"VETIS-transitions","section":"9 VET Information Standard 1.0.0","title":"State transition tables BRDG00300 (program) and BRDG00303 (subject) including same day transition rules","status":"Implementation recorded","files":["test_enrolment_status.py","test_enrolments_api.py"]},{"key":595,"id":"VETIS-final-outcome","section":"9 VET Information Standard 1.0.0","title":"A final outcome is Concluded plus a status reason; Concluded is applied by STARS automatically for deceased students and superseded subjects","status":"Implementation recorded","files":[]},{"key":596,"id":"VETIS-uids","section":"9 VET Information Standard 1.0.0","title":"Thirteen system generated unique identifiers (student, program, program offering, program enrolment, subject, subject offering, subject enrolment, delivery location, parent program of subject enrolment, parent program of subject offering, supersedes program and subject enrolment, transferred from program enrolment)","status":"Implementation recorded","files":[]},{"key":597,"id":"VETIS-superseded","section":"9 VET Information Standard 1.0.0","title":"Superseded enrolments: conclude the old enrolment (no reason needed), create the new one with supersedes UID; the pair must match the training.gov.au superseded relationship","status":"Implementation recorded","files":["test_vetis_element_rules.py"]},{"key":598,"id":"VETIS-transferred","section":"9 VET Information Standard 1.0.0","title":"Transferred enrolments: conclude with Formal withdrawal, new enrolment carries transferred from program enrolment UID, move in progress subject enrolments into the new program","status":"Implementation recorded","files":["test_stars_completion.py"]},{"key":599,"id":"VETIS-delivery-triad","section":"9 VET Information Standard 1.0.0","title":"Delivery information: learning channel, learning delivery and training venue type per subject enrolment, multiple values with predominant flags, at least one subject delivery location and one student learning location once commenced","status":"Implementation recorded","files":[]},{"key":600,"id":"VETIS-study-reason","section":"9 VET Information Standard 1.0.0","title":"Study reason with the new classification (credit towards senior secondary certificate)","status":"Implementation recorded","files":[]},{"key":601,"id":"VETIS-international","section":"9 VET Information Standard 1.0.0","title":"International student type at program or subject level; onshore students need a USI, offshore do not","status":"Implementation recorded","files":["test_students_api.py"]},{"key":602,"id":"VETIS-specialisation","section":"9 VET Information Standard 1.0.0","title":"Program specialisations reported as the specialisation suffix code in program or subject reference number","status":"Partial or context dependent","files":[]},{"key":603,"id":"VETIS-third-parties","section":"9 VET Information Standard 1.0.0","title":"Third party organisations identified by RTO code, ABN or name with a participant involvement type; multiple third parties may be reported","status":"Implementation recorded","files":["test_stars_completion.py"]},{"key":604,"id":"VETIS-nominal-hours","section":"9 VET Information Standard 1.0.0","title":"Nominal hours from NCVER's nationally agreed hours file, or the purchasing guide, or best estimate","status":"Implementation recorded","files":["test_reference_ext.py"]},{"key":605,"id":"VETIS-corrections","section":"9 VET Information Standard 1.0.0","title":"Updates and corrections to previously submitted records are reported within the quarter received (re-upload of the same UID)","status":"Implementation recorded","files":[]},{"key":606,"id":"VETIS-removal","section":"9 VET Information Standard 1.0.0","title":"Remove data submitted in error by re-uploading the UID with deletedFlag true in a transaction batch","status":"Implementation recorded","files":["test_stars_completion.py"]},{"key":607,"id":"VETIS-credit-rpl","section":"9 VET Information Standard 1.0.0","title":"Credit transfer as Concluded plus Credit transfer applied (subject only); RPL and non-assessable via subject assessment type","status":"Implementation recorded","files":[]},{"key":608,"id":"VETIS-names","section":"9 VET Information Standard 1.0.0","title":"Student name rules: first given name, family name, one other given name, single legal name in either field, no nicknames","status":"Implementation recorded","files":["test_enrolment_form_variants.py","test_nat_files.py","test_nat_import.py","test_vetis_element_rules.py"]},{"key":609,"id":"VETIS-addresses","section":"9 VET Information Standard 1.0.0","title":"Permanent, term (temporary) and postal addresses with the published components; all address fields may be left blank for safety","status":"Implementation recorded","files":[]},{"key":610,"id":"VETIS-not-stated","section":"9 VET Information Standard 1.0.0","title":"No not stated defaults: blank means blank","status":"Implementation recorded","files":[]},{"key":611,"id":"VETIS-classifications","section":"9 VET Information Standard 1.0.0","title":"Only published classification tokens are stored (gender incl. Nonbinary and Different_term, updated disability types, study reason)","status":"Implementation recorded","files":["test_students_api.py","test_vetis_classifications.py"]},{"key":612,"id":"VETIS-rules-local","section":"9 VET Information Standard 1.0.0","title":"VET IS business rules (445 published: 312 BRDG, 98 BRDQ, 35 BRDE) evaluated before upload with corrective actions","status":"Partial or context dependent","files":["test_validation_rules_extended.py"]},{"key":613,"id":"VETIS-data-quality","section":"9 VET Information Standard 1.0.0","title":"Data quality rules (BRDQ) assessed over the dataset; must be resolved or excepted before the end of period declaration","status":"Partial or context dependent","files":["test_validation_rules_extended.py"]},{"key":614,"id":"STARS-auth","section":"9 VET Information Standard 1.0.0","title":"Machine to machine credentials: Entra ID client credentials with a self signed certificate, MSAL, APIM subscription key","status":"Implementation recorded","files":["test_stars_client.py"]},{"key":615,"id":"STARS-batch","section":"9 VET Information Standard 1.0.0","title":"Transaction batch workflow: create, upload per resource, validate (asynchronous, poll), failed validation results (paged), submit, get batch status","status":"Implementation recorded","files":["test_reporting.py","test_stars_client.py"]},{"key":616,"id":"STARS-errors","section":"9 VET Information Standard 1.0.0","title":"RFC 9457 ProblemDetails handling, retries on 429 and 5xx, token refresh on 401","status":"Implementation recorded","files":["test_stars_client.py"]},{"key":617,"id":"STARS-attribution","section":"9 VET Information Standard 1.0.0","title":"Every validation and submission records the responsible RTO user's identification and email","status":"Implementation recorded","files":[]},{"key":618,"id":"STARS-corrective-actions","section":"9 VET Information Standard 1.0.0","title":"Validation results grouped by rule with corrective action statements shown to the user","status":"Implementation recorded","files":["test_reporting.py","test_stars_client.py"]},{"key":619,"id":"STARS-declaration","section":"9 VET Information Standard 1.0.0","title":"Declaration and nil activity report per quarter via POST /declaration with the published text, acknowledgement, user name and email; GET /declaration","status":"Implementation recorded","files":["test_stars_client.py"]},{"key":620,"id":"STARS-reconciliation","section":"9 VET Information Standard 1.0.0","title":"Reconcile by period, by UID and by related resources using changeTrackingIdentifier","status":"Implementation recorded","files":["test_stars_completion.py"]},{"key":621,"id":"STARS-readiness","section":"9 VET Information Standard 1.0.0","title":"SMS readiness use cases: submit reportable data, reconcile by period, remove mistaken data, monitor data quality, submit end of quarter declaration","status":"Partial or context dependent","files":["test_stars_completion.py"]},{"key":622,"id":"STARS-reference-data","section":"9 VET Information Standard 1.0.0","title":"Reference data (programs, subjects, scope, superseded tables, ABS lists, reporting periods, transition tables) via the STARS Reference data API with watermark sync","status":"Partial or context dependent","files":["test_stars_completion.py"]},{"key":623,"id":"STARS-production","section":"9 VET Information Standard 1.0.0","title":"Production base URL and MyVET Data Portal credentials","status":"Provider or external action","files":["test_reporting.py"]},{"key":624,"id":"VETIS-transition-checklist","section":"9 VET Information Standard 1.0.0","title":"RTO transition checklist: notify NCVER of intent (3 months before the quarter), readiness, CEO access invite, staff security roles, M2M credentials, final AVETMISS submission and summary PDF, confirmation from NCVER","status":"Provider or external action","files":[]},{"key":625,"id":"VETIS-enrolment-form","section":"9 VET Information Standard 1.0.0","title":"Collect the minimum set of student questions using the VET IS sample enrolment form","status":"Implementation recorded","files":["test_enrolment_form.py"]},{"key":626,"id":"UP-2026-10-01-DPR","section":"10 Upcoming changes register","title":"1 October 2026: DPR amendments commence; VET Data Provision Exemptions Policy v1 takes effect","status":"Implementation recorded","files":[]},{"key":627,"id":"UP-2026-H2-STARS","section":"10 Upcoming changes register","title":"Second half of 2026: STARS available; fee for service only RTOs may transition as early adopters","status":"Provider or external action","files":[]},{"key":628,"id":"UP-2026-12-10-APP1.7","section":"10 Upcoming changes register","title":"10 December 2026: APP 1.7 automated decision making disclosure","status":"Implementation recorded","files":["test_privacy.py"]},{"key":629,"id":"UP-2027-01-01-8.1","section":"10 Upcoming changes register","title":"1 January 2027: AVETMISS 8.1: OSCA replaces ANZSCO (NAT00030A), Specific funding identifier 71 Free TAFE Waiver with funding source 11, Program level of education 315 Vocational degree, National Training Register wording","status":"Implementation recorded","files":[]},{"key":630,"id":"UP-2027-AVS-rules","section":"10 Upcoming changes register","title":"2027 collection opens: AVS rules export for release 8.1 (VET-8.1.csv) expected","status":"Provider or external action","files":[]},{"key":631,"id":"UP-2027-mapping","section":"10 Upcoming changes register","title":"Before 1 January 2027: AVETMISS to VET IS mapping guide updated for 8.1","status":"Provider or external action","files":[]},{"key":632,"id":"UP-2027-2028-STA","section":"10 Upcoming changes register","title":"2027 to 2028: States and territories transition funded RTOs; STARS Stage 2 APIs may change element placement and add resources","status":"Provider or external action","files":[]},{"key":633,"id":"UP-STARS-DQ","section":"10 Upcoming changes register","title":"Upcoming STARS release: Data quality API and results (use case 4)","status":"Provider or external action","files":[]},{"key":634,"id":"UP-STARS-prod","section":"10 Upcoming changes register","title":"Upcoming NCVER release: MyVET Data Portal production credentials and STARS production host; Terms and Conditions link for the declaration","status":"Provider or external action","files":[]},{"key":635,"id":"UP-STARS-refdata","section":"10 Upcoming changes register","title":"Now (R5, 21 July 2026): Reference data moved to APIs with watermark sync; CSV files no longer distributed except classifications","status":"Partial or context dependent","files":[]},{"key":636,"id":"UP-2028-01-01","section":"10 Upcoming changes register","title":"1 January 2028: RTOs first registered from this date report under VET IS from registration","status":"Implementation recorded","files":[]},{"key":637,"id":"UP-2029-01-01","section":"10 Upcoming changes register","title":"1 January 2029: All RTOs must report under VET IS; last transition day","status":"Provider or external action","files":[]},{"key":638,"id":"UP-2029-02-28","section":"10 Upcoming changes register","title":"28 February 2029: Final AVETMISS VET Provider Collection submission (Jan-Dec 2028)","status":"Implementation recorded","files":[]},{"key":639,"id":"UP-VIS","section":"10 Upcoming changes register","title":"Not yet dated: VET in Schools data may be incorporated into VET IS later","status":"Implementation recorded","files":[]},{"key":640,"id":"UP-NAT-import","section":"10 Upcoming changes register","title":"NAT file importer to load previous submissions and legacy exports (done 6 September 2026)","status":"Implementation recorded","files":[]},{"key":641,"id":"UP-USI-kit","section":"10 Upcoming changes register","title":"When the RTO obtains it: USI check character algorithm and Organisation API (USI Developer kit)","status":"Provider or external action","files":[]},{"key":642,"id":"UP-TGA-prod","section":"10 Upcoming changes register","title":"When the department issues it: training.gov.au production web service account for reference data refreshes","status":"Provider or external action","files":[]}],"nat_files":[{"code":"NAT00010","title":"Training organisation","national":268,"full":448,"fields":[{"name":"training_organisation_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"training_organisation_name","position":11,"length":100,"type":"A","sta_only":false},{"name":"training_organisation_type_identifier","position":111,"length":2,"type":"A","sta_only":false},{"name":"address_first_line","position":113,"length":50,"type":"A","sta_only":false},{"name":"address_second_line","position":163,"length":50,"type":"A","sta_only":false},{"name":"address_suburb","position":213,"length":50,"type":"A","sta_only":false},{"name":"postcode","position":263,"length":4,"type":"A","sta_only":false},{"name":"state_identifier","position":267,"length":2,"type":"A","sta_only":false},{"name":"contact_name","position":269,"length":60,"type":"A","sta_only":true},{"name":"telephone_number","position":329,"length":20,"type":"A","sta_only":true},{"name":"facsimile_number","position":349,"length":20,"type":"A","sta_only":true},{"name":"email_address","position":369,"length":80,"type":"A","sta_only":true}]},{"code":"NAT00020","title":"Training organisation delivery location","national":180,"full":180,"fields":[{"name":"training_organisation_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"delivery_location_identifier","position":11,"length":10,"type":"A","sta_only":false},{"name":"delivery_location_name","position":21,"length":100,"type":"A","sta_only":false},{"name":"postcode","position":121,"length":4,"type":"A","sta_only":false},{"name":"state_identifier","position":125,"length":2,"type":"A","sta_only":false},{"name":"address_suburb","position":127,"length":50,"type":"A","sta_only":false},{"name":"country_identifier","position":177,"length":4,"type":"A","sta_only":false}]},{"code":"NAT00030","title":"Program","national":130,"full":130,"fields":[{"name":"program_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"program_name","position":11,"length":100,"type":"A","sta_only":false},{"name":"nominal_hours","position":111,"length":4,"type":"N","sta_only":false},{"name":"program_recognition_identifier","position":115,"length":2,"type":"A","sta_only":false},{"name":"program_level_of_education_identifier","position":117,"length":3,"type":"A","sta_only":false},{"name":"program_field_of_education_identifier","position":120,"length":4,"type":"A","sta_only":false},{"name":"occupation_identifier","position":124,"length":6,"type":"A","sta_only":false},{"name":"vet_flag","position":130,"length":1,"type":"A","sta_only":false}]},{"code":"NAT00060","title":"Subject","national":123,"full":123,"fields":[{"name":"subject_identifier","position":1,"length":12,"type":"A","sta_only":false},{"name":"subject_name","position":13,"length":100,"type":"A","sta_only":false},{"name":"subject_field_of_education_identifier","position":113,"length":6,"type":"A","sta_only":false},{"name":"vet_flag","position":119,"length":1,"type":"A","sta_only":false},{"name":"nominal_hours","position":120,"length":4,"type":"N","sta_only":false}]},{"code":"NAT00080","title":"Client","national":327,"full":347,"fields":[{"name":"client_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"name_for_encryption","position":11,"length":60,"type":"A","sta_only":false},{"name":"highest_school_level_completed_identifier","position":71,"length":2,"type":"A","sta_only":false},{"name":"gender","position":73,"length":1,"type":"A","sta_only":false},{"name":"date_of_birth","position":74,"length":8,"type":"A","sta_only":false},{"name":"postcode","position":82,"length":4,"type":"A","sta_only":false},{"name":"indigenous_status_identifier","position":86,"length":1,"type":"A","sta_only":false},{"name":"language_identifier","position":87,"length":4,"type":"A","sta_only":false},{"name":"labour_force_status_identifier","position":91,"length":2,"type":"A","sta_only":false},{"name":"country_identifier","position":93,"length":4,"type":"A","sta_only":false},{"name":"disability_flag","position":97,"length":1,"type":"A","sta_only":false},{"name":"prior_educational_achievement_flag","position":98,"length":1,"type":"A","sta_only":false},{"name":"at_school_flag","position":99,"length":1,"type":"A","sta_only":false},{"name":"address_suburb","position":100,"length":50,"type":"A","sta_only":false},{"name":"unique_student_identifier","position":150,"length":10,"type":"A","sta_only":false},{"name":"state_identifier","position":160,"length":2,"type":"A","sta_only":false},{"name":"address_building_property_name","position":162,"length":50,"type":"A","sta_only":false},{"name":"address_flat_unit_details","position":212,"length":30,"type":"A","sta_only":false},{"name":"address_street_number","position":242,"length":15,"type":"A","sta_only":false},{"name":"address_street_name","position":257,"length":70,"type":"A","sta_only":false},{"name":"survey_contact_status","position":327,"length":1,"type":"A","sta_only":false},{"name":"statistical_area_level_1_identifier","position":328,"length":11,"type":"A","sta_only":true},{"name":"statistical_area_level_2_identifier","position":339,"length":9,"type":"A","sta_only":true}]},{"code":"NAT00085","title":"Client contact details","national":557,"full":557,"fields":[{"name":"client_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"client_title","position":11,"length":4,"type":"A","sta_only":false},{"name":"client_first_given_name","position":15,"length":40,"type":"A","sta_only":false},{"name":"client_family_name","position":55,"length":40,"type":"A","sta_only":false},{"name":"address_building_property_name","position":95,"length":50,"type":"A","sta_only":false},{"name":"address_flat_unit_details","position":145,"length":30,"type":"A","sta_only":false},{"name":"address_street_number","position":175,"length":15,"type":"A","sta_only":false},{"name":"address_street_name","position":190,"length":70,"type":"A","sta_only":false},{"name":"address_postal_delivery_box","position":260,"length":22,"type":"A","sta_only":false},{"name":"address_suburb","position":282,"length":50,"type":"A","sta_only":false},{"name":"postcode","position":332,"length":4,"type":"A","sta_only":false},{"name":"state_identifier","position":336,"length":2,"type":"A","sta_only":false},{"name":"telephone_number_home","position":338,"length":20,"type":"A","sta_only":false},{"name":"telephone_number_work","position":358,"length":20,"type":"A","sta_only":false},{"name":"telephone_number_mobile","position":378,"length":20,"type":"A","sta_only":false},{"name":"email_address","position":398,"length":80,"type":"A","sta_only":false},{"name":"email_address_alternative","position":478,"length":80,"type":"A","sta_only":false}]},{"code":"NAT00090","title":"Disability","national":12,"full":12,"fields":[{"name":"client_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"disability_type_identifier","position":11,"length":2,"type":"A","sta_only":false}]},{"code":"NAT00100","title":"Prior educational achievement","national":13,"full":13,"fields":[{"name":"client_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"prior_educational_achievement_identifier","position":11,"length":3,"type":"A","sta_only":false}]},{"code":"NAT00120","title":"Training activity","national":111,"full":158,"fields":[{"name":"training_organisation_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"delivery_location_identifier","position":11,"length":10,"type":"A","sta_only":false},{"name":"client_identifier","position":21,"length":10,"type":"A","sta_only":false},{"name":"subject_identifier","position":31,"length":12,"type":"A","sta_only":false},{"name":"program_identifier","position":43,"length":10,"type":"A","sta_only":false},{"name":"activity_start_date","position":53,"length":8,"type":"D","sta_only":false},{"name":"activity_end_date","position":61,"length":8,"type":"D","sta_only":false},{"name":"delivery_mode_identifier","position":69,"length":3,"type":"A","sta_only":false},{"name":"outcome_identifier_national","position":72,"length":2,"type":"A","sta_only":false},{"name":"funding_source_national","position":74,"length":2,"type":"A","sta_only":false},{"name":"commencing_program_identifier","position":76,"length":1,"type":"A","sta_only":false},{"name":"training_contract_identifier","position":77,"length":10,"type":"A","sta_only":false},{"name":"client_identifier_apprenticeships","position":87,"length":10,"type":"A","sta_only":false},{"name":"study_reason_identifier","position":97,"length":2,"type":"A","sta_only":false},{"name":"vet_in_schools_flag","position":99,"length":1,"type":"A","sta_only":false},{"name":"specific_funding_identifier","position":100,"length":10,"type":"A","sta_only":false},{"name":"school_type_identifier","position":110,"length":2,"type":"A","sta_only":false},{"name":"outcome_identifier_training_organisation","position":112,"length":3,"type":"A","sta_only":true},{"name":"funding_source_state_training_authority","position":115,"length":3,"type":"A","sta_only":true},{"name":"client_tuition_fee","position":118,"length":5,"type":"N","sta_only":true},{"name":"fee_exemption_concession_type_identifier","position":123,"length":2,"type":"A","sta_only":true},{"name":"purchasing_contract_identifier","position":125,"length":12,"type":"A","sta_only":true},{"name":"purchasing_contract_schedule_identifier","position":137,"length":3,"type":"A","sta_only":true},{"name":"hours_attended","position":140,"length":4,"type":"N","sta_only":true},{"name":"associated_course_identifier","position":144,"length":10,"type":"A","sta_only":true},{"name":"scheduled_hours","position":154,"length":4,"type":"N","sta_only":true},{"name":"predominant_delivery_mode","position":158,"length":1,"type":"A","sta_only":true}]},{"code":"NAT00130","title":"Program completed","national":39,"full":72,"fields":[{"name":"training_organisation_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"program_identifier","position":11,"length":10,"type":"A","sta_only":false},{"name":"client_identifier","position":21,"length":10,"type":"A","sta_only":false},{"name":"date_program_completed","position":31,"length":8,"type":"A","sta_only":false},{"name":"issued_flag","position":39,"length":1,"type":"A","sta_only":false},{"name":"parchment_issue_date","position":40,"length":8,"type":"D","sta_only":true},{"name":"parchment_number","position":48,"length":25,"type":"A","sta_only":true}]},{"code":"NAT00010A","title":"Training organisation (supplementary)","national":268,"full":448,"fields":[{"name":"training_organisation_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"training_organisation_name","position":11,"length":100,"type":"A","sta_only":false},{"name":"training_organisation_type_identifier","position":111,"length":2,"type":"A","sta_only":false},{"name":"address_first_line","position":113,"length":50,"type":"A","sta_only":false},{"name":"address_second_line","position":163,"length":50,"type":"A","sta_only":false},{"name":"address_suburb","position":213,"length":50,"type":"A","sta_only":false},{"name":"postcode","position":263,"length":4,"type":"A","sta_only":false},{"name":"state_identifier","position":267,"length":2,"type":"A","sta_only":false},{"name":"contact_name","position":269,"length":60,"type":"A","sta_only":true},{"name":"telephone_number","position":329,"length":20,"type":"A","sta_only":true},{"name":"facsimile_number","position":349,"length":20,"type":"A","sta_only":true},{"name":"email_address","position":369,"length":80,"type":"A","sta_only":true}],"supplementary":true},{"code":"NAT00030A","title":"Program (supplementary)","national":130,"full":130,"fields":[{"name":"program_identifier","position":1,"length":10,"type":"A","sta_only":false},{"name":"program_name","position":11,"length":100,"type":"A","sta_only":false},{"name":"nominal_hours","position":111,"length":4,"type":"N","sta_only":false},{"name":"program_recognition_identifier","position":115,"length":2,"type":"A","sta_only":false},{"name":"program_level_of_education_identifier","position":117,"length":3,"type":"A","sta_only":false},{"name":"program_field_of_education_identifier","position":120,"length":4,"type":"A","sta_only":false},{"name":"occupation_identifier","position":124,"length":6,"type":"A","sta_only":false},{"name":"vet_flag","position":130,"length":1,"type":"A","sta_only":false}],"supplementary":true}]}