Skip to content
OnlyProjects
MCA · Mobile App DevelopmentFor educational purposes only
Code included

Meter-Reading and Outage-Reporting Field App for an Electricity Section Office (Flutter)

Offline-first app for meter readers and linemen — photo-verified readings, outage tickets and billing sync without the paper log

Mapped to your syllabusVTU MCA 2022 Scheme · 22MCA44 Project Phase-2 · Semester 4

Overview

1 min read

GridMeter is an offline-first mobile application plus a small section-office server that digitises the two things an urban electricity section office in Karnataka still does on paper: the monthly meter-reading round and the outage complaint register. Meter readers walk hundreds of consumer premises every billing cycle, writing kWh readings in a notebook; clerks later type them into the billing system, and every transcription is a chance for a wrong bill. Outages reach the office as phone calls that a lineman writes into a register, so restoration times and reliability figures are nobody's responsibility.

The Flutter app gives each meter reader a daily route of consumers. A reading is captured with the meter photo, GPS fix and timestamp, stored first in a local SQLite database (drift), and flagged automatically when it looks wrong — zero consumption after months of usage, or a spike beyond three times the three-month average. Linemen open, assign and close outage tickets through a simple lifecycle (Intimated → Crew Assigned → Restored), from which the system computes SAIFI and SAIDI per month. Everything queues in a sync engine and reaches the section-office server (Node.js/Express + MySQL) whenever the network returns; the clerk gets a web console for bill-file CSV export and anomaly review.

Flutter/Dart is an industry-standard cross-platform framework used here beyond the Android/Java core taught in 22MCA263; the backend uses exactly the JavaScript, DBMS and web-technology skills of the VTU MCA 2022 scheme, which makes the project easy to defend in the 22MCA44 viva.

Relevant for
Karnataka
Level
Advanced · 16 weeks · solo
Common at
VTU, Anna University, Chennai, Jawaharlal Nehru Technological University Hyderabad
Updated
Nov 2026

Syllabus alignment

VTU · MCA 2022 Scheme

22MCA44 · Project Phase-2 · Semester 4 · 16 credits · CIE 100 + SEE 100

Subjects this project applies
  • 22MCA263 Mobile Application Development
  • 22MCA22 Java (OOP foundations)
  • 22MCA21 DBMS (MySQL)
  • 22MCA24 Web Technologies (REST API design)
How it is evaluated

50 : 25 : 25 (report : presentation : Q&A); plagiarism check mandatory

Also fits: Anna University MCA Regulation 2021, JNTUH MCA R22, IGNOU MCA_NEW — MCSP-232 guidelines (2025).

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

Meter reading and outage handling in a small electricity section office are still paper processes. Readings recorded on round-sheets are transcribed at the office, producing wrong bills, late cycles and disputes that cannot be settled because no photo or location evidence exists. Outage complaints arrive by phone into a handwritten register with no status, owner or restoration time, so consumers call repeatedly and the section cannot compute the SAIFI and SAIDI reliability indices it is judged by. Field staff frequently work where mobile data fails, so any app that assumes connectivity fails exactly when it is needed. The section needs an offline-first mobile system in which readings and outages are captured once, at the point of work, with photographic and GPS evidence, validated by automatic anomaly rules, and synchronised safely to a section-office server that exports billing-cycle files and reliability reports — without storing Aadhaar or any other government identity number.

Synopsis

Abstract

This project builds an offline-first field application for an electricity distribution section office: meter readers capture photo-verified readings on a local SQLite store, linemen run outage tickets through a tracked lifecycle, and a sync engine reconciles everything with a Node.js/Express + MySQL server once connectivity returns. The clerk console exports billing-cycle CSV files and computes SAIFI/SAIDI reliability indices from outage data.

Introduction

Every Indian discom, BESCOM among them, bills consumers from monthly meter readings. In a typical section office serving 8,000–15,000 consumers, readings are still taken on paper round-sheets and re-typed at the office, so billing cycles start late and wrong bills lead to reconnections-for-dispute visits. Outages are reported by phone into a register with no status history, so consumers call repeatedly and reliability figures are reconstructed at month-end from dog-eared pages. Field staff work inside buildings, basements and rural pockets where mobile data is unreliable — which is why any field app for this domain must work fully offline.

Existing System and Its Limitations

  • Readings are written on paper round-sheets, then keyed into the billing system by clerks — transcription errors, late billing, disputed bills.
  • No photo or GPS evidence, so a contested reading cannot be verified.
  • Outage complaints live in a phone-and-register workflow: no ticket status, no restoration timestamps, no accountability.
  • SAIFI/SAIDI are computed manually at month end, if at all.
  • Gap: utility-grade field suites target large discom IT departments and cost lakhs; nothing lightweight exists for a single section office to trial.

