User Guide

How to use the app to track your shifts, verify your pay, and stay on top of your balances.

1. What This App Does

Firefighter Pay Tracker keeps a record of your work so you can stay on top of your pay and leave balances. Log your shifts, and the app calculates your expected pay, tracks all your leave balances, flags your upcoming holidays, and gives you the tools to catch and resolve payroll errors.

The core workflow is: log shifts → calculate pay → compare to paystub → track discrepancies. But even between paychecks, the app keeps your leave balances current so you always know where you stand.

2. Setting Up Your Profile

After creating an account, a three-step setup wizard gets you going. Have a recent paystub handy — you'll need it for your hourly rate and leave balances.

  1. Work Info — Rank, station, platoon (A/B/C), paramedic status, and holiday code. The app uses your platoon to show your schedule on the dashboard calendar and auto-detect holiday code days.
  2. Pay & Service — Hire date, salary step, FLSA overtime type, and hourly rate. This powers all the pay calculations.
  3. Starting Balances — Your current leave balances. You pick whether these are current as of today, your latest paystub, or another date. The app tracks changes from that point forward.

Everything can be updated later from the Profile page. Setup just gives the app a starting point.

3. Logging Shifts

There are two ways to add shifts, depending on how much detail you need.

Quick Add (recommended for most shifts)

Tap Add Shift from the dashboard or navigation bar. You'll see a list of templates — common shift configurations you can apply in two taps:

  1. Pick a template (Regular, SOD, Assign Hire, etc.)
  2. Select one or more dates on the calendar
  3. Tap Create — done

Quick Add is great for catching up on multiple days at once. Select all the dates for the same type of shift and create them in one batch.

Full Shift Form (when you need the details)

Choose Full Shift Form from the template list, or edit any existing shift. The full form gives you access to every field:

  • Leave usage (vacation, sick, injury, bereavement, PPT, floating holiday, unpaid, time saved)
  • Bonuses (rescue ambulance, major/restricted holiday, paramedic premium, swift water, UAS)
  • Hours banked (time saved)
  • Holiday code day flag

Use the full form any time you used leave, earned a bonus, or banked time on a shift.

Creating Your Own Templates

If you have a shift configuration you use often (e.g., SOD with rescue ambulance hours), fill out the full form once, then tap Save as Template. Give it a name, and it shows up in your Quick Add list going forward. Templates save you from re-entering the same details every time.

Logging shifts in advance (scheduled shifts)

You can enter shifts for future dates. The app treats them as scheduled — they show up in your shift history with a Scheduled badge but don't affect your current balances or pay totals.

  • The shift form's labels switch to "Scheduled Hours" / "Scheduled Leave" / "Save Scheduled Shift" when the date is in the future.
  • Your balance views show both numbers when a future-scheduled change is pending. Example: Vacation: 144 hrs (120 projected) means you have 144 now and will have 120 after your scheduled vacation in June.
  • The pay calculator labels future-only periods as Projected Pay. The Log Discrepancy button is disabled for periods that haven't ended yet.

When a scheduled shift's date passes, its badge changes to Unconfirmed and a reminder card on your dashboard and shift history asks "Did they happen as planned?" Tap All good — confirm all in one shot, or open individual shifts and edit anything that changed. Editing and saving counts as a confirmation; the badge clears automatically.

4. Importing from NSS

Instead of entering every shift by hand, you can upload your NSS roster PDF and the app will pull your shifts out automatically. This works alongside manual entries — NSS becomes a second source of truth that confirms what you entered, surfaces disagreements, and creates drafts for shifts you didn't enter yet.

One-time setup

Your Roster Name is the way your name appears on the NSS roster (typically LASTNAME, FIRSTNAME in uppercase). It's auto-filled during profile setup based on your first and last name. You can edit it on the Profile page if NSS uses a different format for you. If your first upload finds no matches, the app will offer a "did you mean?" suggestion based on similar names in the roster.

Getting a PDF from NSS Related on iOS Safari (recommended)

  1. Open NSS Related with Zscaler active and load your station's roster page
  2. Tap the Share button
  3. Tap Markup
  4. Tap DoneSave to Files
  5. Choose a location (e.g., iCloud Drive) you can reach from this app

On Android Chrome, the equivalent is Share → Print → Save as PDF. The Print view (multi-page) and the Markup view (single-page) both work — we parse them the same.

