MyNixOS website logo
Description

Compensation Analysis Tool for Instructor Overload Pay.

Calculates equitable overload compensation for college instructors based on institutional policies, enrollment thresholds, and regular teaching load limits. Compensation is awarded only for credit hours that exceed the regular load and meet minimum enrollment criteria. When enrollment is below a specified threshold, pay is prorated accordingly. The package prioritizes compensation from high-enrollment courses, or optionally from low-enrollment courses for fairness, depending on user-defined strategy. Includes tools for flexible policy settings, instructor filtering, and produces clean, audit-ready summary tables suitable for payroll and administrative reporting.

catool: Compensation Analysis Tool

CRANstatus R-CMD-check Lifecycle:experimental GitHubversion WalkthroughVignette

catool (Compensation Analysis Tool) is an R package that calculates fair and transparent overload pay for college instructors. It analyzes course schedules and applies institutional policy rules to determine qualified credit hours and compensation—prorated when needed.

🔧 Key Features

  • Filters out under-enrolled or ineligible courses
  • Calculates overload based on qualified credit hours only
  • Prorates pay for enrollments below a specified threshold
  • Sorts courses by enrollment and counts from lowest up
  • Supports instructor- or institution-favoring strategies
  • Produces clear summary tables for individual or full-schedule use
  • Tidy tibble output, ready for export and reporting

🛆 Installation

# Install from GitHub
# install.packages("remotes")
remotes::install_github("dawit3000/catool")

🗂️ Input Format

Your course schedule data must include:

ColumnDescription
INSTRUCTORInstructor’s name (e.g., “Smith, C”)
ENRLDEnrollment in each course
HRSCredit hours assigned per course

Optional: SUBJ, DEPARTMENT, COLLEGE, and PROGRAM for advanced filtering.


📂 Sample input: The schedule.csv file provides a realistic example of course schedule data used by the package. It includes columns such as SUBJ, CRN, INSTRUCTOR, DEPARTMENT, and COLLEGE.


🧪 Quick Start

library(catool)

schedule <- data.frame(
  INSTRUCTOR = c("al-Abdul", "baxter", "Smith, Courtney"),
  ENRLD = c(12, 7, 4),
  HRS = c(3, 3, 3)
)

# Analyze one instructor
ol_comp(get_instructor_schedule("baxter", schedule))

# Apply one instructor with a custom policy
ol_comp(get_instructor_schedule("Smith", schedule),
        L = 4, U = 9, rate_per_cr = 2500 / 3, reg_load = 12)

# Summarize full schedule (payroll-ready summary of all instructors)
ol_comp_summary(schedule)

🔍 Filtering Options

# Filter by subject
filter_schedule(schedule, subject_pattern = "MATH|STAT")
filter_schedule(schedule, subject_pattern = "^MATH|^STAT") # Prefix match

# Filter by department
filter_schedule(schedule, department_pattern = "Business")

# Filter by instructor
get_instructor_schedule("davis", schedule)

# List all instructors
get_unique_instructors(schedule)

📊 Output Structure

The ol_comp_summary() function returns a clean tibble with:

  • QHRS: Qualified credit hours above regular load, eligible for pay
  • PAY: Calculated compensation per row
  • TYPE: "PRO" where ENRLD < 10, blank otherwise
  • SUMMARY: Instructor headers, notes, and totals

Note: Pay is never per-course—only on qualified credit hours.


⚖️ Policy Logic

Default institutional policy:

  1. Regular teaching load = 12 credit hours

  2. Courses with ENRLD < 4 are excluded

  3. Qualified credit hours beyond regular load are paid at $2,500 / 3 per hour

  4. For ENRLD < 10, pay is prorated:

    $$ \text{Compensation} = \left(\frac{\text{ENRLD}}{10}\right) \times \text{rate per CR} \times \text{qualified CR} $$

  5. Overload hours are counted starting with the least-enrolled eligible courses


🤮 Instructor vs Institutional Interest Inclination Strategy

You can specify how regular teaching load is assigned when determining overload pay:

  • favor_institution = TRUEFavor institutional interest → Assign high-enrollment courses to regular load first → Leaves low-enrollment courses for compensation → Results in less total pay

  • favor_institution = FALSEFavor instructor interest → Assign low-enrollment courses to regular load first → Leaves high-enrollment courses for compensation → Results in more total pay

This option is supported in both ol_comp() and ol_comp_summary() functions.


📖 Full Walkthrough

🔗 Vignette & Examples.

Metadata

Version

1.0.1

License

Unknown

Platforms (76)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-linux
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows