Invalid username or password.
Demo Credentials FSO: fso1/fso123   SFSO: sfso1/sfso123
Dist. DO: do_district/do123
State DO: do_state/state123   Commissioner: commissioner/comm123
FDCA

Food Safety Monthly Diary

FDCA Gujarat  ·  FSSAI

 · 

Dashboard

Loading…

FSO / SFSO Monthly Diary

FDCA Gujarat — Monthly Activity Report

Basic Information
Sampling & Inspection
Registration Authority
VVIP & Raids
Adjudication Cases
Adjudication Cases Filed
Unsafe Cases Filed
Seizures
Other Activities

Designated Officer — Monthly Diary

FDCA Gujarat · Complete monthly report as per prescribed format

Basic Information
License Applications
No. of Sanctions Given & Notices
Sanctions Given
Pending & Notices
DLAC
📎 Note: Upload of DLAC constitution and meeting minutes will be available after Google Sheets integration is configured.
Details of Eat Right Activities
Consumer Grievances
RTI & PM Portal
Food Safety on Wheels Activity Conducted
Enforcement Samples Summary District-level aggregated data by food category
Food Category No. of Samples Collected No. of Seizures Weight of Seizure (Kg) Price of Seizure (₹) No. of Samples Analysed No. of Non-conforming Samples Details of Non-Conforming Samples No. of Cases Launched No. of Cases Decided (Civil) No. of Cases Decided (Criminal)
UnsafeSub Standard Labelling Defects / Misbranded Misleading ClaimsOthersTotal CivilCriminal Civil DecidedCivil Penalty Criminal DecidedCriminal Penalty
ConvictedAcquitted Amount Imposed (₹)Penalties Raised (₹) ConvictedAcquitted Amount Imposed (₹)Penalties Raised (₹)
Surveillance Samples Summary District-level aggregated data by food category
Food Category No. of Samples Collected No. of Samples Analysed No. of Non-conforming Samples Details of Non-Conforming Samples No. of Enforcement Samples Drawn from Failed Surveillance Samples
UnsafeSub Standard Labelling Defects / Misbranded Misleading ClaimsOthersTotal

Submissions

Diary submissions

Verify Reports

Review and verify FSO/SFSO submissions in your district

Reports & Analytics

FDCA Gujarat — District-wise performance

User Management

Add, edit, and manage staff accounts

NameUsernameRoleDistrictCircleStatusActions

Set Monthly Targets

Assign separate performance targets for FSO and SFSO

Target Configuration
Saved Targets
MonthApplied ToEnf. SamplesSurv. SamplesInspectionsRaids

Google Sheets Integration

Live database — free, unlimited users, real-time sync

1 Spreadsheet · 6 Sheets · ₹0 · Unlimited entries

All submissions sync to Google Sheets automatically. Export to Excel anytime with one click.

Sheets Required (inside ONE Google Spreadsheet file)
Sheet 1 — Users
id, name, username, password, role, district, circle, status
Sheet 2 — FSO_Diary
All FSO/SFSO form fields + userId + month + verifyStatus
Sheet 3 — DO_Diary
All DO form fields + userId + month + status + timestamp
Sheet 4 — Seizures
submissionId, commodity, qty_kg, price_rs
Sheet 5 — Targets
month, applyTo, enfSamples, survSamples, inspections, raids
Sheet 6 — SampleData
submissionId, type, category, collected, analysed, nonconforming…
Step-by-Step: Create Google Apps Script Web App URL
1

Create Google Spreadsheet

Go to sheets.google.com → Blank spreadsheet → Name it "FDCA Monthly Diary DB". Add 6 sheets: Users FSO_Diary DO_Diary Seizures Targets SampleData

2

Open Apps Script Editor

In your Spreadsheet → Click Extensions menu → Click Apps Script. Delete all existing code in the editor.

3

Paste this complete script

