Introduction
Dusuq ERP is farm management software for dairy operations — animal records, milk production, health, breeding, inventory and accounts, all in one connected system.
This documentation covers how to set up your farm, how each module works, how roles and permissions are structured, and the public API endpoints available on the platform. If you're just getting started, read Quick Start next.
Quick Start
Go from signup to your first logged milk record in under ten minutes.
1. Create your account
Register through the app's sign-up page with your email and farm name. This automatically creates your farm's isolated workspace (tenant) and makes you its owner.
2. Add sheds and animal groups
Under Settings → Sheds & Groups, create the physical sheds on your farm and any logical groups you use — e.g. High Yielders, Dry Group, Heifers.
3. Add your animals
In Animals, add each animal with its tag number, breed, sex and status. You can also bulk-import via the Excel template from the Milk module once animals exist.
4. Log your first milk entry
Go to Milk → Bulk Entry, pick a date and session (AM/PM), and enter litres for each milking animal in one sheet.
Account & Farm Setup
Configuration that shapes how every other module behaves.
Farm profile
- Name, owner email, phone, address, city and country
- Gestation period (days) — used to calculate expected calving dates
- Financial year start month — used for accounting reports
- Default milk price per litre and timezone
Sheds & animal groups
Sheds represent physical locations (capacity, notes); animal groups are logical groupings used for filtering and reporting. Both are scoped to your farm and can be renamed or removed at any time — removing a shed unassigns its animals rather than deleting them.
Breeds
Dusuq ERP ships with a global breed list covering cattle, buffalo and goat (Holstein Friesian, Jersey, Sahiwal, Nili-Ravi, Murrah, Beetal and more). You can also add farm-specific breeds.
Animal Records
A full lifecycle record for every animal on the farm.
Fields tracked
- Tag number, name, breed, sex, date of birth
- Status — heifer, open, inseminated, pregnant, dry, sick, sold, culled, dead
- Shed and animal group assignment
- Dam (mother) linkage, sire tag, lactation number
- Purchase date, purchase price, weight (kg)
Status lifecycle
An animal's status typically moves: heifer → open → inseminated → pregnant → dry → open (post-calving), with sick, sold, culled and dead available at any point. Milk records can only be logged for animals in a milking status (open, inseminated, or pregnant).
Milk Production
Twice-daily entry, reconciled against dispatch and consumption.
Milk records
Each record captures date, session (AM/PM), litres, and optional FAT% / SNF% quality readings, unique per animal per date per session. Bulk Entry lets you fill an entire herd's sheet for one session at once, and the Excel template supports import for teams migrating from paper registers.
Consumption
Milk consumed on-farm (mess, calf feeding, employee rations, etc.) is tracked separately via configurable consumption categories, so your chiller balance reflects what was actually dispatched.
Dispatch
Corporate and local dispatch records capture buyer, gross litres, lactometer reading, FAT/SNF, price per litre and amount received — feeding directly into the Accounts module as milk sale transactions.
Health & Vaccination
Treatments, vaccinations, dewormings and disease events per animal.
- Treatments — diagnosis, drug, dosage, route, cost, outcome, and a withdrawal period tracked automatically from the treatment date
- Vaccinations & dewormings — individual or group/shed-wide, with next due date
- Disease events — severity (mild/moderate/severe), symptoms and resolution date
Breeding & Reproduction
The full reproductive timeline, from service to calving.
- Insemination — AI (with semen batch) or natural service, with a repeat number for tracking re-services
- Pregnancy test — rectal, ultrasound, blood or milk progesterone, linked to the originating insemination
- Expected calving date — calculated automatically as insemination date + your farm's configured gestation period
- Dry-off, calving and abortion — including calf tag, sex and birth weight on calving
Inventory & Feed
Feed, medicine and semen stock, tracked from purchase to consumption.
- Products categorized as feed, medicine, semen or general, each with a reorder level
- Stock-in with supplier, invoice/batch number and expiry date
- Consumption linked optionally to a shed, animal, treatment, or insemination
- Current stock computed live as stock-in minus consumption
Accounts & Finance
Real double-entry bookkeeping, reconciled against farm activity.
- Chart of accounts: asset, liability, income, expense and equity heads, with optional parent/child hierarchy
- Transactions always post a debit and credit account — cash receipts, payments, purchases, milk sales and corporate payments
- Ledger, trial balance and profit & loss reports generated on demand for any date range
- Fixed assets with straight-line depreciation based on useful life and salvage value
Roles & Permissions
Every user on your farm has exactly one role, which scopes what they can see.
| Role | Typical access |
|---|---|
| owner | Full access to every module, settings and user management |
| manager | Day-to-day operations across all modules |
| veterinary | Health & vaccination, animal records |
| accountant | Accounts & finance, milk dispatch payments |
| technician | Breeding & reproduction records |
| milker | Milk entry only |
Multi-Tenant Architecture
Each farm is a fully isolated tenant — nothing crosses boundaries.
Every request to the API (outside of authentication and public endpoints) must include an
X-Tenant-ID header identifying the farm. All records — animals, milk data, health
events, transactions — carry a tenant reference, and every query is scoped to that tenant
automatically. Groups managing more than one farm can switch between tenants without their
data ever mixing.
Overview
VetAssist is a highly intelligent system built into Dusuq ERP, with read access to every module in your farm's workspace.
Instead of navigating to a specific module to find an answer, you ask VetAssist directly — in plain language — and it works out which module (or modules) the answer actually lives in. It can answer about a single animal, an entire herd or shed, or the farm's financial position, and it can generate structured reports on request rather than just answering inline.
Data Access Model
VetAssist reads across every module — nothing is walled off from it within your farm.
- Animal Records — tag, breed, status, lineage, shed/group assignment
- Milk Production — yield history, quality readings, dispatch and consumption
- Health & Vaccination — treatments, withdrawal periods, vaccination and deworming schedules, disease events
- Breeding & Reproduction — insemination, pregnancy tests, calving history, expected dates
- Inventory & Feed — stock levels, consumption linked to animals or sheds
- Accounts & Finance — ledger, trial balance, dispatch payments, profit & loss
Access to VetAssist follows the same role-based permissions as the rest of the platform — a user can only ask about (or receive answers drawing from) modules their role already grants access to. VetAssist's queries are always scoped to the requesting user's tenant; it never has visibility into another farm's data.
Asking Questions
Any question that touches data already in Dusuq ERP can be asked directly.
VetAssist is available from anywhere in the app as a persistent assistant panel. A question can reference a specific animal by tag number, a shed or animal group, or the farm as a whole — VetAssist resolves the reference and queries the relevant module(s) before answering.
Example questions
- "Why has COW-014's milk yield dropped this week?"
- "Which animals are due for vaccination in the next 7 days?"
- "What was our feed cost last month compared to the month before?"
- "Is Shed 3's average yield trending up or down this quarter?"
- "Which dispatch payments are still outstanding?"
Report Generation
Ask for a report on any animal or herd, and VetAssist compiles one from what's on record.
Provide an animal's tag number (or a shed/group for a herd-level report) and VetAssist pulls that entity's full history across every module — health events, breeding timeline, yield trend, feed consumption — into a single structured report.
When research is included
If the underlying data points to a need — a declining yield trend, a resolved but recent disease event, an unusual gap in weight gain — VetAssist researches relevant diet plans or treatment strategies and includes them as a recommendation within the report. A vet can also request this research directly for any animal, independent of a full report, or ask a specific question about a condition or symptom.
Forecasting & Analysis
Historical analysis and forward-looking forecasts, for both animals and finances.
- Yield trend analysis for an individual animal, a group, or the whole herd, over any date range
- Financial forecasting — projected milk revenue, feed cost trajectory, cash position
- Period-over-period comparisons — this month vs. last, this season vs. the same season last year
Forecasts are generated from the same data VetAssist has access to elsewhere — they improve in accuracy as more history accumulates in your farm's records, and further still once ERP v2.0's continuous monitoring data is available.
External Research
When your farm's data doesn't have the answer, VetAssist looks beyond it.
Diet science, disease information and treatment strategy aren't things a farm's own records can fully contain. In these cases, VetAssist supplements your data with researched information — for example, suggesting a diet adjustment appropriate to a documented health condition, or outlining treatment options for a logged disease event. Your farm's own data is always checked first; external research is used to fill in what your records can't answer on their own.
Model & Data Handling
VetAssist's reasoning is powered by Google's Gemini API.
Your farm's data is retrieved from Dusuq ERP's database and passed to the model as context for a given query or report — it is not used to train or fine-tune any underlying model. Every request VetAssist makes is scoped by the same tenant isolation as the rest of the platform, so a query can only ever draw on the requesting farm's own records.
Overview
Dusuq ERP v2.0 adds continuous, camera- and tag-based monitoring on top of the manual records the platform already keeps.
Today, Dusuq ERP is as accurate as what's manually entered. v2.0 is designed to close the gaps between entries — connecting CCTV feeds, infrared visualization and RFID-tagged tracking so that highly intelligent systems can build detailed, personalized reports for any entity, whether a single animal or an entire herd, continuously rather than only when someone logs an event. See the full v2.0 roadmap page for the product overview.
CCTV & IR Monitoring
Camera feeds become structured, queryable data instead of raw footage.
- Integration with existing or new farm CCTV infrastructure
- Infrared (IR) visualization for continuous overnight monitoring
- Feed output is processed by highly intelligent systems trained to prepare detailed, personalized reports for any entity — one animal or a whole herd
- Designed to help vet doctors understand animals better across every stage of the animal lifecycle, including forecasting and diet planning
RFID Tagging
RFID tags give computer vision models a reliable way to track individual animals continuously.
- An RFID tag is installed on each animal, linking its physical presence on camera to its existing Dusuq ERP record
- Computer vision (CV) models monitor tagged animals 24/7 across integrated camera feeds
- Historical analysis and forecasting are built automatically from the resulting continuous data
- This monitoring data becomes available to VetAssist, deepening the reports and forecasts it can generate
Authentication
Dusuq ERP's API uses JWT bearer tokens, plus a tenant header on every scoped request.
{ "email": "you@farm.com", "password": "••••••••" }
{ "access": "eyJhbGciOi...", "refresh": "eyJhbGciOi...", "user": { "email": "you@farm.com", "tenant_id": "..." } }
Authenticated requests
Send the access token as a bearer token, and your tenant ID on every tenant-scoped endpoint:
# Example — fetch animal summary curl https://<your-api-host>/api/animals/summary/ \ -H "Authorization: Bearer <access_token>" \ -H "X-Tenant-ID: <your_tenant_id>"
/api/auth/token/refresh/ with your refresh
token to get a new one without re-authenticating.
VetAssist Endpoints
Authenticated, tenant-scoped endpoints for asking questions and generating reports.
{ "question": "Why has COW-014's milk yield dropped this week?" }
{ "answer": "Yield is down 18% vs. her 30-day average...", "sources": ["animals", "milk", "health"], "generated_at": "2026-07-12T09:14:00Z" }
{ "entity_type": "animal", "entity_id": "COW-014", "include_research": true }
entity_type accepts animal, shed, or group
for herd-level reports. Set include_research to true to allow
VetAssist to research diet or treatment recommendations when the data warrants it.
Retrieves a previously generated report by ID — reports are saved against the farm's tenant and remain accessible to any user with permission to view the source animal or herd.
{ "metric": "milk_revenue", "scope": "farm", "horizon_days": 30 }
metric accepts values like milk_yield, milk_revenue, or
feed_cost; scope accepts animal, shed,
group, or farm.
Authorization bearer token and
X-Tenant-ID header as every other tenant-scoped endpoint — see
Authentication.
Public Contact Endpoint
The one endpoint that doesn't require authentication or a tenant header — used by this marketing site's contact form.
{ "name": "Ali Tarar", "email": "ali@example.com", "farm_name": "Tarar Dairy Farm", "herd_size": "50-200", "message": "Interested in a demo." }
Returns 201 Created with the saved inquiry on success. Rate-limited to 10
requests per hour per IP address to prevent abuse.
Support Tickets
Public endpoints — no authentication or tenant header required. Used by the support ticket page on this site.
The support ticket system is intentionally separate from the authenticated app API: it's the channel for someone who can't get into their account, or whose issue is with the account itself. Submitting a ticket only requires an organization name and the Dusuq ERP account username the ticket concerns — not a valid session.
{ "organization_name": "Tarar Dairy Farm", "account_username": "ali.tarar", "email": "ali@example.com", "subject": "Can't log milk dispatch for yesterday", "description": "Getting a 500 error when saving..." }
{ "ticket_number": "TKT-A1B2C3D4", "organization_name": "Tarar Dairy Farm", "account_username": "ali.tarar", "status": "open", "priority": "medium", "created_at": "2026-07-12T09:14:00Z" }
Looks up a ticket's status by its reference number. Returns only the subject and status — not the organization, account username, or description — since the reference number is the only credential required to check it.
{ "ticket_number": "TKT-A1B2C3D4", "subject": "Can't log milk dispatch for yesterday", "status": "in_progress", "status_display": "In Progress", "created_at": "2026-07-12T09:14:00Z", "updated_at": "2026-07-12T14:02:00Z" }
open, in_progress, resolved,
closed) and priority are managed by support staff from the Django admin panel —
there is no public endpoint to change them.