Top Level

The degree audit program kicks off a degree audit by automatically generating a top-level plan specification that says what to include using the include mechanism discussed earlier.

The program stars with the following template:

all of "Audit for <UWID>: <LASTNAME>, <GIVEN_NAMES>" {
  # Global course specifications
  allCourses = ^([A-Z]+)_(([0-9]+X*|XXX|1X000)[A-Z]*)

  # Insert includes here for each plan
}

allCourses defines a starting course set of all the courses the student has taken. This could probably get away with just ^[A-Z]+_.* but the expression given corresponds to “real” courses in the database and excludes some anomolies. More about what these characters mean in Course Sets.

Into this template are inserted include statements for each of the student’s plans. There are three cases to distinguish.

Plans with no program

The simplest are plans that do not link to a program, minors being the most common. They result in an include such as

all of using all allCourses {
    include(baseCourseDefs,1201, uw.u.sci.cred.biol,
                         uw.u.sci,
                         uw.u)
    include(BIOLMIN, 1201, uw.u.sci.cred.biol, uw.u.sci.cred.biol)
}

The first include uses a standard name baseCourseDefs and the include search mechanism to any faculty-specific course set definitions. In this example, if uw/u/sci/baseCourseDefs-<TERMID>.plan (for some suitable term) exists, those definitions will be loaded. If they do not exist, then the defaults in uw/u/baseCourseDefs will be loaded. The part of this includes file that says uw.u.sci.cred.biol is NOT a place that will be searched, it is mearly the plan group.

The second include loads the plan specification itself. Both of these are contained in an all of requirement to establish the proper scope for the course definitions.

Plans linked to a program

The most common cases are plans linked to a program. This includes the student’s “Plan10”. They result in a somewhat more complicated include. Here’s an example:

all of "SCIH" using all allCourses {
  include(baseCourseDefs,1201, uw.u.sci.bac.scidean.other,
                         uw.u.sci,
                         uw.u)
  include(SCIH, 1201, uw.u.sci.bac.scidean.other, uw.u.sci.bac.scidean.other)
    ( include(USC25, 1201, uw.u.sci.bac, uw.u.sci.bac)
    )
}

Again, the first include provides an opportunity to establish some faculty-specific course definitions.

The second include is for the plan specification for SCIH. Inside that specification, it will include the associated USC25 program requirements. In other words, the resulting structure will be something like:

all of "SCIH" using all allCourses {
    sci = ^(BIOL_|CHEM_|EARTH_|MNS_|PHYS_|SCI_).* - ^SCI_237
    # Other Science-specific course definitions

    all of "SCIH plan requirements" {
        # Requirements from uw.u.sci.bac.SCIH-1189.plan

        all of "USC25 program requirements" {
            # Requirements from uw.u.sci.bac.USC25-1189.plan
        }
    }
}
Note

These includes are automatically generated. No need to write these yourself, although understanding at a high level will help you understand how degree audit works.

Specializations

The third case is a student with a specialization. They are handled differently in the triple-counting rule and so are included within the associated plan.
The following is automatically generated for a real Arts student with two majors, each having a specialization, plus a minor. Some comments have been added to explain.

all of "Audit for 20654079: Price, Calvin" {
    # Global course specifications
    allCourses = ^([A-Z]+)_(([0-9]+X*|XXX|1X000)[A-Z]*)

    # The first major (PSCI16HC), plus a specialization (PSCBUS16SP) and the
    # program requirements (UAR15).
    all of "PSCI16HC" using all allCourses {
      include(baseCourseDefs,1179, uw.u.arts.bac.psci,
                            uw.u.arts,
                            uw.u)
      include(PSCI16HC, 1179, uw.u.arts.bac.psci, uw.u.arts.bac.psci)
        ( include(PSCBUS16SP, 1209, uw.u.arts.cred.psci, uw.u.arts.cred.psci),
          include(UAR15, 1171, uw.u.arts.bac, uw.u.arts.bac)
        )
    }

    # A second major, also with a specialization and repeating the program
    # requirements.
    all of "ECON16HC" using all allCourses {
      include(baseCourseDefs,1201, uw.u.arts.bac.econ,
                            uw.u.arts,
                            uw.u)
      include(ECON16HC, 1201, uw.u.arts.bac.econ, uw.u.arts.bac.econ)
        ( include(ECONFN16SP, 1209, uw.u.arts.cred.econ, uw.u.arts.cred.econ),
          include(UAR15, 1171, uw.u.arts.bac, uw.u.arts.bac)
        )
    }

    # A minor.
    all of using all allCourses {
      include(baseCourseDefs,1209, uw.u.arts.cred.psci,
                            uw.u.arts,
                            uw.u)
      include(INTTRADMIN, 1209, uw.u.arts.cred.psci, uw.u.arts.cred.psci)
    }
}

Pro Tips

If you wish to know how a plan you are writing is structured, add the clause --pprint top when running your degree audit from the terminal. This will display the top level to you.