Projects
Case Study Production

UPLB Asset Management System

A centralized asset management portal for UPLB — a QR-tagged property registry with custodianship and transfer history, depreciation schedules, and COA-compliant PAR/ICS reporting that replaced spreadsheet-based property records.

Full-stack Software Engineer ·2023 – 2024 ·University of the Philippines Los Baños

Laravel 12 Filament 4 PostgreSQL React Docker

What It Is

The UPLB Asset Management System tracks the university’s physical and IT assets across its colleges and administrative units. It replaced a pile of per-unit spreadsheets and paper property cards with one registry: QR-tagged assets, custodianship and transfer history, depreciation schedules, and inventory reports that survive an audit.

Property officers, custodians, and auditors use it to register assets, assign accountability, run the annual physical count, and generate the Property Acknowledgement Receipts (PAR) and Inventory Custodian Slips (ICS) the Commission on Audit requires. The annual reconciliation went from a multi-week paper chase to something you can report on as it happens.

The Problem

Thousands of assets — lab equipment, IT hardware, furniture, vehicles — tracked in spreadsheets kept per unit, backed by paper PAR/ICS forms. That gets you:

  • No single source of truth. Every unit had its own format, so the same asset could appear differently in two files, or not at all.
  • A brutal physical count. Reconciling what’s on the shelf against what’s on record took weeks, and the discrepancies turned into recurring COA audit findings.
  • A weak accountability trail. Transfers between custodians were recorded informally, so “who was accountable for this in 2022?” often had no answer.
  • Hand-assembled reports. PAR/ICS forms and inventory reports were put together by hand, which is exactly as consistent as it sounds.

What I Built

I led it end-to-end as the primary engineer.

  • The data model. PostgreSQL schema for assets, custodians, units, transfers, and the PAR/ICS accountability records, normalized around asset lifecycle and custodianship history. Major and minor assets are separate models, because the accounting rules treat them differently.
  • The admin platform. Laravel + Filament, with resource CRUD, custom actions and bulk operations, multi-unit data scoping, and roles for property officers, custodians, and auditors. Custodians see only their unit; officers and auditors see across units.
  • QR tagging. Every asset carries a unique QR tag that resolves to its record, used for scan-to-locate and verification during counts.
  • Document generation. PAR, ICS, and inventory reports as print-ready PDFs matching COA formats, driven by a template-based PDF builder so a layout change doesn’t need a code release.
  • Transfers and disposal. Property transfer and disposal flows carry their own signatories, so the paperwork trail matches the physical one.
  • Depreciation schedules, generated per asset rather than computed ad hoc in a report.
  • Data migration. CSV and Excel importers plus reconciliation tooling to get the legacy spreadsheets in.
  • An append-only audit trail covering registrations, transfers, and status changes — the thing you actually reach for when defending an audit finding.
  • Deployment. Dockerized for reproducible environments from dev to production.

Results

  • One registry replaced per-unit spreadsheets and paper property cards across the university’s colleges and administrative units — the same asset reads the same way regardless of which office is looking at it.
  • The annual physical count became a live process. Reconciliation that used to be a multi-week paper chase is reportable as it happens, so discrepancies surface during the count instead of arriving later as a COA finding.
  • PAR, ICS, and inventory reports generate from the registry rather than being assembled by hand, which removes the drift between what the paperwork says and what the records hold.
  • Accountability is answerable. The append-only trail means “who was accountable for this asset in 2022” has a record behind it rather than an informal recollection.
  • COA layout changes stopped needing a release, because the forms are driven by a PDF template rather than by code.

What Was Tricky

  • The legacy import. Thousands of rows from inconsistent spreadsheets meant tolerant parsers, dedup heuristics, and a human review step to settle conflicts before anything got committed.
  • Encoding the accounting rules. Philippine property accounting splits records by cost threshold: PAR for higher-value capital assets, ICS for lower-value semi-expendable ones. Getting that split — and the transfer and disposal flows around it — right is most of what passing an audit means here.
  • The concurrent count. Many custodians scanning at once during the annual count, which needs careful in-progress count state and a clean diff between what’s recorded and what’s physically there.
  • Reports that reconcile. Depreciation and inventory figures across a large asset set had to stay fast and still tie back exactly to the underlying records.