9:30
{{ errorText }}
L
LiNeuR
Lab Operations Platform
v1.0 · 2026 · ARRIVE 2.0 compliant
Researcher access
Enter your key
Your PI gave you a 6-character key when your project was set up.
{{ keyDisplay }}
{{ keyHint }}
Admin access
PI PIN
{{ pinErrorText }}
L
LiNeuR Admin
{{ signedInPiName }} · PI
{{ activeProjectCount }}
Active projects
{{ dashInStudiesCount }}
In active studies
{{ dashPendingReviewCount }}
Pending review
Live in the animal house
{{ dashHouseTotal }}
{{ dashHouseSpeciesLabel }}
{{ dashInStudiesCount }} in active studies {{ dashStockCount }} colony stock {{ dashLeftoverCount }} in completed studies
In active studies: {{ dashInStudiesSpeciesLabel }}
Colony stock: {{ dashStockSpeciesLabel }}
In completed studies: {{ dashLeftoverSpeciesLabel }}
{{ dashLeftoverNote }}
Randomization pending review
{{ pendingRandInfo }}
Projects
No projects yet — tap "+ New Project" to create one.
Completed
{{ detailProject.project_id }}
{{ detailProject.title }}
Title
Ethics number
Model{{ detailProject.animal_model }}
Species / strain{{ detailProject.species }} · {{ detailProject.strain }}
Safety ceiling — any compound (mg/kg) blanket sanity check on every dose entry, regardless of group/track
Solvent batch size (mL) — stock is always prepared in whole multiples of this
Start date — correct this if the study actually began before/after the project was set up in the app
for days
Ends {{ editProjectEndDatePreview }}
Animals arrive in lab — housing is billed from here, even before the start date
Pre-trial procedure — type and date (e.g. Surgery, EEG, BDL)
Changing this does not change animals already registered. Edit those on each animal screen.
Randomization{{ detailRandStatus }}
Saved.
{{ completedBadgeLabel }}
{{ closeoutMsg }}
{{ closeoutTitle }}
The study is finished but these animals are still counted as live in it. Record what happened to each: sacrificed, or returned to colony stock (they move to Colony stock with the same tail mark and cage).
{{ co.mark }}
{{ co.sub }}
Date
{{ closeoutError }}
Mark this project complete? No more animals, sessions, or billing events can be added afterward — its billing still counts toward monthly reports.
Groups
{{ groupsLockedNote }}
{{ groupError }}
No groups defined yet — add one below.
Excluded
{{ gr.label }}
Target n = {{ gr.target_n }}
Locked
Remove {{ gr.label }}? This can't be undone.
No substance/route defined yet.
{{ ph.substance }} · {{ ph.route }}
{{ ph.doseLabel }} · {{ ph.durationLabel }}
{{ ph.sourceLabel }}
Remove {{ ph.substance }}? This can't be undone.
Schedule
Doses on "from day", then every other day after.
"Challenge day" always means the study's current last day — it moves automatically if the study length changes.
Source of drug
mL
The ampoule's own fixed strength and physical size — only used to count how many whole ampoules are needed. Never changes how much solution gets made.
The syrup's own fixed strength. Never changes how much solution gets made.
mg/tab
Used to count how many whole tablets are needed. Never changes the injected volume.
mg/cap
Used to count how many whole capsules are needed. Never changes the injected volume.
{{ newPhasePriceUnitLabel }}
Group color key
{{ gk.colorName }} — {{ gk.label }} ({{ gk.count }})
{{ gk.ids }}
{{ revealStatusNote }}
Reset the approved randomization? This clears every animal's group assignment so you can re-run it — students lose their current groups until it's re-approved. This can't be undone.
Registered animals ({{ detailAnimalCount }})
No animals registered yet.
Remove {{ da.animal_id }}? This can't be undone.
{{ detailProject.project_id }}
History
Loading…
No activity logged yet.
{{ h.summary }}
{{ h.whenLabel }} · {{ h.actor }}
Groups Planning
{{ planningDaysNote }}
Loading…
Study-wide inputs
Fallback weight (g) — only used by a group with no registered animals yet
Prep overage (%)
Substance, route, dose, and price are defined once per group phase on the project's Groups section. Each group's own registered/randomized animals set its real average weight — this fallback only fills in for a group nobody's registered yet.
Groups & phases
No groups defined yet — add them from the project screen.
{{ pg.color }} — {{ pg.label }} {{ pg.animal_count }} animals
{{ pg.avgWeightLabel }}
No substance/route defined yet.
{{ ph.substance }} · {{ ph.route }} Today
{{ ph.doseLabel }} · {{ ph.durationLabel }}
{{ ph.concLabel }}
{{ ph.total_volume_ml }} mL · study {{ ph.volumeTodayLabel }}
{{ pg.totalVolumeLabel }} · study {{ pg.totalCompoundLabel }}
Procurement — order before day 1
Whole-study total per compound, using each track's own real start/end days, including {{ planningOverageStr }}% overage.
Nothing to procure yet — add dosing phases to your groups first.
Compound Total needed Procure Cost
{{ cs.substance }}
{{ cs.routeLabel }}
{{ cs.amountLabel }} {{ cs.unitsLabel }} {{ cs.costLabel }}
Estimated total {{ planningStudyTotalCostLabel }}
Saved.
Schedule & quantities
{{ scheduleDaysNote }}
Loading…
Dates are computed automatically from the study's start date and each track's schedule — never entered by hand, so a missed dose stands out.
{{ createError }}
Each track's working solution below is computed for this many day(s) at once.
Days
Make for {{ schedulePrepDaysStr }} day(s), by compound
Same batching rule as above, applied to the day-count set higher up on this page — updates when you tap Update.
Nothing to prepare for this many days.
{{ cp.substance }}
{{ cp.routeLabel }}
{{ cp.volumeLabel }}
{{ cp.exactLabel }}
{{ bg.label }}{{ bg.doseLabel }}
{{ bg.volumeLabel }}
Procurement — order before day 1
Whole-study total per compound, using each track's own real start/end days — not today's figure or an adjustable day-count above.
Nothing to procure yet — add dosing phases to your groups first.
Compound Total needed Procure Cost
{{ cs.substance }}
{{ cs.routeLabel }}
{{ cs.amountLabel }} {{ cs.unitsLabel }} {{ cs.costLabel }}
Estimated total {{ scheduleStudyTotalCostLabel }}
{{ sg.label }} {{ sg.animal_count }} animals
{{ tr.substance }} · {{ tr.route }}
{{ tr.doseFormulaLabel }}
{{ dt.day_offset }} {{ dt.dateLabel }}
{{ tr.prepTodayLabel }}
{{ tr.exactTodayLabel }}
{{ tr.nextDueLabel }}
{{ tr.packageVolLabel }}
{{ tr.prepForDaysHeaderLabel }}
Drug needed is the exact math; open enough whole units to cover it, then make up the volume.
Drug needed{{ tr.unitsHeaderLabel }}Make (vol.)
{{ tr.prepForDays.exactCompoundLabel }} {{ tr.prepForDays.unitsLabel }}— {{ tr.prepForDays.volumeLabel }}
{{ tr.volumeLabel }} {{ tr.compoundLabel }}
Done Missed Upcoming
Record a late dose
{{ backfillTitle }}
Use this only when dosing genuinely happened but couldn't be logged live (no connectivity, you weren't reachable to approve, etc.) — it's recorded as a confirmed late entry, not a normal real-time one.
{{ backfillError }}
Animals
Reason / confirmation (required)
Billing
{{ detailProject.title }}
{{ createError }}
Invoice period
to
Loading…
{{ billingProfitLabel }}
Profit — {{ billingPeriodNote }}
{{ billingGrandTotalLabel }}
Revenue
{{ billingExpenseTotalLabel }}
Expenses
{{ billingFeedEstLabel }} — rate-based estimate, not included in Expenses or Profit above.
Revenue — line items
Nothing billable in this period yet.
{{ bl.label }}
{{ bl.quantity }} × {{ bl.unit_rate }}
No rate set — billed at 0
{{ bl.note }}
{{ bl.totalLabel }}
Expenses — logged against this project
No Feed/Cleaning purchases logged against this project in this period. Lab-wide overhead (salary, rent, etc.) isn't attributed to any one project.
{{ el.category }}
{{ el.totalLabel }}
This project's Animal Rate
{{ par.species }}
Rate (per animal)
Service rates
{{ sr.rateLabel }}
Rate ({{ sr.unit_label }})
Logged dissections & blood samples
Nothing logged yet — tap "+" to log one.
{{ se.label }}
{{ se.event_date }} · qty {{ se.quantity }}{{ se.animalSuffix }}
Billing
{{ serviceEventFormTitle }}
{{ createError }}
Type
Animal (optional)
Quantity required
Date
Notes (optional)
Study overview
{{ overviewTitle }}
Loading…
{{ overviewMetaLine }}
{{ overviewDurationLabel }}
Study days
{{ overviewGroupsCountLabel }}
Groups
{{ overviewAnimalsCountLabel }}
Animals
{{ overviewMortalityRateLabel }}
Mortality
{{ overviewDeadCountLabel }} of {{ overviewEverRegisteredLabel }} animals dead — see group breakdown below.
Study design
Swipe to see full timeline →
{{ piPendingRequestText }}
{{ studentActiveGrantText }}
Waiting for the PI to approve edit access…
{{ br.dayRangeLabel }} {{ br.currentLabel }}
{{ br.dayRangeLabel }}
{{ bracketLabelError }}
Delete this label?
No stage labels yet — add one below.
Add a label
{{ bracketLabelError }}
{{ br.labelText }}
{{ bracketLabelError }}
Days
{{ dl.day }}
{{ ms.label }}
{{ ln.label }}
Groups & dosing protocol
{{ og.label }} {{ og.animal_count }} animals {{ og.deadCount }} dead · {{ og.mortalityRate }}%
No dosing protocol set yet.
{{ ps }}
Evaluation parameters & tasks
{{ milestoneError }}
{{ ms.categoryLabel }} {{ ms.dayRangeLabel }} {{ ms.label }}
{{ ms.scopeLabel }}
{{ ms.description }}
Delete this entry?
No evaluation parameters or tasks added yet.
Day-by-day timeline
Nothing scheduled yet — add dosing protocols or evaluation/task entries.
Day {{ d.day }} · {{ d.calendar_date }}
{{ ds.label }}
{{ ms.categoryLabel }} {{ ms.label }} {{ ms.scopeLabel }}
Step 1 of 4
Project details
Project ID (auto-generated)
{{ newProjId }}
Project name
Disease category
Delete "{{ selectedCat }}" and all its models?
Animal model
Species
Strain
New species needs one starting strain
IACUC / Ethics number
Step 2 of 4
Protocol & timeline
Start date
Animals arrive in lab (optional)
Housing is billed from this date, even if it is before the start date. Leave blank to bill from when each animal is registered.
Pre-trial procedure (optional)
Procedure type and date. If the procedure is earlier than arrival, housing is billed from the procedure date.
Protocol duration
{{ np.days }}days
End date: {{ endDate }}
Dosing frequency
Safety ceiling — any compound (mg/kg)
Step 3 of 4
Experimenter
Full name
Degree / role
Department
Supervisor / PI
Custom passkey (optional — 4-6 digit PIN)
Pick this yourself for someone who can't reliably read/re-type a random key — a short number they can recognize instead.
Access key
{{ expKeyPreview }}
The real key is generated when you tap "Next" below — share only the key shown on the confirmation screen after that.
Step 4 of 4
Groups
First 3 groups are the standard set — tick “Exclude” on any this study doesn’t use. Add treatment groups below.
{{ grp.typeTag }} {{ grp.typeLabel }}
{{ grp.colorName }}
Custom label / description
n animals: {{ grp.n }} Total: {{ totalAnimals }}
Stratified block randomization
Group assignment
{{ r.id }}{{ r.markSuffix }} {{ r.weight }} g {{ r.name }}
Weight balance per group · mean ± SD
{{ gs.tag }} {{ gs.text }}
{{ gs.nText }}
All randomised animals{{ randOverallText }}
Stratified block randomization by body weight. Method: Festing & Altman, ILAR J. 2002;43(4):244-258.
Project created
{{ newProjId }}
Experimenter access key
{{ generatedKey }}
Share with your student. Valid for this project only. Store securely.
Project{{ np.name }}
Type{{ np.type }}
Duration{{ np.days }} days → {{ endDate }}
Animals{{ totalAnimals }} (randomised)
Dosing{{ np.freq }}
Select project
Which project?
No projects assigned yet. Ask your PI if you need one — or use Cages above.
First login
Your profile
Full name
Category
Contact number
Email
Parent institution
Department
Registration number
Batch / Year
Supervisor / PI
Co-supervisor
Full name{{ sp.name }}
Category{{ sp.degree }}
Contact number{{ sp.contact }}
Email{{ sp.email }}
Parent institution{{ sp.institution }}
Department{{ sp.dept }}
Registration number{{ sp.regNumber }}
Batch / Year{{ sp.batchYear }}
Supervisor / PI{{ sp.supervisor }}
Co-supervisor{{ sp.cosupervisor }}
Assigned project
{{ assignedProjectName }}
{{ newProjId }} {{ assignedProjectDuration }} days · {{ assignedProjectFreq }}
Cohort setup
Register animals
{{ registeredCount }}
Animals registered
{{ weightMeanSdLabel }} g
Mean ± SD weight
{{ animalListCostPerAnimalLabel }}
Real cost / {{ animalListCostPerAnimalSpecies }} · last 30 days
No groups defined on this project yet — add them from Project Detail before randomizing.
Target groups (assigned during randomization)
{{ rg.label }}
{{ rg.protocolSummary }}
n = {{ rg.target_n }}
{{ rg.weightMeanSdLabel }}
{{ a.name }}
{{ a.groupStatusLabel }}
{{ a.sexLabel }} · {{ a.weight }} g · {{ a.cageLabel }}{{ a.markSuffix }}{{ a.pendingSuffix }}
Remove {{ a.id }}? This can't be undone.
{{ plannedMismatchText }}
Weight history · {{ animalPositionLabel }}
{{ weightHistoryAnimalName }}
{{ weightHistoryAnimalId }}{{ weightHistoryAnimalMarkSuffix }}
Loading…
{{ weightFormError }}
Weight (g)
Date
{{ deathStatusLabel }}
{{ deathFormError }}
Date
{{ retiredStatusLabel }}
{{ retireFormError }}
The animal stays alive and housed; only dosing charges stop from this date.
Date
Housing dates · {{ housingSummary }}
{{ housingFormError }}
Arrival date
Pre-trial procedure
No weight records yet.
Current weight
{{ weightHistoryCurrent }}
{{ weightHistoryOverallDelta }}
{{ weightHistoryCount }} recorded weigh-ins
{{ r.weight_g }} g
{{ r.dateLabel }} · {{ r.recorded_by }}{{ weightHistoryAnimalMarkSuffix }}{{ r.notesSuffix }}
{{ r.deltaLabel }}
{{ r.backfillBadgeText }}
Delete this weight entry?
{{ weightFormError }}
Animal {{ nextAnimalIndex }} of {{ realTotalAnimals }}
Register animal
System ID
Assigned on save
Universal across
BTP · EEG · NTP
Sex
Body weight
{{ weightDisplay }} g
⚠ Check this weight — rodents don't weigh 1000+ g
Tail colour (optional)
Notes (optional)
Cage required
Species · Strain: {{ np.species }} · {{ np.strain }}
V
{{ sp.name }}
{{ newProjId }}
ACTIVE
{{ studentTodayLabel }}
{{ assignedProjectName }}
{{ studentStudyDayLabel }} · {{ assignedProjectFreq }}
Dosing schedule — next 7 days
{{ day.dayName }}
{{ day.dateNum }}
Due for dosing today
{{ realTotalAnimals }}
animals · all groups
Animals due today — by group
{{ grp.label }} · {{ grp.count }}
{{ r.id }}
{{ r.name }}
{{ r.weight }} g{{ r.markSuffix }}
{{ huName }}
Weigh-in · {{ weighCountLabel }}
Weigh animals
Date weighed
Fill in only the animals you weighed — blanks are skipped. Works on any day, dosing or not.
{{ weighNotice }}
Loading…
No active animals in this project.
{{ cg.label }}
{{ r.identity }}
{{ r.lastLabel }}
{{ r.alreadyLabel }}
{{ r.flagLabel }}
g
{{ weighError }}
{{ siteLabel }}
Cage inventory
{{ cageCountSmall }}
Small
{{ cageCountMedium }}
Medium
{{ cageCountLarge }}
Large
{{ cageCountTub }}
Big Tub
{{ cageCountRound }}
Round
Cage type
{{ siteLabel }}
Print census labels
Pick a cage type and/or number range so a fresh batch of tags doesn't mean re-printing (and re-cutting) the whole sheet again.
Cage type
Number range (optional)
From
To
Lab management
Census — quick count
Assigns an ID and counts this animal — no weight yet, no study to belong to. Add it to a real project's roster later once it's been weighed and enrolled.
Registered
{{ censusLastId }}
{{ createError }}
Species
Strain
New strain? Add it from the New Project screen's Species/Strain step, then it'll show up here too.
Sex
Genotype
Cage (optional)
Tail colour (optional)
Notes (optional)
{{ cageDetailTypeFull }}
{{ selectedCageId }}
✓ Verified {{ latestCageCheck.tapped_count }}/{{ latestCageCheck.system_count }} · {{ latestCageCheckDate }}
⚠ Miscount: counted {{ latestCageCheck.tapped_count }}, system has {{ latestCageCheck.system_count }} · {{ latestCageCheckDate }}
Animals in this cage
{{ ca.id }}
{{ ca.name }} · {{ ca.sexLabel }} · {{ ca.weight }} g{{ ca.markSuffix }}
{{ ca.notes || 'No notes' }}
No animals assigned to this cage yet
Photo audit log
Uploading…
No audit photos yet — tap the photo icon above to add one.
{{ cp.dateLabel }} · {{ cp.timeLabel }}
{{ cp.taken_by || 'Unknown' }}{{ cp.notesSuffix }}
{{ cageCheckCount }}
Saving…
Matches — {{ cageCheckResult.tapped_count }} animals
Mismatch — counted {{ cageCheckResult.tapped_count }}, system has {{ cageCheckResult.system_count }}
PI management
Students & Staff
Students
No students registered yet.
Staff
No staff registered yet.
PI management
Add staff
Full name
Role
Department (optional)
Supervisor (optional)
Custom passkey (optional — 4-6 digit PIN)
For someone who can't reliably read/re-type a random key — pick a short number they can recognize instead. Good for illiterate/visual-only staff.
{{ exp.name }} added
Access key
{{ addStaffKey }}
Share this key with them — they log in with it under "Staff / Team Member."
{{ siteLabel }}
Litters & breeding
A litter can't be sexed reliably right away — mice need about 8-12 days, rats shouldn't be disturbed the first week. Log the litter now with a headcount, then register and sex each pup as you're able to.
No litters logged yet.
Husbandry
Log a litter
{{ createError }}
Species
Strain
New strain? Add it from the New Project screen's Species/Strain step, then it'll show up here too.
Dam (optional)
Sire (optional)
Pairing date (optional)
Date born required
Number born required
Found dead
Cage (optional)
Notes (optional)
Litter
{{ litterDetailTitle }}
{{ createError }}
{{ litterDetailSummary }}
{{ litterDamSireLine }}
{{ litterNotesLine }}
Mother separation / weaning
✓ {{ litterWeanedLine }}
{{ litterWeanDueLine }}
Register pups
{{ litterRemainingToRegister }} of {{ litterDetail.number_born }} born not yet registered with their own ID.
Pups ({{ litterDetail.pup_count }})
No pups registered yet — use "Register pups" above.
{{ pup.animal_id }}
{{ pup.weightLabel }}
{{ pup.sexLabel }} {{ pup.deathBadgeLabel }}
Husbandry
Feed & costs
{{ createError }}
{{ feedDailyCostLabel }}
Estimated · today
{{ feedMonthlyCostLabel }}
Projected · 30 days
{{ excludedPupsLabel }} still nursing — not counted above.
By species
{{ fs.species }}
{{ fs.animal_count }} animals · {{ fs.daily_intake_g }} g/day · {{ fs.cost_per_kg }}/kg
{{ fs.dailyCostLabel }}/day
Estimated from the {{ fs.species }} rate — not a measured intake.
{{ ar.markLabel }} {{ ar.intakeLabel }} · {{ ar.costLabel }}
Last 30 days: estimate vs actual
{{ feedBurnEstimateLabel }}
Estimated
{{ feedBurnActualLabel }}
{{ feedBurnPurchaseCountLabel }}
Feed rates
{{ fr.species }}
g / day
Cost / kg
Recent purchases
No purchases logged in the last 30 days.
{{ fp.label }}
{{ fp.purchase_date }} · {{ fp.quantity_kg }} kg{{ fp.supplierSuffix }}
{{ fp.costLabel }}
Feed & costs
{{ feedPurchaseFormTitle }}
{{ createError }}
Species (optional — leave blank for a mixed purchase)
Product (optional)
Quantity (kg) required
Total cost required
Date
Supplier (optional)
Notes (optional)
Husbandry
Cleaning & costs
{{ createError }}
{{ cleaningDailyCostLabel }}
Estimated · today
{{ cleaningMonthlyCostLabel }}
Projected · 30 days
{{ cleaningExcludedPupsLabel }} still nursing — not counted above.
By species
{{ cs.species }}
{{ cs.animal_count }} animals · {{ cs.cost_per_animal_day }}/animal/day
{{ cs.dailyCostLabel }}/day
Last 30 days: estimate vs actual
{{ cleaningBurnEstimateLabel }}
Estimated
{{ cleaningBurnActualLabel }}
{{ cleaningBurnPurchaseCountLabel }}
Cleaning rates
{{ cr.species }}
Cost / animal / day
Recent purchases
No purchases logged in the last 30 days.
{{ cp.label }}
{{ cp.purchase_date }} · {{ cp.quantity }} {{ cp.unit }}{{ cp.supplierSuffix }}
{{ cp.costLabel }}
Cleaning & costs
{{ cleaningPurchaseFormTitle }}
{{ createError }}
Species (optional — leave blank for a mixed purchase)
Product (optional)
Quantity required
Unit
Total cost required
Date
Supplier (optional)
Notes (optional)
{{ siteLabel }}
Overhead expenses
{{ createError }}
{{ costPerAnimalLabel }}
Real cost / animal · last 30 days (Feed + Cleaning + Overhead)
{{ costPerAnimalFeedLabel }}
Feed
{{ costPerAnimalCleaningLabel }}
Cleaning
{{ costPerAnimalOverheadLabel }}
Overhead
Cost per animal, by species
{{ cs.species }}
{{ cs.animal_count }} animals · {{ cs.feed_total }} own feed
{{ cs.cost_per_animal }}
Recent expenses
No expenses logged in the last 30 days.
{{ op.category }}{{ op.payeeSuffix }}
{{ op.expense_date }}{{ op.notesSuffix }}
{{ op.amountLabel }}
{{ siteLabel }}
Monthly report
{{ createError }}
{{ monthlyReportLabel }}
Loading…
{{ monthlyProfitLabel }}
Profit — revenue minus expenses this month
{{ monthlyRevenueLabel }}
Revenue
{{ monthlyExpenseLabel }}
Expenses
Expense breakdown
{{ monthlyFeedLabel }}
Feed
{{ monthlyCleaningLabel }}
Cleaning
{{ monthlyOverheadLabel }}
Overhead
Overhead by category
No overhead expenses logged this month.
{{ oc.category }}
{{ oc.totalLabel }}
Revenue by project
No billable project activity this month.
{{ mp.title }}
{{ mp.project_id }}{{ mp.statusSuffix }}
{{ mp.feedEstLabel }}
{{ mp.revenueLabel }}
{{ siteLabel }}
Period report
{{ createError }}
Pick any date range — useful for a project that crosses a month boundary, where the monthly report would otherwise split its income and expense in two.
From
To
Loading…
{{ periodProfitLabel }}
Profit — {{ periodReportFrom }} to {{ periodReportTo }}
{{ periodRevenueLabel }}
Revenue
{{ periodExpenseLabel }}
Expenses
Expense breakdown
{{ periodFeedLabel }}
Feed
{{ periodCleaningLabel }}
Cleaning
{{ periodOverheadLabel }}
Overhead
Overhead by category
No overhead expenses logged in this range.
{{ oc.category }}
{{ oc.totalLabel }}
Revenue by project
No billable project activity in this range.
{{ mp.title }}
{{ mp.project_id }}{{ mp.statusSuffix }}
{{ mp.feedEstLabel }}
{{ mp.revenueLabel }}
Server audit
Login activity
{{ createError }}
Last 30 days, every PI and student login — name, IP address and time spent signed in. Duration is exact for a session that used Sign out, otherwise it's estimated from the last activity seen.
Loading…
No logins recorded yet.
{{ lg.name }}
{{ lg.roleLabel }} · {{ lg.loginTimeLabel }}
{{ lg.durationLabel }}
IP {{ lg.ip_address }} {{ lg.statusLabel }}
Overhead expenses
{{ overheadPurchaseFormTitle }}
{{ createError }}
Category
Employee
Amount required
Date
Notes (optional)
Overhead expenses
Salary summary
{{ createError }}
From
To
Loading…
{{ salarySummaryTotalLabel }}
Total salary paid, {{ salarySummaryFrom }} to {{ salarySummaryTo }}
No salary payments logged in this range.
{{ em.payee }}
{{ em.countLabel }}
{{ em.totalLabel }}
N
NeuRodent Breeders
{{ signedInPiName }} · PI
{{ siteLabel }}
Headcount check-ins
{{ createError }}
A dated count per cage — no automatic comparison, just a running list so a drop between two visits is easy to spot.
No headcount check-ins logged yet.
{{ hl.countLabel }} animals
{{ hl.subtitle }}
Headcount check-ins
{{ headcountLogFormTitle }}
{{ createError }}
Cage required
Species required
Strain (optional)
Count required
Date
Notes (optional)
{{ siteLabel }}
Weight trials
{{ createError }}
Each row is one diet/treatment group with its own numbered animals. Give two groups the exact same trial name to compare them.
No trial groups yet.
Weight trials
New trial group
{{ createError }}
Trial name required
Use the exact same name on another group to compare them later.
Group / diet label required
Species required
Strain (optional)
Starting animal count required
Numbers each animal 1..N — you can add more later.
Notes (optional)
{{ trialDetailSubtitle }}
{{ trialDetailTitle }}
{{ createError }}
Loading…
Animals
No weights logged yet — tap "Log weights for a date" above.
Animal {{ d }}
{{ ar.tag }} {{ c.value }}
Animal {{ ar.tag }}
Add more animals
Weight trials
Log weights
{{ createError }}
Date
Leave an animal blank to skip it this round. Re-entering a value for a date already logged overwrites it.
Animal {{ rr.tag }}
{{ siteLabel }}
{{ trialCompareTitle }}
{{ createError }}
Compare as of
Uses each animal's most recent weight at or before this date.
Loading…
{{ gc.label }}
{{ gc.detailLabel }}
{{ gc.meanLabel }}
Statistics
{{ anovaSummary }}
{{ anovaMethodNote }}
Post-hoc (pairwise)
{{ pw.pairLabel }}
mean diff {{ pw.meanDiffLabel }} · p = {{ pw.pLabel }}
Significant
{{ siteLabel }}
Sales
{{ createError }}
No sales logged yet.
{{ sl.species }}
{{ sl.subtitle }}
{{ sl.totalLabel }}
Sales
{{ saleFormTitle }}
{{ createError }}
Species required
Strain (optional)
Quantity required
Price / unit required
Total {{ saleTotalPreview }}
Buyer (optional)
Date
Notes (optional)
PI management
Species census
{{ censusTotal }}
Active animals across {{ censusSpeciesCount }} species
{{ censusMortalityRate }}%
Mortality
{{ censusDeadTotal }} dead lab-wide (ever registered) — {{ censusDiedCount }} died, {{ censusSacrificedCount }} sacrificed.
No species catalogued yet.
{{ sp.species }}
{{ sp.total }}
{{ st.strain }} {{ st.count }}
Male {{ sp.maleCount }} Female {{ sp.femaleCount }} Pending {{ sp.pendingCount }} Pups {{ sp.pupCount }}
New species needs one starting strain
{{ studentDetailKindLabel }}
{{ studentDetail.name }}
{{ detailScreenError }}
New custom passkey (optional — 4-6 digit PIN, blank = auto-generate)
New access key
{{ newPasskeyResult }}
The old passkey no longer works. Share this new one with {{ studentDetail.name }}.
Full name
Category
Contact number
Email
Parent institution
Department
Registration number
Batch / Year
Supervisor / PI
Co-supervisor
Saved.
Linked projects
Not linked to any project.
{{ pr.title }}
{{ pr.project_id }}
{{ studentDetailAnimalCount }} animal(s) registered under this name.
Delete {{ studentDetail.name }}?
{{ studentDeleteWarning }}
Awaiting PI approval
Randomization submitted
Pending PI review
Group assignment has been submitted. Dosing calendar will unlock once your supervisor approves.
{{ r.id }}{{ r.markSuffix }}{{ r.name }} {{ r.weight }} g
PI review
Randomization approval
Submitted by
{{ randSubmittedBy }} · {{ newProjId }}
Pending
Cages hold more than one group
Randomization assigns groups by weight, not by cage — it has no idea which cage an animal already sits in. That can leave a cage holding more than one group, which fragments cage-card printing into a separate small card per group. Move a group's animals into their own cage below to fix it.
{{ cc.cageId }}
{{ g.label }} {{ g.count }}
{{ r.id }}{{ r.markSuffix }}{{ r.name }} {{ r.weight }} g
Remove {{ r.id }}?
Weight balance per group · mean ± SD
{{ gs.tag }} {{ gs.text }}
{{ gs.nText }}
All randomised animals{{ randOverallText }}
Stratified block randomization by body weight. Method: Festing & Altman, ILAR J. 2002;43(4):244-258.
Step 1 of 4
Select animal
{{ newProjId }} {{ assignedProjectName }}
{{ cohortCount }} animals in cohort
{{ grp.collapsedSummary }}
Step 2 of 4
Pre-session checks
Animal record {{ activeLabel }}
System ID:
{{ animal.id }}
Subject Label:
{{ animal.label }}
Species:
{{ animal.species }}
Strain:
{{ animal.strain }}
Sex:
{{ animal.sexLabel }}
Cage:
{{ animalCage }}
Tail colour:
{{ animalMarkDisplay }}
Weight:
{{ animal.weight }} g
Group:
{{ animalGroupDisplay }}
Genotype:
{{ animal.genotype }}
Experimenter:
{{ animal.experimenter }}
Required before launch
Identity confirmed
ID scan matched cage card
Complete weight & dose to continue
Only needed if this session hands off to another app
{{ animal.id }}{{ animal.markSuffix }} · {{ animal.label }}
Record weight
{{ scaleLabel }}
{{ weightVal }} g
{{ sessionDeltaText }} vs last ({{ animal.weightLast }} g)
⚠ Check this weight — rodents don't weigh 1000+ g
Uploading photo…
Photo attached to weight record
{{ animal.id }}{{ animal.markSuffix }} · {{ animal.name }} · {{ weightVal }} g
Dose calculator
{{ phaseAutoFillNote }}
{{ otherDueTracksNote }}
{{ phaseUnresolvedNote }}
{{ compound }}
Lot {{ lot }}
Stock concentration
{{ stockConcStr }} mg/mL
Target dose
{{ doseStr }}{{ doseUnitLabel }}
{{ ceilingText }}
Inject volume
{{ volMl }} mL {{ compoundMgLabel }} to animal
{{ formula }}
{{ formulaRule }}
Dose exceeds protocol ceiling — cannot proceed
GLP record
Confirm & sign
Animal{{ animal.id }} · {{ animal.name }}
Tail colour / mark{{ animal.mark }}
Protocol{{ newProjId }}
Weight{{ weightVal }} g
Compound{{ compound }}
Route · Dose{{ route }} · {{ doseStr }} mg/kg
Stock concentration{{ stockConcStr }} mg/mL
Volume to inject{{ volMl }} mL
Drug delivered{{ compoundMgLabel }}
Remarks (optional)
Humane endpoints reviewed. No exclusion criteria met for this subject.
No dose will be administered or recorded. This animal is removed from future daily dosing rosters once confirmed.
Electronic signature
{{ signerInitials }}
{{ signerName }}
Experimenter
{{ nowTime }}
Step 4 of 4
Launch experiment
Session record ready
Passing {{ animal.id }}{{ animal.markSuffix }} · weight · dose to the app
Choose downstream app
Session started
Opening {{ launchApp.name }} with the signed record
Audit trail
Identity confirmed · {{ animal.id }}{{ animal.markSuffix }}
{{ signerName }}
Weight recorded · {{ weightVal }} g
{{ signerName }}
Dose signed · {{ compound }} {{ doseStr }} mg/kg {{ route }}
{{ nowTime }} · {{ signerName }} · {{ volMl }} mL
App launched · {{ launchApp.name }}
{{ nowTime }} · record handed off
Checking…