A Flutter application that helps Australian investment property owners automatically extract income and expense data from their property management PDF statements, categorize them according to the ATO Rental Property Worksheet, and track trends across financial years for negative gearing and tax return purposes.
- 🔐 Authentication — Secure sign-up, login, and logout powered by Firebase Auth.
- 📄 PDF Upload & Extraction — Upload your end-of-year Income & Expenditure Summary PDF and automatically extract categorized income and expenses.
- 📝 ATO Worksheet Mapping — Extracted data is mapped to official ATO Rental Property Worksheet categories (Gross rent, Insurance, Repairs, Agent fees, etc.).
- ✏️ Manual Editing — Review and adjust any extracted values before saving.
- 💾 Cloud Storage — Save records to Firebase Firestore, with per-user data isolation via security rules.
- 📊 Year-over-Year Comparison — Visualize income, expenses, and net position trends across multiple financial years with interactive bar charts.
| Login | Dashboard | Worksheet | Chart Comparison |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Layer | Technology |
|---|---|
| Framework | Flutter (Dart) |
| Authentication | Firebase Auth |
| Database | Cloud Firestore |
| PDF Parsing | Syncfusion Flutter PDF |
| File Picker | file_picker |
| Charts | fl_chart |
| Typography | Google Fonts (Inter) |
- Flutter SDK installed
- A configured Firebase project
flutterfire_cliactivated (dart pub global activate flutterfire_cli)
-
Clone the repository
git clone https://github.com/LEO0331/simpletaxautoextraction.git cd simpletaxautoextraction -
Configure Firebase
flutterfire configure
This generates
lib/firebase_options.dartand platform-specific config files. -
Set Firestore Security Rules
In your Firebase Console → Firestore → Rules, paste the contents of
firestore.rulesand publish. -
Install dependencies
flutter pub get
-
Run the app
# Web (Chrome) flutter run -d chrome # macOS flutter run -d macos
lib/
├── main.dart # App entry point & auth routing
├── firebase_options.dart # Auto-generated Firebase config (gitignored)
├── models/
│ └── tax_record.dart # TaxRecord data model (ATO categories)
├── services/
│ ├── auth_service.dart # Firebase Auth wrapper
│ ├── firestore_service.dart # Firestore CRUD operations
│ └── pdf_extraction_service.dart # PDF text extraction & parsing
└── screens/
├── auth_screen.dart # Login / Sign-up UI
├── home_screen.dart # Dashboard with PDF upload & saved records
├── worksheet_screen.dart # ATO worksheet view with editable fields
└── comparison_screen.dart # Multi-year bar chart comparison
- Firebase Auth ensures only authenticated users can access data.
- Firestore Security Rules enforce per-user ownership for
tax_records,properties, and mappingsettings. - Record validation in rules checks required fields and caps long text fields to reduce malformed writes.
- Session persistence on web is set to
SESSIONso closing the tab clears that tab's auth session.
- Publish latest
firestore.rulesfrom this repo. - Enable HTTPS-only hosting for production.
- Review
web/index.html,web/robots.txt, andweb/sitemap.xmlmetadata after deploy. - Verify no debug logs or test-only credentials are bundled.
- Confirm contact endpoint in
web/.well-known/security.txtis monitored. - Run docs/PRODUCTION_HARDENING_CHECKLIST.md for Firebase console hardening and final GO/NO-GO sign-off.
Currently supports the Forge Real Estate Income & Expenditure Summary layout. The parser extracts:
- Income: Residential Rent, Water Rates, and other property income
- Expenses: Administration Fee, Management Fee, Letting Fee, Insurance, Repairs & Maintenance (mapped to ATO categories)
To support additional property management PDF formats, extend the
_parseExtractedText()method inpdf_extraction_service.dart.