const SS = SpreadsheetApp.getActiveSpreadsheet(); function doPost(e) { try { const d = JSON.parse(e.postData.contents); const sheet = SS.getSheetByName(d.sheet); if (!sheet) return resp({error:'Sheet not found: '+d.sheet}); sheet.appendRow(flatten(d.sheet, d.data)); return resp({success:true}); } catch(err) { return resp({error:err.toString()}); } } function doGet(e) { if (e.parameter.action==='ping') return resp({status:'connected'}); if (e.parameter.sheet) { const s = SS.getSheetByName(e.parameter.sheet); if (!s) return resp({error:'Sheet not found'}); return resp({data: s.getDataRange().getValues()}); } return resp({status:'FDCA Monthly Diary API ready'}); } function flatten(sheet, d) { const ts = new Date().toISOString(); if (sheet==='Users') return [d.id||'',d.name||'',d.username||'',d.role||'',d.district||'',d.circle||'',d.status||'',ts]; if (sheet==='FSO_Diary') return [d.userId||'',d.month||'',d.name||'',d.circle||'',d.district||'',d.enfSamples||0,d.survSamples||0,d.inspections||0,d.rbis||0,d.regAuth||'',d.adjReq||0,d.adjRec||0,d.adjFiled||0,d.unsReq||0,d.unsRec||0,d.unsFiled||0,d.raids||0,d.asl||0,d.vvip||0,d.vvipSamples||0,d.other||'',d.status||'',d.verifyStatus||'',ts]; if (sheet==='DO_Diary') return [d.userId||'',d.month||'',d.name||'',d.circle||'',d.licApps||0,d.licIssued||0,d.licPending||0,d.sancSub||0,d.sancMis||0,d.sancAdv||0,d.sancOth||0,d.sancPend||0,d.improve||0,d.recalls||0,d.dlac||'',d.dlacDate||'',d.dlacMeet||0,d.foodPoison||0,d.fostac||0,d.hygiene||0,d.campus||0,d.street||0,d.bhog||0,d.schools||0,d.markets||0,d.station||0,d.grievRecv||0,d.grievRes||0,d.rtiRecv||0,d.rtiDisp||0,d.pmRecv||0,d.pmRes||0,d.fowTest||0,d.fowTrain||0,d.fowAware||0,d.status||'',ts]; if (sheet==='Targets') return [d.month||'',d.applyTo||'',d.enfSamples||0,d.survSamples||0,d.inspections||0,d.raids||0,ts]; return Object.values(d).concat([ts]); } function resp(obj) { return ContentService .createTextOutput(JSON.stringify(obj)) .setMimeType(ContentService.MimeType.JSON); }
4

Save and Deploy as Web App

1. Click 💾 Save (Ctrl+S)
2. Click DeployNew deployment
3. Click ⚙ gear icon → Select Web app
4. Execute as: Me
5. Who has access: Anyone
6. Click DeployAuthorize access → Choose Google account → Allow
7. Copy the Web app URL (starts with https://script.google.com/macros/s/…)

5

Add header row to each sheet (one-time setup)

In your Google Spreadsheet, click each tab and add these column headers in Row 1:

Users: id | name | username | role | district | circle | status | timestamp
FSO_Diary: id | userId | month | name | circle | district | enfSamples | survSamples | inspections | rbis | regAuth | regApps | regIssued | regPending | adjReq | adjRec | adjFiled | unsReq | unsRec | unsFiled | raids | asl | vvip | vvipSamples | other | status | verifyStatus | verifyNote | submittedAt | timestamp
DO_Diary: id | userId | month | name | circle | licApps | licIssued | licPending | sancSub | sancMis | sancAdv | sancOth | sancPend | improve | recalls | dlac | dlacDate | dlacMeet | foodPoison | fostac | hygiene | campus | street | bhog | schools | markets | station | grievRecv | grievRes | rtiRecv | rtiDisp | pmRecv | pmRes | fowTest | fowTrain | fowAware | status | timestamp
Targets: month | applyTo | enfSamples | survSamples | inspections | raids | timestamp

Headers are optional for writing, but required for read-back so the app can skip row 1 when reading data.

6

Paste URL below and test

Paste the copied Web App URL in the field below → click Save & Test Connection. This will test the connection AND immediately pull all existing data from your Sheet into the app.

Connection Settings
Alternative Database — Browser LocalStorage No internet required · Works on XAMPP

If Google Sheets is not working, your data is automatically saved to the browser's LocalStorage on this computer. This means all submissions, users, and targets persist even after the page is closed or refreshed. ⚠️ Important: LocalStorage is tied to this specific browser on this computer. Use the Export button below to download a backup Excel-friendly CSV file.

How to open CSV in Excel:
1. Click "Export FSO Data (CSV)" → a .csv file downloads
2. Open Excel → File → Open → select the .csv file
3. All submission data appears in rows, one row per submission