General
PG Accommodation Rent, Deposit & Maintenance Manager for Paying-Guest Owners (Django + MySQL)
Beds, rent, electricity split, deposit refunds and repair tickets for a PG, without the notebook
- Python 3.12
- Django 5
- MySQL 8
- +4
Two-time milk collections, fat/SNF testing, quality-based payments, recoveries and the monthly member settlement
Mapped to your syllabusKerala University FYUGP 2024 · UK8RPHCAP400 / UK8CIPCAP400 Research Project / Internship Project · Semester 8Milk Collection & Quality-Based Payment Ledger (MCPL) is a PHP and MySQL web application for a village-level Dairy Co-operative Society (DCS) — in Kerala, a primary society affiliated to Milma, the Kerala Co-operative Milk Marketing Federation, under the Anand Pattern. A typical society has 200–400 member families who bring milk twice a day, in the morning and evening shifts. At the society counter the milk is weighed and tested for fat and SNF (solids-not-fat), and the member's payment depends on those quality readings — yet most small societies still record this in a bound notebook, a calculator and carbon-copy payment slips.
MCPL gives the society secretary, the collection operator and each member one accurate record. The operator enters weight, fat and SNF per member per shift; the system computes kilograms of fat and SNF, applies the effective-dated rate table (separate rates for cow and buffalo milk, revisable for flush and lean seasons) and posts the amount to the member's ledger. Deductions at source — cattle-feed credit instalments, society loan recovery, share capital and the Dairy Farmers' Fund contribution — are applied automatically with caps. Each member gets a passbook view, and the system produces the fortnightly payment register, the society's milk pool summary and the reconciliation sheet against the union's receipt.
The project is sized for a final-year FYUGP BCA research project: a normalised database, temporal rate data, transaction-safe shift closing, role-based access and a documented test suite make every design decision defensible in the viva.
Syllabus alignment
A village dairy co-operative society collects milk from hundreds of member families twice a day, tests fat and SNF at the counter, and must pay every member correctly at each settlement after deducting feed credit, loan instalments, share capital and welfare-fund contributions. When this runs on a handwritten register and a calculator, fat or weight entries are miscopied, seasonal rate revisions are applied inconsistently, the same member is sometimes entered twice in one shift, deductions over-recover from small suppliers, and members have no way to verify what they were paid for. The secretary spends days compiling fortnightly payment registers and union reports, and disputes at the settlement counter are common.
The problem is to build a web-based ledger that makes each collection entry unique and traceable, computes payments transparently from effective-dated rates, applies deductions safely, and gives the secretary, operator and member reliable registers and reports — without storing any government identity numbers.
Village dairy co-operative societies are the first link of India's three-tier Anand Pattern: members pour milk at the society, the society pays them by quality (fat and SNF), and pooled milk moves to the district union and state federation — Milma in Kerala, with 3,113 primary societies and 10.7 lakh member-farmers. Payment is the society's most sensitive daily operation, yet in many societies it runs on notebooks and hand calculators, producing calculation errors, untraceable deductions and disputes. This project builds the Milk Collection & Quality-Based Payment Ledger (MCPL), a PHP/MySQL web application that records shift-wise collections, computes quality-based payments from effective-dated rates, manages deductions at source and prints passbooks, payment registers and settlement reports.
I studied a 300-member society in Kottayam district (name changed). Members queue at the counter in the morning and evening; the operator weighs the milk, tests fat with an electronic milk tester, notes weight, fat and can number in a register, and reads SNF from a lactometer table. Payment is announced only at the fortnightly settlement, and a member disputing a figure has no record to check. The secretary separately tracks feed-credit instalments, loans, share capital and the Dairy Farmers' Fund, all subtracted from milk payment in the same notebook.
In scope
Out of scope (v1)
The project follows the Incremental (iterative) SDLC model: the collection entry core is delivered first, and payment, deduction and settlement layers are added as working increments, each reviewed by the guide. This suits a 16-week FYUGP semester-8 project because a demonstrable system exists from week 6 onward.
| Phase | Weeks | Activities | Deliverable |
|---|---|---|---|
| Requirement study | 1–2 | Visit the society, observe both shifts, interview the secretary and two operators, collect blank registers and rate slips | Requirement notes |
| System design | 3–4 | DFD level 0/1, ER diagram, 3NF table design, wireframes, test plan | Design document |
| Increment 1 | 5–6 | Authentication, roles, member registry | Working registry |
| Increment 2 | 7–9 | Collection entry, unique per-shift constraint, shift close, pool summary | Working collection module |
| Increment 3 | 10–11 | Rate tables, payment engine, deduction engine | Working payment module |
| Increment 4 | 12–13 | Passbook, settlement, registers, CSV export, reconciliation | Full application |
| Testing | 14 | Unit tests (payment, caps, rounding), functional test cases, security checks | Test report |
| Documentation & viva prep | 15–16 | Report writing, screenshots, PPT, rehearsal | Final submission |
Member-wise work split (team of 3). Member 1: database design, member registry, authentication and audit log. Member 2: collection entry, shift closing and rate management. Member 3: payment engine, deductions, settlement, reports and the test suite. All three jointly prepared the DFDs and the report.
Payment rule. For a collection of weight W kg with fat F% and SNF S%: kg fat = W × F ÷ 100 and kg SNF = W × S ÷ 100. In two-axis mode the amount is (kg fat × fat rate) + (kg SNF × SNF rate); in single-axis mode it is kg fat × per-kg-fat rate. Rates come from the rate table row effective on the collection date for the member's milk type. Amounts are computed to two decimals and rounded to the rupee only at settlement; deductions are applied in the order feed credit → loan → share capital → welfare fund, each capped at the remaining net.
MCPL follows a three-tier architecture: browser → PHP application (page controllers, service classes for payment, deduction and settlement) → MySQL 8, with PDO prepared statements for every query and server-side sessions for authentication.
flowchart TD
SEC["Society Secretary"] -->|"rates, deduction setups"| P0(("Milk Collection and Payment Ledger"))
OPR["Collection Operator"] -->|"weight, fat, SNF readings"| P0
MEM["Member"] -->|"login, passbook view"| P0
P0 -->|"rate change alerts, settlement register"| SEC
P0 -->|"shift totals, collection list"| OPR
P0 -->|"passbook, net payable"| MEMflowchart TD
SEC["Secretary"] --> P1(("1.0 Manage members and rates"))
P1 --> D1[("D1 Members")]
P1 --> D2[("D2 Rate table")]
OPR["Operator"] --> P2(("2.0 Record collection"))
D1 --> P2
D2 --> P3(("3.0 Compute payment"))
P2 --> D3[("D3 Collections")]
D3 --> P3
P3 --> D4[("D4 Payment entries")]
SEC --> P4(("4.0 Manage deductions"))
P4 --> D5[("D5 Recovery schedule")]
D4 --> P5(("5.0 Fortnightly settlement"))
D5 --> P5
P5 --> D6[("D6 Settlements")]
D6 --> P6(("6.0 Registers and reconciliation"))
D3 --> P6
P6 --> SEC2["Secretary"]
D6 --> P7(("7.0 Member passbook"))
P7 --> MEM["Member"]erDiagram
APP_USER ||--o{ AUDIT_LOG : writes
MEMBER ||--o{ COLLECTION : supplies
MILK_TYPE ||--o{ RATE : "is priced by"
RATE ||--o{ COLLECTION : applies
COLLECTION ||--|| PAYMENT_ENTRY : earns
MEMBER ||--o{ RECOVERY_SCHEDULE : carries
MEMBER ||--o{ DEDUCTION : "is charged"
MEMBER ||--o{ SETTLEMENT_LINE : "is settled in"
SETTLEMENT ||--|{ SETTLEMENT_LINE : contains
APP_USER {
int id PK
string username UK
string password_hash
string role
}
MEMBER {
int id PK
string member_no UK
string full_name
string phone
int milk_type_id FK
date joined_on
boolean active
}
MILK_TYPE {
int id PK
string name
}
RATE {
int id PK
int milk_type_id FK
decimal fat_rate
decimal snf_rate
date effective_from
date effective_to
}
COLLECTION {
int id PK
int member_id FK
date coll_date
string shift
decimal weight_kg
decimal fat_pct
decimal snf_pct
string quality_flag
}
PAYMENT_ENTRY {
int id PK
int collection_id FK
decimal kg_fat
decimal kg_snf
decimal gross_amount
}
RECOVERY_SCHEDULE {
int id PK
int member_id FK
string recovery_type
decimal instalment
int instalments_left
string status
}
DEDUCTION {
int id PK
int member_id FK
string recovery_type
decimal amount
date applied_on
}
SETTLEMENT {
int id PK
date period_from
date period_to
boolean closed
}
SETTLEMENT_LINE {
int id PK
int settlement_id FK
int member_id FK
decimal gross
decimal deductions
decimal net_payable
}
AUDIT_LOG {
int id PK
int user_id FK
string action
string entity
datetime created_at
}Key design decisions. Rate history is temporal: each RATE row has an effective-from and effective-to window, so a rate revision never rewrites past collections — the payment engine joins the collection date against the window. COLLECTION carries a unique key on (member_id, coll_date, shift), which makes duplicate shift entries impossible at the database level, not just in the UI. PAYMENT_ENTRY stores the computed kg fat, kg SNF and gross amount so a later rate change cannot silently alter history. Every state-changing action by Secretary or Operator writes an AUDIT_LOG row, and audit rows have no update or delete path in the application. Shift close runs inside a transaction that recomputes the pool totals from D3 and marks the shift read-only.
Module 01
Session-based login with password_hash and password_verify, three roles (Secretary, Operator, Member) checked by a shared guard on every page, and an append-only audit log recording rate changes, settlements and recovery edits with user and timestamp. Owner: Member 1.
Module 02
The Secretary registers member families with member number, name, phone, milk type, feed-credit account and join date. Deactivation preserves all history and member numbers are never reused, so old registers remain meaningful. Owner: Member 1.
Module 03
The operator types weight, fat and SNF per member for the morning or evening shift; client-side JavaScript validates ranges (fat 0–12%, SNF 7–11%) and the unique (member, date, shift) key blocks duplicates. Shift close recomputes pool totals inside a transaction and locks the shift's entries. Owner: Member 2.
Module 04
Effective-dated rate rows per milk type with fat and SNF rates. Creating a revision closes the previous row's effective_to date, and the payment engine always selects the row whose window contains the collection date, so history stays priced correctly. Owner: Member 2.
Module 05
Converts readings to kilograms of fat and SNF, applies single-axis or two-axis computation with the effective rate, stores the immutable payment entry, and flags regraded or rejected collections with zero payment and a quality note. Owner: Member 3.
Module 06
Standing recoveries — cattle-feed credit EMI, society loan instalment, share capital and Dairy Farmers' Fund — are scheduled per member and applied at settlement in a fixed order, each capped at the remaining net so no member's payable goes negative. Owner: Member 3.
Module 07
Fortnightly settlement generation with per-member lines (gross, deductions, net payable), the member passbook with shift-wise history, the daily collection register, pool summary and union reconciliation sheet, all exportable to CSV. Owner: Member 3.
Slide 1
Milk Collection & Quality-Based Payment Ledger
Slide 2
Background: the Anand Pattern chain
Slide 3
Problem
Slide 4
Objectives
Slide 5
Tools and justification
Slide 6
System design
Slide 7
Payment and deduction rules
Slide 8
Database design highlights
Slide 9
Modules and team split
Slide 10
Demo
Slide 11
Testing
Slide 12
Conclusion and future scope
Bullets, speaker notes and the .pptx · ₹2,000
Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.
The data is relational and rule-driven: members, collections, rates, recoveries and settlements all reference each other, and correctness depends on constraints — one collection per member per shift, foreign keys to the rate in force, and totals that must balance. MySQL provides transactions, unique keys and referential integrity, which a flat file or spreadsheet cannot enforce.
Two-axis pricing pays the farmer on two quality components separately: kilograms of fat multiplied by the fat rate, plus kilograms of SNF multiplied by the SNF rate. A single-axis scheme pays only on kilograms of fat. Our system supports both modes because different societies adopt different schemes, and the mode is a society-level setting.
With PDO prepared statements the SQL text is sent to the server first and user input is bound afterwards as typed parameters, so input can never change the structure of a query. Even if someone types a quote or a Boolean fragment into the fat field, it is treated as data. This is the primary defence, with server-side validation as the second layer.
+13 more questions, with answers
Unlocks with the project · ₹2,000
Unlock for ₹2,000What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.
Unlocks with the project · ₹2,000
Unlock for ₹2,000How to study it, adapt it and walk your examiner through it, step by step.
Unlocks with the project · ₹2,000
Unlock for ₹2,000OnlyProjects. (2026). Milk Collection & Quality-Based Payment Ledger for a Village Dairy Co-operative Society (PHP + MySQL): BCA General project bundle [Educational resource]. https://onlyprojects.online/projects/bca-general-dairy-society-milk-collection-ledger
Keep browsing
Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.
General
Beds, rent, electricity split, deposit refunds and repair tickets for a PG, without the notebook
General
Daily can deliveries, deposits and monthly bills for a 300-household water business — no paper diary
Web Development
Room allocation, complaints and mess billing without the register
AI & Machine Learning
Predict tomorrow's air quality band for every Bengaluru monitoring station, before the morning commute
AI & Machine Learning
Forecast daily OPD crowds department by department, and plan the doctor roster before the Monday rush arrives
AI & Machine Learning
Turn a Soil Health Card into an explained, district-specific crop recommendation a small farmer can act on