{"ok":true,"site":{"host":"police-portal-mu.vercel.app","url":"https://police-portal-mu.vercel.app/","type":"live","desc":"police-portal","tools":[{"name":"fir.identify_required_fields","kind":"answer","impl":"imperative","description":"FIR helper. You call me to know which FIR fields are required now and which become required once a given IPC section is set (e.g. theft switches \"property\" to required). Do NOT try to read the form on screen for this — I compute it authoritatively. Read me first, then populate via fir.fill_field.","title":"Identify required FIR fields","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"sections":{"type":"array","items":{"type":"string"},"description":"IPC / special-act section codes, e.g. [\"379\"] (must match formSchema option values)."},"recordId":{"type":"string","description":"Incident id to target; defaults to the selected/most recent record."}},"required":["sections"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.fill_field","kind":"act","impl":"imperative","description":"FIR action. I write one FIR field by dotted path and value into the record and the live form updates. This is how you file paperwork — do NOT click/type into the browser. Call me repeatedly (complainant.name, offense.sections, accused.*, narrative, and conditional property/witnesses) until fir.validate_form passes.","title":"Fill a FIR form field","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"field":{"type":"string","description":"Dotted field path. Always-visible: complainant.name, complainant.fatherName, complainant.address, complainant.phone, complainant.email, offense.date, offense.time, offense.place, offense.beat, offense.sections, accused.name, accused.age, accused.sex, accused.description, narrative. Conditional (shown for some sections): property, witnesses."},"value":{"description":"Value to set. Use a string for text, array of strings for offense.sections/property.","type":["string","number","boolean","array"]},"recordId":{"type":"string","description":"Incident id to target; defaults to the selected/most recent record."}},"required":["field","value"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.flag_missing","kind":"act","impl":"imperative","description":"FIR action. I mark FIR fields as needing an officer to review before submission (e.g. ambiguous identity). Call me instead of guessing a value you cannot confirm.","title":"Flag fields for human review","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"string"},"description":"Dotted field paths that are incomplete or ambiguous (e.g. [\"complainant.address\"])."},"reason":{"type":"string","description":"Why these need human review."},"recordId":{"type":"string","description":"Incident id to target; defaults to the selected/most recent record."}},"required":["fields"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.validate_form","kind":"act","impl":"imperative","description":"FIR action. I run the same validation the officer's form uses and return { valid, errors } with field->message. Call me before fir.submit to confirm the FIR is complete — this is the source of truth, not reading the page.","title":"Validate the FIR form","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"recordId":{"type":"string","description":"Incident id to target; defaults to the selected/most recent record."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.submit","kind":"transact","impl":"imperative","description":"FIR action. I submit the completed FIR after full-form validation passes and return the persisted id, firNumber and status. Call me to file the record — never press a button in the browser. I reject with errors if anything is missing; fix via fir.fill_field.","title":"Submit the FIR","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"recordId":{"type":"string","description":"Incident id to target; defaults to the selected/most recent record."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.find_similar_cases","kind":"answer","impl":"imperative","description":"FIR research helper. I search the case archive for prior FIRs matching given IPC sections (optional location filter) and return precedents for repeat offenders. Read-only; call me for background, not to change records.","title":"Find similar past FIRs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"sections":{"type":"array","items":{"type":"string"},"description":"IPC section codes to match, e.g. [\"379\"]."},"location":{"type":"string","description":"Optional place / area substring to constrain search."}},"required":["sections"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.create","kind":"act","impl":"imperative","description":"FIR action. I create a fresh blank FIR and select it so later calls act on it. Optionally pre-seed complainantName / sections / narrative. Call me to start a case instead of clicking the UI.","title":"Create a new FIR record","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"complainantName":{"type":"string","description":"Optional complainant name to pre-fill."},"sections":{"type":"array","items":{"type":"string"},"description":"Optional IPC section codes to pre-fill, e.g. [\"279\", \"304A\"] for a hit-and-run / rash driving."},"narrative":{"type":"string","description":"Optional narrative describing the incident."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fir.link_erss","kind":"act","impl":"imperative","description":"FIR action. I link an FIR back to the ERSS-112 call that led to it, so the officer sees the source (an \"Escalated from ERSS-112\" marker appears). Pass the ERSS record id. Call me after you escalate a call — do not edit the UI.","title":"Link an FIR to an originating ERSS-112 call","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"erssId":{"type":"string","description":"The ERSS-112 record id to reference."},"recordId":{"type":"string","description":"The FIR incident id to link (defaults to selected/most recent)."}},"required":["erssId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"challan.lookup_rc","kind":"act","impl":"imperative","description":"Challan helper. I look up a vehicle by its registration number in the transport database and return owner, address, vehicle class and fuel type. Call me to identify a vehicle — do not search the page.","title":"Look up vehicle by RC","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"rcNumber":{"type":"string","description":"Vehicle registration number, e.g. UP14C1234."}},"required":["rcNumber"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"challan.auto_calculate_fine","kind":"answer","impl":"imperative","description":"Challan helper. I compute the traffic fine for an MVA offence + vehicle class from the statutory matrix and return the amount in rupees. Call me to price a challan before challan.submit.","title":"Calculate traffic fine","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"offenseCode":{"type":"string","description":"MVA section code, e.g. 180, 123, 119."},"vehicleClass":{"type":"string","description":"e.g. LMV, MCWG, HMV, Bus."}},"required":["offenseCode"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"challan.submit","kind":"transact","impl":"imperative","description":"Challan action. I persist a traffic challan onto the active record and cross-link it to the FIR. Pass rcNumber, offenseCode and fineAmount (from challan.lookup_rc / challan.auto_calculate_fine). Call me to issue the challan — do not fill the form in the browser.","title":"Submit traffic challan","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"rcNumber":{"type":"string","description":"Vehicle registration number from challan.lookup_rc."},"offenseCode":{"type":"string","description":"MVA section code used to compute the fine."},"fineAmount":{"type":"number","description":"Fine in rupees from challan.auto_calculate_fine."},"recordId":{"type":"string","description":"Incident id to attach the challan to (defaults to selected/most recent)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"dispatch.classify_nature","kind":"act","impl":"imperative","description":"ERSS helper. I map a natural-language emergency into an official ERSS-112 nature code (\"heart attack\" -> MED-001, \"fire\" -> FIR-003). Call me to classify a call.","title":"Classify emergency nature code","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"description":{"type":"string","description":"Free-text emergency description."}},"required":["description"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"dispatch.get_available_units","kind":"answer","impl":"imperative","description":"ERSS action. I return the units you can dispatch (ambulance, patrol, fire) with ETA. Call me before dispatch.assign_unit to pick a unit id.","title":"List available response units","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"Optional unit type filter (e.g. Ambulance)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"erss.create_call","kind":"act","impl":"imperative","description":"ERSS action. I create a standalone ERSS-112 emergency call from free text: classify the nature, set priority and select the record. Returns id, erssNumber and nature. Call me to log an incoming 112 call — do not open/locate the Emergency Call Log in the browser.","title":"Create an ERSS-112 call","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"description":{"type":"string","description":"Free-text emergency description, e.g. \"hit and run on MG Road\"."},"channel":{"type":"string","enum":["Voice","SMS","WhatsApp"],"description":"Reporting channel (default Voice)."}},"required":["description"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"dispatch.assign_unit","kind":"act","impl":"imperative","description":"ERSS action. I assign a response unit to an incident and set its status to dispatched. Pass unitId from dispatch.get_available_units. Call me to dispatch — never manipulate the dispatch UI.","title":"Assign response unit to incident","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"unitId":{"type":"string","description":"Unit id from dispatch.get_available_units, e.g. PCR-88."},"recordId":{"type":"string","description":"Incident id; defaults to the selected/most recent incident."},"incidentId":{"type":"string","description":"Deprecated alias for recordId."}},"required":["unitId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"record.list","kind":"act","impl":"imperative","description":"Record helper — call me FIRST. I return the portal's records (FIR / e-Challan / ERSS-112) with optional module/status/text filters and each record's id. Always call me to discover a record id before acting, instead of reading the on-screen list.","title":"List incidents/records","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"module":{"type":"string","enum":["fir","challan","dispatch",""],"description":"Optional module filter: fir, challan, dispatch, or empty for all."},"status":{"type":"string","description":"Optional status filter (draft, acknowledged, dispatched, closed)."},"text":{"type":"string","description":"Optional free-text search across firNumber / complainant / narrative / RC."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"record.select","kind":"act","impl":"imperative","description":"Record action. I set which record later calls (fir.*, challan.submit, dispatch.*) act on by default. Pass recordId from record.list. Call me to focus work on one record instead of interacting with the list UI.","title":"Select the active record","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"recordId":{"type":"string","description":"The incident id to select (from record.list)."}},"required":["recordId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"nav.switch_tab","kind":"act","impl":"imperative","description":"Navigation action. I switch the portal to a module tab (fir, challan, dispatch, metrics) so the agent and officer share the same screen. Call me to move views — do not click the nav bar.","title":"Switch portal tab","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"tab":{"type":"string","enum":["fir","challan","dispatch","metrics"],"description":"Which tab to switch to: fir, challan, dispatch, or metrics."}},"required":["tab"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/police-portal-mu.vercel.app.svg","apiSurface":"spec","category":"Productivity & Business","toolCount":18}}