Proposed System

  • A Flutter app with a drift/SQLite local store holds the reader's daily route, so a full day's round completes with zero network.
  • Each reading captures value, meter photo, GPS fix and timestamp; anomaly rules (zero consumption, spike > 3x the trailing three-month average, backward reading) flag records for supervisor review before export.
  • Outage tickets move through Intimated → Crew Assigned → Restored with timestamps, consumer callback notes and cause codes, giving real SAIFI and SAIDI per month.
  • A sync engine queues every local mutation, uploads with idempotency keys, retries with exponential backoff and resolves conflicts by a documented rule (server-verified reading wins; consumer master edits are last-write-wins with an audit row).
  • The Express + MySQL server exposes role-based REST endpoints (reader, lineman, clerk, admin) and a monthly bill-file CSV export that plugs into the existing billing process instead of replacing it.

Feasibility Study

  • Technical: Flutter compiles one Dart codebase to Android (and iOS later); drift gives type-safe SQLite with stream queries; Express + MySQL is the same stack taught in 22MCA24/22MCA21. The sync design needs no exotic infrastructure.
  • Economic: Zero licence cost. The server runs on the office's existing PC; phones are the readers' own handsets (Android 8+).
  • Operational: The reading screen is one thumb-reachable form; a reader trains in 20 minutes. The office keeps its billing system — the app feeds it data — so adoption risk stays low.

Objectives

  1. 01Build an offline-first Flutter application in which a meter reader can complete an entire daily route with no network connectivity.
  2. 02Capture photo, GPS and timestamp evidence with every reading and attach it to the consumer's record.
  3. 03Design a normalised (3NF) MySQL schema for users, routes, consumers, readings, outage tickets and the sync audit trail.
  4. 04Implement a reliable sync engine with a local mutation queue, idempotency keys, exponential-backoff retries and a documented conflict-resolution rule.
  5. 05Track every outage through Intimated → Crew Assigned → Restored with timestamps and cause codes, and compute monthly SAIFI and SAIDI per section.
  6. 06Flag anomalous readings (zero consumption, spikes beyond 3x the three-month average, backward readings) for supervisor review before export.
  7. 07Provide a role-based Express + MySQL API and a clerk console that exports monthly bill-file CSVs compatible with the existing billing process.
  8. 08Apply OWASP Mobile Top 10 controls: TLS-only transport, tokens in secure storage, hashed passwords and parameterised queries.

Scope

In scope

  • One section office with multiple readers and linemen; Android 8+ phones; 8,000-consumer-scale data.
  • Daily route assignment, reading capture (value, photo, GPS, timestamp), anomaly flagging and supervisor clearance.
  • Outage ticket lifecycle with cause codes, restoration timestamps and monthly SAIFI/SAIDI computation.
  • Offline mutation queue with background sync, retry and conflict handling; full audit table of every synced change.
  • Clerk web console: consumer master, route management, bill-file CSV export, anomaly review, reliability report.

Out of scope (v1)

  • Prepaid and smart-meter protocols (DLMS/MDM integration) — readings arrive manually in v1.
  • Online payment collection and the discom's core billing engine (the CSV export feeds it instead).
  • iOS build and push notifications (WhatsApp/SMS fan-out to consumers is a listed future item).
  • Transformer/feeder-level asset management beyond the cause-code field.

Methodology

The project follows the iterative and incremental SDLC model: a thin end-to-end slice (capture one reading, sync it, see it in the console) exists by week 6, and every later increment thickens it. For a system whose hardest problem — offline synchronisation — is discovered only through use, incremental delivery with a working demo every fortnight beats a single-shot waterfall.

PhaseWeeksActivitiesDeliverable
Requirements1–2Visit a section office (or shadow a reader), study the round-sheet and complaint register formats, list functional/non-functional requirementsSRS + approved synopsis
Design3–4MySQL schema (3NF), REST contract, sync-sequence diagram, widget wireframesDesign document
Increment 15–7Flutter app shell, drift schema, route list, reading capture with photo/GPSOffline capture module
Increment 28–9Express API, JWT roles, consumer/route masters, mutation queue + background syncSync engine v1
Increment 310–11Outage ticket lifecycle, cause codes, SAIFI/SAIDI computationOutage module
Increment 412–13Anomaly rules, clerk console, bill-file CSV export, audit trailReporting module
Testing & hardening14Unit + widget + API tests, airplane-mode field trials, conflict-resolution torture testsTest report
Documentation & demo15–16Final report in VTU format, PPT, demo rehearsal, plagiarism report22MCA44 submission