Uploading and reviewing

  1. Get to the import page two ways: from Shift History → Import NSS, or from the Add Shifts modal (it's the first option at the top).
  2. Select the PDF you saved.
  3. If the PDF's station doesn't match your profile, the app prompts you to confirm before doing anything — in case you uploaded the wrong file.
  4. The app parses the roster and shows three sections:
    • Discrepancies — shifts where your entry and NSS disagree. Pick Use NSS values, Keep my entry, or Edit manually.
    • Needs approval — shifts NSS shows that you haven't approved yet. Includes brand-new drafts AND previously-imported drafts re-confirmed by this upload. Approve, Edit, or Dismiss each one, or use Approve all to clear the section.
    • Confirmed — collapsed by default. Shifts where both sources already agree and you've approved.

Each card shows a one-line summary of what NSS thinks the shift is (e.g., 24hr worked + rescue bonus + paramedic premium) so you can review without clicking in.

Status badges on the shifts list

  • NSS ✓ — both you and NSS agree (only after the shift date has arrived)
  • Pending — imported from NSS, awaiting your approval
  • Discrepancy — past-dated shift, your entry differs from NSS
  • Schedule conflict — future-dated, your plan differs from NSS's plan; neither is verified yet
  • Scheduled — the shift's date is in the future
  • Unconfirmed — was scheduled in advance, date has passed, you haven't verified what actually happened
  • Trade · On / Trade · Off — one side of a shift trade with another firefighter
  • Pay Only — the shift doesn't affect leave balances (e.g., V-hours payout, certain Other Payments)
  • Flagged (N) — you flagged the shift for follow-up; N is the open flag count

No badge means NSS hasn't seen that shift yet (or it's a manual-only entry like a banking adjustment).

What NSS can and can't confirm

The roster tells us about work events (apparatus, seat, hours, leave reasons). It does not tell us about your accounting decisions like banking, court time, paramedic maintenance bonus, or holiday-date bonuses — those stay manual-only. So a shift can have NSS ✓ even if it has banking attached; NSS confirms the work, you handle the banking.

Approving shifts later (from the shifts list)

If you leave the import page without approving, the imported drafts still live in your shift history with a Pending badge. You can clear them up two ways:

  • One at a time: each pending row has an Approve button next to Edit/Delete.
  • In bulk: click Select at the top of the shifts list, check the rows you want, then use Approve N or Delete N. Bulk delete pops a confirmation listing every selected shift before it runs.

The filters panel has Discrepancies Only and Pending Approval Only toggles for fast triage.

Re-uploading is safe

Upload the same roster twice and nothing duplicates. The app matches existing shifts and updates their status rather than creating new rows. If a previously-imported draft hasn't been approved yet, re-uploading refreshes its fields to the latest NSS interpretation (no "you vs NSS" conflict against your earlier import). You can upload mid-pay-period and again at the end — each pass just refreshes what NSS knows.

Importing future-dated rosters

NSS rosters often cover days that haven't happened yet. Those shifts still get imported, but they go in as Scheduled only — no green NSS ✓ badge, because NSS is acting as a schedule, not a historical record. After the date passes, re-import the same roster (or a fresh one) and the row picks up the NSS ✓ badge automatically.

When your manual entry differs from NSS for a future date, the badge is amber Schedule conflict (not red Discrepancy). Both sides are predictions; neither is verifiable yet. Once the date passes and you re-import, the situation resolves to either NSS ✓ (you agreed) or Discrepancy (you actually disagree now that the day is over).

5. Common Scenarios

Here's how to log different situations you'll encounter.

Straight regular day

Quick Add → Regular template → select the date. That's it. If you worked all 24 hours with no leave or bonuses, the default template handles everything.

Used leave on a regular day

Use the Full Shift Form. Set the shift type to Regular, enter your hours worked, then expand the Leave section and enter the leave hours. Your worked hours plus leave hours should total 24. When you save, the app automatically updates your leave balances.

For sick leave, the app handles the tier allocation (100% → 75% → 50%) automatically based on your current balances.

Picked up overtime (SOD or assign hire)

Quick Add → SOD or Assign Hire template → select the date. If you worked a non-standard number of hours, edit the shift afterward to adjust.

Late relief

Use the Full Shift Form. Set shift type to Late Relief and enter the extra hours worked (just the late relief portion, not the full 24).

Recall

Use the Full Shift Form. Set shift type to Recall and enter the hours. Log it on the date you were recalled.

Holiday code day

If your holiday code is set in your profile, the app auto-detects your holiday code days and checks the box for you when you add a shift on that date. You can also check it manually in the full form.

Worked a major holiday

On Thanksgiving, Christmas Eve, Christmas Day, or New Year's Eve, the major holiday bonus checkbox appears automatically in the full form when you have hours worked. Check it to include the bonus in your pay calculation.

V-hours payout

Use the Full Shift Form. Set shift type to V-Hours and enter the payout hours. This is a pay-only entry — it doesn't affect your leave balances.

Court time, CE payout, banked payout, or other payments

