instructure/canvas-lms · error · ImportError

Improper status "# " for term #

Error message

Improper status "#{status}" for term #{term_id}

What it means

Validation guard in TermImporter::Work#add_term raised when the status argument does not match /\Aactive|\Adeleted/i. Only 'active' and 'deleted' (case-insensitive) statuses are accepted for terms; any other string causes the row to be rejected.

Solutions

  1. Use 'active' or 'deleted' as the status value
  2. Correct the CSV and re-import
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at lib/sis/term_importer.rb:48 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15). Data as JSON: /api/errors/a1fdfc9be95fd5ec. Report an issue: GitHub.

Appendix: source

Thrown at lib/sis/term_importer.rb:48

      SisBatchRollBackData.bulk_insert_roll_back_data(importer.roll_back_data)

      importer.success_count
    end

    class Work
      attr_accessor :success_count, :roll_back_data

      def initialize(batch, root_account, logger)
        @batch = batch
        @root_account = root_account
        @roll_back_data = []
        @logger = logger
        @success_count = 0
      end

      def add_term(term_id, name, status, start_date = nil, end_date = nil, integration_id = nil, date_override_enrollment_type = nil)
        raise ImportError, "No term_id given for a term" if term_id.blank?
        raise ImportError, "Improper status \"#{status}\" for term #{term_id}" unless /\Aactive|\Adeleted/i.match?(status)
        return if @batch.skip_deletes? && status =~ /deleted/i

        term = @root_account.enrollment_terms.where(sis_source_id: term_id).first_or_initialize
        term.sis_batch_id = @batch.id

        if date_override_enrollment_type
          # only configure the date override if this row is present
          raise ImportError, "Cannot set date override on non-existent term" if term.new_record?
          unless %w[StudentEnrollment TeacherEnrollment TaEnrollment DesignerEnrollment].include?(date_override_enrollment_type)
            raise ImportError, "Invalid date_override_enrollment_type"
          end

          date_override = term.enrollment_dates_overrides.where(enrollment_type: date_override_enrollment_type).order(:id).first
          unless date_override&.stuck_sis_fields&.intersect?(%i[start_at end_at])
            case status
            when /active/i
              date_override ||= term.enrollment_dates_overrides.build(context: @root_account, enrollment_type: date_override_enrollment_type)
              date_override.update!(start_at: start_date, end_at: end_date)

View on GitHub (pinned to 1c9f0bb801)