Testing approach: unit tests for the anomaly rules, SAIFI/SAIDI arithmetic and conflict resolver (pure Dart, flutter test); widget tests for the reading form; Mocha/Chai API tests including duplicate idempotency keys and role abuse; and a scripted field test that walks a route in airplane mode, restores the network mid-round and verifies that exactly one copy of every reading lands in MySQL.

Architecture & tech stack

3 diagrams · 8 technologies · 2 min read

  • Flutter 3 (Dart)
  • drift (SQLite local store)
  • Riverpod state management
  • Node.js + Express REST API
  • MySQL 8
  • JWT authentication
  • workmanager (background sync)
  • flutter_test + Mocha/Chai

The system is a three-tier architecture with an explicit offline-first layer inside the mobile tier — the design decision that defines this project.

  1. Mobile tier (Flutter/Dart): widgets render from Riverpod state providers; a repository layer writes first to the local drift/SQLite store. The reading screen captures value, photo, GPS and timestamp in one gesture flow. Every mutation also appends a row to a local sync_queue table, and the workmanager-driven background worker drains that queue whenever connectivity returns.
  2. Application tier (Node.js/Express): JWT-authenticated REST endpoints grouped by role. The sync endpoint accepts batches keyed by client-generated idempotency keys, deduplicates them, applies server-side validation (anomaly rules, route ownership) and records every accepted change in a server-side sync audit table.
  3. Data tier (MySQL 8): normalised schema for users, routes, consumers, readings, outage tickets, bill runs and the sync audit; InnoDB transactions wrap bill-file generation.
flowchart TD
  R["Reader / lineman phone"] --> W["Flutter widgets (Riverpod state)"]
  W --> RP["Repository layer"]
  RP --> LDB[("Local drift/SQLite store")]
  RP --> SQ["sync_queue table + workmanager worker"]
  SQ -->|"HTTPS + JWT, batched, idempotent"| API["Express REST API"]
  API --> MW["JWT verify + role middleware"]
  MW --> SV["Sync service: dedupe, validate, audit"]
  SV --> DB[("MySQL 8")]
  CL["Clerk web console"] --> API
  SV --> CSV["Bill-file CSV + SAIFI/SAIDI reports"]

ER diagram