Use the Full Shift Form and set the shift type to Other Payments. This reveals fields for court time hours, court on-call, show-up pay, safety watch, CE payout, and banked payout. Enter the relevant amounts.

Banked time on a shift

In the full form, enter the hours in the "Hours Banked" field. Your banked time balance updates automatically.

Trading a shift with another firefighter

Open the Add Shift modal and tap Trade at the top, or pick Trade from the Shift Type dropdown on the Full Shift Form. Today the app handles shift trades (the common 360). Holiday and AH Code trades are coming soon.

  • Trade Partner (optional) and Partner's Station (optional, dropdown).
  • Hours defaults to 24. Override for a partial-shift trade.
  • Your original date — the day you're trading away (you're off that day).
  • Partner's date — the day you're accepting (you work that day).

Submitting creates two linked rows: one with Trade · Off on your original date (0 hours, no pay) and one with Trade · On on the partner's date (your full hours, full pay). The two rows are linked so deleting one prompts a modal to delete both (or just one) and shows both dates side by side.

NSS imports recognize 360 rows on both sides and populate partner info + paired date automatically when present in the roster.

6. Verifying Your Pay

This is the main reason the app exists. When your paystub arrives:

  1. Go to Pay from the navigation bar
  2. Select the pay period that matches your paystub
  3. Compare the estimated gross pay to your actual gross pay

The pay calculator breaks down each shift in the period, showing base pay, overtime, and bonuses. It also shows your FLSA overtime calculation and how your leave balances changed.

If the numbers match, you're good. If they don't, use the "Doesn't match your paystub?" button. It walks you through common reasons for mismatches (missing shifts, wrong rate, etc.) before letting you file a discrepancy.

7. Tracking Leave Balances

Your leave balances update automatically every time you log a shift that uses leave. You don't have to do anything extra — just keep logging shifts and the balances stay current.

Go to Balances from the navigation bar to see all your current balance totals. Tap any balance type to see its full transaction history (every shift that changed it, plus any manual adjustments).

Manual adjustments

Sometimes payroll makes a correction that doesn't come from a shift (e.g., an accrual adjustment or a clerical fix). Use Adjust Balance on the Balances page to record these one-off changes with a reason and date, so your tracked balance stays in sync with payroll.

8. When Something Doesn't Match

The app tracks two types of discrepancies:

Pay discrepancies

Your estimated gross pay doesn't match your actual paystub. File one from the Pay Calculator. Enter what you expected, what you got, and the type of issue (overtime, wrong rate, missing bonus, etc.). When payroll sends a retro payment, log it against the discrepancy to track what's been corrected and what's still outstanding.

Balance discrepancies

Your paystub shows a different leave balance than what you're tracking. File one from Balances → Discrepancies. You can mark it as reported to payroll, and resolve it once corrected.

Open discrepancies show up as alerts on your dashboard so nothing falls through the cracks.

9. Updating Your Profile

Your profile page lets you update anything from the initial setup, plus manage rate changes over time.

Changing your hourly rate

When your rate changes (new salary step, promotion, etc.), add a new rate history entry from your profile page. Enter the effective date and new rate. The app uses rate history to calculate pay correctly for each period — shifts before the change use the old rate, shifts after use the new one.

Changing your FLSA type

If your FLSA overtime type changes (e.g., moving from platoon to a 40-hour assignment), update it in your rate history entry. The change applies from the effective date forward.

Other profile changes

Station, rank, platoon, paramedic status, holiday code, and salary step can all be updated directly on the profile page. Changes are tracked in your assignment history.

10. Tips & Shortcuts

  • Batch entry — Falling behind on logging shifts? Use Quick Add to select multiple dates at once. Pick the Regular template, select all your regular days for the pay period, and create them in one shot. Then go back and edit the ones that had leave or bonuses.
  • Save templates for your routine — If you ride the RA every shift and always bank time, create a custom template with those fields pre-filled. It turns a multi-field form into a two-tap entry.
  • Flag shifts you need to come back to — Not sure about the hours on a shift? Flag it from the edit page. Flagged shifts show up in your dashboard alerts so you don't forget.
  • Install the app — On your phone, use "Add to Home Screen" in your browser menu. It opens full-screen like a native app and is always one tap away.
  • Check the dashboard regularly — The dashboard shows alerts for open discrepancies, flagged shifts, unlogged shifts, and balance warnings. It's the best place to see if anything needs your attention.
  • Confirm scheduled shifts after the date passes — If you logged a shift in advance, an amber reminder card appears on the dashboard and on the shifts list once those dates have passed. One tap on All good — confirm all verifies everything that went as planned; tap a row to edit anything that didn't.
  • Dark mode — The app follows your phone or computer's dark mode setting automatically.