diff --git a/.cursor/rules/baseline.mdc b/.cursor/rules/baseline.mdc new file mode 100644 index 0000000..7573dcc --- /dev/null +++ b/.cursor/rules/baseline.mdc @@ -0,0 +1,14 @@ +--- +description: Baseline agent behavior for all smmariquit repos +alwaysApply: true +--- + +# Baseline + +- Read the README and existing code before large changes. Match project style. +- Minimize diff scope. Do not refactor unrelated code. +- Never commit secrets (.env, tokens, keys). Warn if asked to commit them. +- Only create git commits when the user asks. +- Run the project's existing lint/build/test scripts when you change code. +- If `.cursor/skills/` exists in this repo, read relevant skills before implementing. +- Definition of done: changes in the real repo branch, not a scratchpad or uncommitted local-only work. diff --git a/.cursor/rules/caveman.mdc b/.cursor/rules/caveman.mdc new file mode 100644 index 0000000..0fec0ca --- /dev/null +++ b/.cursor/rules/caveman.mdc @@ -0,0 +1,20 @@ +--- +description: "Caveman mode — terse communication, 65% fewer output tokens (measured), full technical accuracy" +alwaysApply: true +--- + +Respond terse like smart caveman. All technical substance stay. Only fluff die. + +Rules: +- Drop: articles (a/an/the), filler (just/really/basically), pleasantries, hedging +- Fragments OK. Short synonyms. Technical terms exact. Code unchanged. +- Pattern: [thing] [action] [reason]. [next step]. +- Not: "Sure! I'd be happy to help you with that." +- Yes: "Bug in auth middleware. Fix:" + +Switch level: /caveman lite|full|ultra|wenyan +Stop: "stop caveman" or "normal mode" + +Auto-Clarity: drop caveman for security warnings, irreversible actions, user confused. Resume after. + +Boundaries: code/commits/PRs written normal. diff --git a/.cursor/rules/no-ai-slop.mdc b/.cursor/rules/no-ai-slop.mdc new file mode 100644 index 0000000..98b8ff3 --- /dev/null +++ b/.cursor/rules/no-ai-slop.mdc @@ -0,0 +1,53 @@ +--- +description: Louis Rossmann anti-AI-slop prose rules (realrossmanngroup/no_ai_slop_writing_rules). Apply when writing READMEs, docs, PR bodies, comments, blog/MDX — not when writing code. +alwaysApply: true +--- + +# No AI slop (Louis Rossmann rules) + +Source: https://github.com/realrossmanngroup/no_ai_slop_writing_rules + +**Scope:** prose only (README, docs, MDX, PR descriptions, issue text, comments). Code, configs, and commit subjects are exempt unless they contain marketing copy. + +## Voice + +Researcher who opened the device and read the filing. Contempt through precision, not adjectives. Every claim needs a testable detail: amount, date, part number, named source. + +## 24 rules (non-negotiable for prose) + +1. **No em dashes.** Use period, semicolon, comma, or restructure. +2. **No unsourced statistics.** Real number + attribution, or cut it. +3. **No parenthetical clarifications in headings.** +4. **No intensifiers.** Banned: significantly, dramatically, extremely, incredibly, truly, absolutely, literally, remarkably, exceptionally. +5. **No hollow statements.** Every claim ends on a concrete, verifiable detail or gets deleted. +6. **No repeated talking points.** Say it once. +7. **Vary structure.** Three identical section shapes = machine output. +8. **No narrating references.** No "as discussed above" / "as we will see." +9. **No performative urgency** without a concrete deadline or penalty in the same sentence. +10. **No scare quotes** on normal words. +11. **No filler phrases.** Banned: "In today's world", "It's important to note", "When it comes to", "At the end of the day", "In the realm of", "It goes without saying", "This is where X comes in", "Look no further", "Our team of experts." +12. **Never start with "Whether you're."** +13. **Write like a researcher, not a copywriter.** If a sentence works on any generic site unchanged, delete or anchor it to a fact. +14. **No synthetic enthusiasm.** No exclamation-mark cheerleading. +15. **No weasel words.** "May potentially", "helps ensure", "can help to" — commit or cut. +16. **No dramatic headings.** Name what the section contains, not a tease ("Economic impact of shortened lifespans" not "The Hidden Cost of…"). +17. **No fabricated case studies or scenarios.** +18. **No fabricated dates or milestones.** +19. **No fabricated attributions.** No "Senator X argued…" without a real source. +20. **No AI transitions.** Banned: Furthermore, Moreover, Notwithstanding, That being said, At its core, In essence, It is worth noting that, In the landscape of, To put it simply. +21. **No AI verbs.** Banned: delve, leverage, utilize, facilitate, foster, bolster, underscore, unveil, navigate (metaphorical), streamline, endeavour, ascertain, elucidate. Use: explore, use, help, strengthen, highlight, reveal, manage, simplify, try, find out, explain. +22. **No academic AI tells.** Banned: shed light on, pave the way for, a myriad of, a plethora of, paramount, pertaining to, prior to/subsequent to, in light of, with respect to, in terms of, the fact that. +23. **Quote sources accurately.** Long quotes (>~15 words) as indented blocks with attribution. +24. **No research-process narration.** Don't write "could not be located" or list what you failed to find. Omit unsupported facts silently. + +## Self-check before returning prose + +- Scan for em dashes and banned words above. +- Every number real? Every sentence ends on a detail? +- Headings descriptive, not dramatic? +- Read aloud: would you say this to a colleague? + +## Conflicts + +- **Code:** ponytail still wins (minimal diff). +- **Chat:** caveman can compress replies; these rules apply when drafting publishable prose inside the reply. diff --git a/.cursor/rules/ponytail.mdc b/.cursor/rules/ponytail.mdc new file mode 100644 index 0000000..db435a7 --- /dev/null +++ b/.cursor/rules/ponytail.mdc @@ -0,0 +1,36 @@ +--- +description: Ponytail, lazy senior dev mode. Always pick the simplest solution that works. +globs: +alwaysApply: true +--- + +# Ponytail, lazy senior dev mode + +You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written. + +Before writing any code, stop at the first rung that holds: + +1. Does this need to be built at all? (YAGNI) +2. Does it already exist in this codebase? Reuse the helper, util, or pattern that's already here, don't re-write it. +3. Does the standard library already do this? Use it. +4. Does a native platform feature cover it? Use it. +5. Does an already-installed dependency solve it? Use it. +6. Can this be one line? Make it one line. +7. Only then: write the minimum code that works. + +The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb. + +Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken. + +Rules: + +- No abstractions that weren't explicitly requested. +- No new dependency if it can be avoided. +- No boilerplate nobody asked for. +- Deletion over addition. Boring over clever. Fewest files possible. +- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug. +- Question complex requests: "Do you actually need X, or does Y cover it?" +- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm. +- Mark intentional simplifications with a `ponytail:` comment. If the shortcut has a known ceiling (global lock, O(n²) scan, naive heuristic), the comment names the ceiling and the upgrade path. + +Not lazy about: understanding the problem (read it fully and trace the real flow before picking a rung, a small diff you don't understand is just laziness dressed up as efficiency), input validation at trust boundaries, error handling that prevents data loss, security, accessibility, the calibration real hardware needs (the platform is never the spec ideal, a clock drifts, a sensor reads off), anything explicitly requested. Lazy code without its check is unfinished: non-trivial logic leaves ONE runnable check behind, the smallest thing that fails if the logic breaks (an assert-based demo/self-check or one small test file; no frameworks, no fixtures). Trivial one-liners need no test. diff --git a/.cursor/skills/no-ai-slop/SKILL.md b/.cursor/skills/no-ai-slop/SKILL.md new file mode 100644 index 0000000..1540061 --- /dev/null +++ b/.cursor/skills/no-ai-slop/SKILL.md @@ -0,0 +1,35 @@ +--- +name: no-ai-slop +description: Louis Rossmann anti-AI-slop rules for prose (README, docs, MDX, PRs, blog). From realrossmanngroup/no_ai_slop_writing_rules. Use when writing or editing any user-facing text. Not for code generation. +--- + +# No AI slop (Rossmann) + +Upstream: https://github.com/realrossmanngroup/no_ai_slop_writing_rules + +Read `.cursor/rules/no-ai-slop.mdc` before drafting prose. + +## Quick WRONG → RIGHT + +| Slop | Fix | +|------|-----| +| "This significantly impacted users." | "Apple replaced 11 million batteries in 2018." | +| "Furthermore, the policy was robust." | "The FTC voted 5-0 in July 2021 to enforce repair restrictions." | +| "The Hidden Cost of Repair Bans" | "Economic impact of manufacturer repair restrictions" | +| "It's important to note that…" | Start on the fact. | +| "Not just a tool — a paradigm shift" | State what actually changed, with evidence. | + +## When to apply + +- README, CONTRIBUTING, docs, MDX articles, PR/issue bodies, marketing copy +- Before publishing agent-drafted prose + +## When to skip + +- Source code, types, configs, SQL +- One-line commit messages (unless they're essays) + +## With other rules + +- `eductools` `writing-tone.mdc` and this rule align: specific, cited, no glaze. +- Run a self-check pass after drafting; fix banned patterns before handing text back. diff --git a/.cursor/skills/repo-baseline/SKILL.md b/.cursor/skills/repo-baseline/SKILL.md new file mode 100644 index 0000000..b706f4c --- /dev/null +++ b/.cursor/skills/repo-baseline/SKILL.md @@ -0,0 +1,32 @@ +--- +name: repo-baseline +description: Default workflow for smmariquit repositories. Use at the start of any task — read README, match conventions, minimal diffs, no secrets in commits, verify before redoing infra work. Check for stack-specific skills in this repo (.cursor/skills/). +--- + +# Repo baseline + +## Start of task + +1. Read `README.md` (and `CONTRIBUTING.md` if present). +2. List `.cursor/skills/` — load any skill that matches the task. +3. Check `package.json` / `pyproject.toml` / `Cargo.toml` for scripts before inventing commands. + +## While working + +- Reuse existing functions and patterns; don't reimplement parallel utilities. +- Prefer extending current abstractions over new files. +- Comments only for non-obvious logic. + +## Git + +- Commit only when asked. +- No `--no-verify` unless the user explicitly requests it. +- Don't amend pushed commits unless the user asks. + +## Cross-repo infra + +If the task touches Cloudflare, Vercel, or DNS across multiple repos, check `smmariquit/tutorials` for `MIGRATION-HANDOFF.md` and `MIGRATION-STATUS.md` before redoing migration work. + +## MCP vs shell + +For Cloudflare or Vercel tasks: try the enabled MCP tools first (after auth). Fall back to `gh`, `wrangler`, or `curl` if MCP lacks scope or returns auth errors — report which path was used. diff --git a/.github/workflows/publish-extension.yml b/.github/workflows/publish-extension.yml new file mode 100644 index 0000000..2cbcbdb --- /dev/null +++ b/.github/workflows/publish-extension.yml @@ -0,0 +1,122 @@ +# Publish the extension to the Chrome Web Store, Firefox Add-ons and Edge +# Add-ons on every commit to main that touches extension/. +# +# Versioning: the stores need a new version for every upload. The version is +# the manifest version when that is not released yet (bump it by hand for a +# minor or major release), otherwise the last extension-v* tag with the patch +# number raised by one. The chosen version is written into the built +# manifests only; the tag records what shipped. +# +# A store whose secrets are missing is skipped, not failed, so stores can be +# connected one at a time. +# +# Secrets (repo settings, Actions): +# CWS_CLIENT_ID, CWS_CLIENT_SECRET, CWS_REFRESH_TOKEN Chrome Web Store API +# AMO_JWT_ISSUER, AMO_JWT_SECRET addons.mozilla.org API key +# EDGE_PRODUCT_ID, EDGE_CLIENT_ID, EDGE_API_KEY Edge Add-ons API v1.1 +name: Publish extension + +on: + push: + branches: [main] + paths: ["extension/**"] + workflow_dispatch: + +concurrency: + group: publish-extension + cancel-in-progress: false + +permissions: + contents: write + +env: + CWS_EXTENSION_ID: mlhklblbhkikcmobmmajckjcbmdinldb + +jobs: + publish: + runs-on: ubuntu-latest + env: + HAS_CWS: ${{ secrets.CWS_REFRESH_TOKEN != '' }} + HAS_AMO: ${{ secrets.AMO_JWT_SECRET != '' }} + HAS_EDGE: ${{ secrets.EDGE_API_KEY != '' }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Pick the version to ship + id: version + run: | + base=$(jq -r .version extension/manifests/*.json | sort -u) + if [ "$(echo "$base" | wc -l)" -ne 1 ]; then + echo "::error::Manifest versions differ: $base" + exit 1 + fi + last=$(git tag --list 'extension-v*' | sed 's/^extension-v//' | sort -V | tail -1) + if [ -z "$last" ] || [ "$(printf '%s\n%s\n' "$last" "$base" | sort -V | tail -1)" = "$base" ] && [ "$base" != "$last" ]; then + version=$base + else + IFS=. read -r major minor patch <<<"$last" + version="$major.$minor.$((patch + 1))" + fi + echo "Shipping $version (manifest $base, last tag ${last:-none})" + echo "version=$version" >> "$GITHUB_OUTPUT" + echo "new=true" >> "$GITHUB_OUTPUT" + + - name: Build and zip + if: steps.version.outputs.new == 'true' + run: | + bash extension/build.sh all + for m in extension/dist/*/manifest.json; do + jq --arg v "${{ steps.version.outputs.version }}" '.version = $v' "$m" > "$m.tmp" && mv "$m.tmp" "$m" + done + mkdir -p release + for target in chrome firefox opera; do + (cd "extension/dist/$target" && zip -qr "$GITHUB_WORKSPACE/release/elbi-gradesim-$target-${{ steps.version.outputs.version }}.zip" .) + done + ls -l release + + - name: Chrome Web Store + if: steps.version.outputs.new == 'true' && env.HAS_CWS == 'true' + env: + CLIENT_ID: ${{ secrets.CWS_CLIENT_ID }} + CLIENT_SECRET: ${{ secrets.CWS_CLIENT_SECRET }} + REFRESH_TOKEN: ${{ secrets.CWS_REFRESH_TOKEN }} + EXTENSION_ID: ${{ env.CWS_EXTENSION_ID }} + run: npx -y chrome-webstore-upload-cli@3 --source "release/elbi-gradesim-chrome-${{ steps.version.outputs.version }}.zip" + + - name: Firefox Add-ons + if: steps.version.outputs.new == 'true' && env.HAS_AMO == 'true' + env: + WEB_EXT_API_KEY: ${{ secrets.AMO_JWT_ISSUER }} + WEB_EXT_API_SECRET: ${{ secrets.AMO_JWT_SECRET }} + run: npx -y web-ext@8 sign --channel listed --source-dir extension/dist/firefox --artifacts-dir release/amo + + - name: Edge Add-ons + if: steps.version.outputs.new == 'true' && env.HAS_EDGE == 'true' + env: + EDGE_PRODUCT_ID: ${{ secrets.EDGE_PRODUCT_ID }} + EDGE_CLIENT_ID: ${{ secrets.EDGE_CLIENT_ID }} + EDGE_API_KEY: ${{ secrets.EDGE_API_KEY }} + run: | + base="https://api.addons.microsoftedge.microsoft.com/v1/products/$EDGE_PRODUCT_ID/submissions" + auth=(-H "Authorization: ApiKey $EDGE_API_KEY" -H "X-ClientID: $EDGE_CLIENT_ID") + # Edge uses the Chrome build. + upload=$(curl -sS -D - -o /dev/null "${auth[@]}" -H "Content-Type: application/zip" \ + --data-binary "@release/elbi-gradesim-chrome-${{ steps.version.outputs.version }}.zip" \ + "$base/draft/package" | tr -d '\r' | awk -F': ' 'tolower($1)=="location"{print $2}') + for _ in $(seq 1 30); do + status=$(curl -sS "${auth[@]}" "$base/draft/package/operations/$upload" | jq -r .status) + [ "$status" != "InProgress" ] && break + sleep 10 + done + [ "$status" = "Succeeded" ] || { echo "::error::Edge upload status $status"; exit 1; } + curl -sS -f "${auth[@]}" -X POST -d '{"notes":"Release ${{ steps.version.outputs.version }}"}' "$base" + + - name: Tag and GitHub release + if: steps.version.outputs.new == 'true' + env: + GH_TOKEN: ${{ github.token }} + run: | + tag="extension-v${{ steps.version.outputs.version }}" + gh release create "$tag" release/*.zip --target "$GITHUB_SHA" --title "Elbi GradeSim ${{ steps.version.outputs.version }}" --generate-notes diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml deleted file mode 100644 index 4f1247f..0000000 --- a/.github/workflows/semantic-release.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Semantic Release & Chrome Web Store Deploy - -on: - push: - branches: - - main - - master - -permissions: - contents: write - issues: write - pull-requests: write - -jobs: - release: - name: Release & Deploy - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - - # Optional: You may want a step here to update manifest.json with the new version - # depending on how you manage your extension's version number. - - - name: Build Extension - run: | - chmod +x ./extension/build.sh - ./extension/build.sh chrome - cd extension/dist/chrome - zip -r ../../../chrome-extension.zip . - - - name: Semantic Release - uses: cycjimmy/semantic-release-action@v4 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # You can add semantic-release plugins to update manifest.json version automatically - - # To use this step, you must configure these secrets in your GitHub repository. - # You can get these by creating a Google Cloud Project and setting up OAuth credentials. - - name: Upload to Chrome Web Store - uses: mnao305/chrome-extension-upload@v3.0.0 - with: - file-path: chrome-extension.zip - extension-id: ${{ secrets.CHROME_EXTENSION_ID }} - client-id: ${{ secrets.CHROME_CLIENT_ID }} - client-secret: ${{ secrets.CHROME_CLIENT_SECRET }} - refresh-token: ${{ secrets.CHROME_REFRESH_TOKEN }} - # set to true to publish automatically, false to only upload as a draft - publish: true diff --git a/.gitignore b/.gitignore index 9bbbbf1..e18d293 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ npm-debug.log* # Cloned source (already restructured into extension/) gradesim/ + +# Website lives in separate repo (gradesim-website) +website/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..5e7a837 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,70 @@ +# GradeSim Extension Agent Guide + +**Human developers:** start with [README.md](README.md). + +Org-wide agent defaults: see [room-tba/AGENTS.md](https://github.com/uplbtools/room-tba/blob/main/AGENTS.md). This file tailors that playbook to the **GradeSim browser extension**. + +## Doc map + +| When | Read | +| --- | --- | +| Build all browsers | `extension/build.sh` | +| Per-browser manifests | `extension/manifests/` | +| Landing / marketing site | [uplbtools/gradesim-website](https://github.com/uplbtools/gradesim-website) | +| Store listings | Chrome Web Store, Firefox Add-ons URLs in README | + +## Stack + +- **Platform:** Manifest V3 **browser extension** (vanilla JavaScript: no bundler in root) +- **Targets:** Chrome, Firefox, Opera, Edge (separate manifests) +- **Build:** `extension/build.sh [chrome|firefox|opera|edge|all]` → `extension/dist//` +- **Host permission:** `amis.uplb.edu.ph`: content scripts read AMIS DOM locally +- **No server**: 100% client-side; no `package.json` scripts at repo root + +## Branches and release + +| Branch | Role | +| --- | --- | +| **`staging`** | Default branch: integration | +| **`main`** | Release line for store submissions | + +**Ship flow:** merge to `main`, build with `./build.sh all`, upload zips to each browser store. Store review is human-gated: do not auto-close issues that depend on store approval. + +There is no Vercel/CI deploy: verification is local build + manual load in browser dev mode. + +## Verify before done + +| Step | When | +| --- | --- | +| `cd extension &&./build.sh chrome` | Minimum before any extension change | +| `./build.sh all` | Before store release | +| Manual AMIS | Load unpacked extension; open AMIS schedule page; confirm GWA/simulator still works | +| Manifest diff | When touching permissions: review all files in `extension/manifests/` | + +## Architecture (short) + +``` +extension/ + src/ # Popup, content scripts, curriculum data + manifests/ # Per-browser manifest.json variants + icons/ + build.sh # Copies src + manifest → dist// +website/ # Legacy copy: canonical website is gradesim-website repo +``` + +## Extension rules + +- **Privacy:** Never send grades or student data to a server: local `chrome.storage` / `browser.storage` only +- **AMIS DOM scraping:** AMIS markup changes break the extension: prefer defensive selectors; add fixture HTML tests when possible +- **Multi-browser parity:** A manifest or permission change often needs all four manifest files updated +- **No decorative UI motion** in popup: keep the panel calm and readable + +## Commits + +- Conventional Commits: `fix(content): …`, `feat(curriculum): …`, `chore(build): …` +- Note which browsers were manually tested in the PR body + +## Security + +- Do not add broad `` permissions without maintainer approval +- Never exfiltrate AMIS page content to third-party analytics diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..ce5215e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,134 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances of + any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, + without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official email address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +[Discord](https://discord.uplbtools.me) or by opening a private security +contact issue for maintainers. + +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][mozilla]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][faq]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[mozilla]: https://github.com/mozilla/diversity +[faq]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d694729 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing to GradeSim + +Thanks for helping UPLB students track grades and plan for Latin honors. + +## Report issues + +Open a [GitHub issue](https://github.com/uplbtools/gradesim/issues) with: + +- Browser and extension version +- Steps to reproduce +- Expected vs actual grade or GWA output + +You do not need a pull request for typo reports in curriculum data: an issue is enough. + +## Developers + +### Setup + +```sh +cd extension +./build.sh chrome # or firefox, all +``` + +Load `extension/dist//` via your browser’s developer / unpacked extension UI, or install from the [Chrome Web Store](https://chromewebstore.google.com/detail/elbi-gradesim-uplb-gwa-ca/mlhklblbhkikcmobmmajckjcbmdinldb) or [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/elbi-gradesim/). + +### Pull requests + +1. Branch from **`staging`**. +2. Keep commits focused; use [Conventional Commits](https://www.conventionalcommits.org/) (`fix(extension): …`, `docs: …`). +3. Open a PR to **`staging`** and link any related issue. +4. Do not commit secrets or store listing credentials. + +## Code of conduct + +See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Be helpful to students; verify grade logic against official UPLB rules when possible. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8122745 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Simonee Ezekiel Mariquit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 5d00a14..ae75de5 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,31 @@ # Elbi GradeSim -A browser extension for UPLB students to calculate their GWA and simulate grades needed for Latin honors. Available on Chrome, Firefox, Opera, and Edge. +A browser extension for UPLB students to calculate their GWA and simulate grades needed for Latin honors. Available on **Chrome**, **Firefox**, Opera, and Edge. ## Repository Structure ``` gradesim/ -├── extension/ # Browser extension source -│ ├── src/ # Shared source (popup, content scripts, curriculum data) -│ ├── manifests/ # Per-browser manifest files -│ ├── icons/ # Extension icons -│ └── build.sh # Build script for each browser target -├── website/ # Next.js landing page -│ ├── app/ # Pages and components -│ └── public/ -│ ├── curricula/ # Curriculum images by college (PNG) -│ ├── chrome.svg # Browser logos -│ └── firefox.svg +├── extension/ # Browser extension source +│ ├── src/ # Shared source (popup, planner, content scripts, curriculum data) +│ ├── manifests/ # Per-browser manifest files +│ ├── icons/ # Extension icons +│ └── build.sh # Build script for each browser target +├── scratch/ # Curriculum data pipeline (PDF parsing, prereq graphs) └── README.md ``` +The landing page lives in a separate repo: [gradesim-website](https://github.com/smmariquit/gradesim-website). + ## Extension ### Build ```bash cd extension -./build.sh all # Build all browsers -./build.sh chrome # Build Chrome only -./build.sh firefox # Build Firefox only +./build.sh all # Build all browsers +./build.sh chrome # Build Chrome only +./build.sh firefox # Build Firefox only ``` Output goes to `extension/dist//`. Load the folder in your browser's developer mode. @@ -44,17 +41,7 @@ Output goes to `extension/dist//`. Load the folder in your browser's de - "What If?" simulator for Latin honor targets - Grades overview by semester or year - 30+ UPLB degree programs supported -- 100% local; no data leaves your device - -## Website - -```bash -cd website -npm install -npm run dev -``` - -The landing page links to both store listings and displays curriculum data. +- 100% local: no data leaves your device ## Privacy diff --git a/TERMS.md b/TERMS.md new file mode 100644 index 0000000..99f5157 --- /dev/null +++ b/TERMS.md @@ -0,0 +1,32 @@ +# Terms of Service for Elbi GradeSim + +**Last Updated: July 4, 2026** + +## Overview + +Elbi GradeSim is a free browser extension for UPLB students. By installing and using the extension, you agree to these terms. + +## Permitted use + +- Use the extension for personal academic planning on the official UPLB AMIS portal. +- Do not reverse-engineer, redistribute, or misrepresent the extension as an official UPLB product. + +## No official affiliation + +GradeSim is an independent student tool. It is **not** affiliated with, endorsed by, or operated by the University of the Philippines Los Baños or the AMIS system. + +## No warranty + +The extension is provided **as is** without warranty. Grade calculations and honor simulations are estimates: always verify against official registrar records. + +## Data + +Your grades data stays on your device. See [PRIVACY_POLICY.md](PRIVACY_POLICY.md) for details. + +## Changes + +We may update these terms. Continued use after the "Last Updated" date constitutes acceptance. + +## Contact + +Questions: open an issue on the project GitHub repository. diff --git a/background.js b/background.js deleted file mode 100644 index abb6896..0000000 --- a/background.js +++ /dev/null @@ -1,24 +0,0 @@ -// background.js - -// Background service worker for Elbi GradeSim -// Privacy: All data is stored locally using chrome.storage.local -// No data is ever sent to external servers - -// Store for grades data (in-memory cache) -let gradesData = null; - -// Listen for messages from content script -chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.type === 'GRADES_DATA') { - gradesData = message.data; - // Store locally for popup access - chrome.storage.local.set({ gradesData: message.data }); - } - - if (message.type === 'GET_GRADES_DATA') { - sendResponse({ data: gradesData }); - } - - return true; -}); - diff --git a/content.js b/content.js deleted file mode 100644 index ea7118a..0000000 --- a/content.js +++ /dev/null @@ -1,160 +0,0 @@ -// content.js - -// Content script for Elbi GradeSim -// Runs on amis.uplb.edu.ph pages -// Privacy: Only captures grades data that the user already has access to. -// All data is stored locally on the user's device and never sent to external servers. - -(function() { - 'use strict'; - - // Flag to track if we already have data this session - let hasData = false; - let isFetching = false; - - // Get auth token from localStorage (user's own session) - function getAuthToken() { - const token = localStorage.getItem('auth._token.local'); - if (token) { - return token.startsWith('Bearer ') ? token : `Bearer ${token}`; - } - return null; - } - - // Get session ID (user's own session) - function getSessionId() { - return localStorage.getItem('x-session-id'); - } - - // Intercept fetch requests to capture grades data from AMIS - // This only captures responses that the page already receives - const originalFetch = window.fetch; - window.fetch = async function(...args) { - const response = await originalFetch.apply(this, args); - - // Skip if we're the ones fetching - if (isFetching) { - return response; - } - - // Check if this is the grades API call - const url = args[0]?.toString() || ''; - if (url.includes('api-amis.uplb.edu.ph/api/students/grades')) { - try { - const clonedResponse = response.clone(); - const data = await clonedResponse.json(); - - // Only send if we got valid data (not an error response) - if (data && data.student_grades) { - hasData = true; - chrome.runtime.sendMessage({ - type: 'GRADES_DATA', - data: data - }); - } - } catch (e) { - // Silently ignore parsing errors - } - } - - return response; - }; - - // Also intercept XMLHttpRequest for compatibility - const originalXHROpen = XMLHttpRequest.prototype.open; - const originalXHRSend = XMLHttpRequest.prototype.send; - - XMLHttpRequest.prototype.open = function(method, url, ...rest) { - this._url = url; - return originalXHROpen.apply(this, [method, url, ...rest]); - }; - - XMLHttpRequest.prototype.send = function(...args) { - this.addEventListener('load', function() { - if (this._url && this._url.includes('api-amis.uplb.edu.ph/api/students/grades')) { - try { - const data = JSON.parse(this.responseText); - if (data && data.student_grades) { - hasData = true; - chrome.runtime.sendMessage({ - type: 'GRADES_DATA', - data: data - }); - } - } catch (e) { - // Silently ignore parsing errors - } - } - }); - return originalXHRSend.apply(this, args); - }; - - // Function to fetch grades (only if we don't have data yet) - async function fetchGradesData() { - if (hasData || isFetching) { - return; - } - - const token = getAuthToken(); - const sessionId = getSessionId(); - - if (!token) { - return; // User not logged in - } - - isFetching = true; - - const headers = { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Authorization': token, - }; - - if (sessionId) { - headers['X-Session-Id'] = sessionId; - } - - try { - const response = await originalFetch('https://api-amis.uplb.edu.ph/api/students/grades?summarize=true', { - method: 'GET', - credentials: 'include', - headers: headers - }); - - isFetching = false; - - if (!response.ok) { - return; - } - - const data = await response.json(); - - if (data && data.student_grades) { - hasData = true; - chrome.runtime.sendMessage({ - type: 'GRADES_DATA', - data: data - }); - } - } catch (e) { - isFetching = false; - } - } - - // Listen for messages from popup - chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.type === 'FETCH_GRADES') { - if (message.force) { - hasData = false; - isFetching = false; - } - fetchGradesData(); - } - return true; - }); - - // Auto-fetch once on page load (with delay to ensure page is ready) - if (window.location.hostname.includes('amis.uplb.edu.ph')) { - setTimeout(fetchGradesData, 2000); - } -})(); diff --git a/curriculum.js b/curriculum.js deleted file mode 100644 index 75b7869..0000000 --- a/curriculum.js +++ /dev/null @@ -1,11658 +0,0 @@ -// curriculum.js - -// UPLB Curriculum Database -// Complete undergraduate programs for University of the Philippines Los Baños -// NOTE: This is UPLB only - not UP Diliman, UP Manila, etc. - -const UPLB_PROGRAMS = { - "BSCS": { - "code": "BSCS", - "name": "BS Computer Science", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 130, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "CMSC 200", - "freeElectiveUnits": 15 - }, - "sp": { - "name": "Special Problem Track", - "code": "CMSC 190", - "freeElectiveUnits": 18 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CMSC 12", - "title": "Foundations of Computer Science", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CMSC 56", - "title": "Discrete Mathematical Structures in Computer Science I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 28", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "CMSC 21", - "title": "Fundamentals of Programming", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "CMSC 12" - ] - }, - { - "code": "CMSC 57", - "title": "Discrete Mathematical Structures in Computer Science II", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "CMSC 56" - ] - }, - { - "code": "CMSC 22", - "title": "Object-Oriented Programming", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CMSC 21" - ] - }, - { - "code": "CMSC 130", - "title": "Logic Design and Digital Computer Circuits", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CMSC 21" - ] - }, - { - "code": "CMSC 23", - "title": "Mobile Computing", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "CMSC 22" - ] - }, - { - "code": "CMSC 123", - "title": "Data Structures", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "CMSC 22", - "CMSC 57" - ] - }, - { - "code": "CMSC 131", - "title": "Introduction to Computer Organization and Machine Level Programming", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "CMSC 130", - "CMSC 21" - ] - }, - { - "code": "CMSC 124", - "title": "Design and Implementation of Programming Languages", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CMSC 123" - ] - }, - { - "code": "CMSC 127", - "title": "File Processing and Database Systems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CMSC 22", - "CMSC 57" - ] - }, - { - "code": "CMSC 132", - "title": "Computer Architecture", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CMSC 131" - ] - }, - { - "code": "CMSC 141", - "title": "Automata and Language Theory", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CMSC 123" - ] - }, - { - "code": "CMSC 125", - "title": "Operating Systems", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "CMSC 123", - "CMSC 131" - ] - }, - { - "code": "CMSC 128", - "title": "Introduction to Software Engineering", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "CMSC 127" - ] - }, - { - "code": "CMSC 137", - "title": "Data Communications and Networking", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "CMSC 131" - ] - }, - { - "code": "CMSC 142", - "title": "Design and Analysis of Algorithms", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "CMSC 123", - "CMSC 57" - ] - }, - { - "code": "CMSC 198", - "title": "Practicum", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [ - "CMSC 128" - ] - }, - { - "code": "CMSC 150", - "title": "Numerical and Symbolic Computation", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CMSC 123", - "MATH 28" - ] - }, - { - "code": "CMSC 173", - "title": "Human Computer Interaction", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CMSC 128" - ] - }, - { - "code": "CMSC 190", - "title": "Special Problem", - "units": 3, - "track": "sp", - "year": 4, - "sem": "1", - "prereqs": [ - "CMSC 128" - ] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "CMSC 170", - "title": "Introduction to Artificial Intelligence", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "CMSC 123", - "CMSC 57" - ] - }, - { - "code": "CMSC 180", - "title": "Introduction to Parallel Computing", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "CMSC 125", - "CMSC 132" - ] - }, - { - "code": "CMSC 200", - "title": "Undergraduate Thesis", - "units": 6, - "track": "thesis", - "year": 4, - "sem": "2", - "prereqs": [ - "CMSC 128" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - } -], - "requiredCodes": [ - "MATH 27", - "MATH 28", - "CMSC 12", - "CMSC 21", - "CMSC 22", - "CMSC 23", - "CMSC 56", - "CMSC 57", - "CMSC 100", - "CMSC 123", - "CMSC 124", - "CMSC 125", - "CMSC 127", - "CMSC 128", - "CMSC 130", - "CMSC 131", - "CMSC 132", - "CMSC 137", - "CMSC 141", - "CMSC 142", - "CMSC 150", - "CMSC 170", - "CMSC 173", - "CMSC 180", - "STAT 101", - "ENG 10" - ] - }, - "BSMATH": { - "code": "BSMATH", - "name": "BS Mathematics", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 129, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "MATH 200", - "freeElectiveUnits": 9, - "majorElectiveUnits": 6 - }, - "sp": { - "name": "Special Problem Track", - "code": "MATH 190", - "freeElectiveUnits": 9, - "majorElectiveUnits": 9 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "MATH 20", - "title": "The Landscape of Mathematics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 36", - "title": "Mathematical Analysis I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/PhilippineHistory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 37. Mathematical Analysis II", - "title": "3 MATH 37. Mathematical Analysis II 5 STAT 101. Statistical Methods 3 BIO 11.1 Investigative Biology Laboratory 3 CHEM 18.1. University Chemistry Lab 3 ARTS 1. Critical Perspectives in the Arts (2) GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Hu Activities 16", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 2 2 3 3 man Kinetics (2) 18", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MATH 38", - "title": "Mathematical Analysis III", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 37" - ] - }, - { - "code": "MATH 101", - "title": "Logic and Set Theory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 27", - "MATH 36" - ] - }, - { - "code": "PHYS 51", - "title": "Elements of Physics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51.1", - "title": "Elements of Physics Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activitie", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "5 MATH 103. Elementary Theory of Numbers", - "title": "5 MATH 103. Elementary Theory of Numbers 3 MATH 138. Introductory Topology 4 MATH 141. Introductory Combinatorics 1 AMAT 152. Fundamentals of Mathematical Comput 3 STS 1. Science, Technology, and Society s (2) GE Elective", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (3) Activities", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Training Service Program II 16", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 ing 3 3 Human Kinetics (2) (3) 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MATH 111", - "title": "Modern Algebra I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 101" - ] - }, - { - "code": "MATH 155", - "title": "Advanced Calculus I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 38", - "MATH 101" - ] - }, - { - "code": "MATH 195", - "title": "Research Methods in Mathematics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 101", - "MATH 111" - ] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication Major Elective", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 120. Linear Algebra", - "title": "3 MATH 120. Linear Algebra 3 MATH 133.Euclidean and Non-Euclidean Geometry 3 MATH 151. Ordinary Differential Equations 3 MATH Major Elective 3 COMA 150. Workplace Communication 3 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 MATH 198. Practicum", - "title": "3 MATH 198. Practicum 3 3 3 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MATH 135", - "title": "Projective Geometry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MATH 120" - ] - }, - { - "code": "MATH 165", - "title": "Complex Analysis I", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MATH 155" - ] - }, - { - "code": "MATH 181", - "title": "Introduction to Probability Theory Major Elective", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MATH 38" - ] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 190. Special Problems", - "title": "3 MATH 190. Special Problems 3 MATH 192. Foundations of Mathematics 3 MATH 199. Undergraduate Seminar 3 Major Elective 3 Elective 15", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 1 3 3 13", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "MATH 20", - "MATH 36", - "CHEM 18", - "KAS 1/HIST 1", - "ETHICS 1", - "3 MATH 37. Mathematical Analysis II", - "3", - "MATH 38", - "MATH 101", - "PHYS 51", - "PHYS 51.1", - "GE", - "5 MATH 103. Elementary Theory of Numbers", - "3", - "MATH 111", - "MATH 155", - "MATH 195", - "PI 10", - "COMM 10", - "3 MATH 120. Linear Algebra", - "3 MATH 198. Practicum", - "MATH 135", - "MATH 165", - "MATH 181", - "Elective", - "3 MATH 190. Special Problems", - "3" - ] - }, - "BSAPMATH": { - "code": "BSAPMATH", - "name": "BS Applied Mathematics", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 131, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "AMAT 200", - "freeElectiveUnits": 9, - "majorElectiveUnits": 12 - }, - "sp": { - "name": "Special Problem Track", - "code": "AMAT 190", - "freeElectiveUnits": 12, - "majorElectiveUnits": 15 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "AMAT 19", - "title": "Finite Mathematics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 36", - "title": "Mathematical Analysis I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 37. Mathematical Analysis II", - "title": "3 MATH 37. Mathematical Analysis II 5 STAT 101. Statistical Methods 3 BIO 11.1. Investigative Biology Laboratory 3 CHEM 18.1. University Chemistry Laboratory 3 ARTS 1. Critical Perspectives in the Arts (2) GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced 17 Human Kinetics Activities", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 2 2 3 3 (2) 16", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "AMAT 110", - "title": "Mathematical Modeling", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "AMAT 105" - ] - }, - { - "code": "MATH 38", - "title": "Mathematical Analysis III", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 37" - ] - }, - { - "code": "MATH 101", - "title": "Logic and Set Theory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 27", - "MATH 36" - ] - }, - { - "code": "PHYS 51", - "title": "Elements of Physics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51.1", - "title": "Elements of Physics Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 AMAT 105. Matrices and Applications", - "title": "3 AMAT 105. Matrices and Applications 5 AMAT 112. Introduction to Mathematical Optimization 3 AMAT 152. Fundamentals of Mathematical Computing 4 AMAT 170. Theory of Interest 1 STS 1. Science, Technology, and Society (2)", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (3) Human Kinetics Activities 16 NSTP 2. National Training Service Program II", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 (2) (3) 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MATH 151", - "title": "Ordinary Differential Equations", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 38", - "MATH 101" - ] - }, - { - "code": "MATH 174", - "title": "Numerical Analysis I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 38", - "AMAT 152" - ] - }, - { - "code": "MATH 181", - "title": "Introduction to Probability Theory", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 38" - ] - }, - { - "code": "Elective", - "title": "(AMAT/MATH)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 155. Advanced Calculus I", - "title": "3 MATH 155. Advanced Calculus I 3 MATH 175. Numerical Analysis II 3 MATH 195. Research Methods in Mathematics 3 Elective (AMAT/MATH) 3", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMA 150", - "title": "Workplace Communication 3 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 AMAT 198. Practicum", - "title": "3 AMAT 198. Practicum 3 3 3 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(AMAT/MATH)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(AMAT/MATH)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 AMAT 190. Special Problems", - "title": "3 AMAT 190. Special Problems 3 AMAT 199. Undergraduate Seminar 3 Elective (AMAT/MATH) 3 Elective 3 Elective 15", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 1 3 3 3 13", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "AMAT 19", - "MATH 36", - "CHEM 18", - "KAS 1/HIST 1", - "ETHICS 1", - "3 MATH 37. Mathematical Analysis II", - "3", - "AMAT 110", - "MATH 38", - "MATH 101", - "PHYS 51", - "PHYS 51.1", - "3 AMAT 105. Matrices and Applications", - "GE", - "3", - "MATH 151", - "MATH 174", - "MATH 181", - "Elective", - "COMM 10", - "GE", - "3 MATH 155. Advanced Calculus I", - "COMA 150", - "3 AMAT 198. Practicum", - "Elective", - "Elective", - "PI 10", - "Elective", - "Elective", - "3 AMAT 190. Special Problems", - "3" - ] - }, - "BSSTAT": { - "code": "BSSTAT", - "name": "BS Statistics", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 143, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyda Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippin History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 30", - "title": "Genetics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "y", - "title": "y 3 ARTS 1. Critical Perspectives in the Arts e 3", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective 3 MATH 28. Analytic Geometry and Calculus III 3 CMSC 12. Foundations of Computer Science 3 STAT 162. Experimental Designs", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) Human Kinetics Activities 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "STAT 135", - "title": "Logic and Matrix Algebra 3 3 in Statistics 3 STAT 182. Statistical Packages 3 3 3 (2) 15", - "units": 6, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CMSC 21", - "title": "Fundamentals of Programming", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CMSC 12" - ] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 144", - "title": "Introductory Statistical Theory I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 28", - "STAT 101" - ] - }, - { - "code": "STAT 168", - "title": "Response Surface Methodology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "STAT 162" - ] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 182. Introduction to Stochastic Processes", - "title": "3 MATH 182. Introduction to Stochastic Processes 3 CMSC 22. Object-Oriented Programming 3 ABME 10. Foundations of Entrepreneurship 3 STAT 145. Introductory Statistical Theory II 3 STAT 163. Survey Designs", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) Human Kinetics Activities 15 NSTP 1. National Training Service Program I", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 GE Elective", - "title": "3 GE Elective 3 GE Elective 3 3 3 (2) (3) 15", - "units": 6, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "Track", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 146", - "title": "Introductory Statistical Theory III", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 145" - ] - }, - { - "code": "STAT 173", - "title": "Survey Operations", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 163" - ] - }, - { - "code": "STAT 175", - "title": "Analysis of Multivariate Data", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 151" - ] - }, - { - "code": "STAT 181", - "title": "Statistical Computing", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 145", - "STAT 182" - ] - }, - { - "code": "NSTP 2", - "title": "National Training Service Program II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "Elective", - "title": "Track 3 CMSC 127. File Processing and Database Systems", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "STAT 147", - "title": "Introduction to the Theory of 3 Nonparametric Statistics 3 STAT 151. Applied Regression and Correlation 3 STAT 156. Introductory Time Series Analysis 3 (3) 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 STAT 198. Practicum", - "title": "3 STAT 198. Practicum 3 3 3 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Elective", - "title": "Track", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 148", - "title": "Introductory Bayesian Statistics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 165", - "title": "Categorical Data Analysis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "STAT 151" - ] - }, - { - "code": "STAT 190", - "title": "Special Problem", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 191", - "title": "Special Topics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 174", - "title": "Introductory Biostatistics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "STAT 145" - ] - }, - { - "code": "STAT 192.1", - "title": "Statistical Consulting Laboratory", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 PI 10. The Life and Works of Jose Rizal", - "title": "3 PI 10. The Life and Works of Jose Rizal 3 STAT 157. Financial Risk Analysis 3 STAT 167. Statistical Quality Control 3 STAT 183. Introductory Data Analytics 1 STAT 190. Special Problem 3 STAT 199. Undergraduate Seminar 3 1 20", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 2 1 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ETHICS 1", - "KAS 1/HIST 1", - "MATH 27", - "BIO 30", - "STAT 101", - "y", - "GE", - "STAT 135", - "STS 1", - "CMSC 21", - "ECON 11", - "STAT 144", - "STAT 168", - "3 MATH 182. Introduction to Stochastic Processes", - "3 GE Elective", - "COMM 10", - "Elective", - "STAT 146", - "STAT 173", - "STAT 175", - "STAT 181", - "3", - "Elective", - "STAT 147", - "3 STAT 198. Practicum", - "Elective", - "ENG 10", - "STAT 148", - "STAT 165", - "STAT 190", - "STAT 191", - "STAT 174", - "STAT 192.1", - "3 PI 10. The Life and Works of Jose Rizal", - "3" - ] - }, - "BSMST": { - "code": "BSMST", - "name": "BS Mathematics and Science Teaching", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 150, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 28", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "MATH 36", - "title": "Mathematical Analysis I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "MATH 37", - "title": "Mathematical Analysis II", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "MATH 114", - "title": "Differential Equations", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "EDUC 100", - "title": "The Teaching Profession", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "EDUC 101", - "title": "The Child and Adolescent Learner", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "EDUC 102", - "title": "Facilitating Learning", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "EDUC 103", - "title": "Curriculum Development", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "EDUC 110", - "title": "Principles of Teaching", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "EDUC 160", - "title": "Educational Assessment", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "EDUC 190", - "title": "Practice Teaching", - "units": 6, - "gradeType": "S/U", - "year": 4, - "sem": "1", - "prereqs": [ - "EDUC 100" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "MATH 27", - "MATH 28", - "MATH 36", - "MATH 37", - "MATH 114", - "STAT 101", - "EDUC 100", - "EDUC 101", - "EDUC 102", - "EDUC 103", - "EDUC 110", - "EDUC 160", - "EDUC 190", - "ENG 10" - ] - }, - "BSBIO": { - "code": "BSBIO", - "name": "BS Biology", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 143, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 25", - "title": "Fundamental Calculus", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MCB 11", - "title": "Biology and Applications of Microorganis", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 BIO 11.1. Investigative Biology Laboratory", - "title": "3 BIO 11.1. Investigative Biology Laboratory 3 CHEM 18.1 University Chemistry Laboratory ms 3 BIO 30. Genetics 3 PI 10. The Life and Works of Jose Rizal 3 GE Elective 3 GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) Human Kinetics Activities 18", - "units": 16, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 40", - "title": "Basic Organic Chemistry", - "units": 4, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CHEM 40.1", - "title": "Basic Organic Chemistry Laboratory 1 5", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "BIO 14", - "title": "Biodiversity", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "BOT 14", - "title": "University Botany", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ZOO 14", - "title": "University Zoology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 160", - "title": "Introductory Biochemistry", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 150", - "title": "Ecology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Hum Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "5 PHYS 51. Elements of Physics", - "title": "5 PHYS 51. Elements of Physics 3 PHYS 51.1. Elements of Physics Laboratory 3 BIO 101. Introductory Molecular Biology 3 CHEM 160.1. Introductory Biochemistry Laboratory 4 BIO 140. Evolutionary Biology an (2)", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective (3) ABME 10. Foundations of Entrepreneurship", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) 18 Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Training Service Program II 19", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "STAT 164", - "title": "Statistics for the Biological Sciences", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 120", - "title": "Cell Biology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 142", - "title": "Principles of Systematic Biology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication Major Major", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 BIO 195. Research Methods in the Biological Sciences", - "title": "3 BIO 195. Research Methods in the Biological Sciences 3 BIO 127. Developmental Biology", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday 3 3 Life 3 Major 3 Major 3 Elective 18", - "units": 18, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "BIO 198", - "title": "Practicum 3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMA 150", - "title": "Workplace Communication", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 199", - "title": "Undergraduate Seminar Major Major Major", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 Major", - "title": "3 Major 1 Elective 3 BIO 200. Undergraduate Thesis 3 3 3 3 19", - "units": 9, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "CHEM 18", - "MATH 25", - "MCB 11", - "KAS 1/HIST 1", - "ARTS 1", - "STS 1", - "3 BIO 11.1. Investigative Biology Laboratory", - "CHEM 40", - "CHEM 40.1", - "BIO 14", - "BOT 14", - "ZOO 14", - "CHEM 160", - "BIO 150", - "5 PHYS 51. Elements of Physics", - "GE", - "STAT 164", - "BIO 120", - "BIO 142", - "COMM 10", - "3 BIO 195. Research Methods in the Biological Sciences", - "ETHICS 1", - "BIO 198", - "COMA 150", - "BIO 199", - "Elective", - "BIO 200", - "3 Major" - ] - }, - "BSCHEM": { - "code": "BSCHEM", - "name": "BS Chemistry", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 142, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MCB 11", - "title": "Biology and Applications of Microorganisms", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine Histo", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 19. Chemical Structure and Properties", - "title": "3 CHEM 19. Chemical Structure and Properties 3 CHEM 18.1 University Chemistry Laboratory 3 MATH 28. Analytic Geometry and Calculus III 3 PHYS 71. University Physics I 3 PHYS 71.1. University Physics I Laboratory ry 3 GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) Human Kinetics Activities 18", - "units": 16, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 32", - "title": "Quantitative Inorganic Analysis 3", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [ - "CHEM 18", - "CHEM 18.1" - ] - }, - { - "code": "CHEM 32.1", - "title": "Quantitative Inorganic Analysis 2 Laboratory 5", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [ - "CHEM 32" - ] - }, - { - "code": "CHEM 43", - "title": "Organic Chemistry I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 19", - "CHEM 32" - ] - }, - { - "code": "PHYS 72", - "title": "University Physics II", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 71", - "MATH 28" - ] - }, - { - "code": "PHYS 72.1", - "title": "University Physics II Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 71.1", - "PHYS 72" - ] - }, - { - "code": "CMSC 12/AMAT 152", - "title": "Foundations of Computer Science/Fund", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 111", - "title": "Physical Chemistry I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 32", - "MATH 28", - "PHYS 72" - ] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kin Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 43.1. Organic Chemistry I Laboratory", - "title": "3 CHEM 43.1. Organic Chemistry I Laboratory 4 CHEM 112. Physical Chemistry II 1 GE Elective amentals 3 of STAT Mathematical 162. Experimental Computing Designs 3 PI 10. The Life and Works of Jose Rizal", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in 3 3 Communication etics HK 12/13. Human Kinetics Activities/Advanced (2) Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I 17 17", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 44", - "title": "Organic Chemistry II", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [ - "CHEM 43" - ] - }, - { - "code": "CHEM 44.1", - "title": "Organic Chemistry II Laboratory 2 5", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [ - "CHEM 44" - ] - }, - { - "code": "CHEM 111.1", - "title": "Physical Chemistry I Laboratory", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 111" - ] - }, - { - "code": "Elective", - "title": "(NON-CHEM)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 137", - "title": "Modern Analytical Chemistry", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 32", - "CHEM 111" - ] - }, - { - "code": "CHEM 140", - "title": "Organic Analysis", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 44", - "CHEM 44.1" - ] - }, - { - "code": "CHEM 161A", - "title": "Biochemistry I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 44", - "CHEM 44.1" - ] - }, - { - "code": "CHEM 192", - "title": "Chemical Information, Literature and Communi", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Training Service Program II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198.", - "title": "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198. 3 CHEM 115. Physical Chemistry III 3 CHEM 137.1. Modern Analytical Chem Laboratory2 4 CHEM 161.1. General Biochemistry Laboratory 3 CHEM 180. Environmental Chemistry cation 3 CHEM 161B. Biochemistry II (3) 18", - "units": 15, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "Practicum", - "title": "Practicum 3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CHEM 120", - "title": "Inorganic Chemistry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 131", - "title": "Technical Analysis I (Foods and Feeds)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 200", - "title": "Undegraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(NON-CHEM)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 120.1. Inorganic Chemistry Laboratory", - "title": "3 CHEM 120.1. Inorganic Chemistry Laboratory 4 CHEM 171. Industrial Chemistry 3 CHEM 199. Undergraduate Seminar 3 CHEM 200. Undegraduate Thesis 3 Elective (CHEM) 16", - "units": 12, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "CHEM 18", - "ARTS 1", - "MCB 11", - "MATH 27", - "ETHICS 1", - "KAS 1/HIST 1", - "3 CHEM 19. Chemical Structure and Properties", - "CHEM 32", - "CHEM 32.1", - "CHEM 43", - "PHYS 72", - "PHYS 72.1", - "CMSC 12/AMAT 152", - "CHEM 111", - "GE", - "3 CHEM 43.1. Organic Chemistry I Laboratory", - "COMM 10", - "CHEM 44", - "CHEM 44.1", - "CHEM 111.1", - "Elective", - "CHEM 137", - "CHEM 140", - "CHEM 161A", - "CHEM 192", - "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198.", - "Practicum", - "CHEM 120", - "CHEM 131", - "CHEM 200", - "Elective", - "STS 1", - "3 CHEM 120.1. Inorganic Chemistry Laboratory" - ] - }, - "BSAPPHY": { - "code": "BSAPPHY", - "name": "BS Applied Physics", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 143, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "PHYS 101", - "title": "Newtonian Mechanics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippin History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 PHYS 102. Electromagnetism", - "title": "4 PHYS 102. Electromagnetism 3 PHYS 111. Mathematical Methods of Physics I 3 MATH 28. Analytic Geometry and Calculus III 3 COMA 150. Workplace Communication e 3 CHEM 18.1. University Chemistry Laboratory 2 (2) GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) 16 Human Kinetics Activities 19", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "APHY 10.1", - "title": "Programming in Physics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 103", - "title": "Mechanical Waves, Optics, and Thermod", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 102" - ] - }, - { - "code": "PHYS 112", - "title": "Mathematical Methods of Physics II", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 111" - ] - }, - { - "code": "PHYS 121", - "title": "Theoretical Mechanics I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 101", - "PHYS 111" - ] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyda Life", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 APHY 101. Physics in Scientific Instruments", - "title": "1 APHY 101. Physics in Scientific Instruments ynamics 4 PHYS 104. Modern Physics 4 PHYS 113. Mathematical Methods of Physics III 3 PHYS 131. Electromagnetic Theory I y 3", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced (2) 3 Human Kinetics Activities (2) NSTP 2. National Training Service Program II (3) 18", - "units": 17, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "PHYS 115", - "title": "Computational Physics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 122", - "title": "Theoretical Mechanics II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "PHYS 121" - ] - }, - { - "code": "PHYS 132", - "title": "Electromagnetic Theory II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "PHYS 131" - ] - }, - { - "code": "PHYS 141", - "title": "Quantum Physics I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "PHYS 104", - "PHYS 113" - ] - }, - { - "code": "PHYS 195", - "title": "Research Methods in Physics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 APHY 102. Physics of Electronic Devices", - "title": "4 APHY 102. Physics of Electronic Devices 3 PHYS 151. Statistical Physics I 3 PHYS 165. Optical Physics 3 PHYS 192.1. Experimental Physics I", - "units": 2, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication 3 3 Elective (APHY/PHYS) 19", - "units": 17, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "APHY 198", - "title": "Practicum 3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "APHY 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 142", - "title": "Quantum Physics II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "PHYS 141" - ] - }, - { - "code": "Elective", - "title": "(APHY/PHYS)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(APHY/PHYS)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(APHY/PHYS)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 APHY 191. Special Topics", - "title": "3 APHY 191. Special Topics 3 APHY 199. Undegraduate Seminar 3 APHY 200. Undergraduate Thesis 3 STS 1. Science, Technology, and Society 3 Elective (APHY/PHYS) 3 Elective 18", - "units": 16, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "PHYS 101", - "CHEM 18", - "MATH 27", - "ARTS 1", - "KAS 1/HIST 1", - "4 PHYS 102. Electromagnetism", - "APHY 10.1", - "PHYS 103", - "PHYS 112", - "PHYS 121", - "ETHICS 1", - "GE", - "1 APHY 101. Physics in Scientific Instruments", - "GE", - "PHYS 115", - "PHYS 122", - "PHYS 132", - "PHYS 141", - "PHYS 195", - "PI 10", - "4 APHY 102. Physics of Electronic Devices", - "COMM 10", - "APHY 198", - "APHY 200", - "PHYS 142", - "Elective", - "Elective", - "Elective", - "Elective", - "3 APHY 191. Special Topics" - ] - }, - "BACOMM": { - "code": "BACOMM", - "name": "BA Communication Arts", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 145, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "COMA 200", - "freeElectiveUnits": 6 - }, - "sp": { - "name": "Special Problem Track", - "code": "COMA 190", - "freeElectiveUnits": 9 - } - }, - "defaultTrack": "thesis", - "majorCourses": [ - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMA 101", - "title": "Language and Communication", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUM 100", - "title": "Critical Theories", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "SPCM 102", - "title": "Voice and Diction", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday 3 3 STS 1. Science, Technology, and Society 3 GE Elective 3 COMA 102. Language and Culture 3 ENG 100. Rereading the Literary Canons 3 SPCM 101. Rhetoric", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Kinetics Activities 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "Life", - "title": "Life 3 3 3 3 3 (2) 18", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENG 101", - "title": "English Prose Styles", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENG 104", - "title": "Argumentative Writing", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUM 101", - "title": "Visual Culture", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "THEA 101", - "title": "History of the Theatre", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "THEA 102", - "title": "Theatre Communication", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMA 103. Introduction to Discourse Analysis", - "title": "3 COMA 103. Introduction to Discourse Analysis 3 COMA 192. Introduction to Research 3 SPCM 104. Occasional Speeches 3 Major 3 Major 3 Major", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Kinetics Activities (3) NSTP 2. National Training Service Program II 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 (2) (3) 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMA 105", - "title": "Principles of Public Relations and Advertising", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMA 190", - "title": "Special Problems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(Foreign Language)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(SOSC or PHLO)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(SOSC or PHLO)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(STAT)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMA 150. Workplace Communication", - "title": "3 COMA 150. Workplace Communication 3 COMA 193. Workshop 3 COMA 199. Undergraduate Seminar 3 Major 3 Major 3 Elective (Foreign Language) 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMA", - "title": "200a. Practicum 3 1 3 3 3 16", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMA 200", - "title": "Undergradute Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMA", - "title": "200a. Practicum", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUM 102", - "title": "New Media Art", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "THEA 103", - "title": "Philippine Theatre Major Major", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 GE Elective", - "title": "3 GE Elective 3 PI 10. The Life and Works of José Rizal 3 COMA 200. Undergraduate Thesis 3 HUM 104. Culture and Arts Management 3 HUM 170. Philippine Art and Society 3 Elective (SOSC or PHLO) 18", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 18", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ARTS 1", - "COMM 10", - "KAS 1/HIST 1", - "COMA 101", - "HUM 100", - "SPCM 102", - "ETHICS 1", - "Life", - "GE", - "ENG 101", - "ENG 104", - "HUM 101", - "THEA 101", - "THEA 102", - "3 COMA 103. Introduction to Discourse Analysis", - "3", - "COMA 105", - "COMA 190", - "Elective", - "Elective", - "Elective", - "Elective", - "3 COMA 150. Workplace Communication", - "3", - "COMA", - "COMA 200", - "COMA", - "HUM 102", - "THEA 103", - "3 GE Elective", - "3" - ] - }, - "BASOCIO": { - "code": "BASOCIO", - "name": "BA Sociology", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 136, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 10", - "title": "General Principles of Sociology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ANTH 10", - "title": "Introduction to Social and Cultural Anthropolog", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PSY 10", - "title": "Foundations of Psychology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 GE Elective", - "title": "3 GE Elective 3 HIST 10. Introduction to History 3 SOC 100. Social Organization y 3 POSC 10. Principles of Government and Politic 3 SOC 110. Sociology of the Family (2) HK 12/13. Human Kinetics Activities/Advanced Human Kinetics Activities 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 STS 1. Science,", - "title": "3 STS 1. Science, Technology, and Society 3 GE Elective 3 s 3 (2) 15", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 166", - "title": "Statistics for the Social Sciences", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 116", - "title": "Sociology of Religion", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 130/SOC 135", - "title": "Social Psychology/Attitudes and Persuasion", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 AERS 160. Rural Sociology", - "title": "3 AERS 160. Rural Sociology 3 SOC 140. Introduction to Demography 3 Elective (SOSC) 3 Elective (SOSC) 3 Elective (2) HK 12/13. Human Kinetics Activities/Advanced Human Kinetics Activities (3) NSTP 2. National Training Service Program II 15", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 PI 10. The Life", - "title": "3 PI 10. The Life and Works of Jose Rizal 3 GE Elective 3 3 3 (2) (3) 15", - "units": 6, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(SOSC)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(SOSC)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 107", - "title": "Gender Relations", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 151", - "title": "Classical Sociological Theories", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 195", - "title": "Research Methodologies in the Social Sciences", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 195.1", - "title": "Research Methodologies in the Social Sciences Laboratory", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 SOC 166. Social Program Evaluation", - "title": "3 SOC 166. Social Program Evaluation 3 SOC 152. Contemporary Sociological Theories 3 SOC 192. Introduction to Qualitative Social Research 3 COMM 10. Critical Perspectives in Communication 2 Elective 1 15", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 SOC 198.", - "title": "3 SOC 198. Internship 3 3 3 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "SOC 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 114", - "title": "Sociology of Economic Life", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 120", - "title": "Urban Sociology", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 180", - "title": "Collective Behavior", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 191", - "title": "Special Topics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SOC 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 SOC 112. Sociology of Politics", - "title": "1 SOC 112. Sociology of Politics 3 SOC 160/SOC 165. Social Change/Sociology o Development 3 SOC 170/SOC 175. Social Problems/Deviance 3 SOC 200. Undergraduate Thesis 3 Elective 3 16", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 f 3 3 3 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "KAS 1/HIST 1", - "ETHICS 1", - "SOC 10", - "ANTH 10", - "PSY 10", - "3 GE Elective", - "3 STS 1. Science,", - "ARTS 1", - "ECON 11", - "STAT 166", - "SOC 116", - "SOC 130/SOC 135", - "3 AERS 160. Rural Sociology", - "3 PI 10. The Life", - "Elective", - "Elective", - "SOC 107", - "SOC 151", - "SOC 195", - "SOC 195.1", - "3 SOC 166. Social Program Evaluation", - "3 SOC 198.", - "SOC 199", - "SOC 114", - "SOC 120", - "SOC 180", - "SOC 191", - "SOC 200", - "1 SOC 112. Sociology of Politics", - "3" - ] - }, - "BAPHILO": { - "code": "BAPHILO", - "name": "BA Philosophy", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 132, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "PHLO 200", - "freeElectiveUnits": 12 - }, - "sp": { - "name": "Special Problem Track", - "code": "PHLO 190", - "freeElectiveUnits": 15 - } - }, - "defaultTrack": "thesis", - "majorCourses": [ - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday L", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine H", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 11", - "title": "Fundamental Approaches to Philosophy", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 12", - "title": "Logic", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ife 3 PI 10. The Life and Works of Jose Rizal", - "title": "ife 3 PI 10. The Life and Works of Jose Rizal istory 3 GE Elective 3 PHLO 150. Epistemology 3 PHLO 171. Ethics 3 ECON 11/POSC 10. General Economics/Principles of Governmen 3 SPEC. Readings in Speculative Thought", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic (2) Activities 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 t and 3Politics 3 s (2) 18", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 110", - "title": "Ancient Philosophy", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 112", - "title": "Modern Philosophy", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 173", - "title": "Practical Ethics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 PHLO Elective", - "title": "3 PHLO Elective 3 PHLO 111. Medieval Philosophy 3 PHLO 120. Philosophical Reasoning 3 GE Elective 3 Elective", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic 3 Activities (3) NSTP 2. National Training Service Program II (2) 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 s (2) (3) 15", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "PHLO 197", - "title": "Philosophic Problems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 174", - "title": "Biomedical Ethics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 181", - "title": "Aesthetics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 195", - "title": "Philosophy of Language", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 PHLO 113. Contemporary Philosophy", - "title": "3 PHLO 113. Contemporary Philosophy 3 PHLO 182. Philosophy and Semiotics 3 Specialized course. Elective in one discipline 3 Elective (PHLO) 3 Elective (PHLO) 15 Elective", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 18", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "PHLO 178", - "title": "Environmental Ethics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 176", - "title": "Social and Political Philosophy", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHLO 190", - "title": "Special Problems", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(PHLO) Specialized course. Elective in one discipline", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 PHLO 160. Philosophy of Science", - "title": "3 PHLO 160. Philosophy of Science 3 PHLO 184. Feminist Philosophy 3 PHLO 185. Critical Perspectives in Filipino Philosophy 3 PHLO 190. Special Problems 3 Specialized course. Elective in one discipline 15", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ETHICS 1", - "KAS 1/HIST 1", - "ARTS 1", - "STS 1", - "PHLO 11", - "PHLO 12", - "ife 3 PI 10. The Life and Works of Jose Rizal", - "3", - "COMM 10", - "GE", - "Elective", - "PHLO 110", - "PHLO 112", - "PHLO 173", - "3 PHLO Elective", - "3", - "PHLO 197", - "PHLO 174", - "PHLO 181", - "PHLO 195", - "Elective", - "3 PHLO 113. Contemporary Philosophy", - "3", - "PHLO 178", - "PHLO 176", - "PHLO 190", - "Elective", - "3 PHLO 160. Philosophy of Science", - "3" - ] - }, - "AASS": { - "code": "AASS", - "name": "Associate in Arts in Sports Studies", - "college": "CAS", - "collegeName": "College of Arts and Sciences", - "available": true, - "totalUnitsRequired": 78, - "geCoursesRequired": 5, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "SS 102", - "title": "Introduction to Sports Studies", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PEd 91", - "title": "Physical Education 91", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 2, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "Basic Human Kinetics Activities", - "units": 2, - "year": 1, - "sem": "2", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "SS 110", - "title": "Foundations of Sports Studies", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [ - "SS 102" - ] - }, - { - "code": "PEd 92", - "title": "Physical Education 92", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "SS 103", - "title": "Sports Science Fundamentals", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "SS 102" - ] - }, - { - "code": "PEd 151", - "title": "Physical Education 151", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "1", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "KAS 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "SS 104", - "title": "Sports Studies 104", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "SS 102" - ] - }, - { - "code": "PEd 93", - "title": "Physical Education 93", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "SS 130", - "title": "Sports Studies 130", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "SS 102" - ] - }, - { - "code": "PEd 174", - "title": "Physical Education 174", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "PEd 176", - "title": "Physical Education 176", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "MATH 10", - "title": "Mathematics 10", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 11/12/13", - "title": "Human Kinetics Activities", - "units": 2, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SS 120", - "title": "Sports Studies 120", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "SS 102" - ] - }, - { - "code": "PI 100", - "title": "The Life, Works, and Writings of Jose Rizal", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PEd 172", - "title": "Physical Education 172", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "PEd 100", - "title": "Physical Education 100", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "PEd 196", - "title": "Physical Education 196", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "PEd 130.1", - "title": "Physical Education 130.1", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "PEd 91" - ] - }, - { - "code": "HK 11/12/13", - "title": "Human Kinetics Activities", - "units": 2, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "SS 102", - "SS 103", - "SS 104", - "SS 110", - "SS 120", - "SS 130", - "PEd 91", - "PEd 92", - "PEd 93", - "PEd 100", - "PEd 130.1", - "PEd 151", - "PEd 172", - "PEd 174", - "PEd 176", - "PEd 196", - "HK 11", - "HK 12", - "HK 12/13", - "HK 11/12/13", - "KAS 1", - "PI 100", - "MATH 10" - ] - }, - "BSAGRI": { - "code": "BSAGRI", - "name": "BS Agriculture", - "college": "CAFS", - "collegeName": "College of Agriculture and Food Science", - "available": true, - "totalUnitsRequired": 142, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "AGRI 11", - "title": "1 AGRI", - "units": 51, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 21", - "title": "3 AGRI", - "units": 22, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 31", - "title": "3 AGRI", - "units": 32, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 41", - "title": "3 CHEM", - "units": 18, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "3 ETHICS", - "units": 1, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "3 HK 16", - "units": 11, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 (2) 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 18.1", - "title": "2 KAS 1/HIST", - "units": 1, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 10", - "title": "3 ECON", - "units": 11, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 42", - "title": "3 BOT", - "units": 20, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 61", - "title": "3 AGRI", - "units": 111, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABT 10", - "title": "3 AGRI", - "units": 171, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ELECTIVE", - "title": "GE 1 3 CHEM", - "units": 40, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "OR 13 (2) CHEM", - "units": 40.1, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP", - "title": "1 17", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 4 1 (3) 20", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "Midyear", - "title": "Midyear Major 198/200a 3", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 199", - "title": "1 SPECIALIZATION COURSE", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "MAJOR", - "title": "COURSE 4 3 SPECIALIZATION COURSE", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "MAJOR", - "title": "COURSE 5 3 SPECIALIZATION COURSE", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "MAJOR", - "title": "COURSE 6 3 Elective", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 1", - "title": "3 MAJOR 200/MAJOR 200a", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "MAJOR 200/MAJOR 190", - "title": "3 Undergraduate Seminar", - "units": 1, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "3", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "OR 13 20", - "units": 2, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "2", - "title": "2 3 4 3 3 15", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "AGRI 11", - "AGRI 21", - "AGRI 31", - "AGRI 41", - "ARTS 1", - "STS 1", - "3", - "CHEM 18.1", - "ABME 10", - "AGRI 42", - "AGRI 61", - "ABT 10", - "ELECTIVE", - "3", - "Midyear", - "AGRI 199", - "MAJOR", - "MAJOR", - "MAJOR", - "ABE 1", - "MAJOR 200/MAJOR 190", - "COMM 10", - "2" - ] - }, - "BSABIO": { - "code": "BSABIO", - "name": "BS Agricultural Biotechnology", - "college": "CAFS", - "collegeName": "College of Agriculture and Food Science", - "available": true, - "totalUnitsRequired": 142, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ABT 11", - "title": "Introduction to Agricultural Biotechnology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 21", - "title": "(Lab). Introduction to Animal Science", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 31", - "title": "(Lab). Fundamentals of Crop Science", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 AGRI 22. Introduction to Livestock and Poultry Productio", - "title": "1 AGRI 22. Introduction to Livestock and Poultry Productio 3 AGRI 32. Fundamentals of Crop Science II 3 AGRI 41. Principles of Crop Protection 3 CHEM 18.1. University Chemistry Laboratory 3 HIST1/KAS1. Kasaysayan ng Pilipinas/Philippine History 3 ETHICS 1. Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management 16", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "n", - "title": "n 3 3 2 3 3 (2) 17", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CHEM 40", - "title": "Basic Organic Chemistry", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 40.1", - "title": "Basic Organic Chemistry Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 42", - "title": "Pest Management", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "MCB 11", - "title": "Biology and Applications of Microorganisms", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "GE1 (Math 10). Mathematics, Culture and Society", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 30", - "title": "Genetics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 CHEM 160. Introductory Biochemistry", - "title": "4 CHEM 160. Introductory Biochemistry 1 ABT 101. Fundamentals of Agricultural Biotechnology 3 STAT 162. Experimental Designs I 3 CMSC 12. Introduction to Computer Science 3 MATH 25. Fundamental Calculus 3 AGRI 51. Principles of Soil Science (2) Elective GE", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program 17", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 3 (3) 21", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ABT 103", - "title": "Experimental Techniques in Agricultural Biotechnology I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 101", - "title": "Introductory Molecular Biology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 61", - "title": "Agricultural Extension Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 10", - "title": "Cultivating the Entreprenuerial Mindset", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "GE 3 (SAS 1). Self and Society", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Service Training Program Total", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ABT 106. Molecular Markers", - "title": "3 ABT 106. Molecular Markers 3 ABT 104. Experimental Techniques in Agricultural Biotechno 3 Elective course 3 ECON 11. General Economics 3 AGRI 171. Ethics, Laws, and Policies in Agriculture 3 SPECIALIZATION COURSE", - "units": 1, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human 3 Kinetics Activities (3) 21", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ABT", - "title": "198/200a. Practicum/Major Practice logy3II 3 3 3 3 (2) 18", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MGT 101", - "title": "Concepts and Dynamics of Management", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABT 107", - "title": "Recombinant DNA Technology SPECIALIZATION COURSE SPECIALIZATION COURSE SPECIALIZATION COURSE", - "units": 4, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABT", - "title": "200/ABT 200a. Undergraduate Thesis/Major Practice", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "ABT 108", - "title": "Issues and Regulation of Agricultural Biotechno 3 ABT 199. Undergraduate Seminar 3 AGRI 199. Colloquium in Agriculture 3 Elective Course 3 ABT 200/190. Undergraduate Thesis/Special Problems 3 (2) 18", - "units": 2, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 logy 1 1 3 3 11", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ABT 11", - "CHEM 18", - "AGRI 21", - "AGRI 31", - "ARTS 1", - "STS 1", - "1 AGRI 22. Introduction to Livestock and Poultry Productio", - "n", - "CHEM 40", - "CHEM 40.1", - "AGRI 42", - "MCB 11", - "Elective", - "BIO 30", - "4 CHEM 160. Introductory Biochemistry", - "3", - "ABT 103", - "BIO 101", - "AGRI 61", - "PI 10", - "ABME 10", - "COMM 10", - "Elective", - "3 ABT 106. Molecular Markers", - "3", - "ABT", - "MGT 101", - "ABT 107", - "ABT", - "3", - "ABT 108", - "3" - ] - }, - "BSFST": { - "code": "BSFST", - "name": "BS Food Science and Technology", - "college": "CAFS", - "collegeName": "College of Agriculture and Food Science", - "available": true, - "totalUnitsRequired": 143, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "FST 11", - "title": "3 GE", - "units": 1, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 21", - "title": "(Lab) 3 MCB 11 (Lab)", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 31", - "title": "(Lab) 3 MATH", - "units": 27, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "3 CHEM 18.1 (Lab)", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "3 GE", - "units": 2, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "3 PHYS", - "units": 51, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "-2 PHYS 51.1 (Lab)", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "or 18", - "units": 13, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 2 3 3 2 -2 19", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 40", - "title": "3 STAT 101 (Lab)", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 40.1", - "title": "(Lab) 2 MGT", - "units": 101, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 10", - "title": "3 CHEM", - "units": 160, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 32", - "title": "3 MCB 180 (Lab)", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 18", - "CHEM 18.1" - ] - }, - { - "code": "CHEM 32.1", - "title": "(Lab) 2 FST 101 (Lab)", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 32" - ] - }, - { - "code": "STS 1", - "title": "3 FST 130 (Lab)", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "or 13 -2 HK 12 or", - "units": 13, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "-3 NSTP 16", - "units": 2, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 -2 -3 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "3 PI", - "units": 10, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 102", - "title": "(Lab) 4 AGRI", - "units": 171, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 131", - "title": "(Lab) 3 AGRI 195 (Lab)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 140", - "title": "(Lab) 3 FST", - "units": 111, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 141", - "title": "(Lab) 3 FST 151 (Lab)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 167", - "title": "(Lab) 3 FST 19", - "units": 200, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "MID", - "title": "YEAR TERM", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST", - "title": "198", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 18 3 3", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "GE 3", - "title": "3 Elective", - "units": 1, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 165", - "title": "3 Elective", - "units": 2, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 170", - "title": "3 FST", - "units": 147, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 172", - "title": "3 FST", - "units": 175, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "FST 200", - "title": "3 FST HIST1/KAS1 3 AGRI 18 Total no. of units:", - "units": 143, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 1 1 14", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "FST 11", - "AGRI 21", - "AGRI 31", - "ARTS 1", - "ETHICS 1", - "CHEM 18", - "3", - "CHEM 40", - "CHEM 40.1", - "ABME 10", - "CHEM 32", - "CHEM 32.1", - "STS 1", - "3", - "COMM 10", - "FST 102", - "FST 131", - "FST 140", - "FST 141", - "FST 167", - "MID", - "FST", - "3", - "GE 3", - "FST 165", - "FST 170", - "ABME 172", - "FST 200", - "3" - ] - }, - "BSACHEM": { - "code": "BSACHEM", - "name": "BS Agricultural Chemistry", - "college": "CAFS", - "collegeName": "College of Agriculture and Food Science", - "available": true, - "totalUnitsRequired": 197, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MCB 11", - "title": "Biology and Applications of Microorganisms", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 19. Chemical Structure and Properties", - "title": "3 CHEM 19. Chemical Structure and Properties 3 MATH 28. Analytic Geometry and Calculus III 3 BIO 30. Genetics 3 AGRI 31. Fundamentals of Crop Science I 3 CHEM 18.1 University Chemistry Laboratory 3 GE Elective (2) HK 12/13. Human Kinetics Activities/Advanced Human Kinetics Activities 18", - "units": 17, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 43", - "title": "Organic Chemistry I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 19", - "CHEM 32" - ] - }, - { - "code": "PHYS 71", - "title": "University Physics I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71.1", - "title": "University Physics I Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "BOT 20", - "title": "Fundamentals of Plant Physiology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CMSC 12/AMAT 152", - "title": "Foundations of Computer Science/Fundamentals of Mathema", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "tical Computing", - "title": "tical Computing", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 CHEM 32.1. Quantitative Inorganic Analysis Laboratory", - "title": "3 CHEM 32.1. Quantitative Inorganic Analysis Laboratory 3 CHEM 43.1. Organic Chemistry I Laboratory 4 PHYS 72. University Physics II 1 PHYS 72.1. University Physics II Laboratory 3 AGRI 21. Introduction to Animal Science 3 AGRI 32. Fundamentals of Crop Science II 3 CHEM 32. Quantitative Inorganic Analysis (2) HK 12/13. Human Kinetics Activities/Advanced Human Kinetics Activities 20 NSTP 1. National Training Service Program I 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CHEM 44", - "title": "Organic Chemistry II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 43" - ] - }, - { - "code": "STAT 162", - "title": "Experimental Designs", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 101" - ] - }, - { - "code": "AGRI 22", - "title": "Introduction to Livestock and Poultry Production", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 111/AAE 120", - "title": "Farm Management/Agricultural Marketing I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 61", - "title": "Innovations and Entrepreneurship in Agriculture", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Training Service Program II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 111. Physical Chemistry I 3 CHEM 161A. Biochemistry I", - "title": "3 CHEM 111. Physical Chemistry I 3 CHEM 161A. Biochemistry I 3 CHEM 131. Technical Analysis I (Foods and Feeds) 4 3 CHEM 44.1. Organic Chemistry II Laboratory 3 COMM 10. Critical Perspectives in Communication 3 AGRI 51. Principles of Soil Science 3 AGRI 41. Principles of Crop Protection (3) 18", - "units": 18, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CHEM 111.1", - "title": "Physical Chemistry I Laboratory", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CHEM 111" - ] - }, - { - "code": "CHEM 112", - "title": "Physical Chemistry II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CHEM 111" - ] - }, - { - "code": "CHEM 137", - "title": "Modern Analytical Chemistry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CHEM 32", - "CHEM 111" - ] - }, - { - "code": "CHEM 161B", - "title": "Biochemistry II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CHEM 161A" - ] - }, - { - "code": "CHEM 140", - "title": "Organic Analysis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "CHEM 44", - "CHEM 44.1" - ] - }, - { - "code": "AGRI 42", - "title": "Pest Management SPECIALIZATION", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 180", - "title": "Environmental Chemistry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 120", - "title": "Inorganic Chemistry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 171", - "title": "Ethics, Laws and Policies in Agriculture", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ACHM 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society SPECIALIZATION", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198. Practicum", - "title": "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198. Practicum 3 CHEM 115. Physical Chemistry III 3 3 CHEM 137.1. Modern Analytical Chem Laboratory 3 CHEM 161.1. General Biochemistry Laboratory 4 CHEM 192. Chemical Information, Literature and Communication 3 SPECIALIZATION 3 SPECIALIZATION 21", - "units": 18, - "year": 4, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "FIFTH", - "title": "YEAR 3 CHEM 133. Technical Analysis II (Soils, Fertilizers, and Pesticides) 3 CHEM 185. Structure and Reactivity of Agricultural Chemicals 1 AGRI 199. Colloquium in Agriculture 3 ACHEM 200. Undergraduate Thesis 3 GE Elective 3 SPECIALIZATION 3 19", - "units": 17, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "CHEM 18", - "ARTS 1", - "MCB 11", - "MATH 27", - "ETHICS 1", - "KAS 1/HIST 1", - "3 CHEM 19. Chemical Structure and Properties", - "ECON 11", - "CHEM 43", - "PHYS 71", - "PHYS 71.1", - "BOT 20", - "CMSC 12/AMAT 152", - "PI 10", - "tical Computing", - "3 CHEM 32.1. Quantitative Inorganic Analysis Laboratory", - "CHEM 44", - "STAT 162", - "AGRI 22", - "AAE 111/AAE 120", - "AGRI 61", - "GE", - "3 CHEM 111. Physical Chemistry I 3 CHEM 161A. Biochemistry I", - "CHEM 111.1", - "CHEM 112", - "CHEM 137", - "CHEM 161B", - "CHEM 140", - "AGRI 42", - "CHEM 180", - "CHEM 120", - "CHEM 199", - "AGRI 171", - "ACHM 200", - "STS 1", - "2 CHEM 112.1. Physical Chemistry II Laboratory 2 CHEM 198. Practicum", - "FIFTH" - ] - }, - "BSABE": { - "code": "BSABE", - "name": "BS Agricultural and Biosystems Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 169, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ABE 10", - "title": "Introduction to Agricultural and Biosystems Engineering", - "units": 1, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 10.1", - "title": "Engineering Graphics Laboratory", - "units": 2, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18.1", - "title": "University Chemistry Laboratory", - "units": 2, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 30", - "title": "Engineering Surveying", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 32", - "title": "Computer-Aided Design", - "units": 2, - "year": 1, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "CHEM 40", - "title": "Basic Organic Chemistry", - "units": 4, - "year": 1, - "sem": "2", - "prereqs": [ - "CHEM 18" - ] - }, - { - "code": "CHEM 40.1", - "title": "Basic Organic Chemistry Laboratory", - "units": 1, - "year": 1, - "sem": "1", - "prereqs": [ - "CHEM 18" - ] - }, - { - "code": "MATH 28", - "title": "Analytic Geometry and Calculus III", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "PHYS 51", - "title": "Elements of Physics", - "units": 4, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51.1", - "title": "Elements of Physics Laboratory", - "units": 1, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "ABE 40", - "title": "Engineering Survey Camp", - "units": 1, - "gradeType": "S/U", - "year": 1, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 42", - "title": "Engineering Mechanics", - "units": 4, - "year": 2, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 43", - "title": "Introduction to Numerical Methods and Computing", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 48", - "title": "Engineering Materials", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ENSC 21", - "title": "Mathematical Methods in Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ENSC 10.1" - ] - }, - { - "code": "PHYS 52", - "title": "Advanced Physics for Engineers", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "PHYS 51" - ] - }, - { - "code": "PHYS 52.1", - "title": "Advanced Physics for Engineers Laboratory", - "units": 1, - "year": 2, - "sem": "1", - "prereqs": [ - "PHYS 51" - ] - }, - { - "code": "EE 1", - "title": "Basic Electrical Engineering", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "ABE 52", - "title": "Structural Mechanics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 54", - "title": "Thermodynamics I", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 56", - "title": "Fluid Mechanics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 57", - "title": "Engineering Geology", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 58", - "title": "Basic Electronics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ENSC 22", - "title": "Differential Equations for Engineering", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ENSC 10.1" - ] - }, - { - "code": "SOIL 51", - "title": "Fundamentals of Soil Science", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 61", - "title": "Engineering Hydrology", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 62", - "title": "Hydraulic Engineering", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 63", - "title": "Thermodynamics II", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 64", - "title": "Transport Processes", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 66", - "title": "Instrumentation and Controls", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 72", - "title": "Drainage and Land Development", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 73", - "title": "Irrigation Engineering", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 74", - "title": "Agricultural Waste Management", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 75", - "title": "Aquacultural Engineering", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 76", - "title": "Refrigeration and Air Conditioning", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 67", - "title": "Structural Engineering", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 198", - "title": "Field Practice", - "units": 3, - "gradeType": "S/U", - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 81", - "title": "Agricultural Machinery and Equipment", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 82", - "title": "Postharvest and Food Engineering", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 83", - "title": "Soil and Water Conservation Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 84", - "title": "Agricultural Structures", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 199", - "title": "Seminar", - "units": 1, - "year": 4, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 200", - "title": "Undergraduate Thesis/Innovationeering", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 88", - "title": "Biosystems Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 186", - "title": "ABE Codes and Standards, and Contracts", - "units": 2, - "year": 4, - "sem": "2", - "prereqs": [ - "ABE 10" - ] - }, - { - "code": "ABE 190", - "title": "Design Project", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "ABE 10" - ] - } - ], - "requiredCodes": [ - "ABE 10", - "ABE 30", - "ABE 32", - "ABE 40", - "ABE 42", - "ABE 43", - "ABE 48", - "ABE 52", - "ABE 54", - "ABE 56", - "ABE 57", - "ABE 58", - "ABE 61", - "ABE 62", - "ABE 63", - "ABE 64", - "ABE 66", - "ABE 67", - "ABE 72", - "ABE 73", - "ABE 74", - "ABE 75", - "ABE 76", - "ABE 81", - "ABE 82", - "ABE 83", - "ABE 84", - "ABE 88", - "ABE 186", - "ABE 190", - "ABE 198", - "ABE 199", - "ABE 200", - "ENSC 10.1", - "ENSC 21", - "ENSC 22", - "EE 1", - "CHEM 18", - "CHEM 18.1", - "CHEM 40", - "CHEM 40.1", - "MATH 27", - "MATH 28", - "PHYS 51", - "PHYS 51.1", - "PHYS 52", - "PHYS 52.1", - "SOIL 51", - "ENG 10" - ] - }, - "BSCHE": { - "code": "BSCHE", - "name": "BS Chemical Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 163, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ChE 10. Introduction to Chemical Engineering Profession", - "title": "ChE 10. Introduction to Chemical Engineering Profession", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51", - "title": "Elements of Physics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51.1", - "title": "Elements of Physics Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 CHEM 18.1. University Chemistry Laboratory", - "title": "1 CHEM 18.1. University Chemistry Laboratory 3 MCB 11. Biology and Applications of Microorganisms 3 ENSC 11. Statics of Rigid Bodies 4 MATH 28. Analytic Geometry and Calculus III 1 HIST1/KAS1. Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Ki 3 Activities (2) NSTP 1. National Service Training Program 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology and 2 Society 3 GE 1", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in 3 the Arts 3 3 netics (2) (3) 14", - "units": 9, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ChE 30. Fundamentals of Chemical Engineering", - "title": "ChE 30. Fundamentals of Chemical Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 10.1", - "title": "Engineering Graphics Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 1", - "title": "Basic Electrical Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 32", - "title": "Quantitative Inorganic Analysis", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 18", - "CHEM 18.1" - ] - }, - { - "code": "CHEM 32.1", - "title": "Quantitative Inorganic Analysis Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "CHEM 32" - ] - }, - { - "code": "CHEM 40", - "title": "Basic Organic Chemistry", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 40.1", - "title": "Basic Organic Chemistry Laboratory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Service Training Program", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 ENSC 26. Computer Applications in Engineering", - "title": "4 ENSC 26. Computer Applications in Engineering 2 ChE 32. Industrial Stoichiometry 3 ENSC 12. Dynamics of Rigid Bodies 3 ENSC 21. Mathematical Methods in Engineering 2 CHEM 111. Physical Chemistry I 4 CHEM 160. Introductory Biochemistry 1 GE", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Ki (2) Activities (3) 19", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 3 netics (2) 21", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ChE 142. Chemical Engineering Thermodynamics I", - "title": "ChE 142. Chemical Engineering Thermodynamics I ChE 147. Application of Fluid Dynamics in Chemical Engineerin ChE 149. Transport Phenomena ChE 152. Separation Processes", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 112", - "title": "Physical Chemistry II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "CHEM 111" - ] - }, - { - "code": "STAT 168", - "title": "Respone Surface Methodology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "STAT 162" - ] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ChE 143. Chemical Engineering Thermodynamics II", - "title": "3 ChE 143. Chemical Engineering Thermodynamics II g 3 ChE 145. Chemical Reaction Engineering 3 ChE 153. Transfer Operations I 3 ChE 154. Transfer Operations II 3 ENSC 13. Strength of Materials 3 CHEM 111.1. Physical Chemistry I Laboratory 3 ENG 10. Writing of Scientific Papers 21", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 ChE 198. Internship", - "title": "3 ChE 198. Internship 3 3 3 3 2 3 20", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ChE 157.1. Chemical Engineering Unit Operations Laboratory", - "title": "ChE 157.1. Chemical Engineering Unit Operations Laboratory ChE 191. Special Topics ChE 192. Chemical Process Equipment Design ChE 200/200b/200c. Undergraduate Thesis/Innovationeering/ Engineering Industry Research Cognate ChE 172. Introduction to Biochemical Engineering ChE 180. Agro-Industrial Waste Management", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "2 ChE 170. Instrumentation and Process Dynamics and Cont", - "title": "2 ChE 170. Instrumentation and Process Dynamics and Cont 3 ChE 185. Chemical Engg Laws, Ethics, Specifications an 3 ChE 193. Plant Design 3 ChE 199. Plant Inspection and Seminar ChE 200/200b/200c. Undergraduate Thesis/Innovationeeri 3 Engineering Industry Research 3 Cognate 3 ETHICS 1. Ethics and Moral Reasoning in Everyday Life GE 20", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "rol", - "title": "rol d Contracts 3 1 ng/ 3 3 3 3 21", - "units": 2, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ChE 10. Introduction to Chemical Engineering Profession", - "CHEM 18", - "MATH 27", - "PHYS 51", - "PHYS 51.1", - "PI 10", - "1 CHEM 18.1. University Chemistry Laboratory", - "STS 1", - "ARTS 1", - "ChE 30. Fundamentals of Chemical Engineering", - "ENSC 10.1", - "EE 1", - "CHEM 32", - "CHEM 32.1", - "CHEM 40", - "CHEM 40.1", - "4 ENSC 26. Computer Applications in Engineering", - "3", - "ChE 142. Chemical Engineering Thermodynamics I", - "CHEM 112", - "STAT 168", - "COMM 10", - "3 ChE 143. Chemical Engineering Thermodynamics II", - "3 ChE 198. Internship", - "ChE 157.1. Chemical Engineering Unit Operations Laboratory", - "2 ChE 170. Instrumentation and Process Dynamics and Cont", - "rol" - ] - }, - "BSCE": { - "code": "BSCE", - "name": "BS Civil Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 159, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 10", - "title": "Fundamentals of Civil Engineering", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective HIST1/KAS1. Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71", - "title": "University Physics I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71.1", - "title": "University Physics I Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ENSC 10.1. Engineering Graphics Laboratory", - "title": "3 ENSC 10.1. Engineering Graphics Laboratory 1 ENSC 11. Statics of Rigid Bodies 3 MATH 28. Analytic Geometry and Calculus III 3 PHYS 72. University Physics II 3 PHYS 72.1. University Physics II Laboratory 4 STS 1. Science, Technology and Society 1 GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "2", - "title": "2 3 3 4 1 3 3 (2) 19", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "EE 1", - "title": "Basic Electrical Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 12", - "title": "Dynamics of Rigid Bodies", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 13", - "title": "Strength of Materials", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 21", - "title": "Mathematical Methods in Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 48", - "title": "Fundamentals of Surveying", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12", - "title": "Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CHEM 18. University Chemistry", - "title": "3 CHEM 18. University Chemistry 3 CHEM 18.1. University Chemistry Laboratory 3 CE 120. Higher Surveying 3 CE 131. Structural Analysis I 3 ENSC 16. Fluid Mechanics 3 ETHICS 1. Ethics and Moral Reasoning in Everyday Lif 3 PI 10. The Life, Works, and Writings of Rizal", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Activities (3) NSTP 2. National Service Training Program 21", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 2 3 3 3 e 3 Kinetics (2) (3) 20", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ABE 57", - "title": "Field Hydrology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 121", - "title": "Transportation Engineering I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 132", - "title": "Structural Analysis II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 133", - "title": "Design of Timber Members", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 151", - "title": "Sanitary Engineering I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 170", - "title": "Geotechnical Engineering", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FPPS 183", - "title": "Engineering Economic Analysis", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic Activities", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 CE 122. Transportation Engineering II", - "title": "3 CE 122. Transportation Engineering II 3 CE 134. Design of Reinforced Concrete Members 3 CE 152. Sanitary Engineering II 3 CE 161. Construction Materials & Testing 3 CE 163. Civil Engineering Laws, Contracts and Ethics 3 ENSC 16.1. Fluid Mechanics Laboratory 3 IE 184. Project Development and Management s (2) 21", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 CE 198. Practicum", - "title": "3 CE 198. Practicum 4 3 3 2 2 3 20", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CE 135", - "title": "Design of Steel Members", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 137", - "title": "Structural Dynamics and Earhquake Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 141", - "title": "Hydraulic Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 164", - "title": "Construction Project Planning and Management", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE 171", - "title": "Foundation Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CE", - "title": "200/200b. Thesis/Innovationeering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ABE 67. Irrigation & Drainage Engineering", - "title": "3 ABE 67. Irrigation & Drainage Engineering 3 CE 197. Civil Engineering Project Integration 3 CE 199. Seminar 4 CE 200/200b. Thesis/Innovationeering 3 COMM 10. Critical Perspectives in Communication 3 ENG 10. Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "ENSC 26", - "title": "Computer Applications in Engineering 19", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 1 3 3 3 3 19", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ARTS 1", - "CE 10", - "GE", - "MATH 27", - "PHYS 71", - "PHYS 71.1", - "3 ENSC 10.1. Engineering Graphics Laboratory", - "2", - "EE 1", - "ENSC 12", - "ENSC 13", - "ENSC 21", - "STAT 101", - "GE", - "ABE 48", - "3 CHEM 18. University Chemistry", - "3", - "ABE 57", - "CE 121", - "CE 132", - "CE 133", - "CE 151", - "CE 170", - "FPPS 183", - "3 CE 122. Transportation Engineering II", - "3 CE 198. Practicum", - "CE 135", - "CE 137", - "CE 141", - "CE 164", - "CE 171", - "CE", - "3 ABE 67. Irrigation & Drainage Engineering", - "ENSC 26", - "3" - ] - }, - "BSEE": { - "code": "BSEE", - "name": "BS Electrical Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 162, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71", - "title": "University Physics I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71.1", - "title": "University Physics I Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 30", - "title": "Introduction to Electrical Engineering", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 MATH 28. Analytic Geometry and Calculus III", - "title": "3 MATH 28. Analytic Geometry and Calculus III 4 PHYS 72. University Physics II 1 PHYS 72.1. University Physics II Laboratory 1 ENSC 10.1. Engineering Graphics Laboratory 3 ENSC 11. Statics of Rigid Bodies 3 GE Elective 3 GE Elective", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Kinetics Activities (3) NSTP 2. National Service Training Program II 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 4 1 2 3 3 3 (2) (3) 19", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "EE 40", - "title": "Fundamentals of Electrical Engineering I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 45", - "title": "Fundamentals of Engineering Electromagnetics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 12", - "title": "Dynamics of Rigid Bodies", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC", - "title": "14a. Engineering Thermodynamics and Heat Transfer", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 21", - "title": "Mathematical Methods in Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 EE 50. Fundamentals of Electrical Engineering II", - "title": "4 EE 50. Fundamentals of Electrical Engineering II 3 EE 51. Electromechanical Energy Conversion for DC 3 EE 55. Semiconductor Devices 5 ENSC 26. Computer Applications in Engineering 3 KAS 1/HIST 1. Kasaysayan ng Pilipinas/Philippine History 3 GE Elective", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Kinetics Activities 21", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "4", - "title": "4 3 3 3 3 3 (2) 19", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "EE 60", - "title": "Signals and Systems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 65", - "title": "Electronic Circuits", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 61", - "title": "Electromechanical Energy Conversion for AC", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 62", - "title": "Principles of Power Systems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 66", - "title": "Signals and Noise in Electrical Engineering Network", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 EE 70. Instrumentation Engineering", - "title": "3 EE 70. Instrumentation Engineering 4 EE 75. Digital Electronics 4 EE 71. Analysis of Power Systems 3 EE 79. Electrical Engineering Law, Ethics, and Contracts s 3 FPPS 183. Engineering Economic Analysis 3 IE 184. Project Development and Management", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "EE 199", - "title": "Undergraduate Seminar 20", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "4 EE 198. Internship", - "title": "4 EE 198. Internship 4 3 1 3 3 1 19", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "EE 85", - "title": "Industrial Electronics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 80", - "title": "Control Systems Analysis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 86", - "title": "Electronic Communication Systems I", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE 81", - "title": "Maintenance of Electrical Equipment and Devices", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE", - "title": "200/200b/200c. Undergraduate Thesis/Innovationeering/Engineering Industry Research Specialization Course", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE", - "title": "200/200b/200c. Undergraduate Thesis/ 3 Innovationeering/Engineering Industry Research 3 Specialization Course 3 Specialization Course 3 Elective 3 Elective 3 EE 91. Electrical System Design, Planning, and Estimatio 3 21", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 n 19", - "units": 4, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "MATH 27", - "PHYS 71", - "PHYS 71.1", - "EE 30", - "PI 10", - "ARTS 1", - "ETHICS 1", - "3 MATH 28. Analytic Geometry and Calculus III", - "3", - "EE 40", - "EE 45", - "ENSC 12", - "ENSC", - "ENSC 21", - "STS 1", - "4 EE 50. Fundamentals of Electrical Engineering II", - "4", - "EE 60", - "EE 65", - "EE 61", - "EE 62", - "EE 66", - "ENG 10", - "3 EE 70. Instrumentation Engineering", - "EE 199", - "4 EE 198. Internship", - "EE 85", - "EE 80", - "EE 86", - "EE 81", - "COMM 10", - "EE", - "EE", - "3" - ] - }, - "BSIE": { - "code": "BSIE", - "name": "BS Industrial Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 160, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 10", - "title": "Foundations of Industrial Engineering", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51", - "title": "Elements of Physics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 51.1", - "title": "Elements of Physics Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18.1", - "title": "University Chemistry Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ENSC 11. Statics of Rigid Bodies", - "title": "3 ENSC 11. Statics of Rigid Bodies 3 MATH 28. Analytic Geometry and Calculus III 3 IE 31. Industrial Organization and Manageme 1 IE 21. Industrial Processes 4 STAT 101. Statistical Methods 1 KAS 1/HIST 1. Kasaysayan ng Pilipinas/Phili 3 GE Elective. General Education", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanc 2 Activities (2) NSTP 2. National Service Training Program (3) 20", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 nt 3 3 ppine History 3 ed Human Kinetics (2)", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "II", - "title": "(3) 21", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 21", - "title": "Mathematical Methods in Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 141", - "title": "Operations Research I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 132", - "title": "Methods of Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 125", - "title": "Industrial Quality Control", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kineti", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ETHICS 1. Ethics and Moral Reasoning in Eve", - "title": "3 ETHICS 1. Ethics and Moral Reasoning in Eve 3 IE 142. Operations Research II 3 ENSC 12. Dynamics of Rigid Bodies 5 ENSC 10.1. Engineering Graphics Laboratory 5 IE 151. Production Systems cs Activities (2) IE 150. Systems Evaluation", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "MGT 111", - "title": "Principles of Accounting", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanc Activities 19", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "ryday Life 3 IE 198. Internship", - "title": "ryday Life 3 IE 198. Internship 3 3 2 3 3 3 ed Human Kinetics (2) 20", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ENSC 13", - "title": "Strength of Materials", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 143", - "title": "Stochastic Processes in Industrial Engineering", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 43", - "title": "Engineering Shop", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 152", - "title": "Manufacturing Planning and Design", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 26", - "title": "Computer Applications in Engineering", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 134", - "title": "Ergonomics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ENSC 16. Fluid Mechanics", - "title": "3 ENSC 16. Fluid Mechanics 3 ENSC 14a. Engineering Thermodynamics and He 3 IE 144. Systems Simulation 3 IE 184. Project Development and Management 3 IE 164. Informations Systems I 3 IE 136. Industrial Safety and Health 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 at Transfer 3 3 3 3 20", - "units": 5, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Technical Cognate", - "title": "Technical Cognate", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 158", - "title": "Supply Chain Engineering", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 165", - "title": "Information Systems II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 185", - "title": "Industrial Systems Design", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE", - "title": "200/200b/200c. Thesis/Innovationeering/EIR", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 Technical Cognate", - "title": "3 Technical Cognate 3 IE 90. Ethics for Industrial Engineers 3 COMM 10. Critical Perspectives in Communica 3 GE Elective. General Education 3 GE Elective. General Education 1 EE 1. Basic Electrical Engineering 3 IE 200/200b/200c. Thesis/Innovationeering/E 19", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 2 tion 3 3 3", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "IR", - "title": "3 20", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ARTS 1", - "STS 1", - "MATH 27", - "IE 10", - "PHYS 51", - "PHYS 51.1", - "CHEM 18", - "CHEM 18.1", - "3 ENSC 11. Statics of Rigid Bodies", - "3", - "II", - "PI 10", - "ENSC 21", - "IE 141", - "IE 132", - "IE 125", - "3 ETHICS 1. Ethics and Moral Reasoning in Eve", - "MGT 111", - "ryday Life 3 IE 198. Internship", - "ENSC 13", - "IE 143", - "ABE 43", - "IE 152", - "ENSC 26", - "IE 134", - "3 ENSC 16. Fluid Mechanics", - "3", - "Technical Cognate", - "ENG 10", - "IE 158", - "IE 165", - "IE 185", - "IE 199", - "IE", - "3 Technical Cognate", - "3", - "IR" - ] - }, - "BSME": { - "code": "BSME", - "name": "BS Mechanical Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 161, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine Histor", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "10*. Introduction to Mechanical Engineering", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 10.1", - "title": "Engineering Graphics Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18.1", - "title": "University Chemistry Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71", - "title": "University Physics I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYS 71.1", - "title": "University Physics I Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "y 3 ARTS 1. Critical Perspectives in the Arts", - "title": "y 3 ARTS 1. Critical Perspectives in the Arts 3 EE 1. Basic Electrical Engineering 3 PI 10. The Life, Works, and Writings of Rizal 3 ENSC 11. Statics of Rigid Bodies 2 MATH 28. Analytic Geometry and Calculus III 3 IE 31. Industrial Organization and Management 4 ME 43**. Engineering Shop 1 NSTP 1. National Service Training Program (2) HK 12. Human Kinetics Activities 19", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 3 (3) (2) 21", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE", - "title": "2*. Basic Electronics Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 12", - "title": "Dynamics of Rigid Bodies", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 13", - "title": "Strength of Materials", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 14", - "title": "Basic Thermodynamics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "113**. Manufacturing Processes", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Service Training Program", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 EE 3*. DC and AC Machinery", - "title": "3 EE 3*. DC and AC Machinery 4 ENSC 15. Fundamentals of Heat Transfer 3 ENSC 16. Fluid Mechanics 3 ENSC 21. Mathematical Methods in Engineering 3 ME 45*. Analysis of Machine Elements 3 ME 70*. Mechanical Engineering Thermodynamics", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic (3) Activities (2) 19", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "4", - "title": "4 3 3 3 3 3 s (2) 19", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology and Society", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "IE 150", - "title": "Systems Evaluation", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "53**. Machine Design for Bioproduction Systems I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "160*. Mechanical Vibrations", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "171*. Fluid Machinery", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "172*. Combustion Engineering", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "175*. Refrigeration Systems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMM 10. Critical Perspectives in Communication", - "title": "3 COMM 10. Critical Perspectives in Communication 3 ENG 10. Writing of Scientific Papers 3 ENSC 26. Computer Applications in Engineering 3 ME 154*. Design of Machinery 3 ME 173.1*. Mechanical Engineering Laboratory I 2 ME 176*. Air Conditioning and Ventilation Systems 3 IE 184. Project Development and Management 21", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 ME 198. Practicum", - "title": "3 ME 198. Practicum 3 3 3 1 3 19", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Elective", - "title": "GE Course", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "EE", - "title": "28*. Introduction to Control Systems", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "90*. Mechanical Engineering Laws, Ethics, Codes and", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "174.1*. Mechanical Engineering Laboratory II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "199*. Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ME", - "title": "200/b/c*. Undergraduate Thesis/Engineering Industry", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 Elective GE Course", - "title": "3 Elective GE Course 3 Elective GE Course 3 ME 181*. Industrial Plant Engineering and Design Standards 2 ME 182*. Power Plant Engineering and Design", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "ME", - "title": "200/b/c*. Undergraduate Thesis/Engineering Industry 2 Research/ Innovationeering 1 Elective* Research/ 3 Innovationeering 3 20", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 4 4 3 3 20", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "KAS 1/HIST 1", - "ME", - "ENSC 10.1", - "CHEM 18", - "CHEM 18.1", - "MATH 27", - "PHYS 71", - "PHYS 71.1", - "y 3 ARTS 1. Critical Perspectives in the Arts", - "3", - "ETHICS 1", - "EE", - "ENSC 12", - "ENSC 13", - "ENSC 14", - "ME", - "3 EE 3*. DC and AC Machinery", - "4", - "STS 1", - "IE 150", - "ME", - "ME", - "ME", - "ME", - "ME", - "3 COMM 10. Critical Perspectives in Communication", - "3 ME 198. Practicum", - "Elective", - "EE", - "STAT 101", - "ME", - "ME", - "ME", - "ME", - "3 Elective GE Course", - "ME", - "3" - ] - }, - "BSMATE": { - "code": "BSMATE", - "name": "BS Materials Engineering", - "college": "CEAT", - "collegeName": "College of Engineering and Agro-Industrial Technology", - "available": true, - "totalUnitsRequired": 175, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "MATE 21", - "title": "Engineering Drawing", - "units": 2, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATE 31", - "title": "Introduction to Materials Science", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 41", - "title": "Structure of Materials", - "units": 4, - "year": 1, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 101", - "title": "Physical Metallurgy", - "units": 4, - "year": 1, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 111", - "title": "Mechanical Behavior of Materials", - "units": 4, - "year": 1, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 121", - "title": "Ceramic Materials", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 131", - "title": "Polymer Materials", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 141", - "title": "Electronic Materials", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 151", - "title": "Corrosion Engineering", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 161", - "title": "Materials Characterization", - "units": 4, - "year": 2, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 171", - "title": "Materials Processing", - "units": 4, - "year": 2, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 181", - "title": "Materials Selection and Design", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 190", - "title": "Materials Engineering Design", - "units": 4, - "year": 2, - "sem": "1", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "MATE 191", - "title": "Engineering Internship", - "units": 3, - "gradeType": "S/U", - "year": 3, - "sem": "2", - "prereqs": [ - "MATE 21" - ] - }, - { - "code": "ENSC 21", - "title": "Statics of Rigid Bodies", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ENSC 22", - "title": "Dynamics of Rigid Bodies", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ENSC 21" - ] - }, - { - "code": "ENSC 24", - "title": "Thermodynamics I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ENSC 21" - ] - }, - { - "code": "MATH 27", - "title": "Analytic Geometry and Calculus I", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "MATH 28", - "title": "Analytic Geometry and Calculus II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "MATH 114", - "title": "Differential Equations", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "MATH 27" - ] - }, - { - "code": "PHYSICS 71", - "title": "Elementary Physics I", - "units": 4, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "PHYSICS 72", - "title": "Elementary Physics II", - "units": 4, - "year": 4, - "sem": "2", - "prereqs": [ - "PHYSICS 71" - ] - }, - { - "code": "CHEM 16", - "title": "General Chemistry I", - "units": 4, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 17", - "title": "General Chemistry II", - "units": 4, - "year": 4, - "sem": "2", - "prereqs": [ - "CHEM 16" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - } - ], - "requiredCodes": [ - "MATE 21", - "MATE 31", - "MATE 41", - "MATE 101", - "MATE 111", - "MATE 121", - "MATE 131", - "MATE 141", - "MATE 151", - "MATE 161", - "MATE 171", - "MATE 181", - "MATE 190", - "MATE 191", - "ENSC 21", - "ENSC 22", - "ENSC 24", - "MATH 27", - "MATH 28", - "MATH 114", - "PHYSICS 71", - "PHYSICS 72", - "CHEM 16", - "CHEM 17", - "ENG 10" - ] - }, - "BSECON": { - "code": "BSECON", - "name": "BS Economics", - "college": "CEM", - "collegeName": "College of Economics and Management", - "available": true, - "totalUnitsRequired": 138, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "ECON 200", - "freeElectiveUnits": 6 - }, - "sp": { - "name": "Special Problem Track", - "code": "ECON 199", - "freeElectiveUnits": 6 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayang ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 25", - "title": "Fundamental Calculus", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 GE Elective", - "title": "3 GE Elective 3 GE Elective 3 MGT 101. Concepts and Dynamics of Management 3 COST 10. Introduction to Collective Action 3 ECON 101. Intermediate Macroeconomic Theory (2) ECON 102. Intermediate Microeconomic Theory", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 12/HK 13", - "title": "Human Kinetics Activities/Advanced Human Kinetics Activities 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 1 3 3 (2) 16", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective Language Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life Works and Writings of Rizal", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 103", - "title": "Introduction to Growth Theory and Open Economy Macroeconomics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 104", - "title": "Introduction to Factor Market Analysis, General Equilibri & Welfare Economics", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I HK12/HK13. Human Kinetics Activities / Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday 3 Language Elective 3 MGT 111. Principles of Accounting 3 ECON 130. Elements of Mathematical Economics", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "ECON 137", - "title": "Introduction to Econometrics 3 um NSTP 2. National Service Training Program II 3 HK12/HK13.Human Kinetics Activities / Advance 3 Human Kinetics Activities (3) (2) 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "Life", - "title": "Life 3 3 3 3 (3) d (2) 15", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ECON 115", - "title": "Philippine Economic History", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 121", - "title": "Money and Banking", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 138", - "title": "Intermediate Econometrics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 170", - "title": "Intermediate Environmental Economics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 175", - "title": "Benefit Cost Analysis", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 115", - "title": "Introduction to Financial Management", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMM 10. Critical Perspectives in Communication", - "title": "3 COMM 10. Critical Perspectives in Communication 3 ENG 10. Writing of Scientific Papers 3 ECON 141. International Economics 3 ECON 151. Public Economics 3 Specialization Course. Mandatory 3 Specialization Course. Elective 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ECON 198", - "title": "Internship 3 3 3 3 3 18", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 200", - "title": "Undergraduate Thesis Specialization Course. Mandatory Specialization Course. Mandatory Specialization Course. Elective", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 Free Elective", - "title": "3 Free Elective 1 ECON 110. History of Economic Doctrines 3 ECON 185. Development Economics 3 ECON 199. Undergraduate Seminar 3 ECON 200. Undergraduate Thesis 3 Specialization Course. Elective 16", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 1 3 3 16", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "KAS 1/HIST 1", - "ARTS 1", - "STS 1", - "MATH 25", - "ECON 11", - "3 GE Elective", - "3", - "GE", - "PI 10", - "ECON 103", - "ECON 104", - "STAT 101", - "ETHICS 1", - "ECON 137", - "Life", - "ECON 115", - "ECON 121", - "ECON 138", - "ECON 170", - "ECON 175", - "MGT 115", - "3 COMM 10. Critical Perspectives in Communication", - "3", - "ECON 198", - "Elective", - "ECON 199", - "ECON 200", - "3 Free Elective", - "3" - ] - }, - "BSAAE": { - "code": "BSAAE", - "name": "BS Agricultural and Applied Economics", - "college": "CEM", - "collegeName": "College of Economics and Management", - "available": true, - "totalUnitsRequired": 140, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "AAE 200", - "freeElectiveUnits": 0, - "majorElectiveUnits": 15 - }, - "mfp": { - "name": "Major Farm Practice Track", - "code": "AAE 200A", - "freeElectiveUnits": 0, - "majorElectiveUnits": 15 - } - }, - "defaultTrack": "thesis", - "majorCourses": [ - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 10", - "title": "Introduction to Agricultural and Applied Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 51", - "title": "Principles of Soil Science", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 101", - "title": "Concepts and Dynamics of Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 25", - "title": "Fundamental Calculus", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COST 10", - "title": "Introduction to Collective Action", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ETHICS 1. Ethics and Moral Reason", - "title": "3 ETHICS 1. Ethics and Moral Reason 1 AGRI 21. Introduction to Animal S 3 AGRI 31. Fundamentals of Crop Sci 3 AAE 111. Farm Management 3 ECON 102. Intermediate Microecono 3 STAT 101. Statistical Methods (2) HK 12/13. Human Kinetics Activiti 1 17", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "ing in Everyday Life", - "title": "ing in Everyday Life cience ence I 3 mic Theory 3 es/Advanced Human Kinetics Activities 18", - "units": 2, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "AAE 103", - "title": "Statistical Analysis of Agricultural and Applied Economics Data", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 120", - "title": "Agricultural Marketing I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 104", - "title": "Farm Business Accounting", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 22", - "title": "Introduction to Livestock and Poultry Production", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 32", - "title": "Fundamentals of Crop Science II", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 101", - "title": "Intermediate Macroeconomic Theory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 GE Elective", - "title": "3 GE Elective 3 ARTS 1. Critical Perspectives in 3 PI 10. Life and Works of Rizal 3 HNF 141. Food Nutrition System 3 NRC 170. Watershed Management 3 ECON 130. Elements of Mathematica (2) HK 12/13. Human Kinetics Activiti (3) NSTP 2. National Service Training 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 the Arts 3 3 3 l Economics es/Advanced Human Kinetics Program II 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABE 2", - "title": "Fundamentals of Agricultural and Biosystems Engineering II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 110", - "title": "Introduction to Agricultural and Applied Economics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 130", - "title": "Agricultural Finance", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 142", - "title": "Natural Resource Economics I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 171", - "title": "Feasibility Studies of Agri-Based Enterprises and Agro-Industrial Development Projects", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMM 10. Critical Perspectives in", - "title": "3 COMM 10. Critical Perspectives in", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "AAE 195", - "title": "Introduction to Research 3 Economics 3 AAE 161. Introduction to Food and 3 AAE 123. Agricultural and Interna 3 AAE/ECON/MGT/COST Track Course 3 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "Communication 3 AAE 198. Internship", - "title": "Communication 3 AAE 198. Internship Methods in Agricultural and Applied 3 Nutrition Economics tional Trade 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "AAE 151", - "title": "Agricultural Policy", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE", - "title": "200/200a. Undergraduate Thesis/Major Farm Practice", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 199", - "title": "Undergraduate Seminar Technical Track Course AAE/ECON/MGT/COST Track Course AAE/ECON/MGT/COST Track Course", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 AAE 150. Economics of Agricultura", - "title": "3 AAE 150. Economics of Agricultura 3 AAE 200/200a. Undergraduate Thesi 1 STS 1. Science, Technology and So 3 GE Elective 3 GE Elective 3 16", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "l Development", - "title": "l Development s/Major Farm Practice ciety 3 3 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "KAS 1/HIST 1", - "AAE 10", - "AGRI 51", - "MGT 101", - "MATH 25", - "ECON 11", - "COST 10", - "3 ETHICS 1. Ethics and Moral Reason", - "ing in Everyday Life", - "AAE 103", - "AAE 120", - "AAE 104", - "AGRI 22", - "AGRI 32", - "ECON 101", - "3 GE Elective", - "3", - "ENG 10", - "ABE 2", - "AAE 110", - "AAE 130", - "AAE 142", - "AAE 171", - "3 COMM 10. Critical Perspectives in", - "AAE 195", - "Communication 3 AAE 198. Internship", - "AAE 151", - "AAE", - "AAE 199", - "3 AAE 150. Economics of Agricultura", - "l Development" - ] - }, - "BSABME": { - "code": "BSABME", - "name": "BS Agribusiness Management and Entrepreneurship", - "college": "CEM", - "collegeName": "College of Economics and Management", - "available": true, - "totalUnitsRequired": 141, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "ABME 200", - "freeElectiveUnits": 6 - }, - "sp": { - "name": "Special Problem Track", - "code": "ABME 199", - "freeElectiveUnits": 9 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "ABME 10", - "title": "Foundations of Entrepreneurship", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 11", - "title": "Introduction to Agribusiness Management and Entrepreneurship", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 41", - "title": "Principles of Crop Protection", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABT 10", - "title": "Traditional and Modern Biotechnology: Principles an Applications", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "MATH 25", - "title": "Fundamental Calculus", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COST 10", - "title": "Introduction to Collective Action", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 AGRI 21. Introduction to Animal Science", - "title": "3 AGRI 21. Introduction to Animal Science 1 AGRI 31. Fundamentals of Crop Science I 3 MGT 101. Concepts and Dynamics of Management d 3 MGT 111. Principles of Accounting 3 ETHICS 1. Ethics and Moral Reasoning for Everyday Li 3 KAS 1/HIST 1. Kasaysayang ng Pilipinas/Philippine Hi", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human K 1 Activities (2) 17", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 fe story inetics (2) 18", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ABME 103", - "title": "Agribusiness Systems and Modalities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 22", - "title": "Introduction to Livestock and Poultry Production", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "AGRI 32", - "title": "Fundamentals of Crop Science II", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 121", - "title": "Quantitative Business Analysis", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 151", - "title": "Introduction to Marketing Management", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ECON 102. Intermediate Microeconomic Theory", - "title": "3 ECON 102. Intermediate Microeconomic Theory 3 ABE 2. Fundamentals of Agricultural Engineering II 3 MGT 113. Managerial Accounting", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "MGT 131", - "title": "Introduction to Human Relations and Behavior 3 Organization 3 MGT 141. Fundamentals of Operations Management 3 ABME 172. Product Ideation and Creation", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kin (2) Activities (3) NSTP 2. National Service Training Program II 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 in 3 3 3 etics (2) (3) 18", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "ECON 101", - "title": "Intermediate Macroeconomic Theory", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 109", - "title": "Managerial Economics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "AAE 111", - "title": "Farm Management Track Course", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspective in Communication", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 PI 10. The Life Works and Writing of Jose Rizal", - "title": "3 PI 10. The Life Works and Writing of Jose Rizal 3 STAT 101. Statistical Methods 3 Elective 3 Track Course 3 GE Elective 3 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "ABME", - "title": "198. 3 Internship 3 3 3 3 15", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MGT 161", - "title": "Business Law", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts Track Course", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ABME 190. Special Problems", - "title": "3 ABME 190. Special Problems 3 MGT 155. International Marketing 3 MGT 181. Fundamentals of Strategic Business Manageme 3 STS 1. Science, Technology and Society 3 Elective 15", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 nt 3 3 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ABME 10", - "ABME 11", - "AGRI 41", - "ABT 10", - "ECON 11", - "MATH 25", - "COST 10", - "3 AGRI 21. Introduction to Animal Science", - "3", - "ABME 103", - "AGRI 22", - "AGRI 32", - "MGT 121", - "MGT 151", - "GE", - "3 ECON 102. Intermediate Microeconomic Theory", - "MGT 131", - "3", - "ECON 101", - "MGT 109", - "AAE 111", - "COMM 10", - "GE", - "3 PI 10. The Life Works and Writing of Jose Rizal", - "ABME", - "MGT 161", - "ARTS 1", - "Elective", - "Elective", - "3 ABME 190. Special Problems", - "3" - ] - }, - "AAENTREP": { - "code": "AAENTREP", - "name": "Associate in Arts in Entrepreneurship", - "college": "CEM", - "collegeName": "College of Economics and Management", - "available": true, - "totalUnitsRequired": 75, - "geCoursesRequired": 5, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "KAS 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 10", - "title": "Foundations of Entrepreneurship", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "MGT 101", - "title": "Concepts and Dynamics of Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 2, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "MGT 111", - "title": "Principles of Accounting", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "1", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "PI 10", - "title": "The Life, Works, and Writings of Jose Rizal", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "ABME 172", - "title": "Product Ideation and Creation", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "ABME 10" - ] - }, - { - "code": "ABME 174", - "title": "Business Planning", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "ABME 10" - ] - }, - { - "code": "ABME 115", - "title": "Entrepreneurial Finance", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "ABME 10" - ] - }, - { - "code": "MGT 113", - "title": "Managerial Accounting", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "MGT 151", - "title": "Introduction to Marketing Management", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "ENTR 198", - "title": "Internship", - "units": 3, - "gradeType": "S/U", - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 4, - "sem": "1", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning for Everyday Life", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "MGT 161", - "title": "Business Law", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "MGT 131", - "title": "Introduction to Human Relations and Behavior in Organization", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 4, - "sem": "1", - "prereqs": [ - "HK 11" - ] - } - ], - "requiredCodes": [ - "KAS 1", - "COMM 10", - "STS 1", - "ARTS 1", - "ETHICS 1", - "PI 10", - "ABME 10", - "ABME 172", - "ABME 174", - "ABME 115", - "MGT 101", - "MGT 111", - "MGT 113", - "MGT 131", - "MGT 151", - "MGT 161", - "ENTR 198", - "HK 11", - "HK 12/13" - ] - }, - "BSACCT": { - "code": "BSACCT", - "name": "BS Accountancy", - "college": "CEM", - "collegeName": "College of Economics and Management", - "available": true, - "totalUnitsRequired": 166, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "KAS 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "MATH 25", - "title": "Fundamental Calculus", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "MGT 101", - "title": "Concepts and Dynamics of Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "BA 99.1", - "title": "Fundamental Accounting Theory and Practice I", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 2, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning for Everyday Life", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "STAT 101", - "title": "Statistical Methods", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 101", - "title": "Intermediate Macroeconomic Theory", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "ECON 11" - ] - }, - { - "code": "BA 99.2", - "title": "Fundamental Accounting Theory and Practice II", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "BA 183", - "title": "Introduction to Database Management for Accounting", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "ECON 102", - "title": "Intermediate Microeconomic Theory", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "ECON 11" - ] - }, - { - "code": "MGT 121", - "title": "Quantitative Business Analysis", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "MGT 131", - "title": "Introduction to Human Relations and Behavior in Organization", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "MGT 151", - "title": "Introduction to Marketing Management", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "BA 114.1", - "title": "Accounting Theory and Practice I", - "units": 6, - "year": 2, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "1", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "MGT 141", - "title": "Fundamentals of Operations Management", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "BA 114.2", - "title": "Accounting Theory and Practice II", - "units": 6, - "year": 2, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 116", - "title": "Cost Accounting", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "HK 12/13", - "title": "Basic or Advanced Human Kinetics Activities", - "units": 2, - "year": 2, - "sem": "1", - "prereqs": [ - "HK 11" - ] - }, - { - "code": "BA 198.1", - "title": "Internship I", - "units": 3, - "gradeType": "S/U", - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "PI 10", - "title": "The Life, Works, and Writings of Jose Rizal", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "BA 117", - "title": "Managerial Cost Accounting and Control", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 118.1", - "title": "Advanced Accounting I", - "units": 6, - "year": 3, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 127", - "title": "Tax Accounting I", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 141", - "title": "Business Finance I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 161", - "title": "Law on Business Transactions", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "BA 142", - "title": "Business Finance II", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 118.2", - "title": "Advanced Accounting II", - "units": 6, - "year": 3, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 120.1", - "title": "Audit Theory", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 128", - "title": "Tax Accounting II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 162", - "title": "Law on Business Associations", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 198.2", - "title": "Internship II", - "units": 3, - "gradeType": "S/U", - "year": 4, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "MGT 117", - "title": "Investment Management", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "MGT 181", - "title": "Strategic Business Management", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "MGT 101" - ] - }, - { - "code": "BA 122", - "title": "Computerized Accounting and Auditing Theory and Practice", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 164", - "title": "Law on Negotiable Instruments and Banking Related Laws", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 184.1", - "title": "Computer-based Accounting Systems", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 190", - "title": "Special Problems", - "units": 1, - "year": 4, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 120.2", - "title": "Audit Practice", - "units": 6, - "year": 4, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 167", - "title": "Sales and Bailments and other Special Laws", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 184.2", - "title": "Audit of Computer-based Accounting Systems", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [ - "BA 99.1" - ] - }, - { - "code": "BA 191", - "title": "Special Topics", - "units": 1, - "year": 4, - "sem": "1", - "prereqs": [ - "BA 99.1" - ] - } - ], - "requiredCodes": [ - "KAS 1", - "STS 1", - "MATH 25", - "ECON 11", - "ECON 101", - "ECON 102", - "ETHICS 1", - "ARTS 1", - "COMM 10", - "PI 10", - "ENG 10", - "STAT 101", - "MGT 101", - "MGT 121", - "MGT 131", - "MGT 141", - "MGT 151", - "MGT 117", - "MGT 181", - "BA 99.1", - "BA 99.2", - "BA 114.1", - "BA 114.2", - "BA 116", - "BA 117", - "BA 118.1", - "BA 118.2", - "BA 120.1", - "BA 120.2", - "BA 122", - "BA 127", - "BA 128", - "BA 141", - "BA 142", - "BA 161", - "BA 162", - "BA 164", - "BA 167", - "BA 183", - "BA 184.1", - "BA 184.2", - "BA 190", - "BA 191", - "BA 198.1", - "BA 198.2", - "HK 11", - "HK 12/13" - ] - }, - "BSFOR": { - "code": "BSFOR", - "name": "BS Forestry", - "college": "CFNR", - "collegeName": "College of Forestry and Natural Resources", - "available": true, - "totalUnitsRequired": 143, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "FOR 1", - "title": "Introduction to Forests and Forestry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "SFI 100", - "title": "Geology and Forest Soils", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "FBS 10", - "title": "Biology of Tropical Forest Plants", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 SFFG 101. Principles and Concepts of Social Forestry", - "title": "3 SFFG 101. Principles and Concepts of Social Forestry 3 FRM 92. Forest Engineering 4 FBS 21. Taxonomy of Forest Plants 3 FRM 120. Forestry Economics 3 GE Elective 3 GE Elective (2) HK 12/13. Human Kinetics Activities/Advanced Human Ki 19", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 4 3 3 3 netics Activities 19", - "units": 2, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "SFFG 123", - "title": "Forest Policy and Institution", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "FPPS 11", - "title": "Wood Structure and Identification", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "FBS 31", - "title": "Plant Physiology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NRC 140", - "title": "Introduction to Geographic Information Systems", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/History of the Philippine", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 NRC 170. Watershed Management", - "title": "3 NRC 170. Watershed Management 3 FPPS 127. Properties and Utilization of Forest Product 3 FBS 36. Fundamentals of Forest Ecology 3 SFI 103. Fundamentals of Agroforestry s 3 GE Elective 3 STS 1. Science, Technology, and Society (3) NSTP 2. National Service Training Program II (2) HK 12/13. Human Kinetics Activities/Advanced Human Ki 18", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 s 3 3 3 3 (3) netics Activities 19", - "units": 2, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "Specialization Course", - "title": "Specialization Course", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SFI 140", - "title": "Tropical Silviculture", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FBS 45", - "title": "Forest Insect Pests and Diseases", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SFFG 113", - "title": "Forestry Extension", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "FBS 101", - "title": "Forest Biodiversity Specialization Course", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 FPPS 128. Non-Timber Forest Products", - "title": "3 FPPS 128. Non-Timber Forest Products 3 SFI 142. Plantation Forestry 4 FBS 172. Forest Genetics 3 FOR 195. Research Methods in Forestry and Natural R 3 FRM 61. Forest Biometry 3 Specialization Course 19", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 FOR 198. Internship", - "title": "3 FOR 198. Internship 3 3 esources 3 3 18", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "FOR 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SFFG 125", - "title": "Political Economy and Administration of Forestry Development", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "FRM 131", - "title": "Forest-based Enterprise Development and Management", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "SFFG 152", - "title": "Sociology of Natural Resources", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "FOR 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 FOR 200. Undergraduate Thesis", - "title": "3 FOR 200. Undergraduate Thesis 3 FPPS 147. Furniture and Handicraft Production 3 FRM 183. Timber Production Management 3 FRM 184. Integrated Forest Resource Management 3 Specialization Course 1 16", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "FOR 1", - "SFI 100", - "FBS 10", - "ECON 11", - "ARTS 1", - "PI 10", - "3 SFFG 101. Principles and Concepts of Social Forestry", - "3", - "SFFG 123", - "FPPS 11", - "FBS 31", - "NRC 140", - "KAS 1/HIST 1", - "ETHICS 1", - "3 NRC 170. Watershed Management", - "3", - "Specialization Course", - "SFI 140", - "FBS 45", - "SFFG 113", - "FBS 101", - "3 FPPS 128. Non-Timber Forest Products", - "3 FOR 198. Internship", - "FOR 200", - "SFFG 125", - "FRM 131", - "COMM 10", - "SFFG 152", - "FOR 199", - "3 FOR 200. Undergraduate Thesis", - "3" - ] - }, - "AAFOR": { - "code": "AAFOR", - "name": "Associate in Forestry", - "college": "CFNR", - "collegeName": "College of Forestry and Natural Resources", - "available": true, - "totalUnitsRequired": 72, - "geCoursesRequired": 6, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "FOR 1", - "title": "Introduction to Forestry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "FOR 21", - "title": "Dendrology", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 31", - "title": "Forest Mensuration", - "units": 4, - "year": 1, - "sem": "1", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 41", - "title": "Silvics and Silviculture", - "units": 4, - "year": 2, - "sem": "2", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 51", - "title": "Forest Ecology", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 101", - "title": "Forest Management", - "units": 4, - "year": 2, - "sem": "2", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 111", - "title": "Forest Utilization", - "units": 4, - "year": 3, - "sem": "1", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "FOR 121", - "title": "Forest Protection", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "FOR 1" - ] - }, - { - "code": "BIO 1", - "title": "General Biology I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 16", - "title": "General Chemistry I", - "units": 4, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "MATH 17", - "title": "Algebra and Trigonometry", - "units": 5, - "year": 4, - "sem": "1", - "prereqs": [] - } - ], - "requiredCodes": [ - "FOR 1", - "FOR 21", - "FOR 31", - "FOR 41", - "FOR 51", - "FOR 101", - "FOR 111", - "FOR 121", - "BIO 1", - "CHEM 16", - "MATH 17" - ] - }, - "BSHE": { - "code": "BSHE", - "name": "BS Human Ecology", - "college": "CHE", - "collegeName": "College of Human Ecology", - "available": true, - "totalUnitsRequired": 140, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine Histor", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HFDS 101", - "title": "Family and the Environment", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 100", - "title": "Introduction to Human Ecology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CERP 101", - "title": "Fundamentals of Human Settlements", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "SDS 101", - "title": "Introduction to Social Development", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "y HUME 112. Sustainability Science", - "title": "y HUME 112. Sustainability Science 3 3 HUME 107. Principles of Human Development 3 HUME 105. Humans and Their Environment 3 SOC 140. Introduction to Demography 3 BIO 150. Ecology", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic (2) Activities 15", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning 3 in Everyday Life 3 ARTS 1. Critical Perspectives in the Arts 3 3 4 s (2) 16", - "units": 6, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "HUME 110", - "title": "Ecology and Value Systems", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 111", - "title": "Human Ecological Perspective in Development", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 115", - "title": "Social Policies", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "Life and Works of Jose Rizal", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 STS 1. Science, Technology, and Society", - "title": "3 STS 1. Science, Technology, and Society 3 STAT 166. Statistics for the Social Sciences 3 HUME 114. Material and Energy Flows 3 CERP 161. Planning Theory and Practice I 3 HUME 113. Community Study in Human Welfare", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetic (2) Activities (3) NSTP 2. National Training Service Program II 15", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in 3 Communication 3 GE Elective 3 GE Elective 3 Student may take 6-9 units of GE based 3 on their specific major program s (2) (3) 15", - "units": 9, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "CERP 140", - "title": "Fundamentals of Environmental Economics", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 122", - "title": "Human Needs and the Built Environment", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "SDS 173", - "title": "Consumer Education", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 195", - "title": "Research Methods in Human Ecology Major", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 HUME 125. Human Ecological Systems Mapping", - "title": "3 HUME 125. Human Ecological Systems Mapping 3 HUME 124. Environmental Health 3 SDS 172. Techniques in Community Organizing 3 HFDS 110. Migration 3 Major 15", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 Major", - "title": "3 Major 3 Major 3 Major 3 Student may take 6-9 units of major 3 courses based on their specific major program 15", - "units": 9, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "HUME 123", - "title": "Climate Change Adaptation and Disaster Risk Reduction in Human Ecosystems", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 141", - "title": "Food and Nutrition Systems Major Major CERP/HFDS/SDS 200. Undergraduate Thesis Student may add another major course depending on their program", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 HUME 200a. Supervised Field Experience", - "title": "3 HUME 200a. Supervised Field Experience 3 HUME 199. Seminar in Human Ecology 3 CERP/HFDS/SDS 200. Undergraduate Thesis 3 3 15 Student may add another major course depending on their program", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "6", - "title": "6 1 3 10", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "KAS 1/HIST 1", - "HFDS 101", - "HUME 100", - "CERP 101", - "SDS 101", - "y HUME 112. Sustainability Science", - "ETHICS 1", - "HUME 110", - "HUME 111", - "HUME 115", - "PI 10", - "GE", - "3 STS 1. Science, Technology, and Society", - "COMM 10", - "CERP 140", - "HUME 122", - "SDS 173", - "HUME 195", - "3 HUME 125. Human Ecological Systems Mapping", - "3 Major", - "HUME 123", - "HNF 141", - "3 HUME 200a. Supervised Field Experience", - "6" - ] - }, - "BSNUTRI": { - "code": "BSNUTRI", - "name": "BS Nutrition", - "college": "CHE", - "collegeName": "College of Human Ecology", - "available": true, - "totalUnitsRequired": 165, - "geCoursesRequired": 9, - "tracks": { - "thesis": { - "name": "Thesis Track", - "code": "NUT 200", - "freeElectiveUnits": 9 - }, - "sp": { - "name": "Special Problem Track", - "code": "NUT 190", - "freeElectiveUnits": 12 - } - }, - "defaultTrack": "sp", - "majorCourses": [ - { - "code": "ABT 11", - "title": "Introduction to Agricultural Biotechnology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "BIO 30", - "title": "Genetics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HUME 100", - "title": "Introduction to Human Ecology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HFDS 130", - "title": "Human Physiology", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18.1", - "title": "University Chemistry Laboratory", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 KAS 1/HIST 1. Kasaysayang ng Pilipinas/Philippine History", - "title": "1 KAS 1/HIST 1. Kasaysayang ng Pilipinas/Philippine History 3 ETHICS 1. Ethics and Moral Reasoning in Everyday Life 3 GE Elective 3 CHEM 40. Organic Chemistry 3 CHEM 40.1. Organic Chemistry Laboratory 3 MCB 11. Biology and Applications of Microorganisms 2 HNF 101. Food Selection and Preparation", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics (2) Activities 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 4 1 3 4 (2) 21", - "units": 3, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "MGT 101", - "title": "Concepts and Dynamics of Management", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 103", - "title": "Food Preservation", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 122", - "title": "Food and Nutrition", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 141", - "title": "Food and Nutrition Systems", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 160", - "title": "Introductory Biochemistry", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 102", - "title": "Meal Management", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activitie/Advanced Human Kinetic Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Service Training Program I", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 STS 1. Science, Technology, and Society", - "title": "3 STS 1. Science, Technology, and Society 3 PI 10. The Life and Works of Jose Rizal 4 GE Elective 3 GE Elective 3 STAT 101. Statistical Methods 4 MGT 111. Principles of Accounting s (2) HNF 123. Nutritional Assessment", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activitie /Advanced Human Kineti (3) Activities", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "NSTP 2", - "title": "National Service Training Program II 20", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3", - "title": "3 3 3 3 3 3 3 cs (2) (3) 21", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "HNF 142", - "title": "Public Health Nutrition", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 104", - "title": "Food Service System I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 127", - "title": "Nutrition in the Life Stages", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 128", - "title": "Medical Nutrition Therapy I", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF 195", - "title": "Food and Nutrition Research", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 HNF 105. Food Service Systems II", - "title": "3 HNF 105. Food Service Systems II 3 HNF 143. Nutrition Education 4 HNF 129. Medical Nutrition Therapy II 5 HNF 200. Undergraduate Thesis 3 HNF 126. Sports Nutrition", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 HNF 200. Undergraduate Thesis", - "title": "3 HNF 200. Undergraduate Thesis 3 5 3 2 3 19", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "HNF 199", - "title": "Undergraduate Seminar", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "HNF", - "title": "200a. Practicum I", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "1 HNF 200b. Practicum II", - "title": "1 HNF 200b. Practicum II 12 13", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "12", - "title": "12 12", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ABT 11", - "BIO 30", - "ARTS 1", - "HUME 100", - "HFDS 130", - "CHEM 18", - "CHEM 18.1", - "1 KAS 1/HIST 1. Kasaysayang ng Pilipinas/Philippine History", - "3", - "MGT 101", - "HNF 103", - "HNF 122", - "HNF 141", - "CHEM 160", - "HNF 102", - "3 STS 1. Science, Technology, and Society", - "3", - "HNF 142", - "HNF 104", - "HNF 127", - "HNF 128", - "HNF 195", - "3 HNF 105. Food Service Systems II", - "COMM 10", - "3 HNF 200. Undergraduate Thesis", - "HNF 199", - "HNF", - "1 HNF 200b. Practicum II", - "12" - ] - }, - "BSDC": { - "code": "BSDC", - "name": "BS Development Communication", - "college": "CDC", - "collegeName": "College of Development Communication", - "available": true, - "totalUnitsRequired": 142, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ARTS 1", - "title": "Critical Perspectives in the Arts", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 10", - "title": "Introduction to Development Communicatio", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 11", - "title": "Introductios to Media Writing for Development", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "ECON 11", - "title": "General Economics", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine 3 3 History 3 ETHICS 1. Ethics and Moral Reasoning in Everyday Life 3 DEVC 20. Fundamentals of Development Journalism n 3 DEVC 30. Fundamentals of Community Broadcasting 3", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "DEVC 40", - "title": "Fundamentals of Educational Communication and 3 Technology 3 DEVC 50. Introduction to Science Communication", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human (2) Kinetics Activities (3) NSTP 2. National Training Service Program II 18", - "units": 18, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "COMM 10", - "title": "Critical Perspectives in Communication", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 70", - "title": "Interpersonal Communication in Developme", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 80", - "title": "Communication and Society", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 101", - "title": "Introduction to Communication Theory", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Huma Kinetics Activities", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3", - "title": "3", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "DEVC 125", - "title": "Writing and Reporting for Development 3 DEVC 3 DEVC 135. Multi-media Materials Plannning and Design 3 STAT 166. Statistics for the Social Sciences nt 3 Elective (Technical) 3 Elective (Technical) 3 n (2) 18", - "units": 15, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "3. Visual and Audiovisual Media Production", - "title": "3. Visual and Audiovisual Media Production 3 3", - "units": 3, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "DEVC 126", - "title": "Participatory Development Journalism", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 144", - "title": "Media-based Learning Systems", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 153", - "title": "Managing Information for Development", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(Technical)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(Technical)", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Huma Kinetics Activities", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 DEVC 136. Multi-media Materials Production and Management", - "title": "3 DEVC 136. Multi-media Materials Production and Management 3 DEVC 198. 3 DEVC 154. Communicating Science for Development 3 DEVC 195. Introduction to Communication Research 3 Elective (Technical) 3 Elective (SOSC) 3 Elective (SOSC) n (2) 18 18", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "Internship", - "title": "Internship 3", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "DEVC 127", - "title": "Data Journalism for Development", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 145", - "title": "Distance Learning Systems in Developmen Communication", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(Technical)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(Technical)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "Elective", - "title": "(SOSC)", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 DEVC 128. Science Journalism", - "title": "3 DEVC 128. Science Journalism t 3 DEVC 155. Knowledge Management for Development 3 DEVC 180. Communication Campaigns and Programs 3 DEVC 199. Undergraduate Seminar 3 DEVC 200. Undergraduate Thesis 3 Elective (SOSC) 18", - "units": 16, - "year": 4, - "sem": "2", - "prereqs": [] - } - ], - "requiredCodes": [ - "ARTS 1", - "STS 1", - "PI 10", - "DEVC 10", - "DEVC 11", - "ECON 11", - "KAS 1/HIST 1", - "DEVC 40", - "COMM 10", - "GE", - "GE", - "DEVC 70", - "DEVC 80", - "DEVC 101", - "3", - "DEVC 125", - "3. Visual and Audiovisual Media Production", - "DEVC 126", - "DEVC 144", - "DEVC 153", - "GE", - "Elective", - "Elective", - "3 DEVC 136. Multi-media Materials Production and Management", - "Internship", - "DEVC 127", - "DEVC 145", - "DEVC 200", - "Elective", - "Elective", - "Elective", - "3 DEVC 128. Science Journalism" - ] - }, - "ASDC": { - "code": "ASDC", - "name": "Associate of Science in Development Communication", - "college": "CDC", - "collegeName": "College of Development Communication", - "available": true, - "totalUnitsRequired": 72, - "geCoursesRequired": 6, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "DEVC 10", - "title": "Introduction to Development Communication", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "DEVC 20", - "title": "Communication Theories", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [ - "DEVC 10" - ] - }, - { - "code": "DEVC 30", - "title": "Communication Research Methods", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [ - "DEVC 10" - ] - }, - { - "code": "DEVC 40", - "title": "Development Journalism", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [ - "DEVC 10" - ] - }, - { - "code": "DEVC 50", - "title": "Development Broadcasting", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [ - "DEVC 10" - ] - }, - { - "code": "DEVC 60", - "title": "Educational Communication", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [ - "DEVC 10" - ] - }, - { - "code": "ENG 10", - "title": "Writing of Scientific Papers", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - } - ], - "requiredCodes": [ - "DEVC 10", - "DEVC 20", - "DEVC 30", - "DEVC 40", - "DEVC 50", - "DEVC 60", - "ENG 10" - ] - }, - "DVM": { - "code": "DVM", - "name": "Doctor of Veterinary Medicine", - "college": "CVM", - "collegeName": "College of Veterinary Medicine", - "available": true, - "totalUnitsRequired": 220, - "geCoursesRequired": 9, - "tracks": null, - "defaultTrack": null, - "majorCourses": [ - { - "code": "ETHICS 1", - "title": "Ethics and Moral Reasoning in Everyday Life", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "KAS 1/HIST 1", - "title": "Kasaysayan ng Pilipinas/Philippine History", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "PI 10", - "title": "The Life and Works of Jose Rizal", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "VMED 101", - "title": "Animal Welfare", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "STS 1", - "title": "Science, Technology, and Society", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 18", - "title": "University Chemistry", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "NSTP 1", - "title": "National Training Service Program I", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK 11", - "title": "Wellness and Basic Injury Management", - "units": 3, - "year": 1, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 ARTS 1. Critical Perspectives in the Arts", - "title": "3 ARTS 1. Critical Perspectives in the Arts 3 GE Elective 3 CHEM 18.1. University Chemistry Laboratory 3 STAT 164. Statistics for the Biological Scien 3 ZOTC 111. General Principles of Animal Produc 3 NSTP 2. National Training Service Program II (3) HK 12/13. Human Kinetics Activities/Advanced (2) 18", - "units": 3, - "year": 1, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 CHEM 40. Basic Organic Chemistry", - "title": "3 CHEM 40. Basic Organic Chemistry 3 CHEM 40.1. Basic Organic Chemistry Laboratory 2 ces tion (3) Human Kinetics Activities 14", - "units": 2, - "year": 1, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "GE", - "title": "Elective", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ABME 10", - "title": "Foundations of Entrepreneurship", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "ZOTC 112", - "title": "Principles of Animal Breeding", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "CHEM 160", - "title": "Introductory Biochemistry", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPHY 140", - "title": "Biochemical Aspects of Animal Processes", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced Human Kinetics Activitie", - "units": 3, - "year": 2, - "sem": "1", - "prereqs": [] - }, - { - "code": "3 COMM 10. Critical Perspectives in Communicati", - "title": "3 COMM 10. Critical Perspectives in Communicati 3 VETA 101. Macroscopic Anatomy I 3 VETA 105. Microscopic and Developmental Anato 3 ZOTC 113. Principles of Animal Nutrition 3 VPHY 141. General Physiology", - "units": 3, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "HK", - "title": "12/13. Human Kinetics Activities/Advanced 2 s 17", - "units": 2, - "year": 2, - "sem": "2", - "prereqs": [] - }, - { - "code": "on 3 VMCB 121. General Microbiology", - "title": "on 3 VMCB 121. General Microbiology 5 my I 3 4 Human Kinetics Activities 18", - "units": 2, - "year": 2, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "VETA 102", - "title": "Macroscopic Anatomy II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "VETA 106", - "title": "Microscopic and Developmental Anatomy II", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPHY 142", - "title": "Systemic Physiology", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "ZOTC 114", - "title": "Swine Production", - "units": 3, - "year": 3, - "sem": "1", - "prereqs": [] - }, - { - "code": "4 VMCB 123. Veterinary Virology", - "title": "4 VMCB 123. Veterinary Virology 4 VPAR 131. Veterinary Entomology and Protozool 4 VPHM 141. Veterinary Pharmacology and Therape 3 ZOTC 115. Ruminant Production 15 VMCB 122. Veterinary Bacteriology and Mycolog", - "units": 3, - "year": 3, - "sem": "2", - "prereqs": [] - }, - { - "code": "3 VPTH 121. General Pathology", - "title": "3 VPTH 121. General Pathology ogy 4 ZOTC 116. Poultry Production utics I 4 3 y 17", - "units": 3, - "year": 3, - "sem": "midyear", - "prereqs": [] - }, - { - "code": "VMCB 124", - "title": "Fundamentals of Immunology", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPAR 132", - "title": "Veterinary Helminthology", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPH 121", - "title": "Epidemiology", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPHM 142", - "title": "Veterinary Pharmacology and Therapeutics II", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPTH 122", - "title": "Systemic Pathology", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ZOTC 117", - "title": "Equine Production", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "ZOTC 119", - "title": "Husbandry and Health Management of Laboratory Animals", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VSUR 154", - "title": "Veterinary Diagnostic Imaging", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VETC 171", - "title": "Introduction to Clinics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VMED 152", - "title": "Canine and Feline Medicine", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VMED 162", - "title": "Poultry Medicine", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VPH 123", - "title": "Food Hygiene", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VSUR 152", - "title": "Small Animal Surgery", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VETC 173", - "title": "Clinical Conference I", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VETC 175", - "title": "Clinical Internship I", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VELD 161.1", - "title": "Laboratory Diagnostics in Veterinary Medicine", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VMED 156", - "title": "Jurisprudence, Ethics and Economics", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "VMED 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "1", - "prereqs": [] - }, - { - "code": "2 VMED 151. General Principles of Veterinary Me", - "title": "2 VMED 151. General Principles of Veterinary Me 4 VMED 195. Research Methods in Veterinary Medi 3 VPH 122. Zoonoses 4 VPTH 123. Clinical Pathology 3 VPHY 143. Veterinary Endocrinology and Reprod 2 VSUR 151. Principles of Veterinary Anesthesio 3 21", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "FIFTH", - "title": "YEAR 2 VETC 172. Clinical Clerkship 2 VMED 155. Theriogenology 4 VMED 161. Equine Medicine 3 VMED 163. Ruminant Medicine 4 VMED 164. Swine Medicine 4 VMED 165. Aquatic and Wildlife Medicine 19 VSUR 153. Large Animal Surgery", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "VMED 200", - "title": "Undergraduate Thesis", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "SIXTH", - "title": "YEAR 1 VETC 174. Clinical Conference II 6 VETC 176. Clinical Internship II 2 2 3 14", - "units": 3, - "year": 4, - "sem": "2", - "prereqs": [] - }, - { - "code": "dicine", - "title": "dicine cine 2 3 uctive Physiology logy & Surgery 17 2 3 2 2 3 2 3 3 20 1 14 15", - "units": 3, - "year": 4, - "sem": "midyear", - "prereqs": [] - } - ], - "requiredCodes": [ - "ETHICS 1", - "KAS 1/HIST 1", - "PI 10", - "VMED 101", - "STS 1", - "CHEM 18", - "3 ARTS 1. Critical Perspectives in the Arts", - "3 CHEM 40. Basic Organic Chemistry", - "GE", - "GE", - "ABME 10", - "ZOTC 112", - "CHEM 160", - "VPHY 140", - "3 COMM 10. Critical Perspectives in Communicati", - "on 3 VMCB 121. General Microbiology", - "VETA 102", - "VETA 106", - "VPHY 142", - "ZOTC 114", - "4 VMCB 123. Veterinary Virology", - "3 VPTH 121. General Pathology", - "VMCB 124", - "VPAR 132", - "VPH 121", - "VPHM 142", - "VPTH 122", - "ZOTC 117", - "ZOTC 119", - "VSUR 154", - "VETC 171", - "VMED 152", - "VMED 162", - "VPH 123", - "VSUR 152", - "VETC 173", - "VETC 175", - "VELD 161.1", - "VMED 156", - "VMED 200", - "2 VMED 151. General Principles of Veterinary Me", - "FIFTH", - "VMED 200", - "SIXTH", - "dicine" - ] - } -}; - -// Group programs by college -const COLLEGES = { - "CAS": { name: "College of Arts and Sciences", programs: [] }, - "CAFS": { name: "College of Agriculture and Food Science", programs: [] }, - "CEAT": { name: "College of Engineering and Agro-Industrial Technology", programs: [] }, - "CFNR": { name: "College of Forestry and Natural Resources", programs: [] }, - "CEM": { name: "College of Economics and Management", programs: [] }, - "CHE": { name: "College of Human Ecology", programs: [] }, - "CVM": { name: "College of Veterinary Medicine", programs: [] }, - "CDC": { name: "College of Development Communication", programs: [] }, - "CPAf": { name: "College of Public Affairs and Development", programs: [] }, -}; - -// Populate colleges with programs -Object.values(UPLB_PROGRAMS).forEach(program => { - if (COLLEGES[program.college]) { - COLLEGES[program.college].programs.push(program); - } -}); - -// Current selected program (default to BSCS) -let currentProgram = UPLB_PROGRAMS["BSCS"]; - -// Get current curriculum based on selected program -function getCurrentCurriculum() { - return currentProgram; -} - -// Set current program -function setCurrentProgram(programCode) { - if (UPLB_PROGRAMS[programCode]) { - currentProgram = UPLB_PROGRAMS[programCode]; - updateTrackOptionsUI(); - updateCurriculumHint(); - return true; - } - return false; -} - -// Update the track options UI based on current program -function updateTrackOptionsUI() { - const trackSelector = document.getElementById('trackSelector'); - const trackOptions = document.getElementById('trackOptions'); - - if (!trackSelector || !trackOptions) return; - - // If program has no tracks, hide the entire track selector - if (!currentProgram.tracks) { - trackSelector.style.display = 'none'; - return; - } - - trackSelector.style.display = 'block'; - - // Build track options HTML - let html = ''; - for (const [trackKey, trackInfo] of Object.entries(currentProgram.tracks)) { - const isChecked = trackKey === (currentProgram.defaultTrack || 'sp') ? 'checked' : ''; - let electiveInfo = `${trackInfo.freeElectiveUnits} free elective units`; - if (trackInfo.majorElectiveUnits) { - electiveInfo += ` • ${trackInfo.majorElectiveUnits} major elective units`; - } - html += ` - - `; - } - - trackOptions.innerHTML = html; - - // Re-attach event listeners to the new radio buttons - document.querySelectorAll('input[name="track"]').forEach(radio => { - radio.addEventListener('change', (e) => { - if (typeof currentTrack !== 'undefined') { - currentTrack = e.target.value; - } - // Recalculate remaining courses with new track - if (window.gradesData && window.gradesData.completedCourses) { - displayRemainingCourses(window.gradesData.completedCourses); - } - }); - }); -} - -// Update the curriculum hint text -function updateCurriculumHint() { - const hintEl = document.getElementById('curriculumHint'); - if (hintEl && currentProgram) { - hintEl.textContent = `Based on ${currentProgram.name} curriculum`; - } -} - -// Detect which track the student is on based on completed courses -function detectTrack(completedCourses) { - if (!currentProgram.tracks) return null; - - const codes = completedCourses.map(c => c.code.toUpperCase().trim()); - - for (const [trackKey, track] of Object.entries(currentProgram.tracks)) { - if (codes.some(code => code.startsWith(track.code.toUpperCase()))) { - return trackKey; - } - } - - return null; -} - -// Get free elective units based on track -function getFreeElectiveUnits(track) { - if (!currentProgram.tracks) return 15; // Default - - if (track && currentProgram.tracks[track]) { - return currentProgram.tracks[track].freeElectiveUnits; - } - - // Return default track's units - const defaultTrack = currentProgram.defaultTrack || Object.keys(currentProgram.tracks)[0]; - return currentProgram.tracks[defaultTrack]?.freeElectiveUnits || 15; -} - -// Check if a course is a GE course (title starts with "(GE)") -function isGECourse(courseTitle) { - return courseTitle && courseTitle.trim().startsWith("(GE)"); -} - -// Check if a course is a required major course -function isRequiredCourse(courseCode) { - if (!currentProgram.requiredCodes) return false; - - const normalized = courseCode.toUpperCase().trim(); - return currentProgram.requiredCodes.some(code => - code.toUpperCase() === normalized - ); -} - -// Get remaining required courses -function getRemainingCourses(completedCourses) { - if (!currentProgram.majorCourses) return []; - - const completedCodes = new Set( - completedCourses.map(c => c.code.toUpperCase().trim()) - ); - - return currentProgram.majorCourses.filter(course => - !completedCodes.has(course.code.toUpperCase()) - ); -} - -// Count completed GE courses -function countCompletedGE(completedCourses) { - return completedCourses.filter(c => isGECourse(c.title)).length; -} - -// Get remaining GE slots -function getRemainingGESlots(completedCourses) { - const completed = countCompletedGE(completedCourses); - const required = currentProgram.geCoursesRequired || 9; - return Math.max(0, required - completed); -} - -// For backwards compatibility -const BSCS_CURRICULUM = UPLB_PROGRAMS["BSCS"]; - -if (typeof module !== 'undefined' && module.exports) { - module.exports = { - UPLB_PROGRAMS, - COLLEGES, - getCurrentCurriculum, - setCurrentProgram, - detectTrack, - getFreeElectiveUnits, - isGECourse, - isRequiredCourse, - getRemainingCourses, - countCompletedGE, - getRemainingGESlots, - BSCS_CURRICULUM - }; -} diff --git a/curriculum_temp.js b/curriculum_temp.js deleted file mode 100644 index 695b336..0000000 --- a/curriculum_temp.js +++ /dev/null @@ -1,1425 +0,0 @@ -// curriculum_temp.js - -// UPLB Curriculum Database -// Complete undergraduate programs for University of the Philippines Los Baños -// NOTE: This is UPLB only - not UP Diliman, UP Manila, UP Baguio, etc. - -const UPLB_PROGRAMS = { - // ============================================================================ - // COLLEGE OF ARTS AND SCIENCES (CAS) - // ============================================================================ - - "BSCS": { - code: "BSCS", - name: "BS Computer Science", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "CMSC 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "CMSC 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "CMSC 12", title: "Foundations of Computer Science", units: 3 }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "CMSC 22", title: "Object-Oriented Programming", units: 3 }, - { code: "CMSC 23", title: "Mobile Computing", units: 3 }, - { code: "CMSC 56", title: "Discrete Mathematical Structures in Computer Science I", units: 3 }, - { code: "CMSC 57", title: "Discrete Mathematical Structures in Computer Science II", units: 3 }, - { code: "CMSC 100", title: "Web Programming", units: 3 }, - { code: "CMSC 123", title: "Data Structures", units: 3 }, - { code: "CMSC 124", title: "Design and Implementation of Programming Languages", units: 3 }, - { code: "CMSC 125", title: "Operating Systems", units: 3 }, - { code: "CMSC 127", title: "File Processing and Database Systems", units: 3 }, - { code: "CMSC 128", title: "Introduction to Software Engineering", units: 3 }, - { code: "CMSC 130", title: "Logic Design and Digital Computer Circuits", units: 3 }, - { code: "CMSC 131", title: "Introduction to Computer Organization and Machine Level Programming", units: 3 }, - { code: "CMSC 132", title: "Computer Architecture", units: 3 }, - { code: "CMSC 137", title: "Data Communications and Networking", units: 3 }, - { code: "CMSC 141", title: "Automata and Language Theory", units: 3 }, - { code: "CMSC 142", title: "Design and Analysis of Algorithms", units: 3 }, - { code: "CMSC 150", title: "Numerical and Symbolic Computation", units: 3 }, - { code: "CMSC 170", title: "Introduction to Artificial Intelligence", units: 3 }, - { code: "CMSC 173", title: "Human Computer Interaction", units: 3 }, - { code: "CMSC 180", title: "Introduction to Parallel Computing", units: 3 }, - { code: "CMSC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "CMSC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "CMSC 12", "CMSC 21", "CMSC 22", "CMSC 23", - "CMSC 56", "CMSC 57", "CMSC 100", "CMSC 123", "CMSC 124", "CMSC 125", - "CMSC 127", "CMSC 128", "CMSC 130", "CMSC 131", "CMSC 132", "CMSC 137", - "CMSC 141", "CMSC 142", "CMSC 150", "CMSC 170", "CMSC 173", "CMSC 180", - "STAT 101", "ENG 10" - ] - }, - - "BSMATH": { - code: "BSMATH", - name: "BS Mathematics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "MATH 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "MATH 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 38", title: "Mathematical Analysis III", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 100.1", title: "Abstract Algebra I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "MATH 121.1", title: "Real Analysis I", units: 3 }, - { code: "MATH 122.1", title: "Complex Analysis I", units: 3 }, - { code: "MATH 171.1", title: "Linear Programming", units: 3 }, - { code: "MATH 176", title: "Numerical Analysis I", units: 3 }, - { code: "MATH 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "MATH 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 38", "MATH 40", - "MATH 100.1", "MATH 114", "MATH 121.1", "MATH 122.1", "MATH 171.1", "MATH 176", - "CMSC 21", "STAT 101", "ENG 10" - ] - }, - - "BSAPMATH": { - code: "BSAPMATH", - name: "BS Applied Mathematics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AMAT 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "AMAT 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 38", title: "Mathematical Analysis III", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "AMAT 131", title: "Mathematical Modeling", units: 3 }, - { code: "AMAT 151", title: "Operations Research I", units: 3 }, - { code: "AMAT 152", title: "Operations Research II", units: 3 }, - { code: "MATH 176", title: "Numerical Analysis I", units: 3 }, - { code: "AMAT 167", title: "Mathematical Finance", units: 3 }, - { code: "AMAT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AMAT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 38", "MATH 40", - "MATH 114", "AMAT 131", "AMAT 151", "AMAT 152", "MATH 176", "AMAT 167", - "CMSC 21", "STAT 101", "ENG 10" - ] - }, - - "BSSTAT": { - code: "BSSTAT", - name: "BS Statistics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "STAT 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "STAT 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "STAT 115", title: "Probability Theory", units: 3 }, - { code: "STAT 116", title: "Statistical Inference I", units: 3 }, - { code: "STAT 117", title: "Statistical Inference II", units: 3 }, - { code: "STAT 121", title: "Regression Analysis", units: 3 }, - { code: "STAT 126", title: "Design and Analysis of Experiments", units: 3 }, - { code: "STAT 131", title: "Sample Survey Designs", units: 3 }, - { code: "STAT 136", title: "Nonparametric Statistical Methods", units: 3 }, - { code: "STAT 137", title: "Multivariate Analysis", units: 3 }, - { code: "STAT 138", title: "Time Series Analysis", units: 3 }, - { code: "STAT 145", title: "Stochastic Processes", units: 3 }, - { code: "STAT 150", title: "Statistical Computing", units: 3 }, - { code: "STAT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "STAT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 40", "STAT 101", "STAT 115", "STAT 116", - "STAT 117", "STAT 121", "STAT 126", "STAT 131", "STAT 136", "STAT 137", - "STAT 138", "STAT 145", "STAT 150", "CMSC 21", "ENG 10" - ] - }, - - "BSMST": { - code: "BSMST", - name: "BS Mathematics and Science Teaching", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 150, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "EDUC 100", title: "The Teaching Profession", units: 3 }, - { code: "EDUC 101", title: "The Child and Adolescent Learner", units: 3 }, - { code: "EDUC 102", title: "Facilitating Learning", units: 3 }, - { code: "EDUC 103", title: "Curriculum Development", units: 3 }, - { code: "EDUC 110", title: "Principles of Teaching", units: 3 }, - { code: "EDUC 160", title: "Educational Assessment", units: 3 }, - { code: "EDUC 190", title: "Practice Teaching", units: 6, gradeType: "S/U" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 40", "MATH 114", - "STAT 101", "EDUC 100", "EDUC 101", "EDUC 102", "EDUC 103", "EDUC 110", - "EDUC 160", "EDUC 190", "ENG 10" - ] - }, - - "BSBIO": { - code: "BSBIO", - name: "BS Biology", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "BIO 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "BIO 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "BIO 2", title: "General Biology II", units: 3 }, - { code: "BIO 30", title: "Cell Biology", units: 4 }, - { code: "BIO 31", title: "Genetics", units: 4 }, - { code: "BIO 100", title: "Taxonomy", units: 3 }, - { code: "BIO 110", title: "Developmental Biology", units: 4 }, - { code: "BIO 120", title: "Ecology", units: 4 }, - { code: "BIO 130", title: "Molecular Biology", units: 4 }, - { code: "BIO 140", title: "Physiology", units: 4 }, - { code: "BIO 150", title: "Evolution", units: 3 }, - { code: "BIO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "BIO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "BIO 1", "BIO 2", "BIO 30", "BIO 31", "BIO 100", "BIO 110", "BIO 120", - "BIO 130", "BIO 140", "BIO 150", "CHEM 16", "CHEM 17", "CHEM 40", - "CHEM 41", "CHEM 31", "MATH 27", "PHYSICS 71", "PHYSICS 72", "STAT 101", "ENG 10" - ] - }, - - "BSCHEM": { - code: "BSCHEM", - name: "BS Chemistry", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "CHEM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "CHEM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 27", title: "Analytical Chemistry II", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 110", title: "Inorganic Chemistry", units: 3 }, - { code: "CHEM 120", title: "Physical Chemistry I", units: 4 }, - { code: "CHEM 121", title: "Physical Chemistry II", units: 4 }, - { code: "CHEM 130", title: "Instrumental Methods of Analysis", units: 4 }, - { code: "CHEM 140", title: "Biochemistry I", units: 4 }, - { code: "CHEM 141", title: "Biochemistry II", units: 4 }, - { code: "CHEM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "CHEM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CHEM 16", "CHEM 17", "CHEM 26", "CHEM 27", "CHEM 40", "CHEM 41", - "CHEM 110", "CHEM 120", "CHEM 121", "CHEM 130", "CHEM 140", "CHEM 141", - "MATH 27", "MATH 28", "PHYSICS 71", "PHYSICS 72", "STAT 101", "ENG 10" - ] - }, - - "BSAPPHY": { - code: "BSAPPHY", - name: "BS Applied Physics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "PHYSICS 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "PHYSICS 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "PHYSICS 73", title: "Elementary Physics III", units: 4 }, - { code: "PHYSICS 101", title: "Mathematical Methods of Physics I", units: 3 }, - { code: "PHYSICS 102", title: "Mathematical Methods of Physics II", units: 3 }, - { code: "PHYSICS 111", title: "Classical Mechanics", units: 3 }, - { code: "PHYSICS 121", title: "Electricity and Magnetism", units: 3 }, - { code: "PHYSICS 131", title: "Introduction to Quantum Mechanics", units: 3 }, - { code: "PHYSICS 141", title: "Thermodynamics and Statistical Mechanics", units: 3 }, - { code: "PHYSICS 151", title: "Electronics", units: 4 }, - { code: "PHYSICS 161", title: "Optics", units: 3 }, - { code: "PHYSICS 171", title: "Solid State Physics", units: 3 }, - { code: "PHYSICS 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "PHYSICS 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "PHYSICS 71", "PHYSICS 72", "PHYSICS 73", "PHYSICS 101", "PHYSICS 102", - "PHYSICS 111", "PHYSICS 121", "PHYSICS 131", "PHYSICS 141", "PHYSICS 151", - "PHYSICS 161", "PHYSICS 171", "MATH 27", "MATH 28", "MATH 36", "MATH 37", - "MATH 114", "ENG 10" - ] - }, - - "ABCOMM": { - code: "ABCOMM", - name: "AB Communication Arts", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "COMM 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "COMM 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "COMM 10", title: "Introduction to Communication", units: 3 }, - { code: "COMM 20", title: "Principles of Speech Communication", units: 3 }, - { code: "COMM 30", title: "Writing for Various Media", units: 3 }, - { code: "COMM 100", title: "Theories of Communication", units: 3 }, - { code: "COMM 110", title: "Rhetorical Criticism", units: 3 }, - { code: "COMM 120", title: "Intercultural Communication", units: 3 }, - { code: "COMM 130", title: "Organizational Communication", units: 3 }, - { code: "COMM 140", title: "Mass Communication", units: 3 }, - { code: "COMM 150", title: "Communication Research", units: 3 }, - { code: "COMM 160", title: "Seminar in Communication Arts", units: 3 }, - { code: "COMM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "COMM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - { code: "ENG 11", title: "English for Academic Writing", units: 3 }, - { code: "FIL 40", title: "Panitikang Filipino", units: 3 }, - ], - requiredCodes: [ - "COMM 10", "COMM 20", "COMM 30", "COMM 100", "COMM 110", "COMM 120", - "COMM 130", "COMM 140", "COMM 150", "COMM 160", "ENG 10", "ENG 11", "FIL 40" - ] - }, - - "ABSOCIO": { - code: "ABSOCIO", - name: "AB Sociology", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "SOC 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "SOC 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "SOC 10", title: "Introduction to Sociology", units: 3 }, - { code: "SOC 100", title: "Classical Sociological Theory", units: 3 }, - { code: "SOC 101", title: "Contemporary Sociological Theory", units: 3 }, - { code: "SOC 110", title: "Social Research Methods I", units: 3 }, - { code: "SOC 111", title: "Social Research Methods II", units: 3 }, - { code: "SOC 120", title: "Sociology of Philippine Society", units: 3 }, - { code: "SOC 130", title: "Rural Sociology", units: 3 }, - { code: "SOC 140", title: "Urban Sociology", units: 3 }, - { code: "SOC 150", title: "Social Stratification", units: 3 }, - { code: "SOC 160", title: "Sociology of Development", units: 3 }, - { code: "SOC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "SOC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "SOC 10", "SOC 100", "SOC 101", "SOC 110", "SOC 111", "SOC 120", - "SOC 130", "SOC 140", "SOC 150", "SOC 160", "STAT 101", "ENG 10" - ] - }, - - "ABPHILO": { - code: "ABPHILO", - name: "AB Philosophy", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "PHILO 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "PHILO 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "PHILO 1", title: "Introduction to Philosophy", units: 3 }, - { code: "PHILO 10", title: "Logic", units: 3 }, - { code: "PHILO 100", title: "Ancient Philosophy", units: 3 }, - { code: "PHILO 101", title: "Medieval Philosophy", units: 3 }, - { code: "PHILO 102", title: "Modern Philosophy", units: 3 }, - { code: "PHILO 103", title: "Contemporary Philosophy", units: 3 }, - { code: "PHILO 110", title: "Ethics", units: 3 }, - { code: "PHILO 120", title: "Metaphysics", units: 3 }, - { code: "PHILO 130", title: "Epistemology", units: 3 }, - { code: "PHILO 140", title: "Philosophy of Mind", units: 3 }, - { code: "PHILO 150", title: "Filipino Philosophy", units: 3 }, - { code: "PHILO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "PHILO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "PHILO 1", "PHILO 10", "PHILO 100", "PHILO 101", "PHILO 102", "PHILO 103", - "PHILO 110", "PHILO 120", "PHILO 130", "PHILO 140", "PHILO 150", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF AGRICULTURE AND FOOD SCIENCE (CAFS) - // ============================================================================ - - "BSAGRI": { - code: "BSAGRI", - name: "BS Agriculture", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGRI 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGRI 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "AGRI 111", title: "Crop Science", units: 3 }, - { code: "AGRI 112", title: "Soil Science", units: 4 }, - { code: "AGRI 120", title: "Plant Pathology", units: 3 }, - { code: "AGRI 121", title: "Agricultural Entomology", units: 3 }, - { code: "AGRI 130", title: "Animal Science", units: 4 }, - { code: "AGRI 131", title: "Animal Nutrition", units: 3 }, - { code: "AGRI 140", title: "Agricultural Economics", units: 3 }, - { code: "AGRI 150", title: "Farm Management", units: 3 }, - { code: "AGRI 160", title: "Agricultural Extension", units: 3 }, - { code: "AGRI 170", title: "Seed Technology", units: 3 }, - { code: "AGRI 180", title: "Irrigation and Drainage", units: 3 }, - { code: "AGRI 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGRI 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGRI 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "AGRI 10", "AGRI 111", "AGRI 112", "AGRI 120", "AGRI 121", "AGRI 130", - "AGRI 131", "AGRI 140", "AGRI 150", "AGRI 160", "AGRI 170", "AGRI 180", - "AGRI 191", "CHEM 16", "CHEM 17", "BIO 1", "STAT 101", "ENG 10" - ] - }, - - "BSABIO": { - code: "BSABIO", - name: "BS Agricultural Biotechnology", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ABIO 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ABIO 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ABIO 10", title: "Introduction to Agricultural Biotechnology", units: 3 }, - { code: "ABIO 100", title: "Principles of Biotechnology", units: 3 }, - { code: "ABIO 110", title: "Plant Biotechnology", units: 4 }, - { code: "ABIO 120", title: "Animal Biotechnology", units: 4 }, - { code: "ABIO 130", title: "Microbial Biotechnology", units: 4 }, - { code: "ABIO 140", title: "Molecular Biology Techniques", units: 4 }, - { code: "ABIO 150", title: "Genetic Engineering", units: 3 }, - { code: "ABIO 160", title: "Bioinformatics", units: 3 }, - { code: "ABIO 170", title: "Biosafety and Bioethics", units: 3 }, - { code: "ABIO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ABIO 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "ABIO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "BIO 31", title: "Genetics", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ABIO 10", "ABIO 100", "ABIO 110", "ABIO 120", "ABIO 130", "ABIO 140", - "ABIO 150", "ABIO 160", "ABIO 170", "ABIO 191", "CHEM 16", "CHEM 17", - "CHEM 40", "CHEM 31", "BIO 1", "BIO 31", "STAT 101", "ENG 10" - ] - }, - - "BSFST": { - code: "BSFST", - name: "BS Food Science and Technology", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 165, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "FST 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "FST 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "FST 10", title: "Introduction to Food Science and Technology", units: 3 }, - { code: "FST 100", title: "Food Chemistry", units: 4 }, - { code: "FST 101", title: "Food Analysis", units: 4 }, - { code: "FST 110", title: "Food Microbiology", units: 4 }, - { code: "FST 120", title: "Food Processing I", units: 4 }, - { code: "FST 121", title: "Food Processing II", units: 4 }, - { code: "FST 130", title: "Food Engineering", units: 3 }, - { code: "FST 140", title: "Food Quality Assurance", units: 3 }, - { code: "FST 150", title: "Sensory Evaluation of Foods", units: 3 }, - { code: "FST 160", title: "Food Packaging", units: 3 }, - { code: "FST 170", title: "Food Product Development", units: 3 }, - { code: "FST 180", title: "Food Laws and Regulations", units: 2 }, - { code: "FST 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "FST 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "FST 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "FST 10", "FST 100", "FST 101", "FST 110", "FST 120", "FST 121", - "FST 130", "FST 140", "FST 150", "FST 160", "FST 170", "FST 180", "FST 191", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "STAT 101", "ENG 10" - ] - }, - - "BSACHEM": { - code: "BSACHEM", - name: "BS Agricultural Chemistry", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGCHEM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGCHEM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "AGCHEM 10", title: "Introduction to Agricultural Chemistry", units: 3 }, - { code: "AGCHEM 100", title: "Soil Chemistry", units: 4 }, - { code: "AGCHEM 110", title: "Plant Biochemistry", units: 4 }, - { code: "AGCHEM 120", title: "Food Chemistry", units: 4 }, - { code: "AGCHEM 130", title: "Pesticide Chemistry", units: 3 }, - { code: "AGCHEM 140", title: "Environmental Chemistry", units: 3 }, - { code: "AGCHEM 150", title: "Instrumental Analysis", units: 4 }, - { code: "AGCHEM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGCHEM 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGCHEM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "AGCHEM 10", "AGCHEM 100", "AGCHEM 110", "AGCHEM 120", "AGCHEM 130", - "AGCHEM 140", "AGCHEM 150", "AGCHEM 191", "CHEM 16", "CHEM 17", "CHEM 26", - "CHEM 40", "CHEM 41", "CHEM 31", "MATH 27", "PHYSICS 71", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF ENGINEERING AND AGRO-INDUSTRIAL TECHNOLOGY (CEAT) - // ============================================================================ - - "BSABE": { - code: "BSABE", - name: "BS Agricultural and Biosystems Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "ABE 21", title: "Engineering Drawing", units: 2 }, - { code: "ABE 31", title: "Computer-Aided Drafting", units: 2 }, - { code: "ABE 51", title: "Surveying", units: 3 }, - { code: "ABE 100", title: "Principles of Agricultural Engineering", units: 3 }, - { code: "ABE 111", title: "Farm Power and Machinery", units: 4 }, - { code: "ABE 121", title: "Soil and Water Conservation Engineering", units: 4 }, - { code: "ABE 131", title: "Irrigation and Drainage Engineering", units: 4 }, - { code: "ABE 141", title: "Agricultural Structures", units: 4 }, - { code: "ABE 151", title: "Post-Harvest Engineering", units: 4 }, - { code: "ABE 161", title: "Food Engineering", units: 4 }, - { code: "ABE 171", title: "Biosystems Engineering", units: 3 }, - { code: "ABE 181", title: "Environmental Engineering", units: 3 }, - { code: "ABE 190", title: "Engineering Design Project", units: 3 }, - { code: "ABE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "ABE 200", title: "Undergraduate Thesis", units: 6 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ABE 21", "ABE 31", "ABE 51", "ABE 100", "ABE 111", "ABE 121", "ABE 131", - "ABE 141", "ABE 151", "ABE 161", "ABE 171", "ABE 181", "ABE 190", "ABE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSCHE": { - code: "BSCHE", - name: "BS Chemical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "CHE 21", title: "Material and Energy Balances", units: 4 }, - { code: "CHE 31", title: "Fluid Mechanics", units: 3 }, - { code: "CHE 41", title: "Heat Transfer", units: 3 }, - { code: "CHE 51", title: "Mass Transfer Operations I", units: 4 }, - { code: "CHE 52", title: "Mass Transfer Operations II", units: 4 }, - { code: "CHE 101", title: "Chemical Engineering Thermodynamics I", units: 3 }, - { code: "CHE 102", title: "Chemical Engineering Thermodynamics II", units: 3 }, - { code: "CHE 111", title: "Chemical Reaction Engineering", units: 4 }, - { code: "CHE 121", title: "Process Control", units: 3 }, - { code: "CHE 131", title: "Chemical Engineering Plant Design", units: 4 }, - { code: "CHE 141", title: "Biochemical Engineering", units: 3 }, - { code: "CHE 151", title: "Environmental Engineering", units: 3 }, - { code: "CHE 190", title: "Engineering Design Project", units: 3 }, - { code: "CHE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 120", title: "Physical Chemistry I", units: 4 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CHE 21", "CHE 31", "CHE 41", "CHE 51", "CHE 52", "CHE 101", "CHE 102", - "CHE 111", "CHE 121", "CHE 131", "CHE 141", "CHE 151", "CHE 190", "CHE 191", - "CHEM 16", "CHEM 17", "CHEM 26", "CHEM 40", "CHEM 120", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", "ENG 10" - ] - }, - - "BSCE": { - code: "BSCE", - name: "BS Civil Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "CE 21", title: "Engineering Drawing", units: 2 }, - { code: "CE 31", title: "Surveying I", units: 3 }, - { code: "CE 32", title: "Surveying II", units: 3 }, - { code: "CE 41", title: "Engineering Mechanics - Statics", units: 3 }, - { code: "CE 42", title: "Engineering Mechanics - Dynamics", units: 3 }, - { code: "CE 51", title: "Mechanics of Deformable Bodies", units: 4 }, - { code: "CE 101", title: "Structural Theory I", units: 4 }, - { code: "CE 102", title: "Structural Theory II", units: 4 }, - { code: "CE 111", title: "Reinforced Concrete Design", units: 4 }, - { code: "CE 112", title: "Steel Design", units: 4 }, - { code: "CE 121", title: "Geotechnical Engineering I", units: 4 }, - { code: "CE 122", title: "Geotechnical Engineering II", units: 4 }, - { code: "CE 131", title: "Hydraulics", units: 4 }, - { code: "CE 132", title: "Hydrology", units: 3 }, - { code: "CE 141", title: "Highway and Transportation Engineering", units: 4 }, - { code: "CE 151", title: "Construction Methods and Management", units: 3 }, - { code: "CE 161", title: "Engineering Economy", units: 3 }, - { code: "CE 190", title: "Civil Engineering Design", units: 4 }, - { code: "CE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CE 21", "CE 31", "CE 32", "CE 41", "CE 42", "CE 51", "CE 101", "CE 102", - "CE 111", "CE 112", "CE 121", "CE 122", "CE 131", "CE 132", "CE 141", - "CE 151", "CE 161", "CE 190", "CE 191", "MATH 27", "MATH 28", "MATH 36", - "MATH 114", "PHYSICS 71", "PHYSICS 72", "CHEM 16", "ENG 10" - ] - }, - - "BSEE": { - code: "BSEE", - name: "BS Electrical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "EE 21", title: "Electrical Circuits I", units: 4 }, - { code: "EE 22", title: "Electrical Circuits II", units: 4 }, - { code: "EE 31", title: "Electronics I", units: 4 }, - { code: "EE 32", title: "Electronics II", units: 4 }, - { code: "EE 41", title: "Digital Systems", units: 4 }, - { code: "EE 51", title: "Electromagnetic Theory", units: 3 }, - { code: "EE 101", title: "Electrical Machines I", units: 4 }, - { code: "EE 102", title: "Electrical Machines II", units: 4 }, - { code: "EE 111", title: "Power Systems I", units: 4 }, - { code: "EE 112", title: "Power Systems II", units: 4 }, - { code: "EE 121", title: "Control Systems", units: 4 }, - { code: "EE 131", title: "Communications I", units: 4 }, - { code: "EE 141", title: "Microprocessor Systems", units: 4 }, - { code: "EE 151", title: "Instrumentation and Measurements", units: 3 }, - { code: "EE 190", title: "Electrical Engineering Design", units: 4 }, - { code: "EE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "EE 21", "EE 22", "EE 31", "EE 32", "EE 41", "EE 51", "EE 101", "EE 102", - "EE 111", "EE 112", "EE 121", "EE 131", "EE 141", "EE 151", "EE 190", "EE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSIE": { - code: "BSIE", - name: "BS Industrial Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "IE 21", title: "Engineering Drawing", units: 2 }, - { code: "IE 31", title: "Work Study and Motion Analysis", units: 3 }, - { code: "IE 41", title: "Engineering Economy", units: 3 }, - { code: "IE 51", title: "Engineering Statistics", units: 3 }, - { code: "IE 101", title: "Operations Research I", units: 3 }, - { code: "IE 102", title: "Operations Research II", units: 3 }, - { code: "IE 111", title: "Production Planning and Control", units: 4 }, - { code: "IE 121", title: "Facilities Planning and Design", units: 4 }, - { code: "IE 131", title: "Quality Control", units: 3 }, - { code: "IE 141", title: "Supply Chain Management", units: 3 }, - { code: "IE 151", title: "Systems Simulation", units: 3 }, - { code: "IE 161", title: "Ergonomics", units: 3 }, - { code: "IE 171", title: "Engineering Management", units: 3 }, - { code: "IE 190", title: "Industrial Engineering Design", units: 4 }, - { code: "IE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "IE 21", "IE 31", "IE 41", "IE 51", "IE 101", "IE 102", "IE 111", "IE 121", - "IE 131", "IE 141", "IE 151", "IE 161", "IE 171", "IE 190", "IE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSME": { - code: "BSME", - name: "BS Mechanical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "ME 21", title: "Engineering Drawing", units: 2 }, - { code: "ME 31", title: "Engineering Mechanics - Statics", units: 3 }, - { code: "ME 32", title: "Engineering Mechanics - Dynamics", units: 3 }, - { code: "ME 41", title: "Mechanics of Materials", units: 4 }, - { code: "ME 51", title: "Thermodynamics I", units: 4 }, - { code: "ME 52", title: "Thermodynamics II", units: 4 }, - { code: "ME 101", title: "Fluid Mechanics", units: 4 }, - { code: "ME 111", title: "Machine Design I", units: 4 }, - { code: "ME 112", title: "Machine Design II", units: 4 }, - { code: "ME 121", title: "Heat Transfer", units: 4 }, - { code: "ME 131", title: "Power Plant Engineering", units: 3 }, - { code: "ME 141", title: "Refrigeration and Air Conditioning", units: 3 }, - { code: "ME 151", title: "Manufacturing Processes", units: 4 }, - { code: "ME 161", title: "Dynamics of Machinery", units: 3 }, - { code: "ME 171", title: "Control Systems", units: 3 }, - { code: "ME 190", title: "Mechanical Engineering Design", units: 4 }, - { code: "ME 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ME 21", "ME 31", "ME 32", "ME 41", "ME 51", "ME 52", "ME 101", "ME 111", - "ME 112", "ME 121", "ME 131", "ME 141", "ME 151", "ME 161", "ME 171", - "ME 190", "ME 191", "MATH 27", "MATH 28", "MATH 36", "MATH 114", - "PHYSICS 71", "PHYSICS 72", "CHEM 16", "ENG 10" - ] - }, - - "BSMATE": { - code: "BSMATE", - name: "BS Materials Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "MATE 21", title: "Engineering Drawing", units: 2 }, - { code: "MATE 31", title: "Introduction to Materials Science", units: 3 }, - { code: "MATE 41", title: "Structure of Materials", units: 4 }, - { code: "MATE 101", title: "Physical Metallurgy", units: 4 }, - { code: "MATE 111", title: "Mechanical Behavior of Materials", units: 4 }, - { code: "MATE 121", title: "Ceramic Materials", units: 3 }, - { code: "MATE 131", title: "Polymer Materials", units: 3 }, - { code: "MATE 141", title: "Electronic Materials", units: 3 }, - { code: "MATE 151", title: "Corrosion Engineering", units: 3 }, - { code: "MATE 161", title: "Materials Characterization", units: 4 }, - { code: "MATE 171", title: "Materials Processing", units: 4 }, - { code: "MATE 181", title: "Materials Selection and Design", units: 3 }, - { code: "MATE 190", title: "Materials Engineering Design", units: 4 }, - { code: "MATE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATE 21", "MATE 31", "MATE 41", "MATE 101", "MATE 111", "MATE 121", - "MATE 131", "MATE 141", "MATE 151", "MATE 161", "MATE 171", "MATE 181", - "MATE 190", "MATE 191", "MATH 27", "MATH 28", "MATH 114", - "PHYSICS 71", "PHYSICS 72", "CHEM 16", "CHEM 17", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF ECONOMICS AND MANAGEMENT (CEM) - // ============================================================================ - - "BSECON": { - code: "BSECON", - name: "BS Economics", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ECON 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ECON 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "ECON 100", title: "Microeconomic Theory", units: 3 }, - { code: "ECON 101", title: "Macroeconomic Theory", units: 3 }, - { code: "ECON 110", title: "Mathematical Economics", units: 3 }, - { code: "ECON 111", title: "Econometrics I", units: 3 }, - { code: "ECON 112", title: "Econometrics II", units: 3 }, - { code: "ECON 120", title: "Development Economics", units: 3 }, - { code: "ECON 130", title: "Public Finance", units: 3 }, - { code: "ECON 140", title: "International Economics", units: 3 }, - { code: "ECON 150", title: "Monetary Economics", units: 3 }, - { code: "ECON 160", title: "Labor Economics", units: 3 }, - { code: "ECON 170", title: "History of Economic Thought", units: 3 }, - { code: "ECON 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ECON 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "ECON 100", "ECON 101", "ECON 110", "ECON 111", - "ECON 112", "ECON 120", "ECON 130", "ECON 140", "ECON 150", "ECON 160", - "ECON 170", "MATH 27", "STAT 101", "ENG 10" - ] - }, - - "BSAE": { - code: "BSAE", - name: "BS Agricultural Economics", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGEC 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGEC 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "AGEC 100", title: "Microeconomic Theory for Agricultural Economics", units: 3 }, - { code: "AGEC 101", title: "Macroeconomic Theory for Agricultural Economics", units: 3 }, - { code: "AGEC 110", title: "Agricultural Production Economics", units: 3 }, - { code: "AGEC 120", title: "Agricultural Marketing", units: 3 }, - { code: "AGEC 130", title: "Agricultural Finance", units: 3 }, - { code: "AGEC 140", title: "Agricultural Policy", units: 3 }, - { code: "AGEC 150", title: "Agricultural Development", units: 3 }, - { code: "AGEC 160", title: "Natural Resource Economics", units: 3 }, - { code: "AGEC 170", title: "Food and Agricultural Trade", units: 3 }, - { code: "AGEC 180", title: "Quantitative Methods in Agricultural Economics", units: 3 }, - { code: "AGEC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGEC 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGEC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "AGEC 100", "AGEC 101", "AGEC 110", "AGEC 120", - "AGEC 130", "AGEC 140", "AGEC 150", "AGEC 160", "AGEC 170", "AGEC 180", - "AGEC 191", "AGRI 10", "MATH 27", "STAT 101", "ENG 10" - ] - }, - - "BSABM": { - code: "BSABM", - name: "BS Agribusiness Management", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ABM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ABM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "ABM 100", title: "Principles of Management", units: 3 }, - { code: "ABM 110", title: "Agribusiness Management", units: 3 }, - { code: "ABM 120", title: "Agribusiness Marketing", units: 3 }, - { code: "ABM 130", title: "Agribusiness Finance", units: 3 }, - { code: "ABM 140", title: "Agribusiness Operations Management", units: 3 }, - { code: "ABM 150", title: "Agribusiness Entrepreneurship", units: 3 }, - { code: "ABM 160", title: "Agribusiness Strategic Management", units: 3 }, - { code: "ABM 170", title: "Agribusiness Supply Chain Management", units: 3 }, - { code: "ABM 180", title: "Agribusiness Information Systems", units: 3 }, - { code: "ABM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ABM 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "ABM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ACCTG 11", title: "Fundamentals of Accounting", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "ABM 100", "ABM 110", "ABM 120", "ABM 130", - "ABM 140", "ABM 150", "ABM 160", "ABM 170", "ABM 180", "ABM 191", - "AGRI 10", "MATH 27", "STAT 101", "ACCTG 11", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF FORESTRY AND NATURAL RESOURCES (CFNR) - // ============================================================================ - - "BSFOR": { - code: "BSFOR", - name: "BS Forestry", - college: "CFNR", - collegeName: "College of Forestry and Natural Resources", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "FOR 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "FOR 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "FOR 1", title: "Introduction to Forestry", units: 3 }, - { code: "FOR 21", title: "Dendrology", units: 3 }, - { code: "FOR 31", title: "Forest Mensuration", units: 4 }, - { code: "FOR 41", title: "Silvics and Silviculture", units: 4 }, - { code: "FOR 51", title: "Forest Ecology", units: 3 }, - { code: "FOR 101", title: "Forest Management", units: 4 }, - { code: "FOR 111", title: "Forest Utilization", units: 4 }, - { code: "FOR 121", title: "Forest Protection", units: 3 }, - { code: "FOR 131", title: "Wood Science and Technology", units: 4 }, - { code: "FOR 141", title: "Forest Policy and Administration", units: 3 }, - { code: "FOR 151", title: "Watershed Management", units: 3 }, - { code: "FOR 161", title: "Social Forestry", units: 3 }, - { code: "FOR 171", title: "Forest Economics", units: 3 }, - { code: "FOR 181", title: "Forest Engineering", units: 4 }, - { code: "FOR 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "FOR 191", title: "Forestry Field Practice", units: 6, gradeType: "S/U" }, - { code: "FOR 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "FOR 1", "FOR 21", "FOR 31", "FOR 41", "FOR 51", "FOR 101", "FOR 111", - "FOR 121", "FOR 131", "FOR 141", "FOR 151", "FOR 161", "FOR 171", "FOR 181", - "FOR 191", "BIO 1", "CHEM 16", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF HUMAN ECOLOGY (CHE) - // ============================================================================ - - "BSHE": { - code: "BSHE", - name: "BS Human Ecology", - college: "CHE", - collegeName: "College of Human Ecology", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "HE 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "HE 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "HE 10", title: "Introduction to Human Ecology", units: 3 }, - { code: "HE 100", title: "Family Resource Management", units: 3 }, - { code: "HE 110", title: "Consumer Economics", units: 3 }, - { code: "HE 120", title: "Human Development", units: 3 }, - { code: "HE 130", title: "Family Studies", units: 3 }, - { code: "HE 140", title: "Community Development", units: 3 }, - { code: "HE 150", title: "Housing and Interior Design", units: 3 }, - { code: "HE 160", title: "Clothing and Textiles", units: 3 }, - { code: "HE 170", title: "Food and Nutrition", units: 3 }, - { code: "HE 180", title: "Research Methods in Human Ecology", units: 3 }, - { code: "HE 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "HE 191", title: "Practicum", units: 3, gradeType: "S/U" }, - { code: "HE 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "HE 10", "HE 100", "HE 110", "HE 120", "HE 130", "HE 140", "HE 150", - "HE 160", "HE 170", "HE 180", "HE 191", "STAT 101", "ENG 10" - ] - }, - - "BSNUTRI": { - code: "BSNUTRI", - name: "BS Nutrition", - college: "CHE", - collegeName: "College of Human Ecology", - available: true, - totalUnitsRequired: 165, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "NUT 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "NUT 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "NUT 11", title: "Fundamentals of Nutrition", units: 3 }, - { code: "NUT 100", title: "Principles of Nutrition", units: 3 }, - { code: "NUT 101", title: "Advanced Nutrition", units: 3 }, - { code: "NUT 110", title: "Nutrition Assessment", units: 3 }, - { code: "NUT 120", title: "Diet Therapy", units: 4 }, - { code: "NUT 130", title: "Community Nutrition", units: 3 }, - { code: "NUT 140", title: "Food Service Management", units: 3 }, - { code: "NUT 150", title: "Nutrition Education", units: 3 }, - { code: "NUT 160", title: "Nutrition Research Methods", units: 3 }, - { code: "NUT 170", title: "Sports Nutrition", units: 3 }, - { code: "NUT 180", title: "Nutrition in the Life Cycle", units: 3 }, - { code: "NUT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "NUT 191", title: "Dietetic Internship", units: 6, gradeType: "S/U" }, - { code: "NUT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "NUT 11", "NUT 100", "NUT 101", "NUT 110", "NUT 120", "NUT 130", "NUT 140", - "NUT 150", "NUT 160", "NUT 170", "NUT 180", "NUT 191", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "BIO 1", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF DEVELOPMENT COMMUNICATION (CDC) - // ============================================================================ - - "BSDC": { - code: "BSDC", - name: "BS Development Communication", - college: "CDC", - collegeName: "College of Development Communication", - available: true, - totalUnitsRequired: 150, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "DEVC 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "DEVC 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "DEVC 10", title: "Introduction to Development Communication", units: 3 }, - { code: "DEVC 20", title: "Communication Theories", units: 3 }, - { code: "DEVC 30", title: "Communication Research Methods", units: 3 }, - { code: "DEVC 40", title: "Development Journalism", units: 3 }, - { code: "DEVC 50", title: "Development Broadcasting", units: 3 }, - { code: "DEVC 60", title: "Educational Communication", units: 3 }, - { code: "DEVC 100", title: "Development Communication Campaigns", units: 3 }, - { code: "DEVC 110", title: "Science Communication", units: 3 }, - { code: "DEVC 120", title: "Community Media", units: 3 }, - { code: "DEVC 130", title: "New Media and ICT4D", units: 3 }, - { code: "DEVC 140", title: "Communication Planning and Management", units: 3 }, - { code: "DEVC 150", title: "Risk and Crisis Communication", units: 3 }, - { code: "DEVC 160", title: "Environmental Communication", units: 3 }, - { code: "DEVC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "DEVC 191", title: "Academic Field Instruction", units: 6, gradeType: "S/U" }, - { code: "DEVC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "DEVC 10", "DEVC 20", "DEVC 30", "DEVC 40", "DEVC 50", "DEVC 60", - "DEVC 100", "DEVC 110", "DEVC 120", "DEVC 130", "DEVC 140", "DEVC 150", - "DEVC 160", "DEVC 191", "STAT 101", "ENG 10" - ] - }, - - "ASDC": { - code: "ASDC", - name: "Associate of Science in Development Communication", - college: "CDC", - collegeName: "College of Development Communication", - available: true, - totalUnitsRequired: 72, - geCoursesRequired: 6, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "DEVC 10", title: "Introduction to Development Communication", units: 3 }, - { code: "DEVC 20", title: "Communication Theories", units: 3 }, - { code: "DEVC 30", title: "Communication Research Methods", units: 3 }, - { code: "DEVC 40", title: "Development Journalism", units: 3 }, - { code: "DEVC 50", title: "Development Broadcasting", units: 3 }, - { code: "DEVC 60", title: "Educational Communication", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "DEVC 10", "DEVC 20", "DEVC 30", "DEVC 40", "DEVC 50", "DEVC 60", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF VETERINARY MEDICINE (CVM) - // ============================================================================ - - "DVM": { - code: "DVM", - name: "Doctor of Veterinary Medicine", - college: "CVM", - collegeName: "College of Veterinary Medicine", - available: true, - totalUnitsRequired: 220, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "VET 11", title: "Veterinary Anatomy I", units: 5 }, - { code: "VET 12", title: "Veterinary Anatomy II", units: 5 }, - { code: "VET 21", title: "Veterinary Physiology I", units: 4 }, - { code: "VET 22", title: "Veterinary Physiology II", units: 4 }, - { code: "VET 31", title: "Veterinary Biochemistry", units: 5 }, - { code: "VET 41", title: "Veterinary Microbiology", units: 5 }, - { code: "VET 51", title: "Veterinary Parasitology", units: 5 }, - { code: "VET 61", title: "Veterinary Pathology", units: 5 }, - { code: "VET 71", title: "Veterinary Pharmacology", units: 4 }, - { code: "VET 101", title: "Veterinary Medicine I", units: 4 }, - { code: "VET 102", title: "Veterinary Medicine II", units: 4 }, - { code: "VET 111", title: "Veterinary Surgery I", units: 4 }, - { code: "VET 112", title: "Veterinary Surgery II", units: 4 }, - { code: "VET 121", title: "Theriogenology", units: 4 }, - { code: "VET 131", title: "Veterinary Public Health", units: 3 }, - { code: "VET 141", title: "Poultry Diseases", units: 3 }, - { code: "VET 151", title: "Swine Diseases", units: 3 }, - { code: "VET 161", title: "Ruminant Diseases", units: 3 }, - { code: "VET 171", title: "Small Animal Medicine", units: 3 }, - { code: "VET 181", title: "Veterinary Radiology", units: 3 }, - { code: "VET 190", title: "Clinical Clerkship", units: 12, gradeType: "S/U" }, - { code: "VET 200", title: "Thesis/Special Problem", units: 6 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "VET 11", "VET 12", "VET 21", "VET 22", "VET 31", "VET 41", "VET 51", - "VET 61", "VET 71", "VET 101", "VET 102", "VET 111", "VET 112", "VET 121", - "VET 131", "VET 141", "VET 151", "VET 161", "VET 171", "VET 181", "VET 190", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "BIO 1", "PHYSICS 71", - "STAT 101", "ENG 10" - ] - }, -}; - -// Group programs by college -const COLLEGES = { - "CAS": { name: "College of Arts and Sciences", programs: [] }, - "CAFS": { name: "College of Agriculture and Food Science", programs: [] }, - "CEAT": { name: "College of Engineering and Agro-Industrial Technology", programs: [] }, - "CFNR": { name: "College of Forestry and Natural Resources", programs: [] }, - "CEM": { name: "College of Economics and Management", programs: [] }, - "CHE": { name: "College of Human Ecology", programs: [] }, - "CVM": { name: "College of Veterinary Medicine", programs: [] }, - "CDC": { name: "College of Development Communication", programs: [] }, - "CPAf": { name: "College of Public Affairs and Development", programs: [] }, -}; - -// Populate colleges with programs -Object.values(UPLB_PROGRAMS).forEach(program => { - if (COLLEGES[program.college]) { - COLLEGES[program.college].programs.push(program); - } -}); - -// Current selected program (default to BSCS) -let currentProgram = UPLB_PROGRAMS["BSCS"]; - -// Get current curriculum based on selected program -function getCurrentCurriculum() { - return currentProgram; -} - -// Set current program -function setCurrentProgram(programCode) { - if (UPLB_PROGRAMS[programCode]) { - currentProgram = UPLB_PROGRAMS[programCode]; - return true; - } - return false; -} - -// Detect which track the student is on based on completed courses -function detectTrack(completedCourses) { - if (!currentProgram.tracks) return null; - - const codes = completedCourses.map(c => c.code.toUpperCase().trim()); - - for (const [trackKey, track] of Object.entries(currentProgram.tracks)) { - if (codes.some(code => code.startsWith(track.code.toUpperCase()))) { - return trackKey; - } - } - - return null; -} - -// Get free elective units based on track -function getFreeElectiveUnits(track) { - if (!currentProgram.tracks) return 15; // Default - - if (track && currentProgram.tracks[track]) { - return currentProgram.tracks[track].freeElectiveUnits; - } - - // Return default track's units - const defaultTrack = currentProgram.defaultTrack || Object.keys(currentProgram.tracks)[0]; - return currentProgram.tracks[defaultTrack]?.freeElectiveUnits || 15; -} - -// Check if a course is a GE course (title starts with "(GE)") -function isGECourse(courseTitle) { - return courseTitle && courseTitle.trim().startsWith("(GE)"); -} - -// Check if a course is a required major course -function isRequiredCourse(courseCode) { - if (!currentProgram.requiredCodes) return false; - - const normalized = courseCode.toUpperCase().trim(); - return currentProgram.requiredCodes.some(code => - code.toUpperCase() === normalized - ); -} - -// Get remaining required courses -function getRemainingCourses(completedCourses) { - if (!currentProgram.majorCourses) return []; - - const completedCodes = new Set( - completedCourses.map(c => c.code.toUpperCase().trim()) - ); - - return currentProgram.majorCourses.filter(course => - !completedCodes.has(course.code.toUpperCase()) - ); -} - -// Count completed GE courses -function countCompletedGE(completedCourses) { - return completedCourses.filter(c => isGECourse(c.title)).length; -} - -// Get remaining GE slots -function getRemainingGESlots(completedCourses) { - const completed = countCompletedGE(completedCourses); - const required = currentProgram.geCoursesRequired || 9; - return Math.max(0, required - completed); -} - -// For backwards compatibility -const BSCS_CURRICULUM = UPLB_PROGRAMS["BSCS"]; diff --git a/extension/README.md b/extension/README.md index 196dc1e..e53d72f 100644 --- a/extension/README.md +++ b/extension/README.md @@ -25,11 +25,11 @@ A Chrome extension for UPLB students to calculate their GWA and simulate grades ### 4. "What If?" Simulator - Calculate what grades you need in remaining courses to achieve a target GWA - Preset targets: - - **Summa Cum Laude**: GWA ≤ 1.20 - - **Magna Cum Laude**: GWA ≤ 1.45 - - **Cum Laude**: GWA ≤ 1.75 - - **Honor Roll**: GWA ≤ 2.00 - - **Custom**: Enter any target GWA + - **Summa Cum Laude**: GWA ≤ 1.20 + - **Magna Cum Laude**: GWA ≤ 1.45 + - **Cum Laude**: GWA ≤ 1.75 + - **Honor Roll**: GWA ≤ 2.00 + - **Custom**: Enter any target GWA - Shows remaining courses based on your selected curriculum - Calculates required average grade for remaining courses @@ -41,10 +41,11 @@ A Chrome extension for UPLB students to calculate their GWA and simulate grades ### Developer Mode (Manual Installation) 1. Download or clone this repository -2. Open Chrome and go to `chrome://extensions/` -3. Enable "Developer mode" (toggle in the top right) -4. Click "Load unpacked" -5. Select the `Elbi Gradesim` folder +2. Run `cd extension && ./build.sh chrome` +3. Open Chrome and go to `chrome://extensions/` +4. Enable "Developer mode" (toggle in the top right) +5. Click "Load unpacked" +6. Select `extension/dist/chrome` ## Usage diff --git a/extension/build.sh b/extension/build.sh index cf596df..423b7f1 100755 --- a/extension/build.sh +++ b/extension/build.sh @@ -26,7 +26,12 @@ build_target() { # Copy shared source cp "$SRC_DIR"/popup.js "$SRC_DIR"/popup.css "$SRC_DIR"/popup.html \ "$SRC_DIR"/content.js "$SRC_DIR"/background.js \ - "$SRC_DIR"/curriculum.js "$out/" + "$SRC_DIR"/curriculum.js "$SRC_DIR"/catalog.js \ + "$SRC_DIR"/planner.html "$SRC_DIR"/planner.js "$SRC_DIR"/planner.css \ + "$SRC_DIR"/scheduler.js "$out/" + + cp "$SRC_DIR"/tokens.css "$SRC_DIR"/plumbob.svg "$out/" + cp -r "$SRC_DIR"/fonts "$out/" [ -f "$SRC_DIR/sims.png" ] && cp "$SRC_DIR/sims.png" "$out/" diff --git a/extension/curriculum.test.js b/extension/curriculum.test.js new file mode 100644 index 0000000..378cdc3 --- /dev/null +++ b/extension/curriculum.test.js @@ -0,0 +1,48 @@ +// Self-check for curriculum helpers. Run: node extension/curriculum.test.js +const assert = require('assert'); +const { + UPLB_PROGRAMS, + isGECourse, + isNonGwaCourseCode, + countCompletedGE, + genericRequirementCourses, + getCompletedRequirementSlotCodes +} = require('./src/curriculum.js'); + +assert.strictEqual(isGECourse('ARTS 1', 'Critical Perspectives in the Arts'), true); +assert.strictEqual(isGECourse('GE 1', 'General Education'), true); +assert.strictEqual(isGECourse('CMSC 12', 'Foundations of Computer Science'), false); +assert.strictEqual(isNonGwaCourseCode('HK 11'), true); +assert.strictEqual(isNonGwaCourseCode('NSTP 1'), true); +assert.strictEqual(isNonGwaCourseCode('ARTS 1'), false); + +const completed = [ + { code: 'ARTS 1', title: 'Critical Perspectives in the Arts' }, + { code: 'COMM 10', title: 'Critical Perspectives in Communication' }, + { code: 'HK 11', title: 'Human Kinetics' }, + { code: 'NSTP 1', title: 'National Service Training Program I' } +]; +assert.strictEqual(countCompletedGE(completed), 2); + +const bscsSlots = genericRequirementCourses(UPLB_PROGRAMS.BSCS); +assert.strictEqual(bscsSlots.filter(c => c.genericRequirement === 'ge').length, 9); +assert.strictEqual(bscsSlots.filter(c => c.genericRequirement === 'hk').length, 2); +assert.strictEqual(bscsSlots.filter(c => c.genericRequirement === 'nstp').length, 2); + +const doneSlots = getCompletedRequirementSlotCodes(completed, UPLB_PROGRAMS.BSCS); +assert.strictEqual(doneSlots.has('GE 1'), true); +assert.strictEqual(doneSlots.has('GE 2'), true); +assert.strictEqual(doneSlots.has('GE 3'), false); +assert.strictEqual(doneSlots.has('HK 1'), true); +assert.strictEqual(doneSlots.has('HK 2'), false); +assert.strictEqual(doneSlots.has('NSTP 1'), true); +assert.strictEqual(doneSlots.has('NSTP 2'), false); + +const oneListedGE = { + geCoursesRequired: 2, + majorCourses: [{ code: 'ARTS 1', title: 'Critical Perspectives in the Arts', units: 3 }] +}; +const listedOnly = getCompletedRequirementSlotCodes([{ code: 'ARTS 1', title: 'Critical Perspectives in the Arts' }], oneListedGE); +assert.deepStrictEqual(Array.from(listedOnly), []); + +console.log('curriculum.test.js: all assertions passed'); diff --git a/extension/manifests/manifest.chrome.json b/extension/manifests/manifest.chrome.json index f63598a..df8457e 100644 --- a/extension/manifests/manifest.chrome.json +++ b/extension/manifests/manifest.chrome.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Elbi GradeSim - UPLB GWA Calculator", - "version": "1.2.1", + "version": "2.0.0", "description": "Calculate your GWA and simulate grades needed for Latin honors at UPLB. All data stays on your device.", "permissions": [ "storage" @@ -24,8 +24,12 @@ }, "content_scripts": [ { - "matches": ["https://amis.uplb.edu.ph/*"], - "js": ["content.js"], + "matches": [ + "https://amis.uplb.edu.ph/*" + ], + "js": [ + "content.js" + ], "run_at": "document_start" } ] diff --git a/extension/manifests/manifest.firefox.json b/extension/manifests/manifest.firefox.json index d4919f1..c410da1 100644 --- a/extension/manifests/manifest.firefox.json +++ b/extension/manifests/manifest.firefox.json @@ -1,13 +1,15 @@ { "manifest_version": 3, "name": "Elbi GradeSim - UPLB GWA Calculator", - "version": "1.2.1", + "version": "2.0.0", "browser_specific_settings": { "gecko": { "id": "elbigradesim@stimmie.dev", "strict_min_version": "109.0", "data_collection_permissions": { - "required": ["none"] + "required": [ + "none" + ] } }, "gecko_android": { @@ -32,12 +34,18 @@ "128": "sims.png" }, "background": { - "scripts": ["background.js"] + "scripts": [ + "background.js" + ] }, "content_scripts": [ { - "matches": ["https://amis.uplb.edu.ph/*"], - "js": ["content.js"], + "matches": [ + "https://amis.uplb.edu.ph/*" + ], + "js": [ + "content.js" + ], "run_at": "document_start" } ] diff --git a/extension/manifests/manifest.opera.json b/extension/manifests/manifest.opera.json index f63598a..df8457e 100644 --- a/extension/manifests/manifest.opera.json +++ b/extension/manifests/manifest.opera.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Elbi GradeSim - UPLB GWA Calculator", - "version": "1.2.1", + "version": "2.0.0", "description": "Calculate your GWA and simulate grades needed for Latin honors at UPLB. All data stays on your device.", "permissions": [ "storage" @@ -24,8 +24,12 @@ }, "content_scripts": [ { - "matches": ["https://amis.uplb.edu.ph/*"], - "js": ["content.js"], + "matches": [ + "https://amis.uplb.edu.ph/*" + ], + "js": [ + "content.js" + ], "run_at": "document_start" } ] diff --git a/extension/scheduler.test.js b/extension/scheduler.test.js new file mode 100644 index 0000000..ebfabf4 --- /dev/null +++ b/extension/scheduler.test.js @@ -0,0 +1,200 @@ +// Self-check for scheduler.js. Run: node extension/scheduler.test.js +const assert = require('assert'); +const { + scheduleEarliest, semAt, termLabel, plannableCourses, offeredIn, parseRequisite, combineRequisites, + parseSemOffered, analyzeGraph, computeSlips, enrichCourses, extractCode, +} = require('./src/scheduler.js'); + +const C = (code, units, sem, prereqs = []) => ({ code, title: code, units, sem, prereqs }); + +// Synthetic curriculum: A -> B -> C chain across alternating sems, D midyear-only. +const COURSES = [ + C('A', 3, '1'), + C('B', 3, '2', ['A']), + C('CC', 3, '1', ['B']), + C('D', 3, 'midyear'), + C('E', 3, '1'), +]; + +// helpers +assert.strictEqual(semAt(0, '1'), '1'); +assert.strictEqual(semAt(1, '1'), '2'); +assert.strictEqual(semAt(2, '1'), 'midyear'); +assert.strictEqual(semAt(3, '1'), '1'); +assert.strictEqual(termLabel(0, 2026, '1'), '2026 1st Sem'); +assert.strictEqual(termLabel(1, 2026, '1'), '2027 2nd Sem'); +assert.strictEqual(termLabel(2, 2026, '1'), '2027 Midyear'); +assert.strictEqual(termLabel(3, 2026, '1'), '2027 1st Sem'); +assert.strictEqual(plannableCourses([C('GE 1', 3), C('Elective', 3)]).length, 1); + +// baseline: A,E @ t0; B @ t1; D @ t2 (midyear); CC @ t3 (next 1st sem) +let r = scheduleEarliest({ courses: COURSES, passed: new Set(), startSem: '1' }); +assert.strictEqual(r.assignedTerm['A'], 0); +assert.strictEqual(r.assignedTerm['E'], 0); +assert.strictEqual(r.assignedTerm['B'], 1); +assert.strictEqual(r.assignedTerm['D'], 2); +assert.strictEqual(r.assignedTerm['CC'], 3); +assert.strictEqual(r.gradTermIndex, 3); +assert.deepStrictEqual(r.unschedulable, []); + +// fail cascade: having passed A+B, failing B (removed from passed) pushes +// CC from t0 to t3 — a full offering cycle later. +const withB = scheduleEarliest({ courses: COURSES, passed: new Set(['A', 'B']), startSem: '1' }); +assert.strictEqual(withB.assignedTerm['CC'], 0); +const failB = scheduleEarliest({ courses: COURSES, passed: new Set(['A']), startSem: '1' }); +assert.strictEqual(failB.assignedTerm['B'], 1); +assert.strictEqual(failB.assignedTerm['CC'], 3); + +// unit cap: only 6 units fit in 1st sem, third course waits for next 1st sem +const capped = scheduleEarliest({ + courses: [C('X1', 3, '1'), C('X2', 3, '1'), C('X3', 3, '1')], + passed: new Set(), + unitCaps: { '1': 6, '2': 21, 'midyear': 6 }, + startSem: '1', +}); +const t0Count = ['X1', 'X2', 'X3'].filter(c => capped.assignedTerm[c] === 0).length; +assert.strictEqual(t0Count, 2); +assert.strictEqual(Math.max(...['X1', 'X2', 'X3'].map(c => capped.assignedTerm[c])), 3); + +// notBefore delay honored, and offering still respected (t3 is next 1st sem) +const delayed = scheduleEarliest({ courses: [C('A', 3, '1')], passed: new Set(), notBefore: { A: 1 }, startSem: '1' }); +assert.strictEqual(delayed.assignedTerm['A'], 3); + +// unknown prereq dropped with a warning, course still schedules +const unk = scheduleEarliest({ courses: [C('F', 3, '2', ['GHOST 1'])], passed: new Set(), startSem: '1' }); +assert.strictEqual(unk.assignedTerm['F'], 1); +assert.ok(unk.warnings.some(w => w.includes('GHOST 1'))); + +// prereq cycle terminates and reports both as unschedulable +const cyc = scheduleEarliest({ + courses: [C('P', 3, '1', ['Q']), C('Q', 3, '1', ['P'])], + passed: new Set(), + startSem: '1', +}); +assert.deepStrictEqual(cyc.unschedulable.sort(), ['P', 'Q']); + +// critical path first under tight caps: chain head beats leaf course +const crit = scheduleEarliest({ + courses: [C('H1', 3, '1'), C('H2', 3, '2', ['H1']), C('H3', 3, '1', ['H2']), C('LEAF', 3, '1')], + passed: new Set(), + unitCaps: { '1': 3, '2': 21, 'midyear': 6 }, + startSem: '1', +}); +assert.strictEqual(crit.assignedTerm['H1'], 0); // chain of 3 outranks LEAF + +// --- requisite parser --- +assert.deepStrictEqual(parseRequisite('CMSC 12').pre, [['CMSC 12']]); +assert.deepStrictEqual(parseRequisite('(CMSC 57 and CMSC 21)').pre, [['CMSC 57'], ['CMSC 21']]); +let pr = parseRequisite('ABT 101 or COI'); +assert.deepStrictEqual(pr.pre, []); +assert.strictEqual(pr.coi, true); +pr = parseRequisite('IE 184 and Senior Standing'); +assert.deepStrictEqual(pr.pre, [['IE 184']]); +assert.strictEqual(pr.standing, 'senior'); +assert.deepStrictEqual(parseRequisite('(PHYS 72) (OLD)').pre, [['PHYS 72']]); +assert.deepStrictEqual(parseRequisite('MATH 27 or Equivalent').pre, [['MATH 27']]); +assert.deepStrictEqual(parseRequisite('(CHEM 18 and CHEM 18.1.)').pre, [['CHEM 18'], ['CHEM 18.1']]); +assert.deepStrictEqual(parseRequisite('Hort 110 and COI').pre, [['HORT 110']]); +assert.deepStrictEqual(parseRequisite('-').pre, []); +pr = parseRequisite('MATH 28 and COI and Junior Standing and Must have taken one ABE subject with laboratory'); +assert.deepStrictEqual(pr.pre, [['MATH 28']]); +assert.strictEqual(pr.standing, 'junior'); +assert.ok(pr.note && pr.note.includes('ABE subject')); +// several PRE rows are alternatives: OR of AND-sets becomes AND of OR-groups +const comb = combineRequisites([ + { req_type: 'PRE', req_courses: '(MATH 27 and MATH 20)' }, + { req_type: 'PRE', req_courses: '(MATH 37 and AMAT 19)' }, + { req_type: 'PRE', req_courses: '(MATH 27 and AMAT 19)' }, + { req_type: 'PRE', req_courses: '(MATH 37 and MATH 20)' }, + { req_type: 'CO', req_courses: '(CHEM 40.1)' }, +]); +assert.deepStrictEqual(comb.pre, [['MATH 27', 'MATH 37'], ['AMAT 19', 'MATH 20']]); +assert.deepStrictEqual(comb.co, ['CHEM 40.1']); +assert.strictEqual(extractCode('3 ENSC 10.1. Engineering Graphics Laboratory'), 'ENSC 10.1'); +assert.deepStrictEqual(parseSemOffered('1st, 2nd and Midyear'), { 1: true, 2: true, 3: true }); + +// --- offering fallback: observed, then catalog sem_offered, then checklist --- +assert.strictEqual(offeredIn({ offered: { 1: 0, 2: 3, 3: 0 }, catalogSem: '1s,2s', sem: '1' }, '1'), false); +assert.strictEqual(offeredIn({ offered: { 1: 0, 2: 3, 3: 0 } }, '2'), true); +assert.strictEqual(offeredIn({ offered: { 1: 0, 2: 0, 3: 0 }, catalogSem: '1s', sem: '2' }, '1'), true); +assert.strictEqual(offeredIn({ offered: { 1: 0, 2: 0, 3: 0 }, catalogSem: '1s', sem: '2' }, '2'), false); +// catalog says midyear but it was never observed: no midyear +assert.strictEqual(offeredIn({ catalogSem: '1s,2s,M' }, 'midyear'), false); +assert.strictEqual(offeredIn({ offered: { 1: 1, 2: 0, 3: 2 } }, 'midyear'), true); +assert.strictEqual(offeredIn({ sem: '2' }, '1'), false); +assert.strictEqual(offeredIn({}, '2'), true); + +// --- OR-groups, coreqs, standing, COI --- +const K = (code, extra) => ({ code, title: code, units: 3, offered: { 1: 1, 2: 1, 3: 0 }, pre: [], ...extra }); +let r2 = scheduleEarliest({ + courses: [K('NEW1'), K('USE', { pre: [['OLD1', 'NEW1']] })], + passed: new Set(), startSem: '1', +}); +assert.strictEqual(r2.assignedTerm.USE, 1); // OLD1 unknown, NEW1 satisfies the group +r2 = scheduleEarliest({ + courses: [K('LEC', { co: ['LAB'] }), K('LAB', { units: 1, co: ['LEC'] })], + passed: new Set(), startSem: '1', +}); +assert.strictEqual(r2.assignedTerm.LEC, 0); +assert.strictEqual(r2.assignedTerm.LAB, 0); // mutual coreqs share a term +// senior standing: 75% of 12 units = 9 must be done first +r2 = scheduleEarliest({ + courses: [K('S1'), K('S2'), K('S3'), K('SEN', { standing: 'senior' })], + passed: new Set(), unitCaps: { 1: 21, 2: 21, midyear: 6 }, startSem: '1', +}); +assert.strictEqual(r2.assignedTerm.SEN, 1); +assert.strictEqual(r2.assignedTerm.S1, 0); +// petition: a 2nd-sem-only course can go in 1st sem, flagged conditional +r2 = scheduleEarliest({ courses: [K('P2', { offered: { 1: 0, 2: 3, 3: 0 }, petition: true })], passed: new Set(), startSem: '1' }); +assert.strictEqual(r2.assignedTerm.P2, 0); +assert.strictEqual(r2.conditional.P2, true); + +// --- retake: fail at t0, notBefore t1, next 1st-sem-only offering is t3 --- +const once = K('ONCE', { offered: { 1: 4, 2: 0, 3: 0 } }); +const firstTry = scheduleEarliest({ courses: [once], passed: new Set(), startSem: '1' }); +assert.strictEqual(firstTry.assignedTerm.ONCE, 0); +const retake = scheduleEarliest({ courses: [once], passed: new Set(), notBefore: { ONCE: firstTry.assignedTerm.ONCE + 1 }, startSem: '1' }); +assert.strictEqual(retake.assignedTerm.ONCE, 3); + +// --- in-progress counts as passed, planning starts at the next term --- +// latest AMIS term is 1st sem with MATH 27 ungraded: start at 2nd sem, MATH 28 at t0 +const inprog = scheduleEarliest({ + courses: [K('MATH 27'), K('MATH 28', { pre: [['MATH 27']] })], + passed: new Set(['MATH 27']), startSem: '2', +}); +assert.strictEqual(inprog.assignedTerm['MATH 28'], 0); +assert.strictEqual(inprog.assignedTerm['MATH 27'], undefined); + +// --- delay and blocking factors on a small fixture --- +// A -> B -> D, A -> C, E alone +const fx = [K('A'), K('B', { pre: [['A']] }), K('C', { pre: [['A']] }), K('D', { pre: [['B']] }), K('E')]; +const g = analyzeGraph(fx); +assert.strictEqual(g.delay.A, 3); +assert.strictEqual(g.delay.D, 3); +assert.strictEqual(g.delay.C, 2); +assert.strictEqual(g.delay.E, 1); +assert.strictEqual(g.blocking.A, 3); +assert.strictEqual(g.blocking.B, 1); +assert.strictEqual(g.blocking.E, 0); +assert.deepStrictEqual(Array.from(g.ancestors('D')).sort(), ['A', 'B']); + +// --- slip: delaying a chain course moves graduation, a leaf with slack does not --- +const slipOpts = { courses: fx, passed: new Set(), startSem: '1' }; +const slips = computeSlips(slipOpts); +assert.ok(slips.A > 0 && slips.B > 0 && slips.D > 0); +assert.strictEqual(slips.E, 0); +assert.strictEqual(slips.C, 0); + +// --- enrichCourses: garbled checklist rows are salvaged, catalog wins --- +const cat = { 'CHEM 18': { units: 3, title: 'University Chemistry', offered: { 1: 4, 2: 3, 3: 0 } }, + 'CE 151': { units: 3, title: 'Sanitary', offered: { 1: 4, 2: 0, 3: 0 }, pre: [['CHEM 18']] } }; +const en = enrichCourses([ + { code: '3 CHEM 18. University Chemistry', title: '3 CHEM 18. University Chemistry 3 PI 10. Life of Rizal 3 Laboratory 3', units: 3, year: 2, sem: '2' }, + { code: 'CE 151', title: 'x', units: 3, year: 3, sem: '1', prereqs: ['CE 999'] }, + { code: '3', title: '3 3 3 20', units: 3, year: 2, sem: 'midyear' }, + { code: 'GE', title: 'Elective', units: 3 }, { code: 'GE', title: 'Elective', units: 3 }, +], cat); +assert.deepStrictEqual(en.map(c => c.code), ['CHEM 18', 'PI 10', 'CE 151', 'GE', 'GE (2)']); +assert.deepStrictEqual(en.find(c => c.code === 'CE 151').pre, [['CHEM 18']]); + +console.log('scheduler.test.js: all assertions passed'); diff --git a/extension/src/catalog.js b/extension/src/catalog.js new file mode 100644 index 0000000..b5b01aa --- /dev/null +++ b/extension/src/catalog.js @@ -0,0 +1,7 @@ +// Generated by scratch/build_catalog.mjs from AMIS class listings +// (terms 1231, 1232, 1241, 1242, 1243, 1251, 1252, 1253, 1261). Do not edit by hand. +// offered = number of observed terms with an active section, out of +// 4 first sems, 3 second sems and 2 midyears. +// pre = AND of OR-groups. co = corequisites (may share a term). +const UPLB_CATALOG = {"AAE 10":{"units":1,"title":"Introduction to Agricultural and Applied Economics","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s,2s"},"AAE 103":{"units":3,"title":"Statistical Analysis of Agricultural and Applied Economics Data","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 101"],["ECON 11"]]},"AAE 104":{"units":3,"title":"Farm Business Accounting","offered":{"1":4,"2":3,"3":0},"catalogSem":"2s","pre":[["ECON 11"]]},"AAE 110":{"units":3,"title":"Agricultural Production Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 102"]]},"AAE 111":{"units":3,"title":"Farm Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"]]},"AAE 120":{"units":3,"title":"Agricultural Marketing I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"]]},"AAE 130":{"units":3,"title":"Agricultural Finance","offered":{"1":4,"2":3,"3":0},"catalogSem":"2s","pre":[["ECON 11"]]},"AAE 142":{"units":3,"title":"Natural Resource Economics I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 102"]]},"AAE 150":{"units":3,"title":"Economics of Agricultural Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 101"],["ECON 102"]]},"AAE 151":{"units":3,"title":"Agricultural Policy","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 101"],["ECON 102"]]},"AAE 171":{"units":3,"title":"Feasibility Studies of Agri-based Enterprises and Agro-industrial Projects","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AAE 111"]]},"AAE 195":{"units":3,"title":"Introduction to Research Methods in Agricultural and Applied Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AAE 103"]]},"AAE 198":{"units":3,"title":"Internship","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"AAE 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s"},"ABE 1":{"units":3,"title":"Fundamentals of Agricultural and Biosystems Engineering I","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["AGRI 51"]]},"ABE 190":{"units":1,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"2s"},"ABE 198":{"units":3,"title":"Internship","offered":{"1":0,"2":0,"3":2},"catalogSem":"1s,2s,M"},"ABE 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s"},"ABE 2":{"units":3,"title":"Fundamentals of Agricultural and Biosystems Engineering II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABE 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"ABE 30":{"units":1,"title":"Introduction to Agricultural and Biosystems Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"ABE 43":{"units":3,"title":"Engineering Shop","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 10.1"]]},"ABE 48":{"units":3,"title":"Fundamentals of Surveying","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 10.1","ENSC 10A"]]},"ABE 52":{"units":3,"title":"Agricultural Structures I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 10.1"],["ENSC 13"]]},"ABE 56":{"units":3,"title":"Engineering Properties of Agricultural and Biological Materials","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 13"]]},"ABE 57":{"units":3,"title":"Field Hydrology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABE 62":{"units":3,"title":"Environmental Control Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABE 52"]]},"ABE 63":{"units":4,"title":"Agricultural and Biosystems Power Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 14A","ENSC 15"]]},"ABE 66":{"units":3,"title":"Agricultural Processing I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABE 56"]]},"ABE 67":{"units":3,"title":"Irrigation and Drainage Engineering I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABE 48"],["ABE 57"]]},"ABE 74":{"units":4,"title":"Machinery for Bioproduction Systems, Management, and Technopreneurship.","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABE 53"],["FPPS 183"]]},"ABE 83":{"units":3,"title":"Electrical System Design for Agricultural and Biosystems Structures","offered":{"1":4,"2":3,"3":0},"catalogSem":"2s","pre":[["ABE 52"],["PHYS 51"],["PHYS 51.1"]]},"ABE 88":{"units":3,"title":"Aquaculture Engineering I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABE 57"]]},"ABME 10":{"units":3,"title":"Foundations of Entrepreneurship","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABME 103":{"units":3,"title":"Agribusiness Systems and Modalities","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 101"],["ABME 11"]]},"ABME 11":{"units":1,"title":"Introduction to Agribusiness Management and Entrepreneurship","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABME 115":{"units":3,"title":"Entrepreneurial Finance","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["AAE 104","MGT 111"]]},"ABME 172":{"units":3,"title":"Product Ideation and Creation","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABME 10"]]},"ABME 174":{"units":3,"title":"Business Planning","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["ABME 115","MGT 115"],["ABME 172","MGT 115"]]},"ABME 190":{"units":3,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABT 10":{"units":3,"title":"Traditional and Modern Biotechnology: Principles and Applications","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ABT 103":{"units":3,"title":"Experimental Techniques in Agricultural Biotechnology I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABT 101"]]},"ABT 106":{"units":3,"title":"Molecular Markers","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABT 101"]]},"ABT 107":{"units":3,"title":"Recombinant DNA Technology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABT 101"]]},"ABT 108":{"units":3,"title":"Issues and Regulation of Agricultural Biotechnology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABT 107"]]},"ABT 11":{"units":1,"title":"Introduction to Agricultural Biotechnology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ACHM 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"AERS 160":{"units":3,"title":"Rural Sociology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 11":{"units":1,"title":"Introduction to Agriculture","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 171":{"units":3,"title":"Ethics, Laws and Policies in Agriculture","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 199":{"units":1,"title":"Colloquium in Agriculture","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 21":{"units":3,"title":"Introduction to Animal Science","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 22":{"units":3,"title":"Introduction to Livestock and Poultry Production","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AGRI 21"]]},"AGRI 31":{"units":3,"title":"Fundamentals of Crop Science I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 32":{"units":3,"title":"Fundamentals of Crop Science II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AGRI 31"]]},"AGRI 41":{"units":3,"title":"Principles of Crop Protection","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 42":{"units":3,"title":"Pest Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AGRI 41"]]},"AGRI 51":{"units":3,"title":"Principles of Soil Science","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AGRI 61":{"units":3,"title":"Fundamentals of Agricultural Extension Communication","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AMAT 105":{"units":3,"title":"Matrices and Applications","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28","MATH 38"]]},"AMAT 110":{"units":3,"title":"Mathematical Modeling","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["MATH 27","MATH 37"]]},"AMAT 19":{"units":3,"title":"Finite Mathematics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"AMAT 190":{"units":1,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s,M"},"AMAT 198":{"units":3,"title":"Practicum","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"ANTH 10":{"units":3,"title":"Introduction to Social and Cultural Anthropology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"APHY 10.1":{"units":1,"title":"Programming in Physics","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s"},"APHY 101":{"units":3,"title":"Physics in Scientific Instruments","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["PHYS 102","PHYS 72"],["PHYS 102","PHYS 72.1"]]},"APHY 102":{"units":3,"title":"Physics of Electronic Devices","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["PHYS 102","PHYS 72"],["PHYS 102","PHYS 72.1"]]},"APHY 191":{"units":3,"title":"Special Topics","offered":{"1":3,"2":3,"3":0},"catalogSem":"2s"},"APHY 198":{"units":3,"title":"Practicum","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"APHY 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"ARTS 1":{"units":3,"title":"(GE). Critical Perspectives in the Arts","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"BA 114.1":{"units":6,"title":"Accounting Theory and Practice I","offered":{"1":2,"2":0,"3":0}},"BA 114.2":{"units":6,"title":"Accounting Theory and Practice II","offered":{"1":0,"2":1,"3":0}},"BA 116":{"units":6,"title":"Cost Accounting","offered":{"1":0,"2":1,"3":0}},"BA 117":{"units":3,"title":"Managerial Cost Accounting and Control","offered":{"1":1,"2":0,"3":0}},"BA 118.1":{"units":6,"title":"Advanced Accounting I","offered":{"1":1,"2":0,"3":0}},"BA 127":{"units":3,"title":"Tax Accounting I","offered":{"1":1,"2":0,"3":0}},"BA 141":{"units":3,"title":"Business Finance I","offered":{"1":1,"2":0,"3":0}},"BA 161":{"units":3,"title":"Law on Business Transactions","offered":{"1":1,"2":0,"3":0}},"BA 183":{"units":3,"title":"Introduction to Database Management for Accounting","offered":{"1":0,"2":0,"3":2}},"BA 198.1":{"units":3,"title":"Internship I","offered":{"1":0,"2":0,"3":1}},"BA 99.1":{"units":3,"title":"Fundamental Accounting Theory and Practice I","offered":{"1":3,"2":0,"3":0}},"BA 99.2":{"units":3,"title":"Fundamental Accounting Theory and Practice II","offered":{"1":0,"2":2,"3":0}},"BIO 101":{"units":3,"title":"Introductory Molecular Biology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["BIO 30"],["CHEM 160","CHEM 161B"]]},"BIO 11.1":{"units":2,"title":"Investigative Biology Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"BIO 120":{"units":3,"title":"Cell Biology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["BIO 30"],["CHEM 160"]]},"BIO 14":{"units":5,"title":"Biodiversity","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["BIO 11.1"]]},"BIO 142":{"units":3,"title":"Principles of Systematic Biology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["BIO 14"],["BIO 30"]]},"BIO 150":{"units":4,"title":"Ecology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"BIO 195":{"units":3,"title":"Research Methods in Biological Sciences","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 164"]]},"BIO 198":{"units":3,"title":"Practicum","offered":{"1":0,"2":2,"3":2},"catalogSem":"M"},"BIO 199":{"units":1,"title":"Undergraduate Seminar in Biology","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s"},"BIO 200":{"units":1,"title":"Undergraduate Thesis in Biology","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"BIO 30":{"units":3,"title":"Genetics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"BOT 14":{"units":3,"title":"University Botany","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"BOT 20":{"units":3,"title":"Fundamentals of Plant Physiology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"CE 10":{"units":1,"title":"Fundamentals of Civil Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"CE 121":{"units":3,"title":"Transportation Engineering I","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CE 120"]]},"CE 122":{"units":3,"title":"Transportation Engineering II","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["CE 121"]]},"CE 132":{"units":3,"title":"Structural Analysis II","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s","pre":[["CE 131"]]},"CE 133":{"units":3,"title":"Design of Timber Members","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CE 131"]]},"CE 135":{"units":3,"title":"Design of Steel Members","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CE 132"]]},"CE 137":{"units":3,"title":"Structural Dynamics and Earthquake Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 21"],["CE 132"]]},"CE 141":{"units":3,"title":"Hydraulic Engineering I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["ENSC 16.1"]]},"CE 151":{"units":3,"title":"Sanitary Engineering I","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CHEM 18"],["CHEM 18.1"],["ENSC 16"]]},"CE 164":{"units":4,"title":"Construction Project Planning and Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["CE 134"],["CE 163"]]},"CE 170":{"units":3,"title":"Geotechnical Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENSC 13"],["ENSC 16"]]},"CE 171":{"units":3,"title":"Foundation Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CE 134"],["CE 170"]]},"CE 198":{"units":3,"title":"Internship","offered":{"1":3,"2":3,"3":2},"catalogSem":"1s,2s,M"},"CERP 101":{"units":3,"title":"Fundamentals of Human Settlements","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HUME 100"]]},"CERP 140":{"units":3,"title":"Fundamentals of Environmental Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["HUME 111"]]},"CHE 10":{"units":1,"title":"Introduction to Chemical Engineering Profession","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s"},"CHE 142":{"units":3,"title":"Chemical Engineering Thermodynamics I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 111"],["CHE 30"]]},"CHE 157.1":{"units":2,"title":"Chemical Engineering Unit Operations Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHE 147"],["CHE 153"],["CHE 154"]]},"CHE 198":{"units":3,"title":"Internship","offered":{"1":2,"2":3,"3":2},"catalogSem":"1s,2s,M"},"CHE 30":{"units":4,"title":"Fundamentals of Chemical Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 18"]]},"CHEM 111":{"units":3,"title":"Physical Chemistry I","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["CHEM 32"],["CHEM 32.1"],["MATH 28"],["PHYS 51","PHYS 71"]]},"CHEM 111.1":{"units":2,"title":"Physical Chemistry I Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 111"]]},"CHEM 112":{"units":3,"title":"Physical Chemistry II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 111"],["PHYS 51","PHYS 72"]]},"CHEM 112.1":{"units":2,"title":"Physical Chemistry II Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 112"],["CHEM 111.1"]]},"CHEM 120":{"units":3,"title":"Inorganic Chemistry","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 115"]]},"CHEM 120.1":{"units":2,"title":"Inorganic Chemistry Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 120"]]},"CHEM 131":{"units":4,"title":"Technical Analysis I (Foods and Feeds)","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s","pre":[["CHEM 32"],["CHEM 32.1"],["CHEM 40","CHEM 44"],["CHEM 40","CHEM 44.1"],["CHEM 40.1","CHEM 44"],["CHEM 40.1","CHEM 44.1"]]},"CHEM 137":{"units":3,"title":"Modern Analytical Chemistry","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 111"]]},"CHEM 140":{"units":4,"title":"Organic Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 32"],["CHEM 32.1"],["CHEM 44"],["CHEM 44.1"]]},"CHEM 160":{"units":3,"title":"Introductory Biochemistry","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["CHEM 40","CHEM 44"],["CHEM 40","CHEM 44.1"],["CHEM 40.1","CHEM 44"],["CHEM 40.1","CHEM 44.1"]]},"CHEM 161A":{"units":3,"title":"Biochemistry I","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["CHEM 44"],["CHEM 44.1"]]},"CHEM 161B":{"units":3,"title":"Biochemistry II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 161A"]]},"CHEM 18":{"units":3,"title":"University Chemistry","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s","co":["CHEM 18.1"]},"CHEM 18.1":{"units":2,"title":"University Chemistry Laboratory","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s","co":["CHEM 18"]},"CHEM 180":{"units":3,"title":"Environmental Chemistry","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 40","CHEM 44"]]},"CHEM 19":{"units":3,"title":"Chemical Structure and Properties","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 18"]]},"CHEM 192":{"units":3,"title":"Chemical Information, Literature and Communication","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 32"],["CHEM 44"]]},"CHEM 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 192"]]},"CHEM 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"CHEM 32":{"units":3,"title":"Quantitative Inorganic Analysis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["CHEM 18"],["CHEM 18.1"]],"co":["CHEM 32.1"]},"CHEM 32.1":{"units":2,"title":"Quantitative Inorganic Analysis Laboratory","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","co":["CHEM 32"]},"CHEM 40":{"units":4,"title":"Basic Organic Chemistry","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["CHEM 18"],["CHEM 18.1"]],"co":["CHEM 40.1"]},"CHEM 40.1":{"units":1,"title":"Basic Organic Chemistry Laboratory","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","co":["CHEM 40"]},"CHEM 43":{"units":3,"title":"Organic Chemistry I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 18.1"],["CHEM 19"]],"co":["CHEM 43.1"]},"CHEM 43.1":{"units":2,"title":"Organic Chemistry I Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","co":["CHEM 43"]},"CHEM 44":{"units":3,"title":"Organic Chemistry II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CHEM 43"],["CHEM 43.1"]],"co":["CHEM 44.1"]},"CHEM 44.1":{"units":2,"title":"Organic Chemistry II Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","co":["CHEM 44"]},"CMSC 100":{"units":3,"title":"Web Programming","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 22"]]},"CMSC 12":{"units":3,"title":"Foundations of Computer Science","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"CMSC 123":{"units":3,"title":"Data Structures","offered":{"1":4,"2":3,"3":1},"catalogSem":"2s,M","pre":[["CMSC 57"],["CMSC 21"]]},"CMSC 124":{"units":3,"title":"Design and Implementation of Programming Languages","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CMSC 123"]]},"CMSC 125":{"units":3,"title":"Operating Systems","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 123"]]},"CMSC 127":{"units":3,"title":"File Processing and Database Systems","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["CMSC 22"]]},"CMSC 128":{"units":3,"title":"Introduction to Software Engineering","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["CMSC 123"]]},"CMSC 130":{"units":3,"title":"Logic Design and Digital Computer Circuits","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CMSC 57"]]},"CMSC 131":{"units":3,"title":"Introduction to Computer Organization and Machine Level Programming","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s","pre":[["CMSC 21"]]},"CMSC 132":{"units":3,"title":"Computer Architecture","offered":{"1":4,"2":0,"3":0},"catalogSem":"2s","pre":[["CMSC 131"]]},"CMSC 137":{"units":3,"title":"Data Communications and Networking","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s","pre":[["CMSC 125"]]},"CMSC 141":{"units":3,"title":"Automata and Language Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 123"]]},"CMSC 142":{"units":3,"title":"Design and Analysis of Algorithms","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 123"]]},"CMSC 150":{"units":3,"title":"Numerical and Symbolic Computation","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CMSC 21"],["MATH 27"]]},"CMSC 170":{"units":3,"title":"Introduction to Artificial Intelligence","offered":{"1":4,"2":0,"3":0},"catalogSem":"2s","pre":[["CMSC 123"]]},"CMSC 173":{"units":3,"title":"Human-Computer Interaction","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 123"],["STAT 101"]]},"CMSC 180":{"units":3,"title":"Introduction to Parallel Computing","offered":{"1":3,"2":3,"3":0},"catalogSem":"1s","pre":[["CMSC 132"]]},"CMSC 190":{"units":3,"title":"Special Problems","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"CMSC 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"CMSC 21":{"units":3,"title":"Fundamentals of Programming","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["CMSC 12"]]},"CMSC 22":{"units":3,"title":"Object-Oriented Programming","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 11","CMSC 12"]]},"CMSC 23":{"units":3,"title":"Mobile Computing","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["CMSC 22"]]},"CMSC 56":{"units":3,"title":"Discrete Mathematical Structures in Computer Science I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"CMSC 57":{"units":3,"title":"Discrete Mathematical Structures in Computer Science II","offered":{"1":0,"2":3,"3":2},"catalogSem":"2s,M","pre":[["CMSC 56"]]},"COMA 101":{"units":3,"title":"Language and Communication","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s"},"COMA 103":{"units":3,"title":"Introduction to Discourse Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["COMA 102"]]},"COMA 105":{"units":3,"title":"Principles of Public Relations and Advertising","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["COMA 101"]]},"COMA 150":{"units":3,"title":"Workplace Communication","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"COMA 190":{"units":3,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"COMA 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"COMM 10":{"units":3,"title":"(GE). Critical Perspectives in Communication","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"COST 10":{"units":1,"title":"Introduction to Collective Action","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"DEVC 10":{"units":3,"title":"Introduction to Development Communication","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"DEVC 101":{"units":3,"title":"Introduction to Communication Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 10"]]},"DEVC 11":{"units":3,"title":"Introduction to Media Writing for Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"DEVC 125":{"units":3,"title":"Writing and Reporting for Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 20"],["DEVC 30"]]},"DEVC 126":{"units":3,"title":"Participatory Development Journalism","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["DEVC 125"]]},"DEVC 127":{"units":3,"title":"Data Journalism for Development","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["DEVC 125"]]},"DEVC 128":{"units":3,"title":"Science Journalism","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["DEVC 125"]]},"DEVC 136":{"units":3,"title":"Multi-media Materials Production and Management (3).","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["DEVC 135"]]},"DEVC 144":{"units":3,"title":"Media-based Learning Systems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 135"]]},"DEVC 145":{"units":3,"title":"Distance Learning Systems in Development Communication Practice","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s","pre":[["DEVC 144"]]},"DEVC 153":{"units":3,"title":"Managing Information for Development","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 50"]]},"DEVC 20":{"units":3,"title":"Fundamentals of Development Journalism","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 11"]]},"DEVC 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"S","pre":[["DEVC 195"]]},"DEVC 30":{"units":3,"title":"Fundamentals of Community Broadcasting","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 11"]]},"DEVC 40":{"units":3,"title":"Fundamentals of Educational Communication and Technology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 11"]]},"DEVC 50":{"units":3,"title":"Introduction to Science Communication","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 11"]]},"DEVC 70":{"units":3,"title":"Interpersonal Communication in Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 10"]]},"DEVC 80":{"units":3,"title":"Communication and Society","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["DEVC 10"]]},"ECON 101":{"units":3,"title":"Intermediate Macroeconomic Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"]]},"ECON 102":{"units":3,"title":"Intermediate Microeconomic Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"],["MATH 25","MATH 26","MATH 36"]]},"ECON 103":{"units":3,"title":"Introduction to Growth Theory and Open Economy Macroeconomics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 101"],["MATH 25"]]},"ECON 104":{"units":3,"title":"Introduction to Factor Market Analysis, General Equilibrium and Welfare Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 102"]]},"ECON 11":{"units":3,"title":"General Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ECON 115":{"units":3,"title":"Philippine Economic History","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["ECON 101"],["ECON 102"]]},"ECON 121":{"units":3,"title":"Money and Banking","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["ECON 101"],["ECON 102"]]},"ECON 137":{"units":3,"title":"Introduction to Econometrics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 101"],["ECON 102"],["STAT 101"]]},"ECON 138":{"units":3,"title":"Intermediate Econometrics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["AAE 103","ECON 137","STAT 151"]]},"ECON 170":{"units":3,"title":"Intermediate Environmental Economics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["ECON 104"]]},"ECON 175":{"units":3,"title":"Benefit Cost Analysis","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["ECON 104"],["ECON 137"]]},"ECON 198":{"units":3,"title":"Internship","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"ECON 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ECON 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"S"},"EDUC 102":{"units":3,"title":"Theories and Principles of Education","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s"},"EE 1":{"units":3,"title":"Basic Electrical Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 27"]]},"EE 198":{"units":3,"title":"Internship","offered":{"1":1,"2":0,"3":2},"catalogSem":"1s,2s,M"},"EE 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"EE 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"EE 3":{"units":4,"title":"Basic Electrical Machines","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 1"]]},"EE 30":{"units":1,"title":"Introduction to Electrical Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"EE 40":{"units":4,"title":"Fundamentals of Electrical Engineering I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 72"],["PHYS 72.1"]]},"EE 45":{"units":3,"title":"Fundamentals of Engineering Electromagnetics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 72"],["MATH 28"]]},"EE 50":{"units":4,"title":"Fundamentals of Electrical Engineering II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 40"]]},"EE 60":{"units":3,"title":"Signals and Systems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 50"],["ENSC 21"]]},"EE 61":{"units":4,"title":"Electromechanical Energy Conversion for AC","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 51"]]},"EE 62":{"units":3,"title":"Principles of Power Systems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 45"],["EE 50"]]},"EE 65":{"units":4,"title":"Electronic Circuits","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 55"]]},"EE 66":{"units":3,"title":"Signals and Noise in Electrical Engineering Networks","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 40"],["MATH 28"]]},"EE 70":{"units":4,"title":"Instrumentation Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 1","EE 65"]]},"EE 80":{"units":3,"title":"Control Systems Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 60"]]},"EE 81":{"units":3,"title":"Maintenance of Electrical Equipment and Devices","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s","pre":[["EE 62"]]},"EE 85":{"units":3,"title":"Industrial Electronics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 51"],["EE 70"]]},"EE 86":{"units":3,"title":"Electronic Communication Systems I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["EE 60"],["EE 75"]]},"ENG 10":{"units":3,"title":"Writing of Scientific Papers","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"ENG 101":{"units":3,"title":"English Prose Styles","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["ENG 100","ENG 5"]]},"ENG 104":{"units":3,"title":"Argumentative Writing","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ENSC 10.1":{"units":2,"title":"Engineering Graphics Laboratory","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"ENSC 11":{"units":3,"title":"Statics of Rigid Bodies","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["MATH 27"],["PHYS 51","PHYS 71"]]},"ENSC 12":{"units":3,"title":"Dynamics of Rigid Bodies","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["ENSC 11"]]},"ENSC 13":{"units":3,"title":"Strength of Materials","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["ENSC 11"]]},"ENSC 14":{"units":3,"title":"Basic Thermodynamics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28"],["PHYS 51","PHYS 71"]]},"ENSC 16":{"units":3,"title":"Fluid Mechanics","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["ENSC 12"]]},"ENSC 21":{"units":3,"title":"Mathematical Methods in Engineering","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["MATH 28","MATH 38"]]},"ENSC 26":{"units":3,"title":"Computer Applications in Engineering","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s","pre":[["MATH 28","MATH 38"]]},"ENTR 198":{"units":3,"title":"Internship","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"ETHICS 1":{"units":3,"title":"(GE). Ethics and Moral Reasoning in Everyday Life","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"FBS 10":{"units":4,"title":"Biology of Tropical Forest Plants","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FBS 101":{"units":3,"title":"Forest Biodiversity","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FBS 36"]]},"FBS 31":{"units":3,"title":"Plant Physiology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FBS 45":{"units":4,"title":"Forest Insect Pests and Diseases","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FBS 36"]]},"FOR 1":{"units":3,"title":"Introduction to Forests and Forestry","offered":{"1":3,"2":2,"3":0},"catalogSem":"1s,2s"},"FOR 198":{"units":3,"title":"Internship","offered":{"1":0,"2":2,"3":2},"catalogSem":"M"},"FOR 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FOR 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"FOR 31":{"units":3,"title":"Elementary Forest Protection","offered":{"1":2,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FBS 1"],["FBS 9"]]},"FPPS 11":{"units":3,"title":"Wood Structure and Identification","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FPPS 128":{"units":3,"title":"Non-Timber Forest Products","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FBS 21"],["FPPS 127"]]},"FPPS 183":{"units":3,"title":"Engineering Economic Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FRM 131":{"units":3,"title":"Forest-based Enterprise Development and Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FRM 120"]]},"FST 102":{"units":4,"title":"Food Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FST 101"],["CHEM 32"],["CHEM 32.1"]]},"FST 11":{"units":3,"title":"Fundamentals of Food Science and Technology.","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"FST 131":{"units":3,"title":"Food Engineering II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FST 130"]]},"FST 140":{"units":3,"title":"Food Processing I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MCB 180"],["FST 130"]]},"FST 141":{"units":3,"title":"Food Processing II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MCB 180"],["FST 130"]]},"FST 165":{"units":3,"title":"Food Quality Assurance","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FST 140","FST 141"]]},"FST 167":{"units":3,"title":"Food Safety","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MCB 1"]]},"FST 170":{"units":3,"title":"Food Processing Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FST 140","FST 141"]]},"FST 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"HFDS 101":{"units":3,"title":"Family and the Environment","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HFDS 130":{"units":3,"title":"Human Physiology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HK 11":{"units":2,"title":"Wellness and Basic Injury Management","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"HK 12":{"units":2,"title":"Human Kinetics Activities","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"HNF 102":{"units":4,"title":"Meal Management","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s","pre":[["HNF 101"]]},"HNF 103":{"units":3,"title":"Food Preservation","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["MCB 11"],["HNF 101"]]},"HNF 104":{"units":3,"title":"Food Service Systems I","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s","pre":[["HNF 102"]]},"HNF 105":{"units":3,"title":"Food Service Systems II","offered":{"1":2,"2":3,"3":0},"catalogSem":"2s","pre":[["HNF 104"],["MGT 101"],["MGT 111"]]},"HNF 122":{"units":4,"title":"Food and Nutrition","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s","pre":[["HNF 101"]]},"HNF 127":{"units":4,"title":"Nutrition in the Life Stages","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s","pre":[["HNF 123"]]},"HNF 128":{"units":5,"title":"Medical Nutrition Therapy I","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s","pre":[["HFDS 130"],["CHEM 160"],["HNF 123"]]},"HNF 141":{"units":3,"title":"Food and Nutrition System","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HNF 142":{"units":3,"title":"Public Health Nutrition","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HNF 123"]]},"HNF 195":{"units":3,"title":"Food and Nutrition Research","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 101"]]},"HNF 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HNF 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"HUM 100":{"units":3,"title":"Critical Theories","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HUM 101":{"units":3,"title":"Visual Culture","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HUM 102":{"units":3,"title":"New Media Art","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HUME 100":{"units":3,"title":"Introduction to Human Ecology","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s"},"HUME 110":{"units":3,"title":"Ecology and Value Systems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HUME 105"],["BIO 150"]]},"HUME 111":{"units":3,"title":"Human Ecological Perspectives in Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["HUME 105"]]},"HUME 112":{"units":3,"title":"Sustainability Science","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HUME 115":{"units":3,"title":"Social Policies","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"HUME 122":{"units":3,"title":"Human Needs and the Built Environment","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HUME 100"]]},"HUME 123":{"units":3,"title":"Climate Change Adaptation and Disaster Risk Reduction in Human Ecosystems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HUME 100"]]},"HUME 125":{"units":3,"title":"Human Ecological Systems Mapping","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["HUME 105"]]},"HUME 195":{"units":3,"title":"Research Methods in Human Ecology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s"},"IE 10":{"units":1,"title":"Foundations of Industrial Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"IE 125":{"units":5,"title":"Industrial Quality Control","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s,2s","pre":[["IE 21"],["STAT 101"]]},"IE 132":{"units":5,"title":"Methods Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["IE 21"],["IE 31"]]},"IE 134":{"units":3,"title":"Ergonomics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["IE 132"]]},"IE 141":{"units":3,"title":"Operations Research I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28"]]},"IE 143":{"units":3,"title":"Stochastic Processes in Industrial Engineering","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 101"]]},"IE 150":{"units":3,"title":"Systems Evaluation","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28","MATH 38"]]},"IE 152":{"units":3,"title":"Production Planning and Design","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s","pre":[["IE 150"],["IE 151"]]},"IE 158":{"units":3,"title":"Supply Chain Engineering","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["IE 152"]]},"IE 165":{"units":3,"title":"Information Systems II","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["IE 164"]]},"IE 185":{"units":3,"title":"Industrial Systems Design","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s,2s","pre":[["IE 184"]]},"IE 198":{"units":3,"title":"Internship","offered":{"1":2,"2":2,"3":2},"catalogSem":"1s,2s,M"},"IE 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"IE 90":{"units":2,"title":"Ethics for Industrial Engineers","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["IE 31"]]},"KAS 1":{"units":3,"title":"(GE). Kasaysayan ng Pilipinas","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MATE 101":{"units":4,"title":"Thermodynamics of Materials","offered":{"1":3,"2":1,"3":0},"catalogSem":"1s,2s","pre":[["MATE 21"]]},"MATE 171":{"units":3,"title":"Degradation of Materials","offered":{"1":1,"2":0,"3":0},"catalogSem":"1s"},"MATE 181":{"units":3,"title":"Basic Polymer Engineering","offered":{"1":1,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["MATE 165"],["MATE 175"]]},"MATE 191":{"units":3,"title":"Special Topics","offered":{"1":1,"2":0,"3":0},"catalogSem":"1s,2s"},"MATE 21":{"units":3,"title":"Structure-Property Rel.Mat I","offered":{"1":0,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["CHEM 18"],["PHYS 51","PHYS 71"]]},"MATH 10":{"units":3,"title":"(GE). Mathematics, Culture, and Society","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MATH 101":{"units":3,"title":"Logic and Set Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 27","MATH 37"],["AMAT 19","MATH 20"]]},"MATH 103":{"units":3,"title":"Elementary Theory of Numbers","offered":{"1":1,"2":3,"3":0},"catalogSem":"2s","pre":[["MATH 101"]]},"MATH 111":{"units":3,"title":"Modern Algebra I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 101"]]},"MATH 120":{"units":3,"title":"Linear Algebra","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 111"]]},"MATH 135":{"units":3,"title":"Projective Geometry","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 133"]]},"MATH 151":{"units":3,"title":"Ordinary Differential Equations","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28","MATH 38"]]},"MATH 155":{"units":3,"title":"Advanced Calculus I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 38"],["MATH 101"]]},"MATH 165":{"units":3,"title":"Complex Analysis I","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["MATH 38"],["MATH 101"]]},"MATH 174":{"units":3,"title":"Numerical Analysis I","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["AMAT 152"]]},"MATH 181":{"units":3,"title":"Introduction to Probability Theory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 101"],["MATH 28","MATH 38"]]},"MATH 182":{"units":3,"title":"Introduction to Stochastic Processes","offered":{"1":2,"2":3,"3":0},"catalogSem":"2s","pre":[["MATH 181","STAT 144"]]},"MATH 190":{"units":3,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s,M"},"MATH 195":{"units":3,"title":"Research Methods in Mathematics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 38"],["MATH 101"]]},"MATH 198":{"units":3,"title":"Practicum","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"MATH 20":{"units":3,"title":"The Landscape of Mathematics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MATH 25":{"units":3,"title":"Fundamental Calculus","offered":{"1":4,"2":3,"3":1},"catalogSem":"1s,2s"},"MATH 27":{"units":3,"title":"Analytic Geometry and Calculus II","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"MATH 28":{"units":3,"title":"Analytic Geometry and Calculus III","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["MATH 27"]]},"MATH 36":{"units":5,"title":"Mathematical Analysis I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MATH 37":{"units":3,"title":"Mathematical Analysis II","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["MATH 36"]]},"MATH 38":{"units":5,"title":"Mathematical Analysis III","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 37"]]},"MCB 11":{"units":3,"title":"Biology and Applications of Microorganisms","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ME 198":{"units":3,"title":"Internship","offered":{"1":0,"2":0,"3":2},"catalogSem":"1s,2s"},"ME 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":3,"2":2,"3":2},"catalogSem":"1s,2s,M"},"MGT 101":{"units":3,"title":"Concepts and Dynamics of Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MGT 109":{"units":3,"title":"Managerial Economics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"],["MGT 101"]]},"MGT 111":{"units":3,"title":"Principles of Accounting","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"MGT 113":{"units":3,"title":"Managerial Accounting","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 111"]]},"MGT 115":{"units":3,"title":"Introduction to Financial Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 111"]]},"MGT 117":{"units":3,"title":"Investment Management","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["MGT 115"]]},"MGT 121":{"units":3,"title":"Quantitative Business Analysis","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 101"]]},"MGT 131":{"units":3,"title":"Introduction to Human Relations and Behavior in Organizations","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 101"]]},"MGT 141":{"units":3,"title":"Fundamentals of Operations Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 121"]]},"MGT 151":{"units":3,"title":"Introduction to Marketing Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 101"]]},"MGT 161":{"units":3,"title":"Business Law","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MGT 101"]]},"MGT 181":{"units":3,"title":"Fundamentals of Strategic Business Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ABME 103"],["ABME 115","MGT 115"]]},"NRC 140":{"units":3,"title":"Introduction to Geographic Information Systems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"NRC 170":{"units":3,"title":"Watershed Management","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["SFI 100"]]},"NSTP 1":{"units":3,"title":"National Service Training Program I","offered":{"1":3,"2":3,"3":0},"catalogSem":"2s"},"NSTP 2":{"units":3,"title":"National Service Training Program II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["NSTP 1"]]},"PED 100":{"units":3,"title":"Introduction to Physical Education and Sports Sciences","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s"},"PED 130.1":{"units":3,"title":"Basic Aquatics","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s"},"PED 151":{"units":3,"title":"Folk Dance","offered":{"1":0,"2":2,"3":0},"catalogSem":"2s"},"PED 172":{"units":3,"title":"Community Recreation","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"PED 174":{"units":3,"title":"Outdoor Recreation","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"PED 176":{"units":3,"title":"Recreation for Special Groups","offered":{"1":3,"2":0,"3":0},"catalogSem":"1s"},"PED 196":{"units":3,"title":"Internship","offered":{"1":0,"2":2,"3":0},"catalogSem":"2s"},"PED 91":{"units":3,"title":"Fundamental Rhythms","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"PED 92":{"units":3,"title":"Philippine games","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"PED 93":{"units":3,"title":"Philosophy of Sports and Physical Education","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"PHLO 11":{"units":3,"title":"Fundamental Approaches to Philosophy","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s"},"PHLO 110":{"units":3,"title":"Ancient Philosophy","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["PHLO 11"]]},"PHLO 112":{"units":3,"title":"Modern Philosophy","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 113":{"units":3,"title":"Contemporary Philosophy","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s"},"PHLO 12":{"units":3,"title":"Logic","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"PHLO 160":{"units":3,"title":"Philosophy of Science","offered":{"1":1,"2":3,"3":0},"catalogSem":"2s"},"PHLO 173":{"units":3,"title":"Practical Ethics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 174":{"units":3,"title":"Biomedical Ethics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 176":{"units":3,"title":"Social and Political Philosophy","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 178":{"units":3,"title":"Environmental Ethics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 181":{"units":3,"title":"Aesthetics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"PHLO 190":{"units":3,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"PHLO 195":{"units":3,"title":"Philosophy of Language","offered":{"1":4,"2":0,"3":0}},"PHLO 197":{"units":3,"title":"Philosophic Problems","offered":{"1":4,"2":0,"3":0}},"PHYS 101":{"units":4,"title":"Newtonian Mechanics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"PHYS 102":{"units":4,"title":"Electromagnetism","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 101"]]},"PHYS 103":{"units":4,"title":"Mechanical Waves, Optics, and Thermodynamics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 102"]]},"PHYS 112":{"units":4,"title":"Mathematical Methods of Physics II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 111"],["MATH 28","MATH 38"]]},"PHYS 115":{"units":4,"title":"Computational Physics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"PHYS 121":{"units":3,"title":"Theoretical Mechanics I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1S,2s","pre":[["PHYS 101"],["PHYS 111"]]},"PHYS 122":{"units":3,"title":"Theoretical Mechanics II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1S,2s","pre":[["PHYS 121"]]},"PHYS 132":{"units":3,"title":"Electromagnetic Theory II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 113"],["PHYS 131"]]},"PHYS 141":{"units":3,"title":"Quantum Physics I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 104"],["PHYS 113"]]},"PHYS 142":{"units":3,"title":"Quantum Physics II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 141"]]},"PHYS 195":{"units":3,"title":"Research Methods in Physics","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 102"]]},"PHYS 51":{"units":4,"title":"Elements of Physics","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"PHYS 51.1":{"units":1,"title":"Elements of Physics Laboratory","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","co":["PHYS 51"]},"PHYS 71":{"units":4,"title":"University Physics I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"PHYS 71.1":{"units":1,"title":"University Physics I Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","co":["PHYS 71"]},"PHYS 72":{"units":5,"title":"Elementary Physics II","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s","pre":[["PHYS 71"]]},"PHYS 72.1":{"units":1,"title":"University Physics II Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["PHYS 71.1"]],"co":["PHYS 72"]},"PI 10":{"units":3,"title":"The Life and Works of Rizal","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M"},"PSY 10":{"units":3,"title":"Foundations of Psychology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SDS 101":{"units":3,"title":"Introduction to Social Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SDS 173":{"units":3,"title":"Consumer Education","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SFFG 101":{"units":3,"title":"Principles and Concepts of Social Forestry","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FOR 1"]]},"SFFG 113":{"units":3,"title":"Forestry Extension","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SFFG 123":{"units":3,"title":"Forest Policy and Institutions","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SFFG 125":{"units":3,"title":"Political Economy and Administration of Forestry Development","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ECON 11"],["SFFG 101"]]},"SFFG 152":{"units":3,"title":"Sociology of Natural Resources","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SFI 100":{"units":3,"title":"Geology and Forest Soils","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s"},"SFI 140":{"units":3,"title":"Tropical Silviculture","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["FBS 36"],["SFI 100"]]},"SOC 10":{"units":3,"title":"General Principles of Sociology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SOC 107":{"units":3,"title":"Gender Relations","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 112":{"units":3,"title":"Sociology of Politics","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["SOC 10"]]},"SOC 114":{"units":3,"title":"Sociology of Economic Life","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 116":{"units":3,"title":"Sociology of Religion","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 120":{"units":3,"title":"Urban Sociology","offered":{"1":1,"2":3,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 130":{"units":3,"title":"Social Psychology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["SOC 10"]]},"SOC 151":{"units":3,"title":"Classical Sociological Theories","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 166":{"units":3,"title":"Social Program Evaluation","offered":{"1":4,"2":3,"3":0},"catalogSem":"2s","pre":[["SOC 10"]]},"SOC 180":{"units":3,"title":"Collective Behavior","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["SOC 10"]]},"SOC 191":{"units":1,"title":"Special Topics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"SOC 195":{"units":2,"title":"Research Methodologies in the Social Sciences","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["SOC 195.1","STAT 166"]]},"SOC 195.1":{"units":1,"title":"Research Methodologies in the Social Sciences Laboratory","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["SOC 195","STAT 166"]]},"SOC 198":{"units":3,"title":"Internship","offered":{"1":1,"2":0,"3":2},"catalogSem":"M"},"SOC 199":{"units":1,"title":"Undergraduate Seminar","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SOC 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s,M","pre":[["SOC 192"],["SOC 195"],["SOC 195.1"]]},"SPCM 102":{"units":3,"title":"Voice and Diction","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"SS 102":{"units":3,"title":"Human Anatomy and Physiology 1","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"SS 103":{"units":3,"title":"Human Anatomy and Physiology 2","offered":{"1":2,"2":2,"3":0},"catalogSem":"1s"},"SS 104":{"units":3,"title":"Tests and Measurement in Exercise and Sport Sciences","offered":{"1":0,"2":2,"3":0},"catalogSem":"2s"},"SS 110":{"units":3,"title":"Basic Weight Training","offered":{"1":1,"2":2,"3":0},"catalogSem":"1s,2s"},"SS 120":{"units":3,"title":"Basic Fitness Dance","offered":{"1":0,"2":2,"3":0},"catalogSem":"2s"},"SS 130":{"units":3,"title":"First Aid","offered":{"1":0,"2":2,"3":0},"catalogSem":"2s"},"STAT 101":{"units":3,"title":"Statistical Methods","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 135":{"units":3,"title":"Logic and Matrix Algebra in Statistics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"STAT 144":{"units":3,"title":"Introductory Statistical Theory I","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["MATH 28"]]},"STAT 146":{"units":3,"title":"Introductory Statistical Theory III","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 145"]]},"STAT 147":{"units":3,"title":"Introduction to the Theory of Nonparametric Statistics","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["STAT 145"]]},"STAT 148":{"units":3,"title":"Introductory Bayesian Statistics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["STAT 145"]]},"STAT 162":{"units":3,"title":"Experimental Designs","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 164":{"units":3,"title":"Statistics for the Biological Sciences","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 165":{"units":3,"title":"Categorical Data Analysis","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["STAT 101"]]},"STAT 166":{"units":3,"title":"Statistics for the Social Sciences","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 168":{"units":3,"title":"Response Surface Methodology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 173":{"units":3,"title":"Survey Operations","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["STAT 163"]]},"STAT 174":{"units":3,"title":"Introductory Biostatistics","offered":{"1":1,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 175":{"units":3,"title":"Analysis of Multivariate Data","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["STAT 101"]]},"STAT 181":{"units":3,"title":"Statistical Computing","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"STAT 190":{"units":1,"title":"Special Problems","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 191":{"units":1,"title":"Special Topics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s"},"STAT 192.1":{"units":1,"title":"Statistical Consulting Laboratory","offered":{"1":0,"2":3,"3":0},"catalogSem":"1s,2s"},"STAT 198":{"units":3,"title":"Practicum","offered":{"1":0,"2":0,"3":2},"catalogSem":"M"},"STS 1":{"units":3,"title":"(GE). Science, Technology, and Society","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"THEA 101":{"units":3,"title":"History of the Theater","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENG 100"]]},"THEA 102":{"units":3,"title":"Theater Communication","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["ENG 100"]]},"THEA 103":{"units":3,"title":"Philippine Theatre","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"VELD 161.1":{"units":2,"title":"Laboratory Diagnostics in Veterinary Medicine","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VMED 151"]]},"VETA 102":{"units":4,"title":"Macroscopic Anatomy II","offered":{"1":4,"2":1,"3":0},"catalogSem":"1s","pre":[["VETA 101"]]},"VETA 106":{"units":4,"title":"Microscopic and Developmental Anatomy II","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s,2s","pre":[["VETA 105"]]},"VETC 171":{"units":2,"title":"Introduction to Clinics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CHEM 18"],["CHEM 18.1"],["CHEM 40"],["CHEM 40.1"],["CHEM 160"],["VPHY 140"],["STAT 164"],["ABME 10"],["VETA 101"],["VETA 102"],["VETA 105"],["VETA 106"],["VMCB 121"],["VMCB 122"],["VMCB 123"],["VMCB 124"],["VMED 101"],["VMED 151"],["VMED 195"],["VPAR 131"],["VPAR 132"],["VPH 121"],["VPH 122"],["VPHM 141"],["VPHM 142"],["VPHY 141"],["VPHY 142"],["VPHY 143"],["VPTH 121"],["VPTH 122"],["VPTH 123"],["VSUR 151"],["ZOTC 111"],["ZOTC 112"],["ZOTC 113"],["ZOTC 114"],["ZOTC 115"],["ZOTC 116"],["ZOTC 117"],["ZOTC 119"]]},"VETC 173":{"units":1,"title":"Clinical Conference I","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"VETC 175":{"units":6,"title":"Clinics I (Internship)","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["CHEM 18"],["CHEM 18.1"],["CHEM 40"],["CHEM 40.1"],["CHEM 160"],["VPHY 140"],["STAT 164"],["ABME 10"],["VETA 101"],["VETA 102"],["VETA 105"],["VETA 106"],["VETC 171"],["VETC 172"],["VMCB 121"],["VMCB 122"],["VMCB 123"],["VMCB 124"],["VMED 101"],["VMED 151"],["VMED 152"],["VMED 155"],["VMED 161"],["VMED 162"],["VMED 163"],["VMED 164"],["VMED 165"],["VMED 195"],["VPAR 131"],["VPAR 132"],["VPH 121"],["VPH 122"],["VPH 123"],["VPHM 141"],["VPHM 142"],["VPHY 141"],["VPHY 142"],["VPHY 143"],["VPTH 121"],["VPTH 122"],["VPTH 123"],["VSUR 151"],["VSUR 152"],["VSUR 153"],["VSUR 154"],["ZOTC 111"],["ZOTC 112"],["ZOTC 113"],["ZOTC 114"],["ZOTC 115"],["ZOTC 116"],["ZOTC 117"],["ZOTC 119"]]},"VMCB 121":{"units":4,"title":"General Microbiology","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s"},"VMCB 123":{"units":3,"title":"Veterinary Virology","offered":{"1":0,"2":3,"3":1},"catalogSem":"2s","pre":[["VMCB 121"]]},"VMCB 124":{"units":2,"title":"Fundamentals of Immunology","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s"},"VMED 101":{"units":3,"title":"Animal Welfare","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"VMED 151":{"units":2,"title":"General Principles of Veterinary Medicine","offered":{"1":3,"2":3,"3":0},"catalogSem":"1s,2s","pre":[["VPHM 142"],["VPAR 132"]]},"VMED 152":{"units":4,"title":"Canine and Feline Medicine","offered":{"1":4,"2":0,"3":2},"catalogSem":"2s","pre":[["VMED 151"]]},"VMED 156":{"units":2,"title":"Jurisprudence, Ethics and Economics","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s"},"VMED 162":{"units":3,"title":"Poultry Medicine","offered":{"1":4,"2":2,"3":0},"catalogSem":"1s,2s","pre":[["ZOTC 116"],["VMED 151"]]},"VMED 200":{"units":1,"title":"Undergraduate Thesis","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s"},"VPAR 132":{"units":4,"title":"Veterinary Helminthology","offered":{"1":4,"2":0,"3":1},"catalogSem":"1s","pre":[["VPAR 131"]]},"VPH 121":{"units":3,"title":"Epidemiology","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VMCB 121"]]},"VPH 123":{"units":4,"title":"Food Hygiene","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VPH 122"]]},"VPHM 142":{"units":4,"title":"Pharmacology and Therapeutics II","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VPHM 141"]]},"VPHY 140":{"units":2,"title":"Biochemical Aspects of Animal Processes","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s","co":["CHEM 160"]},"VPHY 142":{"units":4,"title":"Systemic Physiology","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VPHY 141"]]},"VPTH 121":{"units":4,"title":"General Pathology","offered":{"1":0,"2":3,"3":0},"catalogSem":"2s","pre":[["VETA 106"]]},"VPTH 122":{"units":3,"title":"Systemic Pathology","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VPTH 121"],["VPHY 141"]]},"VSUR 152":{"units":4,"title":"Small Animal Surgery","offered":{"1":4,"2":0,"3":0},"catalogSem":"1s","pre":[["VSUR 151"]]},"VSUR 154":{"units":2,"title":"Diagnostic Imaging","offered":{"1":4,"2":0,"3":1},"catalogSem":"1s","pre":[["VETA 102"],["VMED 151"]]},"ZOO 14":{"units":3,"title":"University Zoology","offered":{"1":4,"2":3,"3":0},"catalogSem":"1s,2s"},"ZOTC 112":{"units":3,"title":"Principles of Animal Breeding","offered":{"1":4,"2":0,"3":1},"catalogSem":"1s","pre":[["ZOTC 111"]]},"ZOTC 114":{"units":3,"title":"Swine Production","offered":{"1":4,"2":0,"3":2},"catalogSem":"1s","pre":[["ZOTC 111"]]},"ZOTC 117":{"units":2,"title":"Equine Production","offered":{"1":4,"2":0,"3":2},"catalogSem":"1s","pre":[["ZOTC 111"]]},"ZOTC 119":{"units":3,"title":"Husbandry and Health Management of Laboratory Animals","offered":{"1":4,"2":3,"3":2},"catalogSem":"1s,2s","pre":[["ZOTC 111"]]}}; +if (typeof module !== 'undefined') module.exports = { UPLB_CATALOG }; diff --git a/extension/src/content.js b/extension/src/content.js index 29c3193..0b7f1e6 100644 --- a/extension/src/content.js +++ b/extension/src/content.js @@ -37,8 +37,8 @@ return response; } - // Check if this is the grades API call - const url = args[0]?.toString() || ''; + // Check if this is the grades API call (fetch accepts a string or a Request) + const url = (args[0] instanceof Request ? args[0].url : args[0]?.toString()) || ''; if (url.includes('api-amis.uplb.edu.ph/api/students/grades')) { try { const clonedResponse = response.clone(); diff --git a/extension/src/curriculum.js b/extension/src/curriculum.js index d59b5cd..cfaadcf 100644 --- a/extension/src/curriculum.js +++ b/extension/src/curriculum.js @@ -4,19 +4,154 @@ // Complete undergraduate programs for University of the Philippines Los Baños // NOTE: This is UPLB only - not UP Diliman, UP Manila, etc. +const NON_GWA_PREFIXES = ['NSTP', 'HK', 'PE']; +const KNOWN_GE_CODES = new Set([ + 'ARTS 1', + 'COMM 10', + 'ETHICS 1', + 'HIST 1', + 'HUM 3', + 'KAS 1', + 'KAS 1/HIST 1', + 'MATH 10', + 'PHILARTS 1', + 'PHLO 1', + 'PI 10', + 'SAS 1', + 'SCIENCE 10', + 'SOSC 3', + 'STS 1', + 'WIKA 1' +]); -// Safe HTML setter to avoid AMO innerHTML warnings -Object.defineProperty(Element.prototype, 'safeHTML', { - set: function(html) { - if (!html) { - this.replaceChildren(); - return; - } - const parser = new DOMParser(); - const doc = parser.parseFromString(html, 'text/html'); - this.replaceChildren(...doc.body.childNodes); +function normalizeCourseCode(code) { + return (code || '').toString().toUpperCase().replace(/\s+/g, ' ').trim(); +} + +function isNonGwaCourseCode(courseCode) { + const code = normalizeCourseCode(courseCode); + return NON_GWA_PREFIXES.some(prefix => code.startsWith(prefix)); +} + +function isGECourse(courseCode, courseTitle) { + if (courseTitle === undefined) { + courseTitle = courseCode; + courseCode = ''; } -}); + const code = normalizeCourseCode(courseCode); + const title = (courseTitle || '').toString().toUpperCase(); + return KNOWN_GE_CODES.has(code) || + code === 'GE' || + /^GE\s*\d*$/.test(code) || + code.includes('GE ELECTIVE') || + title.trim().startsWith('(GE)') || + /\bGE\s*(ELECTIVE|COURSE|\d)\b/.test(title) || + /\bGENERAL EDUCATION\b/.test(title); +} + +function defaultSlot(index) { + return { + year: Math.floor(index / 2) + 1, + sem: index % 2 === 0 ? '1' : '2' + }; +} + +function genericRequirementCourses(program) { + const existing = program?.majorCourses || []; + const countExisting = predicate => existing.filter(predicate).length; + const courses = []; + + const existingGE = countExisting(c => isGECourse(c.code, c.title)); + const geRequired = program?.geCoursesRequired == null ? 9 : program.geCoursesRequired; + for (let i = existingGE; i < geRequired; i++) { + const slot = defaultSlot(i); + courses.push({ + code: `GE ${i + 1}`, + title: 'General Education', + units: 3, + year: slot.year, + sem: slot.sem, + prereqs: [], + genericRequirement: 'ge' + }); + } + + const existingHK = countExisting(c => normalizeCourseCode(c.code).startsWith('HK') || normalizeCourseCode(c.code).startsWith('PE')); + const hkRequired = program?.hkCoursesRequired == null ? 2 : program.hkCoursesRequired; + for (let i = existingHK; i < hkRequired; i++) { + const slot = defaultSlot(i); + courses.push({ + code: `HK ${i + 1}`, + title: 'Human Kinetics', + units: 2, + year: slot.year, + sem: slot.sem, + prereqs: [], + genericRequirement: 'hk' + }); + } + + const existingNSTP = countExisting(c => normalizeCourseCode(c.code).startsWith('NSTP')); + const nstpRequired = program?.nstpCoursesRequired == null ? 2 : program.nstpCoursesRequired; + for (let i = existingNSTP; i < nstpRequired; i++) { + const slot = defaultSlot(i); + courses.push({ + code: `NSTP ${i + 1}`, + title: 'National Service Training Program', + units: 3, + year: slot.year, + sem: slot.sem, + prereqs: [], + genericRequirement: 'nstp' + }); + } + + return courses; +} + +function getPlannerCourses(program) { + return [...(program?.majorCourses || []), ...genericRequirementCourses(program)]; +} + +function getCompletedRequirementSlotCodes(completedCourses, program) { + const slots = genericRequirementCourses(program); + const done = new Set(); + const counts = { ge: 0, hk: 0, nstp: 0 }; + const existingDone = { ge: 0, hk: 0, nstp: 0 }; + const existing = { ge: new Set(), hk: new Set(), nstp: new Set() }; + + (program?.majorCourses || []).forEach(course => { + const code = normalizeCourseCode(course.code); + if (isGECourse(code, course.title)) existing.ge.add(code); + else if (code.startsWith('HK') || code.startsWith('PE')) existing.hk.add(code); + else if (code.startsWith('NSTP')) existing.nstp.add(code); + }); + + (completedCourses || []).forEach(course => { + const code = normalizeCourseCode(course.code || course.courseCode); + const title = course.title || course.courseTitle; + if (isGECourse(code, title)) { + counts.ge++; + if (existing.ge.has(code)) existingDone.ge++; + } else if (code.startsWith('HK') || code.startsWith('PE')) { + counts.hk++; + if (existing.hk.has(code)) existingDone.hk++; + } else if (code.startsWith('NSTP')) { + counts.nstp++; + if (existing.nstp.has(code)) existingDone.nstp++; + } + }); + + ['ge', 'hk', 'nstp'].forEach(type => { + slots + .filter(course => course.genericRequirement === type) + .slice(0, Math.max(0, counts[type] - existingDone[type])) + .forEach(course => done.add(normalizeCourseCode(course.code))); + }); + + return done; +} + const UPLB_PROGRAMS = { "BSCS": { "code": "BSCS", @@ -11602,11 +11737,6 @@ function getFreeElectiveUnits(track) { return currentProgram.tracks[defaultTrack]?.freeElectiveUnits || 15; } -// Check if a course is a GE course (title starts with "(GE)") -function isGECourse(courseTitle) { - return courseTitle && courseTitle.trim().startsWith("(GE)"); -} - // Check if a course is a required major course function isRequiredCourse(courseCode) { if (!currentProgram.requiredCodes) return false; @@ -11632,7 +11762,7 @@ function getRemainingCourses(completedCourses) { // Count completed GE courses function countCompletedGE(completedCourses) { - return completedCourses.filter(c => isGECourse(c.title)).length; + return completedCourses.filter(c => isGECourse(c.code || c.courseCode, c.title || c.courseTitle)).length; } // Get remaining GE slots @@ -11649,11 +11779,16 @@ if (typeof module !== 'undefined' && module.exports) { module.exports = { UPLB_PROGRAMS, COLLEGES, + normalizeCourseCode, + isNonGwaCourseCode, getCurrentCurriculum, setCurrentProgram, detectTrack, getFreeElectiveUnits, isGECourse, + genericRequirementCourses, + getPlannerCourses, + getCompletedRequirementSlotCodes, isRequiredCourse, getRemainingCourses, countCompletedGE, diff --git a/extension/src/curriculum_graphs.js b/extension/src/curriculum_graphs.js deleted file mode 100644 index 944fe3a..0000000 --- a/extension/src/curriculum_graphs.js +++ /dev/null @@ -1,544 +0,0 @@ -// extension/src/curriculum_graphs.js - -// UPLB Curriculum Graphs Database -// Generated automatically from official PDF checklists - -const UPLB_CURRICULUM_GRAPHS = { - "BA-Communication-Arts": { - "program": "BA-Communication-Arts", - "nodes": [ - { - "id": "COMA", - "label": "200a. Practicum", - "units": 3, - "year": 3, - "sem": "midyear" - } - ], - "edges": [] - }, - "BA-Philosophy": { - "program": "BA-Philosophy", - "nodes": [], - "edges": [] - }, - "BA-Sociology": { - "program": "BA-Sociology", - "nodes": [ - { - "id": "3 GE Elective", - "label": "3 GE Elective", - "units": 3, - "year": 1, - "sem": "midyear" - } - ], - "edges": [] - }, - "BS-Applied-Mathematics": { - "program": "BS-Applied-Mathematics", - "nodes": [], - "edges": [] - }, - "BS-Applied-Physics": { - "program": "BS-Applied-Physics", - "nodes": [ - { - "id": "(2) GE Elective", - "label": "(2) GE Elective", - "units": 3, - "year": 1, - "sem": "2" - }, - { - "id": "GE", - "label": "Elective", - "units": 3, - "year": 2, - "sem": "2" - }, - { - "id": "COMM 10", - "label": "Critical Perspectives in Communication", - "units": 3, - "year": 3, - "sem": "2" - }, - { - "id": "3 Elective (APHY/PHYS)", - "label": "3 Elective (APHY/PHYS)", - "units": 3, - "year": 3, - "sem": "2" - }, - { - "id": "PHY 198", - "label": "Practicum", - "units": 3, - "year": 3, - "sem": "midyear" - }, - { - "id": "3 Elective", - "label": "3 Elective", - "units": 3, - "year": 4, - "sem": "2" - } - ], - "edges": [] - }, - "BS-Biology": { - "program": "BS-Biology", - "nodes": [], - "edges": [] - }, - "BS-Chemistry": { - "program": "BS-Chemistry", - "nodes": [ - { - "id": "tory 3 GE Elective", - "label": "tory 3 GE Elective", - "units": 3, - "year": 1, - "sem": "2" - }, - { - "id": "1 GE Elective", - "label": "1 GE Elective", - "units": 3, - "year": 2, - "sem": "2" - }, - { - "id": "NSTP 1", - "label": "National Training Service Program I", - "units": 3, - "year": 2, - "sem": "2" - }, - { - "id": "CHEM 44", - "label": "Organic Chemistry II", - "units": 3, - "year": 2, - "sem": "midyear" - }, - { - "id": "3 Elective (CHEM)", - "label": "3 Elective (CHEM)", - "units": 3, - "year": 4, - "sem": "2" - } - ], - "edges": [] - }, - "BS-Mathematics": { - "program": "BS-Mathematics", - "nodes": [], - "edges": [] - }, - "BS-Statistics": { - "program": "BS-Statistics", - "nodes": [ - { - "id": "3 GE Elective", - "label": "3 GE Elective", - "units": 3, - "year": 2, - "sem": "midyear" - } - ], - "edges": [] - }, - "BS-Agricultural-Chemistry": { - "program": "BS-Agricultural-Chemistry", - "nodes": [], - "edges": [] - }, - "BS-Agriculture": { - "program": "BS-Agriculture", - "nodes": [ - { - "id": "AGRI 11", - "label": "1 AGRI", - "units": 51, - "year": 1, - "sem": "1" - }, - { - "id": "AGRI 21", - "label": "3 AGRI", - "units": 22, - "year": 1, - "sem": "1" - }, - { - "id": "AGRI 31", - "label": "3 AGRI", - "units": 32, - "year": 1, - "sem": "1" - }, - { - "id": "AGRI 41", - "label": "3 CHEM", - "units": 18, - "year": 1, - "sem": "1" - }, - { - "id": "ARTS 1", - "label": "3 ETHICS", - "units": 1, - "year": 1, - "sem": "1" - }, - { - "id": "STS 1", - "label": "3 HK", - "units": 11, - "year": 1, - "sem": "1" - }, - { - "id": "CHEM 18.1", - "label": "2 KAS 1/HIST", - "units": 1, - "year": 2, - "sem": "1" - }, - { - "id": "ABME 10", - "label": "3 ECON", - "units": 11, - "year": 2, - "sem": "1" - }, - { - "id": "AGRI 42", - "label": "3 BOT", - "units": 20, - "year": 2, - "sem": "1" - }, - { - "id": "AGRI 61", - "label": "3 AGRI", - "units": 111, - "year": 2, - "sem": "1" - }, - { - "id": "ABT 10", - "label": "3 AGRI", - "units": 171, - "year": 2, - "sem": "1" - }, - { - "id": "ELECTIVE GE 1 3 CHEM", - "label": "ELECTIVE GE 1 3 CHEM", - "units": 40, - "year": 2, - "sem": "1" - }, - { - "id": "HK 12", - "label": "OR 13 (2) CHEM", - "units": 40.1, - "year": 2, - "sem": "1" - }, - { - "id": "MAJOR", - "label": "200/MAJOR 190", - "units": 3, - "year": 4, - "sem": "1" - }, - { - "id": "COMM", - "label": "10", - "units": 3, - "year": 4, - "sem": "1" - } - ], - "edges": [] - }, - "BS-Agricultural-Biotechnology": { - "program": "BS-Agricultural-Biotechnology", - "nodes": [ - { - "id": "(2) Elective GE", - "label": "(2) Elective GE", - "units": 2, - "year": 2, - "sem": "2" - }, - { - "id": "3 Elective course", - "label": "3 Elective course", - "units": 1, - "year": 3, - "sem": "2" - }, - { - "id": "3 Elective Course", - "label": "3 Elective Course", - "units": 2, - "year": 4, - "sem": "2" - } - ], - "edges": [] - }, - "BS-Food-Science-and-Technology": { - "program": "BS-Food-Science-and-Technology", - "nodes": [ - { - "id": "FST 11", - "label": "3 GE", - "units": 1, - "year": 1, - "sem": "1" - }, - { - "id": "AGRI 31", - "label": "(Lab) 3 MATH", - "units": 27, - "year": 1, - "sem": "1" - }, - { - "id": "ETHICS 1", - "label": "3 GE", - "units": 2, - "year": 1, - "sem": "1" - }, - { - "id": "CHEM 18", - "label": "3 PHYS", - "units": 51, - "year": 1, - "sem": "1" - }, - { - "id": "HK 12", - "label": "or", - "units": 13, - "year": 1, - "sem": "1" - }, - { - "id": "CHEM 40.1", - "label": "(Lab) 2 MGT", - "units": 101, - "year": 2, - "sem": "1" - }, - { - "id": "ABME 10", - "label": "3 CHEM", - "units": 160, - "year": 2, - "sem": "1" - }, - { - "id": "NSTP 1", - "label": "-3 NSTP", - "units": 2, - "year": 2, - "sem": "1" - }, - { - "id": "COMM 10", - "label": "3 PI", - "units": 10, - "year": 3, - "sem": "1" - }, - { - "id": "FST 102", - "label": "(Lab) 4 AGRI", - "units": 171, - "year": 3, - "sem": "1" - }, - { - "id": "FST 140", - "label": "(Lab) 3 FST", - "units": 111, - "year": 3, - "sem": "1" - }, - { - "id": "FST 167", - "label": "(Lab) 3 FST", - "units": 200, - "year": 3, - "sem": "1" - }, - { - "id": "GE 3", - "label": "3 Elective", - "units": 1, - "year": 4, - "sem": "1" - }, - { - "id": "FST 165", - "label": "3 Elective", - "units": 2, - "year": 4, - "sem": "1" - }, - { - "id": "FST 170", - "label": "3 FST", - "units": 147, - "year": 4, - "sem": "1" - }, - { - "id": "ABME 172", - "label": "3 FST", - "units": 175, - "year": 4, - "sem": "1" - }, - { - "id": "FST 200", - "label": "3 FST", - "units": 199, - "year": 4, - "sem": "1" - } - ], - "edges": [] - }, - "BS-Agricultural-and-Applied-Economics": { - "program": "BS-Agricultural-and-Applied-Economics", - "nodes": [], - "edges": [] - }, - "BS-Agribusiness-Management-Entrepreneurship": { - "program": "BS-Agribusiness-Management-Entrepreneurship", - "nodes": [], - "edges": [] - }, - "BS-Economics": { - "program": "BS-Economics", - "nodes": [ - { - "id": "ECON 198", - "label": "Internship", - "units": 3, - "year": 3, - "sem": "midyear" - } - ], - "edges": [] - }, - "BS-Chemical-Engineering": { - "program": "BS-Chemical-Engineering", - "nodes": [], - "edges": [] - }, - "BS-Civil-Engineering": { - "program": "BS-Civil-Engineering", - "nodes": [], - "edges": [] - }, - "BS-Electrical-Engineering": { - "program": "BS-Electrical-Engineering", - "nodes": [], - "edges": [] - }, - "BS-Industrial-Engineering": { - "program": "BS-Industrial-Engineering", - "nodes": [], - "edges": [] - }, - "BS-Mechanical-Engineering": { - "program": "BS-Mechanical-Engineering", - "nodes": [], - "edges": [] - }, - "BS-Forestry": { - "program": "BS-Forestry", - "nodes": [], - "edges": [] - }, - "BS-Human-Ecology": { - "program": "BS-Human-Ecology", - "nodes": [ - { - "id": "3 GE Elective", - "label": "3 GE Elective", - "units": 3, - "year": 2, - "sem": "midyear" - } - ], - "edges": [] - }, - "BS-Nutrition": { - "program": "BS-Nutrition", - "nodes": [], - "edges": [] - }, - "Doctor-of-Veterinary-Medicine": { - "program": "Doctor-of-Veterinary-Medicine", - "nodes": [], - "edges": [] - }, - "BS-Development-Communication": { - "program": "BS-Development-Communication", - "nodes": [ - { - "id": "3 Elective (Technical)", - "label": "3 Elective (Technical)", - "units": 3, - "year": 2, - "sem": "2" - }, - { - "id": "3 Elective (Technical)", - "label": "3 Elective (Technical)", - "units": 3, - "year": 2, - "sem": "2" - }, - { - "id": "3 Elective (Technical)", - "label": "3 Elective (Technical)", - "units": 3, - "year": 3, - "sem": "2" - }, - { - "id": "3 Elective (SOSC)", - "label": "3 Elective (SOSC)", - "units": 3, - "year": 3, - "sem": "2" - }, - { - "id": "3 Elective (SOSC)", - "label": "3 Elective (SOSC)", - "units": 3, - "year": 4, - "sem": "2" - } - ], - "edges": [] - } -}; - -if (typeof module !== 'undefined' && module.exports) { - module.exports = { UPLB_CURRICULUM_GRAPHS }; -} diff --git a/extension/src/curriculum_temp.js b/extension/src/curriculum_temp.js deleted file mode 100644 index 38cfed5..0000000 --- a/extension/src/curriculum_temp.js +++ /dev/null @@ -1,1425 +0,0 @@ -// extension/src/curriculum_temp.js - -// UPLB Curriculum Database -// Complete undergraduate programs for University of the Philippines Los Baños -// NOTE: This is UPLB only - not UP Diliman, UP Manila, UP Baguio, etc. - -const UPLB_PROGRAMS = { - // ============================================================================ - // COLLEGE OF ARTS AND SCIENCES (CAS) - // ============================================================================ - - "BSCS": { - code: "BSCS", - name: "BS Computer Science", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "CMSC 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "CMSC 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "CMSC 12", title: "Foundations of Computer Science", units: 3 }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "CMSC 22", title: "Object-Oriented Programming", units: 3 }, - { code: "CMSC 23", title: "Mobile Computing", units: 3 }, - { code: "CMSC 56", title: "Discrete Mathematical Structures in Computer Science I", units: 3 }, - { code: "CMSC 57", title: "Discrete Mathematical Structures in Computer Science II", units: 3 }, - { code: "CMSC 100", title: "Web Programming", units: 3 }, - { code: "CMSC 123", title: "Data Structures", units: 3 }, - { code: "CMSC 124", title: "Design and Implementation of Programming Languages", units: 3 }, - { code: "CMSC 125", title: "Operating Systems", units: 3 }, - { code: "CMSC 127", title: "File Processing and Database Systems", units: 3 }, - { code: "CMSC 128", title: "Introduction to Software Engineering", units: 3 }, - { code: "CMSC 130", title: "Logic Design and Digital Computer Circuits", units: 3 }, - { code: "CMSC 131", title: "Introduction to Computer Organization and Machine Level Programming", units: 3 }, - { code: "CMSC 132", title: "Computer Architecture", units: 3 }, - { code: "CMSC 137", title: "Data Communications and Networking", units: 3 }, - { code: "CMSC 141", title: "Automata and Language Theory", units: 3 }, - { code: "CMSC 142", title: "Design and Analysis of Algorithms", units: 3 }, - { code: "CMSC 150", title: "Numerical and Symbolic Computation", units: 3 }, - { code: "CMSC 170", title: "Introduction to Artificial Intelligence", units: 3 }, - { code: "CMSC 173", title: "Human Computer Interaction", units: 3 }, - { code: "CMSC 180", title: "Introduction to Parallel Computing", units: 3 }, - { code: "CMSC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "CMSC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "CMSC 12", "CMSC 21", "CMSC 22", "CMSC 23", - "CMSC 56", "CMSC 57", "CMSC 100", "CMSC 123", "CMSC 124", "CMSC 125", - "CMSC 127", "CMSC 128", "CMSC 130", "CMSC 131", "CMSC 132", "CMSC 137", - "CMSC 141", "CMSC 142", "CMSC 150", "CMSC 170", "CMSC 173", "CMSC 180", - "STAT 101", "ENG 10" - ] - }, - - "BSMATH": { - code: "BSMATH", - name: "BS Mathematics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "MATH 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "MATH 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 38", title: "Mathematical Analysis III", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 100.1", title: "Abstract Algebra I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "MATH 121.1", title: "Real Analysis I", units: 3 }, - { code: "MATH 122.1", title: "Complex Analysis I", units: 3 }, - { code: "MATH 171.1", title: "Linear Programming", units: 3 }, - { code: "MATH 176", title: "Numerical Analysis I", units: 3 }, - { code: "MATH 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "MATH 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 38", "MATH 40", - "MATH 100.1", "MATH 114", "MATH 121.1", "MATH 122.1", "MATH 171.1", "MATH 176", - "CMSC 21", "STAT 101", "ENG 10" - ] - }, - - "BSAPMATH": { - code: "BSAPMATH", - name: "BS Applied Mathematics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AMAT 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "AMAT 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 38", title: "Mathematical Analysis III", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "AMAT 131", title: "Mathematical Modeling", units: 3 }, - { code: "AMAT 151", title: "Operations Research I", units: 3 }, - { code: "AMAT 152", title: "Operations Research II", units: 3 }, - { code: "MATH 176", title: "Numerical Analysis I", units: 3 }, - { code: "AMAT 167", title: "Mathematical Finance", units: 3 }, - { code: "AMAT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AMAT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 38", "MATH 40", - "MATH 114", "AMAT 131", "AMAT 151", "AMAT 152", "MATH 176", "AMAT 167", - "CMSC 21", "STAT 101", "ENG 10" - ] - }, - - "BSSTAT": { - code: "BSSTAT", - name: "BS Statistics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "STAT 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "STAT 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "STAT 115", title: "Probability Theory", units: 3 }, - { code: "STAT 116", title: "Statistical Inference I", units: 3 }, - { code: "STAT 117", title: "Statistical Inference II", units: 3 }, - { code: "STAT 121", title: "Regression Analysis", units: 3 }, - { code: "STAT 126", title: "Design and Analysis of Experiments", units: 3 }, - { code: "STAT 131", title: "Sample Survey Designs", units: 3 }, - { code: "STAT 136", title: "Nonparametric Statistical Methods", units: 3 }, - { code: "STAT 137", title: "Multivariate Analysis", units: 3 }, - { code: "STAT 138", title: "Time Series Analysis", units: 3 }, - { code: "STAT 145", title: "Stochastic Processes", units: 3 }, - { code: "STAT 150", title: "Statistical Computing", units: 3 }, - { code: "STAT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "STAT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CMSC 21", title: "Fundamentals of Programming", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 40", "STAT 101", "STAT 115", "STAT 116", - "STAT 117", "STAT 121", "STAT 126", "STAT 131", "STAT 136", "STAT 137", - "STAT 138", "STAT 145", "STAT 150", "CMSC 21", "ENG 10" - ] - }, - - "BSMST": { - code: "BSMST", - name: "BS Mathematics and Science Teaching", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 150, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 40", title: "Linear Algebra", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "EDUC 100", title: "The Teaching Profession", units: 3 }, - { code: "EDUC 101", title: "The Child and Adolescent Learner", units: 3 }, - { code: "EDUC 102", title: "Facilitating Learning", units: 3 }, - { code: "EDUC 103", title: "Curriculum Development", units: 3 }, - { code: "EDUC 110", title: "Principles of Teaching", units: 3 }, - { code: "EDUC 160", title: "Educational Assessment", units: 3 }, - { code: "EDUC 190", title: "Practice Teaching", units: 6, gradeType: "S/U" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATH 27", "MATH 28", "MATH 36", "MATH 37", "MATH 40", "MATH 114", - "STAT 101", "EDUC 100", "EDUC 101", "EDUC 102", "EDUC 103", "EDUC 110", - "EDUC 160", "EDUC 190", "ENG 10" - ] - }, - - "BSBIO": { - code: "BSBIO", - name: "BS Biology", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "BIO 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "BIO 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "BIO 2", title: "General Biology II", units: 3 }, - { code: "BIO 30", title: "Cell Biology", units: 4 }, - { code: "BIO 31", title: "Genetics", units: 4 }, - { code: "BIO 100", title: "Taxonomy", units: 3 }, - { code: "BIO 110", title: "Developmental Biology", units: 4 }, - { code: "BIO 120", title: "Ecology", units: 4 }, - { code: "BIO 130", title: "Molecular Biology", units: 4 }, - { code: "BIO 140", title: "Physiology", units: 4 }, - { code: "BIO 150", title: "Evolution", units: 3 }, - { code: "BIO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "BIO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "BIO 1", "BIO 2", "BIO 30", "BIO 31", "BIO 100", "BIO 110", "BIO 120", - "BIO 130", "BIO 140", "BIO 150", "CHEM 16", "CHEM 17", "CHEM 40", - "CHEM 41", "CHEM 31", "MATH 27", "PHYSICS 71", "PHYSICS 72", "STAT 101", "ENG 10" - ] - }, - - "BSCHEM": { - code: "BSCHEM", - name: "BS Chemistry", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "CHEM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "CHEM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 27", title: "Analytical Chemistry II", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 110", title: "Inorganic Chemistry", units: 3 }, - { code: "CHEM 120", title: "Physical Chemistry I", units: 4 }, - { code: "CHEM 121", title: "Physical Chemistry II", units: 4 }, - { code: "CHEM 130", title: "Instrumental Methods of Analysis", units: 4 }, - { code: "CHEM 140", title: "Biochemistry I", units: 4 }, - { code: "CHEM 141", title: "Biochemistry II", units: 4 }, - { code: "CHEM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "CHEM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CHEM 16", "CHEM 17", "CHEM 26", "CHEM 27", "CHEM 40", "CHEM 41", - "CHEM 110", "CHEM 120", "CHEM 121", "CHEM 130", "CHEM 140", "CHEM 141", - "MATH 27", "MATH 28", "PHYSICS 71", "PHYSICS 72", "STAT 101", "ENG 10" - ] - }, - - "BSAPPHY": { - code: "BSAPPHY", - name: "BS Applied Physics", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 155, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "PHYSICS 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "PHYSICS 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "PHYSICS 73", title: "Elementary Physics III", units: 4 }, - { code: "PHYSICS 101", title: "Mathematical Methods of Physics I", units: 3 }, - { code: "PHYSICS 102", title: "Mathematical Methods of Physics II", units: 3 }, - { code: "PHYSICS 111", title: "Classical Mechanics", units: 3 }, - { code: "PHYSICS 121", title: "Electricity and Magnetism", units: 3 }, - { code: "PHYSICS 131", title: "Introduction to Quantum Mechanics", units: 3 }, - { code: "PHYSICS 141", title: "Thermodynamics and Statistical Mechanics", units: 3 }, - { code: "PHYSICS 151", title: "Electronics", units: 4 }, - { code: "PHYSICS 161", title: "Optics", units: 3 }, - { code: "PHYSICS 171", title: "Solid State Physics", units: 3 }, - { code: "PHYSICS 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "PHYSICS 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 37", title: "Mathematical Analysis II", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "PHYSICS 71", "PHYSICS 72", "PHYSICS 73", "PHYSICS 101", "PHYSICS 102", - "PHYSICS 111", "PHYSICS 121", "PHYSICS 131", "PHYSICS 141", "PHYSICS 151", - "PHYSICS 161", "PHYSICS 171", "MATH 27", "MATH 28", "MATH 36", "MATH 37", - "MATH 114", "ENG 10" - ] - }, - - "ABCOMM": { - code: "ABCOMM", - name: "AB Communication Arts", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "COMM 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "COMM 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "COMM 10", title: "Introduction to Communication", units: 3 }, - { code: "COMM 20", title: "Principles of Speech Communication", units: 3 }, - { code: "COMM 30", title: "Writing for Various Media", units: 3 }, - { code: "COMM 100", title: "Theories of Communication", units: 3 }, - { code: "COMM 110", title: "Rhetorical Criticism", units: 3 }, - { code: "COMM 120", title: "Intercultural Communication", units: 3 }, - { code: "COMM 130", title: "Organizational Communication", units: 3 }, - { code: "COMM 140", title: "Mass Communication", units: 3 }, - { code: "COMM 150", title: "Communication Research", units: 3 }, - { code: "COMM 160", title: "Seminar in Communication Arts", units: 3 }, - { code: "COMM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "COMM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - { code: "ENG 11", title: "English for Academic Writing", units: 3 }, - { code: "FIL 40", title: "Panitikang Filipino", units: 3 }, - ], - requiredCodes: [ - "COMM 10", "COMM 20", "COMM 30", "COMM 100", "COMM 110", "COMM 120", - "COMM 130", "COMM 140", "COMM 150", "COMM 160", "ENG 10", "ENG 11", "FIL 40" - ] - }, - - "ABSOCIO": { - code: "ABSOCIO", - name: "AB Sociology", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "SOC 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "SOC 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "SOC 10", title: "Introduction to Sociology", units: 3 }, - { code: "SOC 100", title: "Classical Sociological Theory", units: 3 }, - { code: "SOC 101", title: "Contemporary Sociological Theory", units: 3 }, - { code: "SOC 110", title: "Social Research Methods I", units: 3 }, - { code: "SOC 111", title: "Social Research Methods II", units: 3 }, - { code: "SOC 120", title: "Sociology of Philippine Society", units: 3 }, - { code: "SOC 130", title: "Rural Sociology", units: 3 }, - { code: "SOC 140", title: "Urban Sociology", units: 3 }, - { code: "SOC 150", title: "Social Stratification", units: 3 }, - { code: "SOC 160", title: "Sociology of Development", units: 3 }, - { code: "SOC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "SOC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "SOC 10", "SOC 100", "SOC 101", "SOC 110", "SOC 111", "SOC 120", - "SOC 130", "SOC 140", "SOC 150", "SOC 160", "STAT 101", "ENG 10" - ] - }, - - "ABPHILO": { - code: "ABPHILO", - name: "AB Philosophy", - college: "CAS", - collegeName: "College of Arts and Sciences", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "PHILO 200", freeElectiveUnits: 15 }, - sp: { name: "Special Problem Track", code: "PHILO 190", freeElectiveUnits: 18 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "PHILO 1", title: "Introduction to Philosophy", units: 3 }, - { code: "PHILO 10", title: "Logic", units: 3 }, - { code: "PHILO 100", title: "Ancient Philosophy", units: 3 }, - { code: "PHILO 101", title: "Medieval Philosophy", units: 3 }, - { code: "PHILO 102", title: "Modern Philosophy", units: 3 }, - { code: "PHILO 103", title: "Contemporary Philosophy", units: 3 }, - { code: "PHILO 110", title: "Ethics", units: 3 }, - { code: "PHILO 120", title: "Metaphysics", units: 3 }, - { code: "PHILO 130", title: "Epistemology", units: 3 }, - { code: "PHILO 140", title: "Philosophy of Mind", units: 3 }, - { code: "PHILO 150", title: "Filipino Philosophy", units: 3 }, - { code: "PHILO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "PHILO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "PHILO 1", "PHILO 10", "PHILO 100", "PHILO 101", "PHILO 102", "PHILO 103", - "PHILO 110", "PHILO 120", "PHILO 130", "PHILO 140", "PHILO 150", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF AGRICULTURE AND FOOD SCIENCE (CAFS) - // ============================================================================ - - "BSAGRI": { - code: "BSAGRI", - name: "BS Agriculture", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGRI 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGRI 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "AGRI 111", title: "Crop Science", units: 3 }, - { code: "AGRI 112", title: "Soil Science", units: 4 }, - { code: "AGRI 120", title: "Plant Pathology", units: 3 }, - { code: "AGRI 121", title: "Agricultural Entomology", units: 3 }, - { code: "AGRI 130", title: "Animal Science", units: 4 }, - { code: "AGRI 131", title: "Animal Nutrition", units: 3 }, - { code: "AGRI 140", title: "Agricultural Economics", units: 3 }, - { code: "AGRI 150", title: "Farm Management", units: 3 }, - { code: "AGRI 160", title: "Agricultural Extension", units: 3 }, - { code: "AGRI 170", title: "Seed Technology", units: 3 }, - { code: "AGRI 180", title: "Irrigation and Drainage", units: 3 }, - { code: "AGRI 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGRI 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGRI 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "AGRI 10", "AGRI 111", "AGRI 112", "AGRI 120", "AGRI 121", "AGRI 130", - "AGRI 131", "AGRI 140", "AGRI 150", "AGRI 160", "AGRI 170", "AGRI 180", - "AGRI 191", "CHEM 16", "CHEM 17", "BIO 1", "STAT 101", "ENG 10" - ] - }, - - "BSABIO": { - code: "BSABIO", - name: "BS Agricultural Biotechnology", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ABIO 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ABIO 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ABIO 10", title: "Introduction to Agricultural Biotechnology", units: 3 }, - { code: "ABIO 100", title: "Principles of Biotechnology", units: 3 }, - { code: "ABIO 110", title: "Plant Biotechnology", units: 4 }, - { code: "ABIO 120", title: "Animal Biotechnology", units: 4 }, - { code: "ABIO 130", title: "Microbial Biotechnology", units: 4 }, - { code: "ABIO 140", title: "Molecular Biology Techniques", units: 4 }, - { code: "ABIO 150", title: "Genetic Engineering", units: 3 }, - { code: "ABIO 160", title: "Bioinformatics", units: 3 }, - { code: "ABIO 170", title: "Biosafety and Bioethics", units: 3 }, - { code: "ABIO 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ABIO 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "ABIO 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "BIO 31", title: "Genetics", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ABIO 10", "ABIO 100", "ABIO 110", "ABIO 120", "ABIO 130", "ABIO 140", - "ABIO 150", "ABIO 160", "ABIO 170", "ABIO 191", "CHEM 16", "CHEM 17", - "CHEM 40", "CHEM 31", "BIO 1", "BIO 31", "STAT 101", "ENG 10" - ] - }, - - "BSFST": { - code: "BSFST", - name: "BS Food Science and Technology", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 165, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "FST 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "FST 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "FST 10", title: "Introduction to Food Science and Technology", units: 3 }, - { code: "FST 100", title: "Food Chemistry", units: 4 }, - { code: "FST 101", title: "Food Analysis", units: 4 }, - { code: "FST 110", title: "Food Microbiology", units: 4 }, - { code: "FST 120", title: "Food Processing I", units: 4 }, - { code: "FST 121", title: "Food Processing II", units: 4 }, - { code: "FST 130", title: "Food Engineering", units: 3 }, - { code: "FST 140", title: "Food Quality Assurance", units: 3 }, - { code: "FST 150", title: "Sensory Evaluation of Foods", units: 3 }, - { code: "FST 160", title: "Food Packaging", units: 3 }, - { code: "FST 170", title: "Food Product Development", units: 3 }, - { code: "FST 180", title: "Food Laws and Regulations", units: 2 }, - { code: "FST 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "FST 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "FST 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "FST 10", "FST 100", "FST 101", "FST 110", "FST 120", "FST 121", - "FST 130", "FST 140", "FST 150", "FST 160", "FST 170", "FST 180", "FST 191", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "STAT 101", "ENG 10" - ] - }, - - "BSACHEM": { - code: "BSACHEM", - name: "BS Agricultural Chemistry", - college: "CAFS", - collegeName: "College of Agriculture and Food Science", - available: true, - totalUnitsRequired: 160, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGCHEM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGCHEM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "AGCHEM 10", title: "Introduction to Agricultural Chemistry", units: 3 }, - { code: "AGCHEM 100", title: "Soil Chemistry", units: 4 }, - { code: "AGCHEM 110", title: "Plant Biochemistry", units: 4 }, - { code: "AGCHEM 120", title: "Food Chemistry", units: 4 }, - { code: "AGCHEM 130", title: "Pesticide Chemistry", units: 3 }, - { code: "AGCHEM 140", title: "Environmental Chemistry", units: 3 }, - { code: "AGCHEM 150", title: "Instrumental Analysis", units: 4 }, - { code: "AGCHEM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGCHEM 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGCHEM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 41", title: "Organic Chemistry II", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "AGCHEM 10", "AGCHEM 100", "AGCHEM 110", "AGCHEM 120", "AGCHEM 130", - "AGCHEM 140", "AGCHEM 150", "AGCHEM 191", "CHEM 16", "CHEM 17", "CHEM 26", - "CHEM 40", "CHEM 41", "CHEM 31", "MATH 27", "PHYSICS 71", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF ENGINEERING AND AGRO-INDUSTRIAL TECHNOLOGY (CEAT) - // ============================================================================ - - "BSABE": { - code: "BSABE", - name: "BS Agricultural and Biosystems Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "ABE 21", title: "Engineering Drawing", units: 2 }, - { code: "ABE 31", title: "Computer-Aided Drafting", units: 2 }, - { code: "ABE 51", title: "Surveying", units: 3 }, - { code: "ABE 100", title: "Principles of Agricultural Engineering", units: 3 }, - { code: "ABE 111", title: "Farm Power and Machinery", units: 4 }, - { code: "ABE 121", title: "Soil and Water Conservation Engineering", units: 4 }, - { code: "ABE 131", title: "Irrigation and Drainage Engineering", units: 4 }, - { code: "ABE 141", title: "Agricultural Structures", units: 4 }, - { code: "ABE 151", title: "Post-Harvest Engineering", units: 4 }, - { code: "ABE 161", title: "Food Engineering", units: 4 }, - { code: "ABE 171", title: "Biosystems Engineering", units: 3 }, - { code: "ABE 181", title: "Environmental Engineering", units: 3 }, - { code: "ABE 190", title: "Engineering Design Project", units: 3 }, - { code: "ABE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "ABE 200", title: "Undergraduate Thesis", units: 6 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ABE 21", "ABE 31", "ABE 51", "ABE 100", "ABE 111", "ABE 121", "ABE 131", - "ABE 141", "ABE 151", "ABE 161", "ABE 171", "ABE 181", "ABE 190", "ABE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSCHE": { - code: "BSCHE", - name: "BS Chemical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "CHE 21", title: "Material and Energy Balances", units: 4 }, - { code: "CHE 31", title: "Fluid Mechanics", units: 3 }, - { code: "CHE 41", title: "Heat Transfer", units: 3 }, - { code: "CHE 51", title: "Mass Transfer Operations I", units: 4 }, - { code: "CHE 52", title: "Mass Transfer Operations II", units: 4 }, - { code: "CHE 101", title: "Chemical Engineering Thermodynamics I", units: 3 }, - { code: "CHE 102", title: "Chemical Engineering Thermodynamics II", units: 3 }, - { code: "CHE 111", title: "Chemical Reaction Engineering", units: 4 }, - { code: "CHE 121", title: "Process Control", units: 3 }, - { code: "CHE 131", title: "Chemical Engineering Plant Design", units: 4 }, - { code: "CHE 141", title: "Biochemical Engineering", units: 3 }, - { code: "CHE 151", title: "Environmental Engineering", units: 3 }, - { code: "CHE 190", title: "Engineering Design Project", units: 3 }, - { code: "CHE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 26", title: "Analytical Chemistry I", units: 5 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 120", title: "Physical Chemistry I", units: 4 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CHE 21", "CHE 31", "CHE 41", "CHE 51", "CHE 52", "CHE 101", "CHE 102", - "CHE 111", "CHE 121", "CHE 131", "CHE 141", "CHE 151", "CHE 190", "CHE 191", - "CHEM 16", "CHEM 17", "CHEM 26", "CHEM 40", "CHEM 120", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", "ENG 10" - ] - }, - - "BSCE": { - code: "BSCE", - name: "BS Civil Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "CE 21", title: "Engineering Drawing", units: 2 }, - { code: "CE 31", title: "Surveying I", units: 3 }, - { code: "CE 32", title: "Surveying II", units: 3 }, - { code: "CE 41", title: "Engineering Mechanics - Statics", units: 3 }, - { code: "CE 42", title: "Engineering Mechanics - Dynamics", units: 3 }, - { code: "CE 51", title: "Mechanics of Deformable Bodies", units: 4 }, - { code: "CE 101", title: "Structural Theory I", units: 4 }, - { code: "CE 102", title: "Structural Theory II", units: 4 }, - { code: "CE 111", title: "Reinforced Concrete Design", units: 4 }, - { code: "CE 112", title: "Steel Design", units: 4 }, - { code: "CE 121", title: "Geotechnical Engineering I", units: 4 }, - { code: "CE 122", title: "Geotechnical Engineering II", units: 4 }, - { code: "CE 131", title: "Hydraulics", units: 4 }, - { code: "CE 132", title: "Hydrology", units: 3 }, - { code: "CE 141", title: "Highway and Transportation Engineering", units: 4 }, - { code: "CE 151", title: "Construction Methods and Management", units: 3 }, - { code: "CE 161", title: "Engineering Economy", units: 3 }, - { code: "CE 190", title: "Civil Engineering Design", units: 4 }, - { code: "CE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "CE 21", "CE 31", "CE 32", "CE 41", "CE 42", "CE 51", "CE 101", "CE 102", - "CE 111", "CE 112", "CE 121", "CE 122", "CE 131", "CE 132", "CE 141", - "CE 151", "CE 161", "CE 190", "CE 191", "MATH 27", "MATH 28", "MATH 36", - "MATH 114", "PHYSICS 71", "PHYSICS 72", "CHEM 16", "ENG 10" - ] - }, - - "BSEE": { - code: "BSEE", - name: "BS Electrical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "EE 21", title: "Electrical Circuits I", units: 4 }, - { code: "EE 22", title: "Electrical Circuits II", units: 4 }, - { code: "EE 31", title: "Electronics I", units: 4 }, - { code: "EE 32", title: "Electronics II", units: 4 }, - { code: "EE 41", title: "Digital Systems", units: 4 }, - { code: "EE 51", title: "Electromagnetic Theory", units: 3 }, - { code: "EE 101", title: "Electrical Machines I", units: 4 }, - { code: "EE 102", title: "Electrical Machines II", units: 4 }, - { code: "EE 111", title: "Power Systems I", units: 4 }, - { code: "EE 112", title: "Power Systems II", units: 4 }, - { code: "EE 121", title: "Control Systems", units: 4 }, - { code: "EE 131", title: "Communications I", units: 4 }, - { code: "EE 141", title: "Microprocessor Systems", units: 4 }, - { code: "EE 151", title: "Instrumentation and Measurements", units: 3 }, - { code: "EE 190", title: "Electrical Engineering Design", units: 4 }, - { code: "EE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "EE 21", "EE 22", "EE 31", "EE 32", "EE 41", "EE 51", "EE 101", "EE 102", - "EE 111", "EE 112", "EE 121", "EE 131", "EE 141", "EE 151", "EE 190", "EE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSIE": { - code: "BSIE", - name: "BS Industrial Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "IE 21", title: "Engineering Drawing", units: 2 }, - { code: "IE 31", title: "Work Study and Motion Analysis", units: 3 }, - { code: "IE 41", title: "Engineering Economy", units: 3 }, - { code: "IE 51", title: "Engineering Statistics", units: 3 }, - { code: "IE 101", title: "Operations Research I", units: 3 }, - { code: "IE 102", title: "Operations Research II", units: 3 }, - { code: "IE 111", title: "Production Planning and Control", units: 4 }, - { code: "IE 121", title: "Facilities Planning and Design", units: 4 }, - { code: "IE 131", title: "Quality Control", units: 3 }, - { code: "IE 141", title: "Supply Chain Management", units: 3 }, - { code: "IE 151", title: "Systems Simulation", units: 3 }, - { code: "IE 161", title: "Ergonomics", units: 3 }, - { code: "IE 171", title: "Engineering Management", units: 3 }, - { code: "IE 190", title: "Industrial Engineering Design", units: 4 }, - { code: "IE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "IE 21", "IE 31", "IE 41", "IE 51", "IE 101", "IE 102", "IE 111", "IE 121", - "IE 131", "IE 141", "IE 151", "IE 161", "IE 171", "IE 190", "IE 191", - "MATH 27", "MATH 28", "MATH 36", "MATH 114", "PHYSICS 71", "PHYSICS 72", - "CHEM 16", "ENG 10" - ] - }, - - "BSME": { - code: "BSME", - name: "BS Mechanical Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 180, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "ME 21", title: "Engineering Drawing", units: 2 }, - { code: "ME 31", title: "Engineering Mechanics - Statics", units: 3 }, - { code: "ME 32", title: "Engineering Mechanics - Dynamics", units: 3 }, - { code: "ME 41", title: "Mechanics of Materials", units: 4 }, - { code: "ME 51", title: "Thermodynamics I", units: 4 }, - { code: "ME 52", title: "Thermodynamics II", units: 4 }, - { code: "ME 101", title: "Fluid Mechanics", units: 4 }, - { code: "ME 111", title: "Machine Design I", units: 4 }, - { code: "ME 112", title: "Machine Design II", units: 4 }, - { code: "ME 121", title: "Heat Transfer", units: 4 }, - { code: "ME 131", title: "Power Plant Engineering", units: 3 }, - { code: "ME 141", title: "Refrigeration and Air Conditioning", units: 3 }, - { code: "ME 151", title: "Manufacturing Processes", units: 4 }, - { code: "ME 161", title: "Dynamics of Machinery", units: 3 }, - { code: "ME 171", title: "Control Systems", units: 3 }, - { code: "ME 190", title: "Mechanical Engineering Design", units: 4 }, - { code: "ME 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 36", title: "Mathematical Analysis I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ME 21", "ME 31", "ME 32", "ME 41", "ME 51", "ME 52", "ME 101", "ME 111", - "ME 112", "ME 121", "ME 131", "ME 141", "ME 151", "ME 161", "ME 171", - "ME 190", "ME 191", "MATH 27", "MATH 28", "MATH 36", "MATH 114", - "PHYSICS 71", "PHYSICS 72", "CHEM 16", "ENG 10" - ] - }, - - "BSMATE": { - code: "BSMATE", - name: "BS Materials Engineering", - college: "CEAT", - collegeName: "College of Engineering and Agro-Industrial Technology", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "MATE 21", title: "Engineering Drawing", units: 2 }, - { code: "MATE 31", title: "Introduction to Materials Science", units: 3 }, - { code: "MATE 41", title: "Structure of Materials", units: 4 }, - { code: "MATE 101", title: "Physical Metallurgy", units: 4 }, - { code: "MATE 111", title: "Mechanical Behavior of Materials", units: 4 }, - { code: "MATE 121", title: "Ceramic Materials", units: 3 }, - { code: "MATE 131", title: "Polymer Materials", units: 3 }, - { code: "MATE 141", title: "Electronic Materials", units: 3 }, - { code: "MATE 151", title: "Corrosion Engineering", units: 3 }, - { code: "MATE 161", title: "Materials Characterization", units: 4 }, - { code: "MATE 171", title: "Materials Processing", units: 4 }, - { code: "MATE 181", title: "Materials Selection and Design", units: 3 }, - { code: "MATE 190", title: "Materials Engineering Design", units: 4 }, - { code: "MATE 191", title: "Engineering Internship", units: 3, gradeType: "S/U" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 28", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "MATH 114", title: "Differential Equations", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "PHYSICS 72", title: "Elementary Physics II", units: 4 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "MATE 21", "MATE 31", "MATE 41", "MATE 101", "MATE 111", "MATE 121", - "MATE 131", "MATE 141", "MATE 151", "MATE 161", "MATE 171", "MATE 181", - "MATE 190", "MATE 191", "MATH 27", "MATH 28", "MATH 114", - "PHYSICS 71", "PHYSICS 72", "CHEM 16", "CHEM 17", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF ECONOMICS AND MANAGEMENT (CEM) - // ============================================================================ - - "BSECON": { - code: "BSECON", - name: "BS Economics", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 140, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ECON 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ECON 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "ECON 100", title: "Microeconomic Theory", units: 3 }, - { code: "ECON 101", title: "Macroeconomic Theory", units: 3 }, - { code: "ECON 110", title: "Mathematical Economics", units: 3 }, - { code: "ECON 111", title: "Econometrics I", units: 3 }, - { code: "ECON 112", title: "Econometrics II", units: 3 }, - { code: "ECON 120", title: "Development Economics", units: 3 }, - { code: "ECON 130", title: "Public Finance", units: 3 }, - { code: "ECON 140", title: "International Economics", units: 3 }, - { code: "ECON 150", title: "Monetary Economics", units: 3 }, - { code: "ECON 160", title: "Labor Economics", units: 3 }, - { code: "ECON 170", title: "History of Economic Thought", units: 3 }, - { code: "ECON 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ECON 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "ECON 100", "ECON 101", "ECON 110", "ECON 111", - "ECON 112", "ECON 120", "ECON 130", "ECON 140", "ECON 150", "ECON 160", - "ECON 170", "MATH 27", "STAT 101", "ENG 10" - ] - }, - - "BSAE": { - code: "BSAE", - name: "BS Agricultural Economics", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "AGEC 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "AGEC 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "AGEC 100", title: "Microeconomic Theory for Agricultural Economics", units: 3 }, - { code: "AGEC 101", title: "Macroeconomic Theory for Agricultural Economics", units: 3 }, - { code: "AGEC 110", title: "Agricultural Production Economics", units: 3 }, - { code: "AGEC 120", title: "Agricultural Marketing", units: 3 }, - { code: "AGEC 130", title: "Agricultural Finance", units: 3 }, - { code: "AGEC 140", title: "Agricultural Policy", units: 3 }, - { code: "AGEC 150", title: "Agricultural Development", units: 3 }, - { code: "AGEC 160", title: "Natural Resource Economics", units: 3 }, - { code: "AGEC 170", title: "Food and Agricultural Trade", units: 3 }, - { code: "AGEC 180", title: "Quantitative Methods in Agricultural Economics", units: 3 }, - { code: "AGEC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "AGEC 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "AGEC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "AGEC 100", "AGEC 101", "AGEC 110", "AGEC 120", - "AGEC 130", "AGEC 140", "AGEC 150", "AGEC 160", "AGEC 170", "AGEC 180", - "AGEC 191", "AGRI 10", "MATH 27", "STAT 101", "ENG 10" - ] - }, - - "BSABM": { - code: "BSABM", - name: "BS Agribusiness Management", - college: "CEM", - collegeName: "College of Economics and Management", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "ABM 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "ABM 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "ECON 11", title: "Introductory Economics (Micro)", units: 3 }, - { code: "ECON 12", title: "Introductory Economics (Macro)", units: 3 }, - { code: "ABM 100", title: "Principles of Management", units: 3 }, - { code: "ABM 110", title: "Agribusiness Management", units: 3 }, - { code: "ABM 120", title: "Agribusiness Marketing", units: 3 }, - { code: "ABM 130", title: "Agribusiness Finance", units: 3 }, - { code: "ABM 140", title: "Agribusiness Operations Management", units: 3 }, - { code: "ABM 150", title: "Agribusiness Entrepreneurship", units: 3 }, - { code: "ABM 160", title: "Agribusiness Strategic Management", units: 3 }, - { code: "ABM 170", title: "Agribusiness Supply Chain Management", units: 3 }, - { code: "ABM 180", title: "Agribusiness Information Systems", units: 3 }, - { code: "ABM 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "ABM 191", title: "On-the-Job Training", units: 3, gradeType: "S/U" }, - { code: "ABM 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "AGRI 10", title: "Introduction to Agriculture", units: 3 }, - { code: "MATH 27", title: "Analytic Geometry and Calculus I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ACCTG 11", title: "Fundamentals of Accounting", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "ECON 11", "ECON 12", "ABM 100", "ABM 110", "ABM 120", "ABM 130", - "ABM 140", "ABM 150", "ABM 160", "ABM 170", "ABM 180", "ABM 191", - "AGRI 10", "MATH 27", "STAT 101", "ACCTG 11", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF FORESTRY AND NATURAL RESOURCES (CFNR) - // ============================================================================ - - "BSFOR": { - code: "BSFOR", - name: "BS Forestry", - college: "CFNR", - collegeName: "College of Forestry and Natural Resources", - available: true, - totalUnitsRequired: 175, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "FOR 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "FOR 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "FOR 1", title: "Introduction to Forestry", units: 3 }, - { code: "FOR 21", title: "Dendrology", units: 3 }, - { code: "FOR 31", title: "Forest Mensuration", units: 4 }, - { code: "FOR 41", title: "Silvics and Silviculture", units: 4 }, - { code: "FOR 51", title: "Forest Ecology", units: 3 }, - { code: "FOR 101", title: "Forest Management", units: 4 }, - { code: "FOR 111", title: "Forest Utilization", units: 4 }, - { code: "FOR 121", title: "Forest Protection", units: 3 }, - { code: "FOR 131", title: "Wood Science and Technology", units: 4 }, - { code: "FOR 141", title: "Forest Policy and Administration", units: 3 }, - { code: "FOR 151", title: "Watershed Management", units: 3 }, - { code: "FOR 161", title: "Social Forestry", units: 3 }, - { code: "FOR 171", title: "Forest Economics", units: 3 }, - { code: "FOR 181", title: "Forest Engineering", units: 4 }, - { code: "FOR 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "FOR 191", title: "Forestry Field Practice", units: 6, gradeType: "S/U" }, - { code: "FOR 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "FOR 1", "FOR 21", "FOR 31", "FOR 41", "FOR 51", "FOR 101", "FOR 111", - "FOR 121", "FOR 131", "FOR 141", "FOR 151", "FOR 161", "FOR 171", "FOR 181", - "FOR 191", "BIO 1", "CHEM 16", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF HUMAN ECOLOGY (CHE) - // ============================================================================ - - "BSHE": { - code: "BSHE", - name: "BS Human Ecology", - college: "CHE", - collegeName: "College of Human Ecology", - available: true, - totalUnitsRequired: 145, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "HE 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "HE 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "HE 10", title: "Introduction to Human Ecology", units: 3 }, - { code: "HE 100", title: "Family Resource Management", units: 3 }, - { code: "HE 110", title: "Consumer Economics", units: 3 }, - { code: "HE 120", title: "Human Development", units: 3 }, - { code: "HE 130", title: "Family Studies", units: 3 }, - { code: "HE 140", title: "Community Development", units: 3 }, - { code: "HE 150", title: "Housing and Interior Design", units: 3 }, - { code: "HE 160", title: "Clothing and Textiles", units: 3 }, - { code: "HE 170", title: "Food and Nutrition", units: 3 }, - { code: "HE 180", title: "Research Methods in Human Ecology", units: 3 }, - { code: "HE 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "HE 191", title: "Practicum", units: 3, gradeType: "S/U" }, - { code: "HE 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "HE 10", "HE 100", "HE 110", "HE 120", "HE 130", "HE 140", "HE 150", - "HE 160", "HE 170", "HE 180", "HE 191", "STAT 101", "ENG 10" - ] - }, - - "BSNUTRI": { - code: "BSNUTRI", - name: "BS Nutrition", - college: "CHE", - collegeName: "College of Human Ecology", - available: true, - totalUnitsRequired: 165, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "NUT 200", freeElectiveUnits: 9 }, - sp: { name: "Special Problem Track", code: "NUT 190", freeElectiveUnits: 12 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "NUT 11", title: "Fundamentals of Nutrition", units: 3 }, - { code: "NUT 100", title: "Principles of Nutrition", units: 3 }, - { code: "NUT 101", title: "Advanced Nutrition", units: 3 }, - { code: "NUT 110", title: "Nutrition Assessment", units: 3 }, - { code: "NUT 120", title: "Diet Therapy", units: 4 }, - { code: "NUT 130", title: "Community Nutrition", units: 3 }, - { code: "NUT 140", title: "Food Service Management", units: 3 }, - { code: "NUT 150", title: "Nutrition Education", units: 3 }, - { code: "NUT 160", title: "Nutrition Research Methods", units: 3 }, - { code: "NUT 170", title: "Sports Nutrition", units: 3 }, - { code: "NUT 180", title: "Nutrition in the Life Cycle", units: 3 }, - { code: "NUT 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "NUT 191", title: "Dietetic Internship", units: 6, gradeType: "S/U" }, - { code: "NUT 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "NUT 11", "NUT 100", "NUT 101", "NUT 110", "NUT 120", "NUT 130", "NUT 140", - "NUT 150", "NUT 160", "NUT 170", "NUT 180", "NUT 191", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "BIO 1", "STAT 101", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF DEVELOPMENT COMMUNICATION (CDC) - // ============================================================================ - - "BSDC": { - code: "BSDC", - name: "BS Development Communication", - college: "CDC", - collegeName: "College of Development Communication", - available: true, - totalUnitsRequired: 150, - geCoursesRequired: 9, - tracks: { - thesis: { name: "Thesis Track", code: "DEVC 200", freeElectiveUnits: 12 }, - sp: { name: "Special Problem Track", code: "DEVC 190", freeElectiveUnits: 15 } - }, - defaultTrack: "sp", - majorCourses: [ - { code: "DEVC 10", title: "Introduction to Development Communication", units: 3 }, - { code: "DEVC 20", title: "Communication Theories", units: 3 }, - { code: "DEVC 30", title: "Communication Research Methods", units: 3 }, - { code: "DEVC 40", title: "Development Journalism", units: 3 }, - { code: "DEVC 50", title: "Development Broadcasting", units: 3 }, - { code: "DEVC 60", title: "Educational Communication", units: 3 }, - { code: "DEVC 100", title: "Development Communication Campaigns", units: 3 }, - { code: "DEVC 110", title: "Science Communication", units: 3 }, - { code: "DEVC 120", title: "Community Media", units: 3 }, - { code: "DEVC 130", title: "New Media and ICT4D", units: 3 }, - { code: "DEVC 140", title: "Communication Planning and Management", units: 3 }, - { code: "DEVC 150", title: "Risk and Crisis Communication", units: 3 }, - { code: "DEVC 160", title: "Environmental Communication", units: 3 }, - { code: "DEVC 190", title: "Special Problem", units: 3, track: "sp" }, - { code: "DEVC 191", title: "Academic Field Instruction", units: 6, gradeType: "S/U" }, - { code: "DEVC 200", title: "Undergraduate Thesis", units: 6, track: "thesis" }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "DEVC 10", "DEVC 20", "DEVC 30", "DEVC 40", "DEVC 50", "DEVC 60", - "DEVC 100", "DEVC 110", "DEVC 120", "DEVC 130", "DEVC 140", "DEVC 150", - "DEVC 160", "DEVC 191", "STAT 101", "ENG 10" - ] - }, - - "ASDC": { - code: "ASDC", - name: "Associate of Science in Development Communication", - college: "CDC", - collegeName: "College of Development Communication", - available: true, - totalUnitsRequired: 72, - geCoursesRequired: 6, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "DEVC 10", title: "Introduction to Development Communication", units: 3 }, - { code: "DEVC 20", title: "Communication Theories", units: 3 }, - { code: "DEVC 30", title: "Communication Research Methods", units: 3 }, - { code: "DEVC 40", title: "Development Journalism", units: 3 }, - { code: "DEVC 50", title: "Development Broadcasting", units: 3 }, - { code: "DEVC 60", title: "Educational Communication", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "DEVC 10", "DEVC 20", "DEVC 30", "DEVC 40", "DEVC 50", "DEVC 60", "ENG 10" - ] - }, - - // ============================================================================ - // COLLEGE OF VETERINARY MEDICINE (CVM) - // ============================================================================ - - "DVM": { - code: "DVM", - name: "Doctor of Veterinary Medicine", - college: "CVM", - collegeName: "College of Veterinary Medicine", - available: true, - totalUnitsRequired: 220, - geCoursesRequired: 9, - tracks: null, - defaultTrack: null, - majorCourses: [ - { code: "VET 11", title: "Veterinary Anatomy I", units: 5 }, - { code: "VET 12", title: "Veterinary Anatomy II", units: 5 }, - { code: "VET 21", title: "Veterinary Physiology I", units: 4 }, - { code: "VET 22", title: "Veterinary Physiology II", units: 4 }, - { code: "VET 31", title: "Veterinary Biochemistry", units: 5 }, - { code: "VET 41", title: "Veterinary Microbiology", units: 5 }, - { code: "VET 51", title: "Veterinary Parasitology", units: 5 }, - { code: "VET 61", title: "Veterinary Pathology", units: 5 }, - { code: "VET 71", title: "Veterinary Pharmacology", units: 4 }, - { code: "VET 101", title: "Veterinary Medicine I", units: 4 }, - { code: "VET 102", title: "Veterinary Medicine II", units: 4 }, - { code: "VET 111", title: "Veterinary Surgery I", units: 4 }, - { code: "VET 112", title: "Veterinary Surgery II", units: 4 }, - { code: "VET 121", title: "Theriogenology", units: 4 }, - { code: "VET 131", title: "Veterinary Public Health", units: 3 }, - { code: "VET 141", title: "Poultry Diseases", units: 3 }, - { code: "VET 151", title: "Swine Diseases", units: 3 }, - { code: "VET 161", title: "Ruminant Diseases", units: 3 }, - { code: "VET 171", title: "Small Animal Medicine", units: 3 }, - { code: "VET 181", title: "Veterinary Radiology", units: 3 }, - { code: "VET 190", title: "Clinical Clerkship", units: 12, gradeType: "S/U" }, - { code: "VET 200", title: "Thesis/Special Problem", units: 6 }, - { code: "CHEM 16", title: "General Chemistry I", units: 4 }, - { code: "CHEM 17", title: "General Chemistry II", units: 4 }, - { code: "CHEM 40", title: "Organic Chemistry I", units: 5 }, - { code: "CHEM 31", title: "Elementary Biochemistry", units: 5 }, - { code: "BIO 1", title: "General Biology I", units: 3 }, - { code: "PHYSICS 71", title: "Elementary Physics I", units: 4 }, - { code: "STAT 101", title: "Statistical Methods", units: 3 }, - { code: "ENG 10", title: "Writing of Scientific Papers", units: 3 }, - ], - requiredCodes: [ - "VET 11", "VET 12", "VET 21", "VET 22", "VET 31", "VET 41", "VET 51", - "VET 61", "VET 71", "VET 101", "VET 102", "VET 111", "VET 112", "VET 121", - "VET 131", "VET 141", "VET 151", "VET 161", "VET 171", "VET 181", "VET 190", - "CHEM 16", "CHEM 17", "CHEM 40", "CHEM 31", "BIO 1", "PHYSICS 71", - "STAT 101", "ENG 10" - ] - }, -}; - -// Group programs by college -const COLLEGES = { - "CAS": { name: "College of Arts and Sciences", programs: [] }, - "CAFS": { name: "College of Agriculture and Food Science", programs: [] }, - "CEAT": { name: "College of Engineering and Agro-Industrial Technology", programs: [] }, - "CFNR": { name: "College of Forestry and Natural Resources", programs: [] }, - "CEM": { name: "College of Economics and Management", programs: [] }, - "CHE": { name: "College of Human Ecology", programs: [] }, - "CVM": { name: "College of Veterinary Medicine", programs: [] }, - "CDC": { name: "College of Development Communication", programs: [] }, - "CPAf": { name: "College of Public Affairs and Development", programs: [] }, -}; - -// Populate colleges with programs -Object.values(UPLB_PROGRAMS).forEach(program => { - if (COLLEGES[program.college]) { - COLLEGES[program.college].programs.push(program); - } -}); - -// Current selected program (default to BSCS) -let currentProgram = UPLB_PROGRAMS["BSCS"]; - -// Get current curriculum based on selected program -function getCurrentCurriculum() { - return currentProgram; -} - -// Set current program -function setCurrentProgram(programCode) { - if (UPLB_PROGRAMS[programCode]) { - currentProgram = UPLB_PROGRAMS[programCode]; - return true; - } - return false; -} - -// Detect which track the student is on based on completed courses -function detectTrack(completedCourses) { - if (!currentProgram.tracks) return null; - - const codes = completedCourses.map(c => c.code.toUpperCase().trim()); - - for (const [trackKey, track] of Object.entries(currentProgram.tracks)) { - if (codes.some(code => code.startsWith(track.code.toUpperCase()))) { - return trackKey; - } - } - - return null; -} - -// Get free elective units based on track -function getFreeElectiveUnits(track) { - if (!currentProgram.tracks) return 15; // Default - - if (track && currentProgram.tracks[track]) { - return currentProgram.tracks[track].freeElectiveUnits; - } - - // Return default track's units - const defaultTrack = currentProgram.defaultTrack || Object.keys(currentProgram.tracks)[0]; - return currentProgram.tracks[defaultTrack]?.freeElectiveUnits || 15; -} - -// Check if a course is a GE course (title starts with "(GE)") -function isGECourse(courseTitle) { - return courseTitle && courseTitle.trim().startsWith("(GE)"); -} - -// Check if a course is a required major course -function isRequiredCourse(courseCode) { - if (!currentProgram.requiredCodes) return false; - - const normalized = courseCode.toUpperCase().trim(); - return currentProgram.requiredCodes.some(code => - code.toUpperCase() === normalized - ); -} - -// Get remaining required courses -function getRemainingCourses(completedCourses) { - if (!currentProgram.majorCourses) return []; - - const completedCodes = new Set( - completedCourses.map(c => c.code.toUpperCase().trim()) - ); - - return currentProgram.majorCourses.filter(course => - !completedCodes.has(course.code.toUpperCase()) - ); -} - -// Count completed GE courses -function countCompletedGE(completedCourses) { - return completedCourses.filter(c => isGECourse(c.title)).length; -} - -// Get remaining GE slots -function getRemainingGESlots(completedCourses) { - const completed = countCompletedGE(completedCourses); - const required = currentProgram.geCoursesRequired || 9; - return Math.max(0, required - completed); -} - -// For backwards compatibility -const BSCS_CURRICULUM = UPLB_PROGRAMS["BSCS"]; diff --git a/extension/src/fonts/InterVariable.woff2 b/extension/src/fonts/InterVariable.woff2 new file mode 100644 index 0000000..6d7ae57 Binary files /dev/null and b/extension/src/fonts/InterVariable.woff2 differ diff --git a/extension/src/fonts/OFL.txt b/extension/src/fonts/OFL.txt new file mode 100644 index 0000000..9105778 --- /dev/null +++ b/extension/src/fonts/OFL.txt @@ -0,0 +1,193 @@ +Fonts in this folder are licensed under the SIL Open Font License 1.1. + +InterVariable.woff2: Inter, latin subset. +Raleway-Bold.woff2: Raleway, wght 700 to 800 instance, latin subset. + +==== Inter ==== +Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +==== Raleway ==== +Copyright 2010 The Raleway Project Authors (impallari@gmail.com), with Reserved Font Name "Raleway". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/extension/src/fonts/Raleway-Bold.woff2 b/extension/src/fonts/Raleway-Bold.woff2 new file mode 100644 index 0000000..236500d Binary files /dev/null and b/extension/src/fonts/Raleway-Bold.woff2 differ diff --git a/extension/src/planner.css b/extension/src/planner.css new file mode 100644 index 0000000..0ddd56a --- /dev/null +++ b/extension/src/planner.css @@ -0,0 +1,895 @@ +/* Course planner page. Loaded after tokens.css and popup.css. */ + +body.planner-page { + width: auto; + min-height: 100vh; + font-size: 14px; + background: var(--bg-page); +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; +} + +.pl-top { + max-width: 1600px; + margin: 0 auto; + padding: 14px 24px 0; + margin-bottom: 0; +} + +.pl-top-sub { + font-family: var(--font-sans); + font-weight: 500; + font-size: 0.85rem; + color: var(--muted); + margin-left: 6px; +} + +.pl-main { + max-width: 1600px; + margin: 0 auto; + padding: 8px 24px 40px; +} + +.pl-banner { + display: flex; + gap: 8px; + align-items: flex-start; + padding: 10px 14px; + margin-bottom: 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg-elevated); + color: var(--body); +} + +.pl-banner .icon { + color: var(--info); + margin-top: 2px; +} + +/* Summary: the answer first. */ +.pl-summary { + margin: 6px 0 14px; +} + +.pl-grad { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 4px 16px; + font-family: var(--font-display); + font-weight: 800; + font-size: clamp(1.6rem, 3.2vw, 2.4rem); + line-height: 1.15; + color: var(--ink); +} + +.pl-delta { + display: inline-flex; + align-items: center; + gap: 6px; + font-family: var(--font-sans); + font-size: 1rem; + font-weight: 650; + color: var(--bad); +} + +.pl-delta.ok { + color: var(--ok); +} + +.pl-sub { + margin-top: 4px; + color: var(--muted); + font-size: 0.88rem; +} + +.pl-costs { + list-style: none; + display: flex; + flex-wrap: wrap; + gap: 6px 14px; + margin-top: 8px; + font-size: 0.85rem; + color: var(--body); +} + +.pl-costs:empty { + display: none; +} + +.pl-costs li { + display: inline-flex; + align-items: center; + gap: 5px; +} + +.pl-costs li.bad .icon { + color: var(--bad); +} + +.pl-costs li .icon { + color: var(--ok); +} + +/* Controls */ +.pl-controls { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 10px 16px; + padding: 10px 12px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); +} + +.pl-whatif { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; + flex: 1 1 auto; +} + +.pl-whatif label { + font-weight: 600; + color: var(--ink); +} + +.pl-whatif select, +.pl-menu select { + min-height: 40px; + padding: 6px 10px; + border: 1px solid var(--border-input); + border-radius: var(--radius-sm); + background: var(--bg-card); + color: var(--ink); + font: inherit; + width: auto; +} + +.pl-textbtn { + min-height: 40px; + padding: 6px 10px; + border: 0; + background: none; + color: var(--brand); + font: inherit; + font-weight: 600; + cursor: pointer; + text-decoration: underline; + text-underline-offset: 3px; +} + +.pl-menu { + position: relative; +} + +.pl-menu > summary { + list-style: none; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.pl-menu > summary::-webkit-details-marker { + display: none; +} + +.pl-menu-pop { + position: absolute; + right: 0; + top: calc(100% + 6px); + z-index: 20; + width: 290px; + display: flex; + flex-direction: column; + padding: 6px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); + box-shadow: var(--shadow-lg); +} + +.pl-menu-item { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + min-height: 44px; + justify-content: center; + padding: 8px 10px; + border: 0; + border-radius: var(--radius-sm); + background: none; + color: var(--ink); + font: inherit; + text-align: left; + cursor: pointer; +} + +.pl-menu-item:hover { + background: var(--brand-tint); +} + +.pl-menu-item small { + color: var(--muted); + font-size: 0.78rem; +} + +.pl-check { + flex-direction: row; + align-items: center; + gap: 8px; +} + +.pl-danger { + color: var(--bad); + border-top: 1px solid var(--border); + border-radius: 0 0 var(--radius-sm) var(--radius-sm); +} + +/* Legend */ +.pl-legend { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 6px; + margin: 12px 0 6px; +} + +.pl-chip { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 9px; + border: 1px solid var(--border); + border-radius: var(--radius-pill); + background: var(--bg-card); + color: var(--body); + font-size: 0.78rem; +} + +.pl-chip.crit-chip { + border: 2px solid var(--brand); + color: var(--brand); + font-weight: 600; +} + +.pl-tips { + position: relative; + margin-left: auto; +} + +.pl-tips > summary { + display: inline-flex; + align-items: center; + gap: 5px; + min-height: 32px; + padding: 0 8px; + color: var(--brand); + font-weight: 600; + font-size: 0.85rem; + cursor: pointer; + list-style: none; +} + +.pl-tips > summary::-webkit-details-marker { + display: none; +} + +.pl-tips-pop { + position: absolute; + right: 0; + top: 100%; + z-index: 20; + width: min(360px, 90vw); + padding: 12px 14px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); + box-shadow: var(--shadow-lg); + color: var(--body); + font-size: 0.85rem; +} + +.pl-tips-pop p + p { + margin-top: 8px; +} + +.pl-result { + min-height: 1.2em; + margin: 4px 0 8px; + color: var(--ink); + font-weight: 500; +} + +/* Grid */ +.pl-scroll { + position: relative; + overflow-x: auto; + padding-bottom: 8px; + border-radius: var(--radius-md); + /* scroll affordance: shadows appear only where there is more to scroll */ + background: + linear-gradient(to right, var(--bg-page) 30%, transparent) left / 40px 100% no-repeat local, + linear-gradient(to left, var(--bg-page) 30%, transparent) right / 40px 100% no-repeat local, + radial-gradient(farthest-side at 0 50%, hsl(0 0% 0% / 0.14), transparent) left / 12px 100% no-repeat scroll, + radial-gradient(farthest-side at 100% 50%, hsl(0 0% 0% / 0.14), transparent) right / 12px 100% no-repeat scroll; +} + +.pl-arrows { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + z-index: 1; + overflow: visible; +} + +.pl-grid { + display: flex; + align-items: flex-start; + gap: 22px; + width: max-content; + padding: 4px 2px; +} + +.pl-col { + width: 150px; + flex: 0 0 150px; +} + +.pl-col > details > summary { + list-style: none; + cursor: default; +} + +.pl-col > details > summary::-webkit-details-marker { + display: none; +} + +.pl-col-head { + display: flex; + flex-direction: column; + gap: 2px; + padding: 0 2px 8px; + margin-bottom: 8px; + border-bottom: 2px solid var(--border); +} + +.pl-col:not(.past) .pl-col-head { + border-bottom-color: var(--brand-line); +} + +.pl-col-name { + font-family: var(--font-display); + font-weight: 700; + font-size: 0.95rem; + color: var(--ink); + display: flex; + align-items: center; + gap: 6px; +} + +.pl-col-sub { + display: flex; + justify-content: space-between; + gap: 4px; + font-size: 0.75rem; + color: var(--muted); +} + +.pl-col-units { + display: inline-flex; + align-items: center; + gap: 3px; + font-weight: 600; + color: var(--body); +} + +.pl-col-units.warn { + color: var(--warn); +} + +.pl-tag { + padding: 1px 6px; + border-radius: var(--radius-pill); + background: var(--brand); + color: var(--on-brand); + font-family: var(--font-sans); + font-size: 0.66rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.pl-tag.now { + background: var(--info); + color: var(--bg-elevated); +} + +.pl-tag.past { + background: var(--border); + color: var(--body); +} + +.pl-cards { + display: flex; + flex-direction: column; + gap: 8px; +} + +.pl-empty { + font-size: 0.78rem; + color: var(--muted); + padding: 8px 2px; +} + +/* Course card: status = icon + word + border, never color alone. */ +.pl-card { + position: relative; + z-index: 2; + display: flex; + flex-direction: column; + gap: 2px; + padding: 7px 9px 8px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + cursor: pointer; + transition: opacity var(--transition-fast), box-shadow var(--transition-fast); +} + +.pl-card:hover { + box-shadow: var(--shadow-sm); +} + +.pl-card:focus-visible { + outline: var(--focus-ring); + outline-offset: 2px; +} + +.pl-card-top, +.pl-card-foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; +} + +.pl-status { + display: inline-flex; + align-items: center; + gap: 4px; + font-size: 0.7rem; + font-weight: 650; + text-transform: uppercase; + letter-spacing: 0.03em; + color: var(--muted); +} + +.pl-units { + font-size: 0.7rem; + font-weight: 600; + padding: 0 5px; + border-radius: var(--radius-pill); + background: var(--brand-tint); + color: var(--body); +} + +.pl-code { + font-weight: 700; + font-size: 0.9rem; + color: var(--ink); +} + +.pl-pin { + color: var(--brand); +} + +.pl-title { + font-size: 0.76rem; + line-height: 1.3; + color: var(--body); + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.pl-offer { + font-size: 0.68rem; + color: var(--muted); +} + +.pl-crit { + font-size: 0.66rem; + font-weight: 700; + color: var(--brand); + text-transform: uppercase; + letter-spacing: 0.03em; +} + +.pl-note { + display: inline-flex; + align-items: center; + gap: 4px; + margin-top: 2px; + font-size: 0.72rem; + font-weight: 600; + color: var(--body); +} + +.pl-note.warn { + color: var(--warn); +} + +.st-passed .pl-status, +.pl-chip.st-passed .icon { color: var(--ok); } + +.st-inprogress .pl-status, +.pl-chip.st-inprogress .icon { color: var(--info); } + +.pl-card.st-failed { + border-color: var(--bad); +} +.st-failed .pl-status, +.pl-chip.st-failed .icon { color: var(--bad); } + +.pl-card.st-retake { + border: 1.5px dashed var(--bad); + background: var(--bg-card); +} +.st-retake .pl-status, +.pl-chip.st-retake .icon { color: var(--bad); } + +.pl-card.st-ready { border-color: var(--brand-line); } +.st-ready .pl-status, +.pl-chip.st-ready .icon { color: var(--brand); } + +.pl-card.st-locked { + border-style: dashed; + background: var(--bg-card); + opacity: 0.72; +} +.pl-card.st-locked .pl-code, +.pl-card.st-locked .pl-title { color: var(--muted); } + +.pl-card.history { + opacity: 0.6; +} + +.pl-card.crit { + border-color: var(--brand); + box-shadow: 0 0 0 1px var(--brand); +} + +/* Focus + context */ +.pl-card.dim { + opacity: 0.28; +} + +.pl-card.chain { + opacity: 1; + box-shadow: 0 0 0 2px var(--brand-line); +} + +.pl-card.focus { + opacity: 1; + box-shadow: 0 0 0 3px var(--brand); +} + +.pl-edge { + fill: none; +} + +.pl-edge.crit { + stroke: var(--brand); + stroke-width: 1.25; + opacity: 0.55; +} + +.pl-edge.chain { + stroke: var(--brand); + stroke-width: 2; +} + +.pl-arrowhead.crit, +.pl-arrowhead.chain { + fill: var(--brand); +} + +/* Detail panel: floating on desktop, inline under the card on phones. */ +.pl-detail { + position: fixed; + right: 20px; + bottom: 20px; + z-index: 30; + width: 360px; + max-height: min(70vh, 640px); + overflow-y: auto; + padding: 14px 16px 16px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-lg); + color: var(--body); + font-size: 0.86rem; +} + +.pl-detail h4 { + margin: 12px 0 4px; + font-size: 0.78rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted); +} + +.pl-detail-head { + display: flex; + justify-content: space-between; + gap: 8px; + margin-bottom: 6px; +} + +.pl-detail-code { + font-family: var(--font-display); + font-weight: 800; + font-size: 1.15rem; + color: var(--ink); + display: flex; + align-items: center; + gap: 8px; +} + +.pl-detail-title { + color: var(--ink); +} + +.pl-status-pill { + font-family: var(--font-sans); + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + padding: 1px 7px; + border: 1px solid currentColor; + border-radius: var(--radius-pill); + color: var(--muted); +} + +.pl-status-pill.st-passed { color: var(--ok); } +.pl-status-pill.st-failed, +.pl-status-pill.st-retake { color: var(--bad); } +.pl-status-pill.st-ready { color: var(--brand); } +.pl-status-pill.st-inprogress { color: var(--info); } + +.pl-close { + flex: 0 0 auto; + width: 36px; + height: 36px; + display: inline-flex; + align-items: center; + justify-content: center; + border: 1px solid var(--border); + border-radius: var(--radius-pill); + background: var(--bg-card); + color: var(--ink); + cursor: pointer; +} + +.pl-muted { + color: var(--muted); +} + +.pl-metrics { + list-style: none; + margin: 10px 0 0; + padding: 8px 10px; + border-radius: var(--radius-sm); + background: var(--brand-tint); +} + +.pl-metrics li + li { + margin-top: 3px; +} + +.pl-metrics li.bad strong { + color: var(--brand); +} + +.pl-reqs { + list-style: none; +} + +.pl-reqs li + li { + margin-top: 4px; +} + +.pl-link { + display: inline-flex; + align-items: center; + gap: 3px; + min-height: 28px; + padding: 1px 7px; + border: 1px solid var(--border); + border-radius: var(--radius-pill); + background: var(--bg-card); + color: var(--ink); + font: inherit; + font-size: 0.8rem; + font-weight: 600; +} + +button.pl-link { + cursor: pointer; +} + +button.pl-link:hover { + border-color: var(--brand); +} + +.pl-link.st-passed .icon { color: var(--ok); } +.pl-link.st-failed .icon { color: var(--bad); } +.pl-link.st-outside { color: var(--muted); font-weight: 500; } + +.pl-or { + color: var(--muted); + font-size: 0.78rem; +} + +.pl-deps { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.pl-actions { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-top: 14px; +} + +.pl-actions .btn { + display: inline-flex; + align-items: center; + gap: 5px; + min-height: 40px; + padding: 6px 12px; + font-size: 0.82rem; +} + +.pl-petition { + display: flex; + align-items: flex-start; + gap: 8px; + margin-top: 12px; + font-size: 0.8rem; + color: var(--muted); +} + +.pl-petition input { + margin-top: 3px; +} + +/* Phone: terms stack vertically, collapsible, no arrows. */ +@media (max-width: 719px) { + .pl-top, + .pl-main { + padding-left: 16px; + padding-right: 16px; + } + + .pl-top-sub { + display: none; + } + + .pl-whatif select { + flex: 1 1 40%; + min-width: 0; + } + + .pl-whatif .btn-primary { + flex: 1 1 100%; + } + + .pl-controls { + align-items: stretch; + } + + .pl-menu { + width: 100%; + } + + .pl-menu > summary { + width: 100%; + justify-content: center; + } + + .pl-menu-pop { + left: 0; + right: 0; + width: auto; + } + + .pl-tips { + margin-left: 0; + } + + .pl-scroll { + overflow: visible; + background: none; + } + + .pl-arrows { + display: none; + } + + .pl-grid { + flex-direction: column; + align-items: stretch; + width: auto; + gap: 10px; + } + + .pl-col { + width: auto; + flex: none; + border: 1px solid var(--border); + border-radius: var(--radius-md); + background: var(--bg-card); + padding: 10px 12px; + } + + .pl-col > details > summary { + cursor: pointer; + } + + .pl-col-head { + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + border-bottom: 0; + padding: 2px 0; + margin: 0; + } + + .pl-col-sub { + gap: 10px; + } + + .pl-col details[open] > summary { + margin-bottom: 8px; + } + + .pl-cards { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 8px; + } + + .pl-detail { + position: static; + grid-column: 1 / -1; + width: auto; + max-height: none; + box-shadow: var(--shadow-sm); + border-color: var(--brand-line); + } +} + +@media (prefers-reduced-motion: reduce) { + .pl-card { + transition: none; + } +} diff --git a/extension/src/planner.html b/extension/src/planner.html new file mode 100644 index 0000000..0fe0028 --- /dev/null +++ b/extension/src/planner.html @@ -0,0 +1,84 @@ + + + + + + Course Planner - Elbi GradeSim + + + + + +
+ +
+

Elbi GradeSim Course planner

+ +
+ +
+ +
+ + +
+

Loading plan

+

+
    +
    + +
    +
    + + + + + +
    +
    + Plan options +
    + + + + + +
    +
    +
    + +
    +
    + Tips +
    +

    Each column is a term. Past terms come from your AMIS grades, future terms are the earliest plan that respects prerequisites, the sems each course is actually offered, and your unit cap.

    +

    Select a course to see its full prerequisite chain, what it unlocks and how many courses a failure would block. Mark a course failed to see the retake and the delay.

    +

    Thin maroon lines are the critical path: courses where a one-term slip delays graduation.

    +

    Offerings come from AMIS class listings for 2023 to 2026. Free electives are not included.

    +
    +
    +
    + +

    + +
    + +
    +
    + + + +
    + + + + + + + diff --git a/extension/src/planner.js b/extension/src/planner.js new file mode 100644 index 0000000..ccb4462 --- /dev/null +++ b/extension/src/planner.js @@ -0,0 +1,910 @@ +// planner.js - curriculum map and course planner. +// Framework free. Talks to the browser only through `store` below, so the same +// file can run on a plain web page (gradesim.uplb.tools) with localStorage. +// Depends on globals from curriculum.js, catalog.js and scheduler.js. + +/* ---------- Storage adapter ---------- */ + +const store = { + async get(keys) { + if (globalThis.chrome && chrome.storage && chrome.storage.local) return chrome.storage.local.get(keys); + const out = {}; + keys.forEach(k => { + try { + const v = localStorage.getItem(`gradesim:${k}`); + if (v != null) out[k] = JSON.parse(v); + } catch (e) { /* private mode or bad JSON: treat as unset */ } + }); + return out; + }, + async set(obj) { + if (globalThis.chrome && chrome.storage && chrome.storage.local) return chrome.storage.local.set(obj); + Object.entries(obj).forEach(([k, v]) => { + try { localStorage.setItem(`gradesim:${k}`, JSON.stringify(v)); } catch (e) { /* ignore */ } + }); + }, +}; + +/* ---------- Icons (Lucide, ISC license) ---------- */ + +const ICONS = { + check: '', + x: '', + lock: '', + clock: '', + retake: '', + ready: '', + planned: '', + flag: '', + alert: '', + info: '', + chevron: '', + close: '', + sun: '', + moon: '', + monitor: '', +}; +function icon(name) { + return ``; +} + +function esc(text) { + return String(text == null ? '' : text).replace(/[&<>"']/g, ch => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[ch])); +} + +const $ = id => document.getElementById(id); + +/* ---------- Terms ---------- */ + +// Absolute term number: academic year start * 3 + (0 = 1st sem, 1 = 2nd, 2 = midyear). +const SEMS = ['1', '2', 'midyear']; +const semOfAbs = abs => SEMS[abs % 3]; +function absLabel(abs) { + const ay = Math.floor(abs / 3); + const s = abs % 3; + if (s === 0) return `1st sem ${ay}`; + if (s === 1) return `2nd sem ${ay + 1}`; + return `Midyear ${ay + 1}`; +} +const ayLabel = abs => { + const ay = Math.floor(abs / 3); + return `AY ${ay}-${String(ay + 1).slice(2)}`; +}; + +// AMIS term ids are 12: 1251 = AY 2025-26 1st sem. +function amisTermToAbs(id) { + const m = String(id).match(/^12(\d)([123])$/); + return m ? (2020 + Number(m[1])) * 3 + Number(m[2]) - 1 : null; +} + +// ponytail: month heuristic for the current term (Aug-Dec 1st, Jan-May 2nd, +// Jun-Jul midyear). Only used when AMIS grades are older than the calendar. +function calendarAbs(now = new Date()) { + const y = now.getFullYear(); + const m = now.getMonth() + 1; + if (m >= 8) return y * 3; + if (m <= 5) return (y - 1) * 3 + 1; + return (y - 1) * 3 + 2; +} + +/* ---------- State ---------- */ + +const state = { + data: {}, + program: null, + courses: [], + byCode: new Map(), + graph: null, + whatif: null, // { code, mode } + selected: null, + hover: null, + view: null, // last compute() result +}; + +document.addEventListener('DOMContentLoaded', init); + +async function init() { + document.querySelectorAll('[data-icon]').forEach(el => { el.outerHTML = icon(el.dataset.icon); }); + state.data = await store.get(['gradesData', 'selectedProgram', 'substitutions', 'customCourseStatus', + 'plannerPins', 'plannerPetitions', 'plannerOptions', 'theme']); + const d = state.data; + d.customCourseStatus = d.customCourseStatus || {}; + d.substitutions = d.substitutions || {}; + d.plannerPins = d.plannerPins || {}; + d.plannerPetitions = d.plannerPetitions || {}; + initTheme(d.theme); + + const programCode = d.selectedProgram || 'BSCS'; + state.program = typeof UPLB_PROGRAMS !== 'undefined' ? UPLB_PROGRAMS[programCode] : null; + if (!state.program || !state.program.majorCourses) { + $('gradTerm').textContent = 'Pick your program in the extension popup first.'; + return; + } + $('plannerProgram').textContent = state.program.name || programCode; + const catalog = typeof UPLB_CATALOG !== 'undefined' ? UPLB_CATALOG : {}; + state.courses = enrichCourses(getPlannerCourses(state.program), catalog); + state.courses.forEach(c => state.byCode.set(c.code, c)); + state.graph = analyzeGraph(state.courses); + d.plannerOptions = { cap: defaultCap(), midyear: false, midyear9: false, ...(d.plannerOptions || {}) }; + + if (!d.gradesData || !d.gradesData.student_grades) { + const banner = $('plannerBanner'); + banner.classList.remove('hidden'); + banner.innerHTML = `${icon('info')}No grades loaded yet. Open AMIS while logged in, then come back so your passed courses count. Until then this plan starts from scratch.`; + } + + initControls(); + render(); + window.addEventListener('resize', () => drawEdges()); +} + +// 21 units when the program's own checklist already has a regular term above 18. +function defaultCap() { + const load = {}; + (state.program.majorCourses || []).forEach(c => { + if (c.sem === 'midyear') return; + const k = `${c.year}-${c.sem}`; + load[k] = (load[k] || 0) + (Number(c.units) || 0); + }); + return Object.values(load).some(u => u > 18) ? 21 : 18; +} + +function save(keys) { + const obj = {}; + keys.forEach(k => { obj[k] = state.data[k]; }); + store.set(obj); +} + +/* ---------- Theme ---------- */ + +const THEMES = ['system', 'light', 'dark']; +function applyTheme(theme) { + if (theme === 'system') delete document.documentElement.dataset.theme; + else document.documentElement.dataset.theme = theme; + const btn = $('themeToggle'); + btn.innerHTML = icon({ system: 'monitor', light: 'sun', dark: 'moon' }[theme]); + btn.title = `Theme: ${theme}`; + btn.setAttribute('aria-label', btn.title); + btn.dataset.theme = theme; +} +function initTheme(theme) { + applyTheme(THEMES.includes(theme) ? theme : 'system'); + $('themeToggle').addEventListener('click', e => { + const next = THEMES[(THEMES.indexOf(e.currentTarget.dataset.theme) + 1) % THEMES.length]; + applyTheme(next); + store.set({ theme: next }); + requestAnimationFrame(() => drawEdges()); + }); +} + +/* ---------- AMIS history ---------- */ + +function gradeResult(raw) { + const g = (raw == null ? '' : String(raw)).toUpperCase().trim(); + const n = parseFloat(g); + if (g === 'S' || g === 'P' || (n >= 1 && n <= 3)) return 'passed'; + if (n === 5 || g === 'F' || g === 'U') return 'failed'; + if (!g) return 'nograde'; + return 'other'; // INC, DRP, 4.00: not passed, not a fail +} + +// Map AMIS attempts onto curriculum codes, with the term each happened in. +function readHistory() { + const sg = (state.data.gradesData && state.data.gradesData.student_grades) || {}; + const keys = Object.keys(sg); + const attempts = []; + keys.forEach((key, i) => { + const termData = sg[key]; + if (!termData || !termData.values) return; + // Real ids map to calendar terms; anything else keeps its order. + const abs = amisTermToAbs(key); + termData.values.forEach(v => { + const code = normCode(v.course && v.course.course_code); + if (!code) return; + attempts.push({ code, title: (v.course && v.course.title) || '', units: parseFloat(v.unit_taken) || 0, + result: gradeResult(v.grade), abs: abs != null ? abs : null, order: i }); + }); + }); + // Unknown ids: lay them out as consecutive regular sems ending last term. + if (attempts.some(a => a.abs == null)) { + const orders = Array.from(new Set(attempts.map(a => a.order))).sort((a, b) => a - b); + let abs = calendarAbs() - 1; + const absOf = {}; + for (let i = orders.length - 1; i >= 0; i--) { + if (abs % 3 === 2) abs--; + absOf[orders[i]] = abs--; + } + attempts.forEach(a => { if (a.abs == null) a.abs = absOf[a.order]; }); + } + const latestAbs = attempts.length ? Math.max(...attempts.map(a => a.abs)) : null; + attempts.forEach(a => { + if (a.result === 'nograde') a.result = a.abs === latestAbs ? 'inprogress' : 'other'; + }); + attempts.sort((a, b) => a.abs - b.abs); + + // Curriculum code -> attempts, including GE/HK/NSTP slots and substitutions. + const byCurr = {}; + const push = (code, a) => { (byCurr[code] = byCurr[code] || []).push(a); }; + attempts.forEach(a => { if (state.byCode.has(a.code)) push(a.code, a); }); + + const doneOrNow = attempts.filter(a => a.result === 'passed' || a.result === 'inprogress'); + const slotDone = getCompletedRequirementSlotCodes( + doneOrNow.map(a => ({ code: a.code, title: a.title })), state.program); + const kinds = [ + ['ge', a => isGECourse(a.code, a.title) && !state.byCode.has(a.code)], + ['hk', a => /^(HK|PE)\b/.test(a.code) && !state.byCode.has(a.code)], + ['nstp', a => /^NSTP\b/.test(a.code) && !state.byCode.has(a.code)], + ]; + kinds.forEach(([kind, match]) => { + const slots = state.courses.filter(c => c.genericRequirement === kind && slotDone.has(c.code)); + const taken = doneOrNow.filter(match); + slots.forEach((slot, i) => { + const a = taken[i]; + if (a) push(slot.code, { ...a, via: a.code }); + }); + }); + Object.entries(state.data.substitutions).forEach(([req, taken]) => { + const r = normCode(req); + const a = doneOrNow.find(x => x.code === normCode(taken)); + if (a && state.byCode.has(r)) push(r, { ...a, via: a.code }); + }); + + return { attempts, byCurr, latestAbs, passedOutside: new Set(doneOrNow.map(a => a.code)) }; +} + +/* ---------- Planning ---------- */ + +function compute() { + const d = state.data; + const opts = d.plannerOptions; + const hist = readHistory(); + const startAbs = Math.max(hist.latestAbs != null ? hist.latestAbs + 1 : 0, calendarAbs()); + + // Per course: what AMIS says, then any manual override. + const info = {}; + state.courses.forEach(c => { + const tries = hist.byCurr[c.code] || []; + const last = tries[tries.length - 1]; + let auto = 'todo'; + if (tries.some(a => a.result === 'passed')) auto = 'passed'; + else if (last && last.result === 'inprogress') auto = 'inprogress'; + else if (tries.some(a => a.result === 'failed')) auto = 'failed'; + const override = d.customCourseStatus[c.code]; + const status = override === 'planned' ? 'todo' : (override || auto); + info[c.code] = { tries, auto, override, status }; + }); + + const passed = new Set(hist.passedOutside); + state.courses.forEach(c => { + const st = info[c.code].status; + if (st === 'passed' || st === 'inprogress') passed.add(c.code); + else passed.delete(c.code); + }); + + // Failures: past ones (an AMIS attempt or the course being taken now) just + // aren't passed; future ones (marked on a course not yet taken, or the + // what-if) are taken in their planned term, failed, and retaken later. + const failures = []; + state.courses.forEach(c => { + const i = info[c.code]; + if (i.status !== 'failed') return; + failures.push({ code: c.code, past: i.tries.length > 0, source: i.override ? 'marked' : 'amis' }); + }); + const wi = state.whatif; + if (wi && !passed.has(wi.code) && !failures.some(f => f.code === wi.code)) { + if (wi.mode === 'fail') failures.push({ code: wi.code, past: false, source: 'whatif' }); + } + + const unitCaps = { '1': Number(opts.cap), '2': Number(opts.cap), 'midyear': opts.midyear9 ? 9 : 6 }; + const baseOpts = { + courses: state.courses.map(c => ({ ...c, petition: !!d.plannerPetitions[c.code] })), + startSem: semOfAbs(startAbs), + unitCaps, + useMidyear: !!opts.midyear, + totalUnits: Number(state.program.totalUnitsRequired) || undefined, + }; + const pinNotBefore = {}; + Object.entries(d.plannerPins).forEach(([code, abs]) => { + if (abs > startAbs) pinNotBefore[code] = abs - startAbs; + }); + + // Run with a subset of failures in effect. + function run(active, applyDelay = true) { + const p = new Set(passed); + failures.forEach(f => { if (f.past && !active.includes(f)) p.add(f.code); }); + const notBefore = { ...pinNotBefore }; + const reserved = {}; + const attemptAt = {}; + const future = failures.filter(f => !f.past && active.includes(f)); + if (future.length) { + const clean = scheduleEarliest({ ...baseOpts, passed: p, notBefore }); + future.forEach(f => { + const t = clean.assignedTerm[f.code]; + if (t === undefined) return; + attemptAt[f.code] = t; + notBefore[f.code] = Math.max(notBefore[f.code] || 0, t + 1); + reserved[t] = (reserved[t] || 0) + (Number(state.byCode.get(f.code).units) || 3); + }); + } + if (applyDelay && wi && wi.mode !== 'fail') { + const clean = scheduleEarliest({ ...baseOpts, passed: p, notBefore }); + const t = clean.assignedTerm[wi.code]; + if (t !== undefined) notBefore[wi.code] = Math.max(notBefore[wi.code] || 0, t + Number(wi.mode)); + } + const runOpts = { ...baseOpts, passed: p, notBefore, reserved }; + return { result: scheduleEarliest(runOpts), runOpts, attemptAt, passed: p }; + } + + const now = run(failures); + const ideal = failures.length ? run([]) : now; + const costs = failures.map(f => { + const without = run(failures.filter(x => x !== f)); + return { ...f, costT: [without.result.gradTermIndex, now.result.gradTermIndex] }; + }); + // Baseline with the what-if removed, for the "what changed" message. + const noWhatif = wi ? run(failures.filter(f => f.source !== 'whatif'), false) : null; + const slips = computeSlips(now.runOpts, now.result); + + return { hist, info, startAbs, passed: now.passed, failures, costs, now, ideal, noWhatif, slips, unitCaps }; +} + +/* ---------- Summary ---------- */ + +// "N terms later" counted in terms the student would attend: midyears count +// only when the plan uses them. +function termsLate(v, fromT, toT) { + let n = 0; + for (let t = fromT + 1; t <= toT; t++) { + if ((v.startAbs + t) % 3 !== 2 || state.data.plannerOptions.midyear) n++; + } + return n; +} +const termsText = n => `${n} term${n === 1 ? '' : 's'}`; + +function renderSummary(v) { + const r = v.now.result; + const gradAbs = r.gradTermIndex >= 0 ? v.startAbs + r.gradTermIndex : null; + $('gradTerm').textContent = gradAbs == null + ? (r.unschedulable.length ? 'Some courses cannot be placed' : 'All planned requirements done') + : `Graduate ${absLabel(gradAbs)}`; + + const delta = termsLate(v, v.ideal.result.gradTermIndex, r.gradTermIndex); + v.costs.forEach(c => { c.cost = termsLate(v, c.costT[0], c.costT[1]); }); + const deltaEl = $('gradDelta'); + if (v.failures.length && delta > 0) { + const culprits = v.costs.filter(c => c.cost > 0); + const one = culprits.length === 1 ? culprits[0] : v.failures.length === 1 ? v.failures[0] : null; + const why = one + ? `because ${one.code} ${one.source === 'whatif' ? 'is failed in this what-if' : 'failed'}` + : `because of ${v.failures.length} failed courses`; + deltaEl.innerHTML = `${icon('alert')}+${termsText(delta)} ${esc(why)}`; + } else if (v.failures.length) { + deltaEl.innerHTML = `${icon('check')}No delay from ${v.failures.length === 1 ? esc(v.failures[0].code) : 'your failed courses'}`; + deltaEl.classList.add('ok'); + } else { + deltaEl.textContent = ''; + } + if (!(v.failures.length && delta <= 0)) deltaEl.classList.remove('ok'); + + const termsLeft = r.plan.filter(p => p.courses.length).length; + const bits = []; + if (gradAbs != null) bits.push(`That is ${ayLabel(gradAbs)}`); + if (gradAbs != null) bits.push(`${termsLeft} term${termsLeft === 1 ? '' : 's'} with classes left, starting ${absLabel(v.startAbs)}`); + bits.push(`up to ${v.unitCaps['1']} units a sem`); + bits.push(state.data.plannerOptions.midyear ? `midyear up to ${v.unitCaps.midyear}` : 'midyear only where the checklist puts it'); + $('gradSub').textContent = `${bits.join(', ')}. Free electives are not counted.`; + + const list = $('failCosts'); + list.innerHTML = v.costs.length > 1 || (v.costs.length === 1 && v.costs[0].source !== 'whatif') + ? v.costs.map(c => `
  • ${icon(c.cost > 0 ? 'x' : 'check')}${esc(c.code)} ${c.source === 'whatif' ? '(what-if)' : c.past ? 'failed' : '(marked failed)'}: ${c.cost > 0 ? `+${termsText(c.cost)}` : 'no delay'}
  • `).join('') + : ''; +} + +/* ---------- Cards and columns ---------- */ + +function offeringLabel(c) { + const o1 = offeredIn(c, '1'); + const o2 = offeredIn(c, '2'); + const om = c.offered ? c.offered[3] > 0 : c.sem === 'midyear'; + let base = o1 && o2 ? 'Any sem' : o1 ? '1st only' : o2 ? '2nd only' : om ? 'Midyear' : 'Not seen'; + if (om && (o1 || o2)) base += ' + mid'; + return base; +} + +function restricted(c) { + return !(offeredIn(c, '1') && offeredIn(c, '2')); +} + +const STATUS = { + passed: ['check', 'Passed'], + inprogress: ['clock', 'Taking now'], + failed: ['x', 'Failed'], + retake: ['retake', 'Retake'], + ready: ['ready', 'Ready'], + planned: ['planned', 'Planned'], + locked: ['lock', 'Waiting'], +}; + +// Nearest failed course upstream of `code`, if any. +function waitingOn(code, v) { + const failed = new Set(v.failures.map(f => f.code)); + const anc = state.graph.ancestors(code); + for (const f of failed) if (anc.has(f) && !v.passed.has(f)) return f; + return null; +} + +function buildColumns(v) { + const cols = new Map(); + const col = abs => { + if (!cols.has(abs)) cols.set(abs, { abs, cards: [] }); + return cols.get(abs); + }; + const primary = {}; + const r = v.now.result; + + state.courses.forEach(c => { + const i = v.info[c.code]; + // History: every AMIS attempt shows in its term. + i.tries.forEach((a, k) => { + const isLast = k === i.tries.length - 1; + let st = a.result === 'passed' ? 'passed' : a.result === 'inprogress' ? 'inprogress' : a.result === 'failed' ? 'failed' : null; + if (!st) return; + if (isLast && i.override) st = i.override === 'planned' ? null : i.override; + if (!st) return; + const card = { code: c.code, status: st, via: a.via, history: !isLast }; + col(a.abs).cards.push(card); + if (isLast && st !== 'failed') primary[c.code] = card; + }); + // Marked passed with no AMIS record: credited column. + if (!i.tries.length && i.status === 'passed') { + const card = { code: c.code, status: 'passed', credited: true }; + col(-1).cards.push(card); + primary[c.code] = card; + } + // Future failure: the failed attempt in its planned term. + if (v.now.attemptAt[c.code] !== undefined) { + col(v.startAbs + v.now.attemptAt[c.code]).cards.push({ code: c.code, status: 'failed', hypothetical: true }); + } + const t = r.assignedTerm[c.code]; + if (t !== undefined) { + const wait = waitingOn(c.code, v); + const isRetake = v.failures.some(f => f.code === c.code); + let st = isRetake ? 'retake' : wait ? 'locked' : 'planned'; + if (st === 'planned' && preGroups(c).every(g => g.some(x => v.passed.has(x) || !state.byCode.has(x)))) st = 'ready'; + const card = { code: c.code, status: st, waitingOn: wait, conditional: !!r.conditional[c.code], pinned: state.data.plannerPins[c.code] != null }; + col(v.startAbs + t).cards.push(card); + primary[c.code] = card; + } + }); + r.unschedulable.forEach(code => { + const card = { code, status: 'locked', unplaceable: true }; + col(Infinity).cards.push(card); + primary[code] = card; + }); + + // Future regular sems stay visible even if empty (waiting on an offering); + // empty midyears are dropped. + const gradAbs = r.gradTermIndex >= 0 ? v.startAbs + r.gradTermIndex : v.startAbs - 1; + for (let abs = v.startAbs; abs <= gradAbs; abs++) if (abs % 3 !== 2) col(abs); + + const list = Array.from(cols.values()).sort((a, b) => a.abs - b.abs); + orderColumns(list, primary); + return { list, primary }; +} + +// Barycenter sweeps: order each column by the mean row of a card's +// prerequisites (left to right), then of its dependents (right to left). +// ponytail: plain barycenter, no crossing count; d3-dag if this looks bad. +function orderColumns(list, primary) { + const delay = state.graph.delay; + list.forEach(c => c.cards.sort((a, b) => (delay[b.code] || 0) - (delay[a.code] || 0) || a.code.localeCompare(b.code))); + const rowOf = () => { + const pos = {}; + list.forEach(c => c.cards.forEach((card, i) => { if (primary[card.code] === card) pos[card.code] = i; })); + return pos; + }; + const preds = code => preGroups(state.byCode.get(code)).flat(); + const succs = code => state.graph.edges.filter(e => e.from === code).map(e => e.to); + for (let pass = 0; pass < 4; pass++) { + const forward = pass % 2 === 0; + const order = forward ? list : [...list].reverse(); + order.forEach(column => { + const pos = rowOf(); + const key = new Map(); + column.cards.forEach((card, i) => { + const nb = (forward ? preds(card.code) : succs(card.code)).filter(x => pos[x] !== undefined); + key.set(card, nb.length ? nb.reduce((s, x) => s + pos[x], 0) / nb.length : i); + }); + column.cards.sort((a, b) => key.get(a) - key.get(b)); + }); + } +} + +function cardHTML(card, v) { + const c = state.byCode.get(card.code); + const [ic, label] = STATUS[card.status]; + const slip = v.slips[card.code]; + const crit = !card.history && slip > 0 && !['passed', 'inprogress', 'failed'].includes(card.status); + const classes = ['pl-card', `st-${card.status}`]; + if (crit) classes.push('crit'); + if (card.history || card.hypothetical) classes.push('history'); + let extra = ''; + if (card.waitingOn) extra = `${icon('lock')}Waiting on ${esc(card.waitingOn)}`; + else if (card.conditional) extra = `${icon('flag')}Petition needed`; + else if (card.unplaceable) extra = `${icon('alert')}Can't place`; + else if (card.via && card.via !== card.code) extra = `via ${esc(card.via)}`; + else if (card.hypothetical) extra = 'If failed here'; + const statusLabel = card.status === 'failed' && card.history ? 'Failed' : label; + const aria = `${c.code}, ${c.title}. ${statusLabel}${crit ? ', critical' : ''}. ${c.units} units, ${offeringLabel(c)}.${card.waitingOn ? ` Waiting on ${card.waitingOn}.` : ''}`; + return `
    + ${icon(ic)}${statusLabel}${esc(c.units)}u + ${esc(c.code)}${card.pinned ? ' *' : ''} + ${esc(c.title)} + ${esc(offeringLabel(c))}${crit ? 'Critical' : ''} + ${extra} +
    `; +} + +function columnHTML(column, v, phone) { + const isPast = column.abs < v.startAbs; + let name; + let sub; + if (column.abs === -1) { name = 'Credited'; sub = 'No AMIS term'; } + else if (column.abs === Infinity) { name = "Can't place"; sub = 'Check prerequisites'; } + else { name = absLabel(column.abs).replace(/ \d+$/, ''); sub = ayLabel(column.abs); } + + const units = column.cards.reduce((s, c) => s + (Number(state.byCode.get(c.code).units) || 0), 0); + const isMid = column.abs % 3 === 2; + let warn = ''; + if (!isPast && Number.isFinite(column.abs) && column.abs >= 0) { + if (isMid && units > 6) warn = "Over 6 units in midyear needs the Dean's approval (max 9)."; + else if (!isMid && units > v.unitCaps['1']) warn = `Over your ${v.unitCaps['1']}-unit cap: needs an overload approval.`; + else if (!isMid && units > 18) warn = 'Over 18 units: allowed up to 21 when the term has lab courses.'; + } + const nowTerm = column.cards.some(c => c.status === 'inprogress'); + const tag = column.abs === v.startAbs ? 'Next' + : nowTerm ? 'Now' + : isPast && column.abs >= 0 ? 'Taken' : ''; + const open = !(phone && isPast) ? ' open' : ''; + return `
    + + + ${esc(name)} ${tag} + ${esc(sub)}${warn && (isMid || units > v.unitCaps['1']) ? icon('alert') : ''}${units} units + ${warn ? `${esc(warn)}` : ''} + +
    ${column.cards.map(card => cardHTML(card, v)).join('') || '

    Nothing offered that fits

    '}
    + +
    `; +} + +const isPhone = () => window.matchMedia('(max-width: 719px)').matches; + +function render() { + const v = compute(); + state.view = v; + renderSummary(v); + fillWhatifSelect(v); + const { list, primary } = buildColumns(v); + v.primary = primary; + v.columns = list; + const phone = isPhone(); + document.querySelector('.pl-main').appendChild($('detail')); // may sit inside the grid on phones + $('plannerGrid').innerHTML = list.map(c => columnHTML(c, v, phone)).join(''); + if (state.selected && !state.byCode.has(state.selected)) state.selected = null; + renderDetail(); + requestAnimationFrame(() => drawEdges()); +} + +/* ---------- Edges and focus ---------- */ + +function chainOf(code) { + const anc = state.graph.ancestors(code); + const desc = state.graph.descendants(code); + return { anc, desc, all: new Set([code, ...anc, ...desc]) }; +} + +function drawEdges() { + const svg = $('plannerArrows'); + const grid = $('plannerGrid'); + const v = state.view; + svg.innerHTML = ''; + document.querySelectorAll('.pl-card.dim, .pl-card.chain, .pl-card.focus').forEach(el => el.classList.remove('dim', 'chain', 'focus')); + if (!v) return; + + const focus = state.hover || state.selected; + const chain = focus ? chainOf(focus) : null; + if (chain) { + grid.querySelectorAll('.pl-card').forEach(el => { + const code = el.dataset.code; + el.classList.add(code === focus && el.dataset.primary ? 'focus' : chain.all.has(code) ? 'chain' : 'dim'); + }); + } + if (isPhone()) return; + + const gridRect = grid.getBoundingClientRect(); + svg.setAttribute('width', grid.scrollWidth); + svg.setAttribute('height', grid.scrollHeight); + const nodeOf = code => grid.querySelector(`.pl-card[data-primary][data-code="${CSS.escape(code)}"]`); + const crit = code => v.slips[code] > 0; + const paths = []; + state.graph.edges.forEach(({ from, to }) => { + let kind = null; + if (chain) { + const up = (to === focus || chain.anc.has(to)) && chain.anc.has(from); + const down = (from === focus || chain.desc.has(from)) && chain.desc.has(to); + if (up || down) kind = 'chain'; + } + if (!kind && crit(from) && crit(to)) kind = 'crit'; + if (!kind) return; + const a = nodeOf(from); + const b = nodeOf(to); + if (!a || !b || a.closest('details:not([open])') || b.closest('details:not([open])')) return; + const ra = a.getBoundingClientRect(); + const rb = b.getBoundingClientRect(); + if (ra.right > rb.left) return; // same column or backwards: coreq-like, skip + const x1 = ra.right - gridRect.left; + const y1 = ra.top + ra.height / 2 - gridRect.top; + const x2 = rb.left - gridRect.left; + const y2 = rb.top + rb.height / 2 - gridRect.top; + const dx = Math.max(24, (x2 - x1) / 2); + paths.push(``); + }); + svg.innerHTML = ` + + + ${paths.join('')}`; +} + +/* ---------- Detail panel ---------- */ + +function groupHTML(group, v) { + return group.map(code => { + const c = state.byCode.get(code); + const st = v.passed.has(code) ? 'passed' : v.failures.some(f => f.code === code) ? 'failed' : c ? 'todo' : 'outside'; + const ic = st === 'passed' ? 'check' : st === 'failed' ? 'x' : 'planned'; + const inner = `${icon(ic)}${esc(code)}`; + return c ? `` : `${inner}`; + }).join(' or '); +} + +function renderDetail() { + const panel = $('detail'); + const code = state.selected; + const v = state.view; + if (!code || !v) { + panel.classList.add('hidden'); + return; + } + const c = state.byCode.get(code); + const i = v.info[code]; + const card = v.primary[code]; + const status = card ? STATUS[card.status][1] : (i.status === 'failed' ? 'Failed' : 'Planned'); + const t = v.now.result.assignedTerm[code]; + const slip = v.slips[code]; + const blocking = state.graph.blocking[code] || 0; + const delay = state.graph.delay[code] || 1; + const deps = state.graph.edges.filter(e => e.from === code).map(e => e.to); + const groups = preGroups(c); + + const facts = []; + facts.push(`${c.units} units, offered ${offeringLabel(c).toLowerCase()}${c.offered ? ` (${c.offered[1]} of 4 first sems, ${c.offered[2]} of 3 second sems, ${c.offered[3]} of 2 midyears seen)` : ''}`); + if (t !== undefined) facts.push(`Planned for ${absLabel(v.startAbs + t)}`); + const metrics = `
      +
    • ${blocking} course${blocking === 1 ? '' : 's'} blocked if this is failed
    • +
    • ${delay} course${delay === 1 ? '' : 's'} on the longest chain through it
    • + ${slip === undefined ? '' : slip > 0 + ? `
    • Critical. Taking it a term later delays graduation by ${slip === Infinity ? 'more than the plan can show' : termsText(termsLate(v, v.now.result.gradTermIndex, v.now.result.gradTermIndex + slip))}.
    • ` + : '
    • Has slack: taking it a term later does not move graduation.
    • '} +
    `; + + const reqs = []; + groups.forEach(g => reqs.push(`
  • ${groupHTML(g, v)}
  • `)); + (c.co || []).forEach(x => reqs.push(`
  • Take with ${groupHTML([x], v)} (corequisite)
  • `)); + if (c.standing) reqs.push(`
  • ${c.standing === 'senior' ? 'Senior' : 'Junior'} standing (assumed ${c.standing === 'senior' ? '75' : '50'}% of total units)
  • `); + if (c.coi) reqs.push('
  • Consent of instructor (COI) also works
  • '); + if (c.note) reqs.push(`
  • AMIS says: ${esc(c.note)}
  • `); + + const actions = []; + const past = i.tries.length > 0; + if (i.status !== 'passed') actions.push(``); + if (i.status !== 'failed') actions.push(``); + if (i.override) actions.push(``); + if (t !== undefined) actions.push(``); + if (state.data.plannerPins[code] != null) actions.push(''); + const petition = restricted(c) && i.status !== 'passed' + ? `` + : ''; + + panel.innerHTML = ` +
    +

    ${esc(c.code)} ${esc(status)}

    +

    ${esc(c.title)}

    + +
    +

    ${facts.map(esc).join('. ')}.

    + ${card && card.waitingOn ? `

    ${icon('lock')}Waiting on ${esc(card.waitingOn)}

    ` : ''} + ${metrics} +

    Requires

    + ${reqs.length ? `
      ${reqs.join('')}
    ` : '

    No prerequisites.

    '} +

    Unlocks

    + ${deps.length ? `

    ${deps.map(d => groupHTML([d], v)).join(' ')}

    ` : '

    Nothing else in your checklist.

    '} +
    ${actions.join('')}
    + ${petition}`; + panel.classList.remove('hidden'); + + // Phone: show it inline under the selected card. Desktop: floating panel. + if (isPhone()) { + const el = document.querySelector(`.pl-card[data-primary][data-code="${CSS.escape(code)}"]`) || + document.querySelector(`.pl-card[data-code="${CSS.escape(code)}"]`); + if (el) el.after(panel); + } else if (panel.parentElement !== document.querySelector('.pl-main')) { + document.querySelector('.pl-main').appendChild(panel); + } +} + +/* ---------- Actions ---------- */ + +function announce(msg) { + $('plannerStatus').textContent = msg; +} + +function select(code) { + state.selected = state.selected === code ? null : code; + renderDetail(); + drawEdges(); + if (state.selected) announce(`${code} selected. ${state.graph.blocking[code] || 0} courses depend on it.`); +} + +function act(name, input) { + const code = state.selected; + const d = state.data; + if (name === 'close') { select(code); return; } + if (name === 'passed' || name === 'failed') { + const auto = state.view.info[code].auto; + if (name === auto) delete d.customCourseStatus[code]; + else d.customCourseStatus[code] = name; + save(['customCourseStatus']); + announce(`${code} marked ${name}`); + } else if (name === 'clear') { + delete d.customCourseStatus[code]; + save(['customCourseStatus']); + } else if (name === 'later') { + const t = state.view.now.result.assignedTerm[code]; + d.plannerPins[code] = state.view.startAbs + t + 1; + save(['plannerPins']); + } else if (name === 'unpin') { + delete d.plannerPins[code]; + save(['plannerPins']); + } else if (name === 'petition') { + if (input.checked) d.plannerPetitions[code] = true; + else delete d.plannerPetitions[code]; + save(['plannerPetitions']); + } + render(); + const el = document.querySelector(`.pl-card[data-primary][data-code="${CSS.escape(code)}"]`); + if (el) el.focus({ preventScroll: true }); +} + +function fillWhatifSelect(v) { + const sel = $('whatifCourse'); + const keep = sel.value || (state.whatif && state.whatif.code) || ''; + const codes = Object.keys(v.now.result.assignedTerm).sort(); + if (state.whatif && !codes.includes(state.whatif.code)) codes.push(state.whatif.code); + sel.innerHTML = '' + codes.map(c => ``).join(''); + sel.value = codes.includes(keep) ? keep : ''; +} + +function simulate(e) { + e.preventDefault(); + const code = $('whatifCourse').value; + const mode = $('whatifMode').value; + if (!code) { + $('whatifResult').textContent = 'Pick a course first.'; + return; + } + state.whatif = { code, mode }; + render(); + const v = state.view; + const after = v.now.result; + const base = v.noWhatif.result; + const slip = termsLate(v, base.gradTermIndex, after.gradTermIndex); + const pushed = Object.keys(after.assignedTerm).filter(c => c !== code && base.assignedTerm[c] !== undefined && after.assignedTerm[c] > base.assignedTerm[c]); + const list = pushed.length > 5 ? `${pushed.slice(0, 5).join(', ')} and ${pushed.length - 5} more` : pushed.join(', '); + const verb = mode === 'fail' ? `Failing ${code}` : `Taking ${code} ${mode === '1' ? 'a term' : 'a year'} later`; + $('whatifResult').textContent = slip > 0 + ? `${verb} moves graduation to ${absLabel(v.startAbs + after.gradTermIndex)} (+${termsText(slip)}).${pushed.length ? ` Also pushed later: ${list}.` : ''}` + : `${verb} does not move graduation.${pushed.length ? ` It shifts ${list}.` : ' Nothing else shifts.'}`; + $('whatifClear').classList.remove('hidden'); + state.selected = code; + renderDetail(); + drawEdges(); +} + +function clearWhatif() { + state.whatif = null; + $('whatifResult').textContent = ''; + $('whatifClear').classList.add('hidden'); + render(); +} + +function initControls() { + const o = state.data.plannerOptions; + $('optCap').value = String(o.cap); + $('optMidyear').checked = !!o.midyear; + $('optMidyear9').checked = !!o.midyear9; + const setOpt = () => { + o.cap = Number($('optCap').value); + o.midyear = $('optMidyear').checked; + o.midyear9 = $('optMidyear9').checked; + save(['plannerOptions']); + render(); + }; + ['optCap', 'optMidyear', 'optMidyear9'].forEach(id => $(id).addEventListener('change', setOpt)); + $('autoPlan').addEventListener('click', () => { + state.data.plannerPins = {}; + save(['plannerPins']); + $('planMenu').open = false; + render(); + announce('Plan recomputed from scratch.'); + }); + $('resetPlan').addEventListener('click', () => { + if (!confirm('Reset the plan? This clears courses you marked passed or failed, courses you moved, and petitions. Your AMIS grades stay.')) return; + Object.assign(state.data, { customCourseStatus: {}, plannerPins: {}, plannerPetitions: {} }); + save(['customCourseStatus', 'plannerPins', 'plannerPetitions']); + state.whatif = null; + $('whatifResult').textContent = ''; + $('planMenu').open = false; + render(); + }); + $('whatifForm').addEventListener('submit', simulate); + $('whatifClear').addEventListener('click', clearWhatif); + + // Legend: one row of chips, built from the same status table as the cards. + const chips = ['passed', 'inprogress', 'failed', 'retake', 'ready', 'planned', 'locked'] + .map(s => `${icon(STATUS[s][0])}${STATUS[s][1]}`).join('') + + 'Critical' + + `${icon('flag')}Petition`; + $('legend').insertAdjacentHTML('afterbegin', chips); + + const grid = $('plannerGrid'); + grid.addEventListener('click', e => { + const el = e.target.closest('.pl-card'); + if (el) select(el.dataset.code); + }); + grid.addEventListener('keydown', e => { + const el = e.target.closest('.pl-card'); + if (el && (e.key === 'Enter' || e.key === ' ')) { + e.preventDefault(); + select(el.dataset.code); + } + }); + grid.addEventListener('mouseover', e => { + const el = e.target.closest('.pl-card'); + const code = el ? el.dataset.code : null; + if (code !== state.hover) { state.hover = code; drawEdges(); } + }); + grid.addEventListener('mouseleave', () => { state.hover = null; drawEdges(); }); + grid.addEventListener('toggle', () => drawEdges(), true); + + document.addEventListener('click', e => { + const go = e.target.closest('[data-goto]'); + if (go) { + state.selected = null; + select(go.dataset.goto); + const el = document.querySelector(`.pl-card[data-primary][data-code="${CSS.escape(go.dataset.goto)}"]`); + if (el) { el.scrollIntoView({ block: 'nearest', inline: 'nearest' }); el.focus({ preventScroll: true }); } + return; + } + const a = e.target.closest('[data-act]'); + if (a && a.tagName !== 'INPUT') act(a.dataset.act, a); + const menu = $('planMenu'); + if (menu.open && !menu.contains(e.target)) menu.open = false; + }); + $('detail').addEventListener('change', e => { + if (e.target.dataset.act === 'petition') act('petition', e.target); + }); + document.addEventListener('keydown', e => { + if (e.key === 'Escape' && state.selected) select(state.selected); + }); +} diff --git a/extension/src/plumbob.svg b/extension/src/plumbob.svg new file mode 100644 index 0000000..e000c86 --- /dev/null +++ b/extension/src/plumbob.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/extension/src/popup.css b/extension/src/popup.css index fee9c68..456a7bb 100644 --- a/extension/src/popup.css +++ b/extension/src/popup.css @@ -1,1398 +1,922 @@ -/* extension/src/popup.css */ - -/* Elbi GradeSim - Sims-Inspired Pixelated Theme */ - -@import url('https://fonts.googleapis.com/css2?family=VT323&family=Press+Start+2P&family=Nunito:wght@400;600;700&display=swap'); - -:root { - /* Primary Green - muted, chill shades */ - --gem-light: #8fba8f; - --gem-mid: #5c8f5c; - --gem-dark: #385938; - --gem-glow: rgba(92, 143, 92, 0.25); - - /* UI Colors - neutral grays */ - --bg-dark: #1a1a1c; - --bg-mid: #222225; - --bg-light: #2a2a2e; - --card-bg: #161618; - --card-border: #38383e; - - /* Text Colors - high contrast for WCAG AA */ - --text-primary: #e4e4e8; - --text-secondary: #b0b0ba; - --text-accent: #8fba8f; - - /* Status Colors - unified, muted palette */ - --success: #8fba8f; - --warning: #c0a060; - --danger: #b56565; - --info: #739cc2; - - /* Pixel border */ - --pixel-border: 2px solid; - - /* Fonts */ - --font-header: 'Press Start 2P', cursive; - --font-body: 'Nunito', sans-serif; - --font-mono: 'VT323', monospace; +/* Elbi GradeSim popup, UPLB Tools identity. Colors, type and radii come from tokens.css. */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: var(--font-sans); + font-size: 13px; + line-height: 1.45; + background: var(--bg-page); + color: var(--ink); + width: 400px; + min-height: 500px; +} + +.container { + padding: 16px; +} + +.hidden { + display: none !important; +} + +a { + color: var(--brand); } a:focus-visible, button:focus-visible, -.btn:focus-visible, +input:focus-visible, select:focus-visible, -input:focus-visible { - outline: 2px solid var(--text-accent); - outline-offset: 3px; +label:has(input:focus-visible) { + outline: var(--focus-ring); + outline-offset: 2px; } -* { - margin: 0; - padding: 0; - box-sizing: border-box; +.icon { + width: 1em; + height: 1em; + flex-shrink: 0; + vertical-align: -0.125em; } -body { - font-family: var(--font-body); - background: linear-gradient(180deg, var(--bg-dark) 0%, var(--bg-mid) 100%); - color: var(--text-primary); - width: 520px; - min-height: 520px; - max-height: 600px; - overflow-y: auto; - font-size: 11.5px; - letter-spacing: 0.2px; +h1, +h2, +h3 { + font-family: var(--font-display); + font-weight: 700; + color: var(--ink); } - -.container { - padding: 16px 18px; +h3 { + font-size: 0.95rem; + margin-bottom: 8px; } -/* Header with Plumbob */ +/* Header */ header { - text-align: center; + display: flex; + align-items: center; + gap: 10px; margin-bottom: 16px; - padding-bottom: 12px; - border-bottom: 3px solid var(--gem-dark); - position: relative; } -header::before { - content: ''; - display: block; - width: 32px; - height: 40px; - margin: 0 auto 6px; - background: url('sims.png') center/contain no-repeat; - filter: drop-shadow(0 0 8px var(--gem-glow)); - animation: plumbob-float 2s ease-in-out infinite; +.plumbob { + width: 22px; + height: 33px; } -@keyframes plumbob-float { - 0%, 100% { transform: translateY(0); } - 50% { transform: translateY(-5px); } +.brand { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; } -header h1 { - font-family: 'Press Start 2P', cursive; - color: var(--gem-light); - font-size: 0.85rem; - margin-bottom: 4px; - text-shadow: 1px 1px 0 var(--gem-dark); +header h1 a { + color: inherit; + text-decoration: none; +} + +header h1 a:hover { + color: var(--brand); } .header-actions { display: flex; - justify-content: center; - gap: 8px; - margin-top: 12px; + align-items: center; + gap: 6px; } .header-btn { - display: flex; + display: inline-flex; align-items: center; - gap: 6px; - padding: 6px 12px; - background: var(--bg-dark); - border: 1px solid var(--gem-dark); - color: var(--text-secondary); - font-family: var(--font-body); - font-size: 0.8rem; + gap: 5px; + min-height: 36px; + padding: 0 12px; + border-radius: var(--radius-pill); + border: 1px solid var(--border); + background: var(--bg-elevated); + color: var(--ink); + font: 600 0.78rem var(--font-sans); + white-space: nowrap; cursor: pointer; - transition: all 0.2s; - box-shadow: - inset -1px -1px 0 rgba(0,0,0,0.5), - inset 1px 1px 0 rgba(255,255,255,0.1), - 0 2px 0 rgba(0,0,0,0.5); + transition: background var(--transition-fast); } .header-btn:hover { - background: var(--card-bg); - color: var(--text-primary); - border-color: var(--gem-mid); -} - -.header-btn:active { - transform: translateY(1px); - box-shadow: - inset -1px -1px 0 rgba(0,0,0,0.5), - inset 1px 1px 0 rgba(255,255,255,0.1), - 0 1px 0 rgba(0,0,0,0.5); + background: var(--brand-tint); } .header-btn.primary { - background: rgba(0, 255, 0, 0.1); - color: var(--gem-light); - border-color: var(--gem-mid); + background: var(--brand-tint); + border-color: var(--brand-line); + color: var(--brand); } .header-btn.primary:hover { - background: rgba(0, 255, 0, 0.2); - border-color: var(--gem-light); -} - -/* Help Modal specific styles */ -.help-modal { - max-width: 500px; - width: 90%; - max-height: 80vh; + background: var(--brand-tint-strong); } -.help-modal.terms-modal::before { - content: '◆ HOW TO USE ◆'; +header h1 { + font-size: 1.15rem; + font-weight: 800; + line-height: 1.2; } -.help-content { - padding: 0; +.byline { + font-size: 0.75rem; + color: var(--muted); } -.help-item { - display: flex; - align-items: flex-start; - gap: 16px; - padding: 16px; - border-bottom: 1px solid var(--card-border); +.theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border-radius: var(--radius-pill); + border: 1px solid var(--border); + background: var(--bg-elevated); + color: var(--ink); + cursor: pointer; + font-size: 16px; } -.help-item:last-child { - border-bottom: none; +.theme-toggle:hover { + background: var(--brand-tint); } -.help-badge { - flex-shrink: 0; - width: 90px; +.credits { + margin: -4px 0 12px; text-align: center; - padding: 6px 4px; - font-size: 0.65rem; - font-family: 'Press Start 2P', cursive; - border-radius: 2px; - word-wrap: break-word; - line-height: 1.4; -} - -.help-text { - flex: 1; -} - -.help-text strong { - display: block; - font-size: 1rem; - color: var(--gem-light); - margin-bottom: 4px; + font-size: 0.75rem; + color: var(--muted); } -.help-text p { - color: var(--text-secondary); - font-size: 0.9rem; - line-height: 1.4; - margin: 0; +.credits a { + color: var(--muted); } -.subtitle { - color: var(--text-secondary); - font-size: 0.95rem; +.credits a:hover { + color: var(--brand); } -/* Credits */ -.credits { - text-align: center; - color: var(--text-secondary); - font-size: 0.85rem; - margin-bottom: 12px; - padding-top: 8px; - border-top: 1px solid var(--card-border); +/* Cards */ +.program-selector, +.gwa-section, +.loading, +.no-data, +.track-selector, +.whatif-results { + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); } -/* Program Selector */ +/* Program selector */ .program-selector { + padding: 12px; margin-bottom: 12px; - padding: 12px 14px; - background: var(--card-bg); - border: 2px solid var(--card-border); } .program-selector label { display: block; margin-bottom: 6px; - color: var(--gem-light); - font-size: 0.85rem; - text-transform: uppercase; - letter-spacing: 0.5px; + font-size: 0.8rem; + font-weight: 600; + color: var(--muted); +} + +select, +input[type="number"] { + font: inherit; + color: var(--ink); + background: var(--bg-card); + border: 1px solid var(--border-input); + border-radius: var(--radius-sm); } .program-selector select { width: 100%; + min-height: 40px; padding: 8px 10px; - background: var(--bg-dark); - border: 2px solid var(--gem-dark); - color: var(--text-primary); - font-family: var(--font-body); - font-size: 0.95rem; cursor: pointer; - appearance: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%236ec96e' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 10px center; -} - -.program-selector select:focus { - outline: none; - border-color: var(--gem-light); - box-shadow: 0 0 10px var(--gem-glow); -} - -.program-selector select option { - background: var(--bg-dark); - color: var(--text-primary); - padding: 8px; -} - -.program-selector select option:disabled { - color: var(--text-secondary); -} - -.program-selector select optgroup { - background: var(--bg-mid); - color: var(--gem-light); - font-weight: bold; - font-style: normal; -} - -.hidden { - display: none !important; } -/* Loading & No Data States */ -.loading, .no-data { +/* Loading and empty states */ +.loading, +.no-data { text-align: center; - padding: 40px 20px; - background: var(--card-bg); - border: 3px solid var(--card-border); - border-radius: 4px; + padding: 32px 20px; } -.loading p, .no-data p { +.loading p, +.no-data p { margin-bottom: 12px; - font-size: 1.2rem; -} - -.hint { font-size: 1rem; - color: var(--text-secondary); - line-height: 1.5; } -.hint a { - color: var(--gem-light); - text-decoration: none; +.no-data p:first-child { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--warn); + font-weight: 600; } -.hint a:hover { - text-decoration: underline; +.hint { + font-size: 0.85rem !important; + color: var(--muted); + line-height: 1.5; } -/* Pixel Buttons */ +/* Buttons, after the uplbtools.me .btn rules */ .btn { display: inline-flex; align-items: center; justify-content: center; + gap: 6px; min-height: 44px; - padding: 10px 20px; - border: none; + padding: 8px 18px; + font: 600 0.9rem var(--font-sans); + border-radius: var(--radius-pill); + border: 1px solid transparent; cursor: pointer; - font-family: var(--font-body); - font-size: 0.9rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; - position: relative; - transition: transform 0.1s, box-shadow 0.1s; - background: linear-gradient(180deg, var(--gem-light) 0%, var(--gem-mid) 50%, var(--gem-dark) 100%); - color: var(--bg-dark); - border: 2px solid var(--gem-dark); - box-shadow: - inset -2px -2px 0 var(--gem-dark), - inset 2px 2px 0 rgba(255,255,255,0.3), - 0 4px 0 var(--gem-dark); + transition: background var(--transition-fast); } -.btn:hover { - transform: translateY(-2px); - box-shadow: - inset -2px -2px 0 var(--gem-dark), - inset 2px 2px 0 rgba(255,255,255,0.3), - 0 6px 0 var(--gem-dark); +.btn-primary { + background: var(--brand); + color: var(--on-brand); + box-shadow: var(--shadow-sm); } -.btn:active { - transform: translateY(2px); - box-shadow: - inset -2px -2px 0 var(--gem-dark), - inset 2px 2px 0 rgba(255,255,255,0.3), - 0 2px 0 var(--gem-dark); +.btn-primary:hover { + background: var(--brand-deep); } -.btn-primary { - background: linear-gradient(180deg, var(--gem-light) 0%, var(--gem-mid) 50%, var(--gem-dark) 100%); +.btn:disabled { + background: var(--bg-card); + border-color: var(--border); + color: var(--muted); + box-shadow: none; + cursor: not-allowed; } -.btn-secondary { - background: linear-gradient(180deg, #666 0%, #444 50%, #222 100%); - color: var(--text-primary); - border-color: #222; - box-shadow: - inset -2px -2px 0 #222, - inset 2px 2px 0 rgba(255,255,255,0.2), - 0 4px 0 #111; +.btn-sm { + padding: 6px 14px; + font-size: 0.8rem; } -/* GWA Section - Main Stats Panel */ -.gwa-section { - background: var(--card-bg); - border: 3px solid var(--gem-mid); - padding: 18px 16px; - text-align: center; - margin-bottom: 12px; - position: relative; - box-shadow: - inset 0 0 20px rgba(0, 212, 0, 0.1), - 0 0 15px var(--gem-glow); +.btn-secondary, +.wrapped-nav-btn { + background: var(--brand-tint); + border: 1px solid var(--brand-line); + color: var(--brand); } -.gwa-section::before { - content: ''; - display: none; +.btn-secondary:hover, +.wrapped-nav-btn:hover:not(:disabled) { + background: var(--brand-tint-strong); } -.gwa-section h2 { - font-size: 1rem; - font-weight: normal; - margin-bottom: 10px; - color: var(--text-secondary); - letter-spacing: 0.5px; - text-transform: uppercase; +/* GWA stats */ +.gwa-section { + padding: 16px; + margin-bottom: 16px; + text-align: center; } -.gwa-display { - margin-bottom: 14px; - padding: 12px 10px; - background: linear-gradient(180deg, #001100 0%, #002200 100%); - border: 2px solid var(--gem-dark); +.gwa-section h2 { + font-size: 0.8rem; + font-family: var(--font-sans); + font-weight: 600; + color: var(--muted); } .gwa-value { - font-family: 'Press Start 2P', cursive; - font-size: 1.6rem; - color: var(--gem-light); - text-shadow: 0 0 6px var(--gem-glow); + display: block; + font-family: var(--font-display); + font-size: 2.4rem; + font-weight: 800; + line-height: 1.15; + color: var(--brand); + font-variant-numeric: tabular-nums; + margin-bottom: 12px; } .gwa-stats { - display: flex; - justify-content: space-around; - padding-top: 12px; - border-top: 2px dashed var(--gem-dark); + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; } .stat { display: flex; flex-direction: column; - align-items: center; + padding: 8px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-md); } .stat-label { - font-size: 0.9rem; - color: var(--text-secondary); - margin-bottom: 4px; + font-size: 0.75rem; + color: var(--muted); } .stat-value { - font-size: 1.2rem; - font-weight: bold; - color: var(--gem-light); -} - -.honor-status { - margin-top: 10px; - padding: 6px 14px; - display: inline-block; - font-size: 0.9rem; - text-transform: uppercase; - letter-spacing: 1px; - border: 2px solid; -} - - -.legend-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 6px; - font-size: 0.85rem; -} - -.legend-item { - display: flex; - gap: 8px; + font-size: 1.1rem; + font-weight: 700; + font-variant-numeric: tabular-nums; } -.legend-grade { - font-weight: bold; - color: var(--gem-light); - width: 28px; +.honor-status:not(:empty), +.scholar-badge { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 2px 10px; + font-size: 0.75rem; + font-weight: 600; + border-radius: var(--radius-pill); + background: var(--brand-tint); + border: 1px solid var(--brand-line); + color: var(--brand); } -.legend-desc { - color: var(--text-secondary); +.honor-status:not(:empty) { + margin-top: 12px; } -.honor-status.summa { - background: linear-gradient(180deg, #ffd700 0%, #ffaa00 100%); - border-color: #aa7700; - color: #332200; - text-shadow: 1px 1px 0 rgba(255,255,255,0.5); +/* Honor tiers step from solid maroon down to a neutral chip. The text always names the tier. */ +.honor-status.summa, +.scholar-badge.university-scholar { + background: var(--brand); + border-color: var(--brand); + color: var(--on-brand); } .honor-status.magna { - background: linear-gradient(180deg, #e0e0e0 0%, #a0a0a0 100%); - border-color: #606060; - color: #222; -} - -.honor-status.cum-laude { - background: linear-gradient(180deg, #cd8500 0%, #8b4513 100%); - border-color: #5a2d0a; - color: #fff; + background: var(--brand-tint-strong); } -.honor-status.honor-roll { - background: linear-gradient(180deg, #6699ff 0%, #3366cc 100%); - border-color: #224488; - color: #fff; +.honor-status.honor-roll, +.scholar-badge.honor-roll { + background: var(--bg-card); + border-color: var(--border); + color: var(--ink); } -/* Tabs */ +/* Tabs: plain segmented row with a maroon underline */ .tabs { display: flex; - gap: 0; - margin-bottom: 0; + border-bottom: 1px solid var(--border); + margin-bottom: 12px; } .tab { flex: 1; - padding: 10px 8px; - background: var(--card-bg); - border: 2px solid var(--card-border); - border-bottom: 2px solid var(--gem-mid); + min-height: 40px; + background: none; + border: 0; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + font: 600 0.85rem var(--font-sans); + color: var(--muted); cursor: pointer; - font-family: var(--font-body); - font-size: 0.85rem; - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.5px; - transition: all 0.2s; } .tab:hover { - color: var(--gem-light); - background: var(--bg-light); + color: var(--ink); } .tab.active { - color: var(--gem-light); - background: var(--bg-light); - border-color: var(--gem-mid); - border-bottom: 2px solid var(--bg-light); + color: var(--brand); + border-bottom-color: var(--brand); } .tab-content { display: none; - background: var(--bg-light); - border: 2px solid var(--gem-mid); - border-top: none; - padding: 16px 14px; } .tab-content.active { display: block; } -/* View Toggle (Semester/Year) */ +/* Semester or year toggle */ .view-toggle { display: flex; gap: 4px; + padding: 3px; margin-bottom: 12px; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-pill); } .view-btn { flex: 1; - padding: 6px 10px; - background: var(--card-bg); - border: 2px solid var(--card-border); - color: var(--text-secondary); - font-family: var(--font-body); - font-size: 0.85rem; + min-height: 32px; + border: 0; + border-radius: var(--radius-pill); + background: none; + font: 600 0.8rem var(--font-sans); + color: var(--muted); cursor: pointer; - transition: all 0.15s; -} - -.view-btn:hover { - border-color: var(--gem-dark); - color: var(--text-primary); } .view-btn.active { - background: var(--gem-dark); - border-color: var(--gem-mid); - color: var(--gem-light); -} - -/* Grades List */ -.grades-list { - max-height: 260px; - overflow-y: auto; - scrollbar-width: thin; - scrollbar-color: var(--gem-dark) var(--bg-dark); + background: var(--bg-elevated); + color: var(--ink); + box-shadow: var(--shadow-sm); } +/* Grade list. No inner scroll box: the popup itself scrolls. */ .semester-group { margin-bottom: 12px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); + overflow: hidden; } .semester-header { display: flex; + flex-wrap: wrap; justify-content: space-between; align-items: center; - flex-wrap: wrap; - gap: 8px; - background: linear-gradient(90deg, var(--gem-dark) 0%, transparent 100%); - color: var(--gem-light); + gap: 6px; padding: 8px 12px; - font-size: 1rem; - text-transform: uppercase; - letter-spacing: 1px; - border-left: 4px solid var(--gem-light); + background: var(--bg-card); + border-bottom: 1px solid var(--border); + font-weight: 600; } -.semester-header .group-title { +.group-title { flex: 1; - min-width: 120px; + min-width: 140px; } -.semester-header .group-gwa-info { +.group-gwa-info { display: flex; align-items: center; - gap: 8px; - font-size: 0.9rem; -} - -.semester-header .group-gwa { - color: var(--text-primary); - font-weight: normal; - text-transform: none; -} - -.scholar-badge { - font-size: 0.75rem; - padding: 2px 6px; - border-radius: 2px; - text-transform: none; - letter-spacing: 0; -} - -.scholar-badge.university-scholar { - background: linear-gradient(180deg, #dfc785 0%, #c0a060 100%); - color: #1a1a1c; - font-weight: 700; -} - -.scholar-badge.college-scholar { - background: linear-gradient(180deg, #b0b0ba 0%, #80808a 100%); - color: #1a1a1c; - font-weight: 700; + gap: 6px; + font-size: 0.8rem; } -.scholar-badge.honor-roll { - background: linear-gradient(180deg, #8ba8c4 0%, #5d81a3 100%); - color: #1a1a1c; - font-weight: 700; +.group-gwa { + color: var(--muted); + font-variant-numeric: tabular-nums; } -.course-item { +.course-item, +.remaining-item { display: flex; justify-content: space-between; align-items: center; - padding: 10px 12px; - background: var(--card-bg); - border: 1px solid var(--card-border); - border-top: none; + gap: 8px; + padding: 8px 12px; + border-top: 1px solid var(--border); } -.course-item:nth-child(odd) { - background: rgba(0, 0, 0, 0.2); +.semester-header + .course-item { + border-top: 0; } .course-info { flex: 1; + min-width: 0; } .course-code { - font-size: 0.95rem; - color: var(--text-primary); + font-weight: 600; } .course-title { font-size: 0.8rem; - color: var(--text-secondary); + color: var(--muted); } .course-grade { display: flex; align-items: center; - gap: 10px; -} - -.grade-value { - font-family: 'Press Start 2P', cursive; - font-size: 0.65rem; - min-width: 45px; - text-align: center; - padding: 3px 6px; - border: 2px solid; + gap: 6px; } -.grade-value.excellent { - color: var(--gem-light); - border-color: var(--gem-dark); - background: rgba(0, 100, 0, 0.3); +.units-badge { + font-size: 0.75rem; + color: var(--muted); + min-width: 24px; + text-align: right; } -.grade-value.good { - color: var(--info); - border-color: #226; - background: rgba(0, 50, 100, 0.3); +.grade-value { + display: inline-flex; + align-items: center; + justify-content: flex-end; + gap: 4px; + min-width: 56px; + font-weight: 700; + font-variant-numeric: tabular-nums; + color: var(--ink); } -.grade-value.passing { - color: var(--warning); - border-color: #660; - background: rgba(100, 100, 0, 0.3); +.grade-value.failed, +.grade-value.unsatisfactory { + color: var(--bad); } -.grade-value.failed { - color: var(--danger); - border-color: #600; - background: rgba(100, 0, 0, 0.3); +.grade-value.other-grade { + color: var(--warn); } .grade-value.satisfactory { - color: var(--gem-light); - border-color: var(--gem-dark); - background: rgba(0, 100, 0, 0.3); - font-size: 0.9rem; + color: var(--ok); } -.grade-value.unsatisfactory { - color: var(--danger); - border-color: #600; - background: rgba(100, 0, 0, 0.3); - font-size: 0.9rem; +.course-item.non-numeric { + background: var(--bg-card); } -.grade-value.other-grade { - color: var(--text-secondary); - border-color: var(--card-border); - background: rgba(50, 50, 50, 0.3); - font-size: 0.9rem; +.course-item.excluded { + opacity: 0.6; } -.course-item.non-numeric { - opacity: 0.85; +.course-item.excluded .course-code, +.course-item.excluded .course-title { + text-decoration: line-through; } -.units-badge { - background: var(--bg-dark); - padding: 3px 6px; - font-size: 0.75rem; - color: var(--text-secondary); - border: 1px solid var(--card-border); -} - -/* What If Section */ -.whatif-container h3 { - margin-bottom: 10px; - color: var(--gem-light); - font-size: 1rem; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.honor-options { - display: flex; - flex-direction: column; - gap: 6px; - margin-bottom: 16px; -} - -.honor-option { - display: flex; - align-items: center; - padding: 10px 12px; - background: var(--card-bg); - border: 2px solid var(--card-border); +.exclude-toggle { + min-height: 32px; + min-width: 48px; + padding: 4px 10px; + border-radius: var(--radius-pill); + border: 1px solid var(--border-input); + background: var(--bg-elevated); + color: var(--muted); + font: 600 0.75rem var(--font-sans); cursor: pointer; - transition: all 0.2s; -} - -.honor-option:hover { - border-color: var(--gem-mid); - background: rgba(0, 100, 0, 0.2); -} - -.honor-option:has(input:checked) { - border-color: var(--gem-light); - background: rgba(0, 100, 0, 0.3); - box-shadow: inset 0 0 10px var(--gem-glow); } -.honor-option input[type="radio"] { - margin-right: 12px; - accent-color: var(--gem-light); - width: 16px; - height: 16px; -} - -.honor-label { - display: flex; - flex-direction: column; - flex: 1; -} - -.honor-label strong { - font-size: 0.95rem; - color: var(--text-primary); -} - -.honor-label small { - color: var(--text-secondary); - font-size: 0.8rem; -} - -.honor-label input[type="number"] { - margin-top: 6px; - padding: 8px; - background: var(--bg-dark); - border: 2px solid var(--card-border); - color: var(--gem-light); - font-family: 'VT323', monospace; - font-size: 1.1rem; - width: 120px; -} - -.honor-label input[type="number"]:focus { - outline: none; - border-color: var(--gem-mid); -} - -#calculateBtn { - width: 100%; - margin-bottom: 20px; -} - -/* What If Results */ -.whatif-results { - background: var(--card-bg); - border: 2px solid var(--card-border); - padding: 16px; - margin-bottom: 20px; -} - -.whatif-results h3 { - margin-bottom: 12px; - border-bottom: 2px dashed var(--card-border); - padding-bottom: 8px; +.exclude-toggle:hover, +.exclude-toggle.excluded { + border-color: var(--brand-line); + background: var(--brand-tint); + color: var(--brand); } +/* Notices */ +.shiftee-info, +.track-info, +.free-elective-notice, .result-summary { - padding: 12px; + padding: 10px 12px; margin-bottom: 12px; - font-size: 1.1rem; - border: 2px solid; + border-radius: var(--radius-md); + border: 1px solid var(--border); + background: var(--bg-card); } -.result-summary.achieved, -.result-summary.excellent { - background: rgba(0, 100, 0, 0.3); - border-color: var(--gem-mid); - color: var(--gem-light); -} - -.result-summary.good { - background: rgba(0, 100, 0, 0.2); - border-color: var(--gem-dark); - color: var(--gem-light); +.shiftee-info small { + display: block; + margin-top: 4px; + color: var(--muted); } -.result-summary.moderate { - background: rgba(100, 100, 0, 0.2); - border-color: #666600; - color: var(--warning); +.track-info.detected, +.result-summary.achieved, +.result-summary.excellent, +.result-summary.good, +.free-elective-notice.complete { + color: var(--ok); + border-color: color-mix(in srgb, var(--ok) 35%, transparent); + background: color-mix(in srgb, var(--ok) 8%, transparent); } -.result-summary.difficult { - background: rgba(100, 80, 0, 0.2); - border-color: #664400; - color: #ffaa00; +.track-info.not-detected, +.shiftee-info, +.result-summary.moderate, +.result-summary.difficult, +.free-elective-notice.unavailable { + color: var(--warn); + border-color: color-mix(in srgb, var(--warn) 35%, transparent); + background: color-mix(in srgb, var(--warn) 8%, transparent); } .result-summary.impossible { - background: rgba(100, 0, 0, 0.3); - border-color: #660000; - color: var(--danger); + color: var(--bad); + border-color: color-mix(in srgb, var(--bad) 35%, transparent); + background: color-mix(in srgb, var(--bad) 8%, transparent); } -.result-details { - font-size: 1rem; -} - -.result-row { +.result-summary, +.track-info { display: flex; - justify-content: space-between; align-items: center; - padding: 8px 0; - border-bottom: 1px dashed var(--card-border); - gap: 12px; -} - -.result-row:last-child { - border-bottom: none; -} - -.result-row span:first-child { - flex-shrink: 0; -} - -.result-row .value { - color: var(--gem-light); - font-weight: bold; - text-align: right; -} - -.result-row.highlight { - background: rgba(0, 100, 0, 0.2); - padding: 12px; - margin: 12px -12px 0; - border: 2px solid var(--gem-dark); - flex-direction: column; - align-items: stretch; gap: 8px; + font-weight: 600; } -.result-row.highlight span:first-child { - color: var(--text-secondary); - font-size: 0.95rem; -} - -.result-row.highlight .value { - font-family: 'VT323', monospace; - font-size: 1.3rem; - text-align: center; - padding: 8px; - background: var(--bg-dark); - border: 1px solid var(--gem-dark); - word-break: break-word; -} - -/* Track Selector */ -.track-selector { - margin-bottom: 20px; - padding: 16px; - background: var(--card-bg); - border: 2px solid var(--card-border); -} - -.track-selector h3 { - font-size: 1.1rem; - margin-bottom: 10px; - color: var(--gem-light); - text-transform: uppercase; -} - -.track-info { - font-size: 1rem; - margin-bottom: 12px; - padding: 8px 12px; - border: 2px solid; -} - -.track-info.detected { - background: rgba(0, 100, 0, 0.2); - border-color: var(--gem-dark); - color: var(--gem-light); -} - -.track-info.not-detected { - background: rgba(100, 100, 0, 0.2); - border-color: #666600; - color: var(--warning); -} - +/* What if */ +.honor-options, .track-options { display: flex; flex-direction: column; gap: 6px; + margin-bottom: 16px; } +.honor-option, .track-option { display: flex; align-items: center; + gap: 10px; padding: 10px 12px; - border: 2px solid var(--card-border); + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); cursor: pointer; - transition: all 0.2s ease; - background: transparent; } +.honor-option:hover, .track-option:hover { - border-color: var(--gem-mid); - background: rgba(0, 100, 0, 0.1); + border-color: var(--brand-line); } +.honor-option:has(input:checked), .track-option:has(input:checked) { - border-color: var(--gem-light); - background: rgba(0, 100, 0, 0.2); + border-color: var(--brand); + background: var(--brand-tint); } -.track-option input[type="radio"] { - margin-right: 10px; - accent-color: var(--gem-light); +input[type="radio"] { + accent-color: var(--brand); + width: 16px; + height: 16px; } +.honor-label, .track-label { display: flex; flex-direction: column; + flex: 1; } -.track-label strong { - font-size: 0.95rem; - color: var(--text-primary); -} - +.honor-label small, .track-label small { - color: var(--text-secondary); + color: var(--muted); font-size: 0.8rem; } -/* Remaining Courses */ -.remaining-courses { - margin-top: 20px; -} - -.remaining-courses h3 { - margin-bottom: 4px; - color: var(--gem-light); - text-transform: uppercase; +.honor-label input[type="number"] { + margin-top: 6px; + padding: 6px 8px; + width: 120px; } -.remaining-courses .hint { - margin-bottom: 12px; +#calculateBtn { + width: 100%; + margin-bottom: 16px; } -#remainingList { - max-height: 200px; - overflow-y: auto; +.whatif-results, +.track-selector { + padding: 14px; + margin-bottom: 16px; } -.remaining-item { +.result-row { display: flex; justify-content: space-between; - align-items: center; - padding: 8px 12px; - background: var(--card-bg); - border: 1px solid var(--card-border); - margin-bottom: 2px; - font-size: 1rem; -} - -.remaining-item:nth-child(odd) { - background: rgba(0, 0, 0, 0.2); -} - -.remaining-item .course-code { - font-size: 1rem; -} - -.free-elective-notice { - padding: 12px; - background: rgba(0, 50, 100, 0.3); - border: 2px solid #224488; - margin-top: 12px; - font-size: 1rem; - color: var(--info); -} - -/* Custom Scrollbar */ -::-webkit-scrollbar { - width: 8px; -} - -::-webkit-scrollbar-track { - background: var(--bg-dark); - border: 1px solid var(--card-border); -} - -::-webkit-scrollbar-thumb { - background: linear-gradient(180deg, var(--gem-mid) 0%, var(--gem-dark) 100%); - border: 1px solid var(--gem-dark); -} - -::-webkit-scrollbar-thumb:hover { - background: linear-gradient(180deg, var(--gem-light) 0%, var(--gem-mid) 100%); -} - -/* Pixel corners decoration */ -.gwa-section::after { - content: ''; - position: absolute; - bottom: -3px; - right: -3px; - width: 10px; - height: 10px; - background: var(--gem-mid); - clip-path: polygon(100% 0, 100% 100%, 0 100%); -} - -/* Excluded Course Styles (for shiftees) */ -.course-item.excluded { - opacity: 0.5; - background: rgba(100, 0, 0, 0.15) !important; - border-left: 3px solid var(--danger); -} - -.course-item.excluded .course-code, -.course-item.excluded .course-title { - text-decoration: line-through; + gap: 12px; + padding: 6px 0; + border-bottom: 1px solid var(--border); } -.exclude-toggle { - background: transparent; - border: 2px solid var(--card-border); - color: var(--text-secondary); - padding: 3px 6px; - font-family: var(--font-body); - font-size: 0.7rem; - cursor: pointer; - transition: all 0.15s; - margin-right: 6px; - min-width: 55px; +.result-row:last-child { + border-bottom: 0; } -.exclude-toggle:hover { - border-color: var(--gem-light); - color: var(--gem-light); +.result-row .value { + font-weight: 700; + font-variant-numeric: tabular-nums; + text-align: right; } -.exclude-toggle.excluded { - background: rgba(255, 68, 68, 0.2); - border-color: var(--danger); - color: var(--danger); +.result-row.highlight .value { + color: var(--brand); } -.exclude-toggle.excluded:hover { - background: rgba(0, 100, 0, 0.2); - border-color: var(--gem-light); - color: var(--gem-light); +.remaining-courses { + margin-top: 16px; } -/* Shiftee Info Banner */ -.shiftee-info { - background: rgba(100, 100, 0, 0.2); - border: 2px solid #666600; - color: var(--warning); - padding: 10px 12px; - margin-bottom: 12px; - font-size: 0.95rem; +.remaining-courses .hint { + margin-bottom: 8px; } -.shiftee-info strong { - color: var(--warning); +#remainingList { + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-md); + overflow: hidden; } -.shiftee-info small { - color: var(--text-secondary); - display: block; - margin-top: 4px; +#remainingList > :first-child { + border-top: 0; } -/* Wrapped Feature */ -.wrapped-container { - display: flex; - flex-direction: column; - min-height: 350px; +#remainingList .free-elective-notice { + margin: 8px; } +/* Wrapped. The panel content and share card are redone in a later step. */ .wrapped-panel { - flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; - text-align: center; - padding: 20px; + gap: 8px; min-height: 300px; - background: linear-gradient(135deg, var(--bg-dark) 0%, var(--bg-mid) 50%, var(--bg-light) 100%); - border: 3px solid var(--gem-mid); - box-shadow: 0 0 20px var(--gem-glow), inset 0 0 30px rgba(0, 212, 0, 0.1); - animation: panelGlow 2s ease-in-out infinite alternate; + padding: 20px; + text-align: center; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); } -@keyframes panelGlow { - 0% { box-shadow: 0 0 20px var(--gem-glow), inset 0 0 30px rgba(0, 212, 0, 0.1); } - 100% { box-shadow: 0 0 35px var(--gem-glow), inset 0 0 40px rgba(0, 212, 0, 0.15); } +.panel-emoji { + font-size: 2.5rem; } -.wrapped-panel .panel-emoji { - font-size: 3rem; - margin-bottom: 12px; - animation: bounce 1s ease-in-out infinite; +.panel-title { + font-family: var(--font-display); + font-weight: 700; + color: var(--muted); } -@keyframes bounce { - 0%, 100% { transform: translateY(0); } - 50% { transform: translateY(-10px); } +.panel-value { + font-family: var(--font-display); + font-size: 2rem; + font-weight: 800; + color: var(--brand); } -.wrapped-panel .panel-title { - font-family: var(--font-header); - font-size: 0.7rem; - color: var(--gem-light); - margin-bottom: 12px; - text-shadow: 0 0 6px var(--gem-glow); - line-height: 1.5; - word-wrap: break-word; +.panel-subtitle { + color: var(--muted); max-width: 300px; - text-align: center; } -.wrapped-panel .panel-value { - font-family: var(--font-header); - font-size: 1.6rem; - color: var(--text-primary); - margin-bottom: 12px; - text-shadow: 1px 1px 0 var(--gem-dark); +.panel-message { + padding: 8px 12px; + border-radius: var(--radius-md); + background: var(--brand-tint); + color: var(--ink); + max-width: 300px; } -.wrapped-panel .panel-subtitle { - font-family: var(--font-body); - font-size: 1rem; - color: var(--text-secondary); - max-width: 280px; - line-height: 1.4; +.highlight-course { + width: 100%; + max-width: 300px; + padding: 8px 12px; + text-align: left; + border-radius: var(--radius-md); + background: var(--bg-card); + border: 1px solid var(--border); } -.wrapped-panel .panel-message { - font-family: var(--font-body); - font-size: 0.95rem; - color: var(--gem-light); - margin-top: 15px; - padding: 10px 15px; - background: rgba(0, 212, 0, 0.15); - border: 2px solid var(--gem-mid); - max-width: 300px; - line-height: 1.5; +.highlight-course .course-label { + font-size: 0.8rem; + color: var(--muted); } -.wrapped-panel .highlight-course { - background: rgba(0, 212, 0, 0.2); - padding: 8px 12px; - margin: 8px 0; - border-left: 4px solid var(--gem-mid); - text-align: left; - width: 100%; - max-width: 280px; - font-family: var(--font-body); +.highlight-course .course-name { + font-weight: 700; } -.wrapped-panel .highlight-course .course-label { - font-family: var(--font-body); - font-size: 0.9rem; - color: var(--text-secondary); +.grade-badges { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 6px; } -.wrapped-panel .highlight-course .course-name { - font-family: var(--font-body); - font-size: 1.1rem; - color: var(--gem-light); - font-weight: bold; +.grade-badge { + padding: 2px 10px; + border-radius: var(--radius-pill); + border: 1px solid var(--border); + background: var(--bg-card); + font-weight: 600; } -.wrapped-panel .highlight-course .course-grade { - font-family: var(--font-body); - font-size: 1rem; - color: var(--text-primary); +.grade-badge.special { + color: var(--warn); + border-color: color-mix(in srgb, var(--warn) 35%, transparent); + background: color-mix(in srgb, var(--warn) 8%, transparent); } -/* Wrapped Navigation */ .wrapped-nav { display: flex; justify-content: space-between; align-items: center; - padding: 15px 10px; - background: var(--card-bg); - border: 2px solid var(--card-border); - border-top: none; + padding: 12px 0; } .wrapped-nav-btn { - background: linear-gradient(180deg, var(--gem-light) 0%, var(--gem-mid) 100%); - color: var(--bg-dark); - border: none; - padding: 8px 16px; - font-family: var(--font-body); - font-size: 0.85rem; - font-weight: bold; + display: inline-flex; + align-items: center; + gap: 4px; + min-height: 36px; + padding: 6px 14px; + border-radius: var(--radius-pill); + font: 600 0.85rem var(--font-sans); cursor: pointer; - transition: all 0.2s; -} - -.wrapped-nav-btn:hover:not(:disabled) { - transform: scale(1.05); - box-shadow: 0 0 15px var(--gem-glow); } .wrapped-nav-btn:disabled { - background: var(--bg-light); - color: var(--text-secondary); + opacity: 0.45; cursor: not-allowed; } .wrapped-progress { - font-family: 'Press Start 2P', cursive; - font-size: 0.55rem; - color: var(--gem-light); + color: var(--muted); + font-variant-numeric: tabular-nums; } -/* Export button */ .wrapped-export { - margin-top: 15px; width: 100%; - font-size: 1rem !important; -} - -/* Grade collector badges */ -.grade-badges { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 8px; - margin: 10px 0; } -.grade-badge { - padding: 5px 10px; - font-size: 0.9rem; - border: 2px solid var(--gem-mid); - background: rgba(0, 212, 0, 0.2); - color: var(--gem-light); -} - -.grade-badge.special { - border-color: var(--warning); - background: rgba(255, 255, 0, 0.2); - color: var(--warning); -} - -/* Course Substitutions styles */ +/* Course substitutions */ .substitutions-container { - margin-top: 20px; - padding: 16px; - background: var(--card-bg); - border: 2px solid var(--card-border); -} - -.substitutions-container h3 { - font-size: 1.1rem; - margin-bottom: 10px; - color: var(--gem-light); - text-transform: uppercase; + padding: 14px; + margin-bottom: 16px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); } .substitutions-list { display: flex; flex-direction: column; gap: 6px; - margin-bottom: 14px; - max-height: 120px; - overflow-y: auto; + margin-bottom: 12px; } .no-substitutions-notice { - font-size: 0.9rem; - color: var(--text-secondary); - font-style: italic; - padding: 6px 0; + color: var(--muted); + font-size: 0.85rem; } .substitution-item { display: flex; justify-content: space-between; align-items: center; - padding: 8px 12px; - background: rgba(0, 212, 0, 0.1); - border: 1px solid var(--gem-dark); - font-size: 0.95rem; -} - -.substitution-item .sub-map { - color: var(--text-primary); + gap: 8px; + padding: 4px 4px 4px 12px; + background: var(--brand-tint); + border: 1px solid var(--brand-line); + border-radius: var(--radius-md); } -.substitution-item .sub-map strong { - color: var(--gem-light); +.sub-via { + color: var(--muted); + font-size: 0.8rem; } .btn-remove-sub { - background: transparent; - border: none; - color: var(--danger); - font-size: 1.2rem; - font-weight: bold; + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border: 0; + border-radius: var(--radius-pill); + background: none; + color: var(--bad); + font-size: 16px; cursor: pointer; - padding: 0 4px; - line-height: 1; } .btn-remove-sub:hover { - color: #ff3333; + background: color-mix(in srgb, var(--bad) 12%, transparent); } .add-sub-box { display: flex; flex-direction: column; gap: 10px; - border-top: 1px dashed var(--card-border); padding-top: 12px; + border-top: 1px solid var(--border); } .sub-field { @@ -1402,164 +926,109 @@ header h1 { } .sub-field label { - font-size: 0.85rem; - color: var(--text-secondary); + font-size: 0.8rem; + font-weight: 600; + color: var(--muted); } .sub-field select { - padding: 8px; - background: var(--bg-dark); - border: 2px solid var(--card-border); - color: var(--gem-light); - font-family: 'VT323', monospace; - font-size: 1.1rem; width: 100%; -} - -.sub-field select:focus { - outline: none; - border-color: var(--gem-mid); + min-height: 40px; + padding: 8px 10px; } #addSubBtn { width: 100%; - margin-top: 4px; } -/* Terms & Privacy Overlay */ +/* Data import and export */ +.data-actions-footer { + display: flex; + justify-content: center; + gap: 8px; + margin-top: 16px; + padding-top: 12px; + border-top: 1px solid var(--border); +} + +/* Modals. Terms and help share the shell. */ .terms-overlay { position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(22, 22, 28, 0.97); - backdrop-filter: blur(4px); - z-index: 10000; + inset: 0; + z-index: 100; display: flex; justify-content: center; align-items: center; padding: 16px; + background: color-mix(in srgb, var(--bg-page) 80%, transparent); + backdrop-filter: blur(4px); } .terms-modal { - width: 100%; - max-width: 600px; - max-height: 95%; - background: var(--card-bg); - border: 3px solid var(--gem-mid); - box-shadow: - 0 0 25px var(--gem-glow), - 0 10px 30px rgba(0, 0, 0, 0.5); + position: relative; display: flex; flex-direction: column; - padding: 20px; - position: relative; -} - -.terms-modal::before { - content: '◆ AGREEMENT ◆'; - position: absolute; - top: -12px; - left: 50%; - transform: translateX(-50%); - background: var(--card-bg); - padding: 0 12px; - font-family: var(--font-header); - font-size: 0.75rem; - color: var(--gem-light); - letter-spacing: 2px; + width: 100%; + max-width: 560px; + max-height: 100%; + padding: 18px; + background: var(--bg-elevated); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-lg); } .terms-header { - text-align: center; + padding: 0 40px 12px; margin-bottom: 12px; - border-bottom: 2px dashed var(--gem-dark); - padding-bottom: 10px; + text-align: center; + border-bottom: 1px solid var(--border); } .terms-header h2 { - font-family: var(--font-header); - color: var(--gem-light); - font-size: 0.8rem; - margin-bottom: 4px; - text-shadow: 1px 1px 0 var(--gem-dark); + font-size: 1.1rem; } .terms-header p { - color: var(--text-secondary); - font-size: 0.85rem; + color: var(--muted); } .terms-content { + flex: 1; overflow-y: auto; - background: var(--bg-dark); - border: 2px solid var(--card-border); - padding: 16px 20px; margin-bottom: 12px; - font-size: 0.95rem; - line-height: 1.6; - flex-grow: 1; -} - -/* Scrollbar for terms content */ -.terms-content::-webkit-scrollbar { - width: 8px; -} -.terms-content::-webkit-scrollbar-track { - background: var(--bg-dark); -} -.terms-content::-webkit-scrollbar-thumb { - background: var(--gem-dark); - border: 2px solid var(--bg-dark); -} -.terms-content::-webkit-scrollbar-thumb:hover { - background: var(--gem-mid); + line-height: 1.55; + color: var(--body); } -.terms-section { - margin-bottom: 10px; -} -.terms-section:last-child { - margin-bottom: 0; +.terms-section + .terms-section { + margin-top: 12px; } .terms-section h3 { - color: var(--gem-light); - font-size: 1rem; - margin-bottom: 6px; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.terms-section p { - margin-bottom: 12px; - color: var(--text-primary); + margin-bottom: 4px; } .terms-footer { display: flex; flex-direction: column; gap: 10px; - border-top: 2px dashed var(--gem-dark); - padding-top: 10px; + padding-top: 12px; + border-top: 1px solid var(--border); } .terms-agreement-label { display: flex; align-items: flex-start; gap: 8px; - color: var(--text-primary); - font-size: 0.85rem; cursor: pointer; - user-select: none; } -.terms-agreement-label input[type="checkbox"] { - accent-color: var(--gem-light); - width: 14px; - height: 14px; - margin-top: 2px; +.terms-agreement-label input { + accent-color: var(--brand); + width: 16px; + height: 16px; + margin-top: 1px; flex-shrink: 0; } @@ -1567,217 +1036,149 @@ header h1 { width: 100%; } -.terms-modal .btn:disabled { - background: linear-gradient(180deg, #555 0%, #444 50%, #333 100%); - color: #777; - border-color: #333; - box-shadow: - inset -2px -2px 0 #333, - inset 2px 2px 0 rgba(255,255,255,0.1), - 0 4px 0 #222; - cursor: not-allowed; - transform: none; -} - -/* Terms link in footer */ -.terms-link { - color: var(--gem-light); - text-decoration: underline; - cursor: pointer; - font-weight: 600; -} - -.terms-link:hover { - color: var(--success); - text-shadow: 0 0 4px var(--gem-glow); -} - -/* Close button inside modal */ .close-terms-btn { position: absolute; top: 10px; - right: 12px; - background: transparent; - border: none; - color: var(--text-secondary); - font-size: 1.6rem; - font-weight: bold; + right: 10px; + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border: 0; + border-radius: var(--radius-pill); + background: none; + color: var(--muted); + font-size: 18px; cursor: pointer; - line-height: 1; - padding: 4px; - z-index: 10001; - transition: color 0.15s; } .close-terms-btn:hover { - color: var(--danger); -} - -/* Small pixel buttons */ -.btn-sm { - min-height: 44px; - padding: 6px 12px; - font-size: 0.75rem; - box-shadow: - inset -1px -1px 0 rgba(0,0,0,0.5), - inset 1px 1px 0 rgba(255,255,255,0.2), - 0 2px 0 rgba(0,0,0,0.5); + background: var(--brand-tint); + color: var(--ink); } -.btn-sm:hover { - transform: translateY(-1px); - box-shadow: - inset -1px -1px 0 rgba(0,0,0,0.5), - inset 1px 1px 0 rgba(255,255,255,0.2), - 0 3px 0 rgba(0,0,0,0.5); -} - -.btn-sm:active { - transform: translateY(1px); - box-shadow: - inset -1px -1px 0 rgba(0,0,0,0.5), - inset 1px 1px 0 rgba(255,255,255,0.2), - 0 1px 0 rgba(0,0,0,0.5); +.help-modal { + max-width: 500px; } -/* Data actions container in footer */ -.data-actions-footer { - display: flex; - justify-content: center; - gap: 12px; - margin-top: 16px; - padding-top: 12px; - border-top: 2px dashed var(--card-border); +.help-modal .terms-header { + text-align: left; + padding-left: 0; } -/* Tab Mode / Web App Mode */ -body.tab-mode { - width: 100% !important; - max-width: 100% !important; - min-height: 100vh !important; - max-height: none !important; - overflow-y: auto !important; +.help-item { display: flex; - justify-content: center; align-items: flex-start; - padding: 30px 24px; - font-size: 13px; -} - -body.tab-mode .container { - width: 100%; - max-width: 1000px; - margin: 0 auto; - background: var(--bg-mid); - border: 3px solid var(--gem-dark); - box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5); - padding: 20px 28px 28px; + gap: 12px; + padding: 12px 0; + border-bottom: 1px solid var(--border); } -body.tab-mode header { - margin-bottom: 20px; - padding-bottom: 14px; +.help-item:first-child { + padding-top: 0; } -body.tab-mode header::before { - width: 36px; - height: 44px; - margin: 0 auto 8px; +.help-item:last-child { + border-bottom: 0; } -body.tab-mode header h1 { - font-size: 1rem; +.help-badge { + flex-shrink: 0; + width: 72px; + padding: 4px; + text-align: center; + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 0.02em; + color: var(--ink); + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius-pill); } -body.tab-mode #openTabBtn { - display: none !important; +.help-badge.btn-primary { + color: var(--on-brand); + background: var(--brand); + border-color: var(--brand); } -body.tab-mode .tab-layout-grid { - display: flex; - flex-direction: column; - gap: 20px; +.help-badge.scholar { + background: var(--brand-tint-strong); + border-color: var(--brand-line); + color: var(--brand); } -@media (min-width: 900px) { - body.tab-mode .tab-layout-grid { - display: grid; - grid-template-columns: 320px 1fr; - gap: 24px; - align-items: start; - } -} - -@media (min-width: 1100px) { - body.tab-mode .tab-layout-grid { - grid-template-columns: 340px 1fr; - gap: 28px; - } +.help-text { + flex: 1; + min-width: 0; } -body.tab-mode .sidebar-column { - display: flex; - flex-direction: column; - gap: 0; +.help-text strong { + display: block; + margin-bottom: 2px; + color: var(--ink); } -@media (min-width: 900px) { - body.tab-mode .sidebar-column { - position: sticky; - top: 30px; - } +.legend-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); + gap: 4px; + margin-top: 6px; } -body.tab-mode .content-column { +.legend-item { display: flex; - flex-direction: column; - gap: 0; - min-width: 0; -} - -body.tab-mode .program-selector { - margin-bottom: 0; - padding: 14px 16px; - border-bottom: none; + align-items: baseline; + gap: 6px; + font-size: 0.8rem; } -body.tab-mode .gwa-section { - margin-bottom: 0; - padding: 18px 16px; +.legend-grade { + min-width: 34px; + font-weight: 700; + font-variant-numeric: tabular-nums; + color: var(--ink); } -body.tab-mode .credits { - margin-bottom: 0; - padding: 10px 0 4px; +.legend-desc { + color: var(--muted); } -body.tab-mode .grades-list { - max-height: none; - overflow-y: visible; +/* Full tab. Two columns from 900px, the sidebar sticks. */ +body.tab-mode { + width: auto; + min-height: 100vh; } -body.tab-mode .tab-content { - padding: 18px 16px; +body.tab-mode .container { + max-width: 1040px; + margin: 0 auto; + padding: 24px; } -body.tab-mode .course-item { - padding: 12px 16px; +body.tab-mode #openTabBtn { + display: none; } -body.tab-mode .course-code { - font-size: 1rem; -} +@media (min-width: 900px) { + body.tab-mode .tab-layout-grid { + display: grid; + grid-template-columns: 320px minmax(0, 1fr); + gap: 24px; + align-items: start; + } -body.tab-mode .course-title { - font-size: 0.85rem; + body.tab-mode .sidebar-column { + position: sticky; + top: 24px; + } } -body.tab-mode .semester-header { - padding: 10px 14px; - font-size: 1rem; +/* Footer */ +.footer { + padding: 0 16px 16px; + text-align: center; + font-size: 0.75rem; + color: var(--muted); } - -body.tab-mode .data-actions-footer { - margin-top: 20px; - padding-top: 16px; -} \ No newline at end of file diff --git a/extension/src/popup.html b/extension/src/popup.html index 29f856e..36bf31a 100644 --- a/extension/src/popup.html +++ b/extension/src/popup.html @@ -4,25 +4,21 @@ Elbi GradeSim +
    - +
    - + @@ -231,6 +228,13 @@

    Remaining Courses

    + + +