erDiagram
  USER ||--o{ READING : records
  CONSUMER ||--o{ READING : "is read in"
  ROUTE ||--o{ CONSUMER : groups
  CONSUMER ||--o{ OUTAGE_TICKET : reports
  USER ||--o{ OUTAGE_TICKET : resolves
  BILL_RUN ||--o{ READING : consumes
  USER ||--o{ SYNC_AUDIT : "changes tracked for"

  USER {
    string id PK
    string name
    string role
    string passwordHash
  }
  ROUTE {
    string id PK
    string name
    date assignedDate
    string readerId FK
  }
  CONSUMER {
    string id PK
    string rrNumber UK
    string name
    string address
    string routeId FK
    string mobile
  }
  READING {
    string id PK
    string consumerId FK
    string billRunId FK
    decimal unitsKwh
    string photoHash
    decimal latitude
    decimal longitude
    datetime takenAt
    string anomalyFlag
    string status
  }
  OUTAGE_TICKET {
    string id PK
    string consumerId FK
    string status
    string causeCode
    datetime intimatedAt
    datetime restoredAt
  }
  BILL_RUN {
    string id PK
    string cycle
    date exportedAt
  }
  SYNC_AUDIT {
    string id PK
    string idempotencyKey UK
    string entity
    datetime appliedAt
  }

Outage ticket state machine

flowchart LR
  I["Intimated"] --> CA["Crew Assigned"]
  CA --> FB["Field Visit"]
  FB --> RS["Restored"]
  FB -->|"cause needs senior"| ES["Escalated"]
  ES --> RS

The consumer master deliberately stores only the RR (revenue register) number and mobile number — never Aadhaar, PAN or bank details — so a stolen backup leaks nothing sensitive.

Modules

6 modules

  1. Module 01

    Offline Route & Reading Capture

    The reader opens the app to today's route, pre-downloaded at office Wi-Fi. Each consumer row shows pending or done; the capture form takes the kWh value, a meter photo (compressed, hash-named locally), a GPS fix and the timestamp, and writes everything to drift in one transaction. The row is immediately marked synced=false and queued for the sync engine.

  2. Module 02

    Anomaly Detection & Supervisor Clearance

    Pure-Dart rule functions compare each reading against the consumer's trailing three-month average: zero units after sustained usage, spikes beyond 3x, backward readings and duplicate submissions raise anomaly flags. Flagged readings cannot enter a bill run until the clerk clears or rejects them, with the decision recorded in the audit trail.

  3. Module 03

    Sync Engine (the core contribution)

    Every local mutation gets a UUID idempotency key and lands in the local sync_queue. A workmanager background task batches and uploads queued items with exponential backoff; the server deduplicates by key, validates, and applies. Conflicts resolve by rule: readings already accepted from another device win, master-data edits are last-write-wins, and every conflict writes a row both sides can audit. A kill-the-app-mid-sync test proves no duplicates or losses.

  4. Module 04

    Outage Ticketing & Reliability Indices

    Linemen create tickets from a consumer address or feeder note, move them through Intimated → Crew Assigned → (Field Visit →) Escalated → Restored, and record cause codes (fuse, transformer, line, planned). From restoration timestamps the server computes monthly SAIFI (interruptions per consumer) and SAIDI (minutes per consumer) per section, matching the indices discoms publish.

  5. Module 05

    Section-Office API & Consumer Master

    Express routes grouped behind JWT verification and role middleware (reader, lineman, clerk, admin). The consumer master keeps RR number, name, address, mobile and route; bulk import starts from a CSV the office already has. Passwords are bcrypt-hashed; all queries are parameterised; tokens live in flutter_secure_storage, never in plain preferences.

  6. Module 06

    Clerk Console, Bill Export & Reports

    A lightweight web console for the clerk: build a monthly bill run, review and clear anomalies, export the reading/bill CSV in the office's column format, and view the reliability report and per-reader completion statistics. Exports run in an InnoDB transaction so a bill run is atomic.

Slides

12 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    GridMeter — Meter-Reading and Outage Field App

  2. Slide 2

    Context: How a Section Office Works Today

  3. Slide 3

    Problem Statement

  4. Slide 4

    Existing vs Proposed System

  5. Slide 5

    Objectives

  6. Slide 6

    Technology Stack and Why

  7. Slide 7

    Architecture: the Offline-First Layer

  8. Slide 8

    Data Model

  9. Slide 9

    Demo: a Reading and an Outage

  10. Slide 10

    The Sync Engine (Deep Dive)

  11. Slide 11

    Testing

  12. Slide 12

    Conclusion and Future Scope

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 15 answered free · 12 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    Why must this app be offline-first? Could it not just call the API as the reader walks?

    Meter readers work inside compounds, basements and rural stretches where mobile data drops for hours; an online-only app would block the round exactly when work is due. Storing every capture in a local SQLite store and syncing later means connectivity is an optimisation, not a requirement, and the day's route always completes.

  2. 02Concept

    Why Flutter instead of native Android with Java, which 22MCA263 covers?

    The Android fundamentals from 22MCA263 — activity lifecycles, storage, permissions — transfer directly, and Flutter is the industry-standard cross-platform framework I adopted beyond the syllabus: one Dart codebase serves Android today and iOS later, with a mature SQLite binding in drift and a single widget model that made the capture form and queue screen fast to build and test.

  3. 03Concept

    Explain your synchronisation design in one minute.

    Every local write also appends a row to a sync_queue table carrying a UUID idempotency key. A background workmanager task batches queued items and posts them to the Express server, retrying with exponential backoff on failure. The server deduplicates by key, validates each item, applies it in a transaction and records the key in a sync audit table, so replays are harmless and every change has an evidence trail.

+12 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

6 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

6 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

254 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

254 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

354 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

354 words · ~2 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

7 sources

  1. Flutter Documentation — offline-first patterns, testing and background execution
  2. drift — reactive persistence library for Flutter and Dart (SQLite)
  3. Node.js Official Documentation
  4. MySQL 8.0 Reference Manual — InnoDB transactions and locking
  5. OWASP Mobile Top 10 (2024) — mobile application security risks
  6. BESCOM — Bangalore Electricity Supply Company: consumer services, complaint registration and published reliability indices (SAIFI/SAIDI)
  7. Ian Sommerville, Software Engineering, 10th ed., Pearson

Cite this bundle

OnlyProjects. (2026). Meter-Reading and Outage-Reporting Field App for an Electricity Section Office (Flutter): MCA Mobile App Development project bundle [Educational resource]. https://onlyprojects.online/projects/mca-mobile-meter-reading-outage-field-app

Future scope

1 min read

  • Meter-photo OCR to auto-read the register digits and cross-check the typed value.
  • Smart/prepaid-meter ingestion (DLMS/MDM) so readings arrive automatically and the app becomes exception-only.
  • Consumer-facing outage updates over SMS/WhatsApp with ticket status and expected restoration time.
  • Route optimisation so the daily round follows the actual street sequence instead of the register order.
  • Payment-link generation against disputed bills and a multi-section SaaS deployment with a central discom dashboard.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.