Skip to content

Conversation

@Shreya-egov
Copy link
Collaborator

@Shreya-egov Shreya-egov commented Sep 1, 2025

Summary by CodeRabbit

  • New Features
    • Introduced India-tenant master data and configurations across modules: BPA (types, fees, checklists, NOC, risk), PropertyTax (rates, categories, documents, workflow), Billing/Finance (services, tax periods, GL mappings), FSM (channels, checklists, plants, pit/vehicle/property/sanitation types), Trade License (application types, docs, penalties/rebates, renewal), WaterCharges (application, billing types/slabs, docs, pipe sizes), NOC (types, documents), Workflow (TL), PGR (services/UI), Vehicle masters, DSS dashboard, HRMS enums, Data Security (encryption/decryption policies), and common UI/pay configs.
  • Documentation
    • Added DataSecurity README and WaterCharges readme.
  • Chores
    • Expanded repository code ownership for PR reviews.

JithendarKumar-eGov and others added 30 commits January 30, 2025 17:26
Update actions-test.json: Removed left-icon from sidebar options
Update actions-test.json: Did url=url1 for some entries
Update actions-test.json: did all url=url1
Update actions-test.json: Made all unique entries url=url
@coderabbitai
Copy link

coderabbitai bot commented Sep 1, 2025

Walkthrough

Adds extensive state-level master data for tenant "in" across multiple modules (BPA, PropertyTax, Billing, Finance, FSM, NOC, TL, Water, HRMS, Workflow, DataSecurity, etc.), introduces Workflow config for NewTL, updates CODEOWNERS, and seeds UI, dashboard, and decryption/encryption policies. All changes are data/config additions.

Changes

Cohort / File(s) Summary
Repository governance
CODEOWNERS
Replaces root owners: removes one user, adds a group and multiple individuals to PR review ownership.
Access Control (roles)
data/in/ACCESSCONTROL-ROLES/roles.json
Adds IN tenant roles dataset with code/name/description entries (includes duplicates and codes with spaces).
BPA configuration
data/in/BPA/*
Adds ApplicationType, CalculationType (with one calsiLogic rule), CheckList (FI/approval questions/docs), NocTypeMapping, OccupancyType, ProposedLandUse, RiskTypeComputation, ServiceType, SubOccupancyType, TownPlanningScheme, Usages.
BillingService
data/in/BillingService/BusinessService.json, data/in/BillingService/TaxPeriod.json
Adds business services definitions (collection/payment behaviors) and multiple tax periods across services.
Data Security policies
data/in/DataSecurity/EncryptionPolicy.json, data/in/DataSecurity/DecryptionABAC.json, data/in/DataSecurity/README.md
Introduces encryption attributes and ABAC-based decryption access controls; adds documentation.
DIGIT-UI actions
data/in/DIGIT-UI/RoleActionMetadata.json
Adds 8 FSM employee UI action mappings.
FSM master data
data/in/FSM/*
Adds ApplicationChannel, CheckList, Config (overrides and modifiable fields), FSTPPlantInfo, PitType, PropertyType, SanitationType, VehicleType.
Finance Service mappings
data/in/FinanceService/*
Adds AccountCodeTemplate, AccountheadMapping, BusinessServiceMapping, EgfInstrumentStatusMapping.
NOC setup
data/in/NOC/NocType.json, data/in/NOC/DocumentTypeMapping.json
Adds NOC types with workflows/roles and document requirements per application type.
Property Tax masters
data/in/PropertyTax/*
Adds cess, interest/penalty/rebate, floors, construction types/subtypes, occupancy/ownership categories, documents/mutation configs, property types/subtypes, reasons, workflow toggle, usage taxonomy (major/minor/subminor/detail), configuration.
RAINMAKER-PGR
data/in/RAINMAKER-PGR/ServiceDefs.json, data/in/RAINMAKER-PGR/UIConstants.json
Adds 33 service definitions and a REOPENSLA UI constant.
Stakeholder registration
data/in/StakeholderRegistraition/TradeTypetoRoleMapping.json
Maps trade types to BPA roles, end states, fees, and document requirements.
Trade License
data/in/TradeLicense/*
Adds application types, documents, penalties/rebates, renewal period, and documentObj per tradeType/applicationType.
Vehicle
data/in/Vehicle/SuctionType.json, data/in/Vehicle/VehicleMakeModel.json
Adds suction types and vehicle make/model catalog.
Water Charges
data/in/WaterCharges/*
Adds application type, billing slabs/types, document types, pipe sizes, and a module readme.
Workflow
data/in/Workflow/BusinessService.json, data/in/Workflow/BusinessServiceConfig.json
Adds NewTL workflow states/actions and marks NEWTL/FIRENOC as state-level services.
Common masters
data/in/common-masters/*
Adds cancel reasons, cron job API configs, departments, designations, document types, ID formats, ownership/owner types, state info, structure types, table pagination, UOM, finance masters mapping, UI common configs, payment config, workflow SLA colors.
DSS dashboard
data/in/dss-dashboard/dashboard-config.json
Adds module-level mappings, services list, and chart color codes.
EGF Master
data/in/egf-master/FinancialYear.json
Adds financial years across modules with posting flags.
EGOV HRMS
data/in/egov-hrms/*
Adds deactivation reasons, degrees, employee status/types, and employment tests.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User as User (Citizen/Employee)
  participant UI as UI (DIGIT)
  participant WF as Workflow Service
  participant TL as Trade License Service

  User->>UI: Start NewTL application
  UI->>WF: Create process (INITIATED)
  WF-->>UI: State = INITIATED

  User->>UI: APPLY
  UI->>WF: Action APPLY
  WF-->>UI: State = APPLIED

  User->>UI: PAY
  UI->>WF: Action PAY (SYSTEM_PAYMENT role)
  WF-->>UI: State = PAID

  UI->>WF: Action MARK/FORWARD
  WF-->>UI: State = FIELDINSPECTION/PENDINGAPPROVAL

  UI->>WF: Action APPROVE
  WF-->>UI: State = APPROVED (terminal)

  alt Cancellation
    UI->>WF: Action CANCEL
    WF-->>UI: State = CANCELLED (terminal)
  end

  alt Rejection
    UI->>WF: Action REJECT
    WF-->>UI: State = REJECTED
    User->>UI: REINITIATE
    UI->>WF: Action REINITIATE
    WF-->>UI: State = INITIATED
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Poem

I hop through JSON fields so wide,
NewTL states in tidy stride.
Cess and slabs, the taxes sing,
Encrypt, decrypt—keys take wing.
Pipes and pits, a billing breeze—
Approvals land with gentle ease.
Thump-thump! My merge brings happy cheese. 🐇🧀

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Shreya-egov-patch-24

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 120

🧹 Nitpick comments (79)
data/in/Vehicle/VehicleMakeModel.json (2)

19-21: Name casing consistency (optional).

“Mahindra” vs “TATA” vs “TAFE” vs “Sonalika”. Consider consistent brand casing across “name” (either Title Case or uppercase) for a uniform UI.

-            "name": "TATA",
+            "name": "Tata",
@@
-            "name": "TAFE",
+            "name": "Tafe",
@@
-            "name": "Sonalika",
+            "name": "Sonalika"

Also applies to: 32-35, 40-43, 53-56


4-66: Units and semantics (optional).

Confirm units for capacity (litres? kg?) and amount (currency, per-trip vs per-hour). Add comments/docs or separate fields if mixed.

data/in/StakeholderRegistraition/TradeTypetoRoleMapping.json (1)

52-52: Replace all docTypes: null entries with []
docTypes is defined as an array in other MDMS files—using null here breaks null-unsafe consumers. Update every "docTypes": null to "docTypes": [].

data/in/DIGIT-UI/RoleActionMetadata.json (1)

33-37: FSTP entries’ i18n keys reference “VEHICLE_LOG”—likely mismatched labels.

Confirm correct keys for FSTP Inbox and FSTP Operator Details; update to FSTP-specific i18n keys to avoid wrong labels in UI.

Also applies to: 40-44

data/in/RAINMAKER-PGR/ServiceDefs.json (2)

212-217: Correct spelling: “unauthorised”.

Fix typos to improve search accuracy.

-      "keywords": "illegal, shop, footpath, violation, property, public, space, land, unathourised, site, construction, wrong",
+      "keywords": "illegal, shop, footpath, violation, property, public, space, land, unauthorised, site, construction, wrong"

-      "keywords": "illegal, violation, property, public, space, land, unathourised, site, construction, wrong, build",
+      "keywords": "illegal, violation, property, public, space, land, unauthorised, site, construction, wrong, build"

-      "keywords": "tree, cut, illegal, unathourized, remove, plant",
+      "keywords": "tree, cut, illegal, unauthorised, remove, plant",

Also applies to: 220-225, 235-241


7-7: Minor keyword hygiene (duplicates/spacing).

  • Remove repeated words (e.g., “repair” twice; “vehicle” twice).
  • Add missing spaces after commas (e.g., “connection,leakage”).
-      "keywords": "streetlight, light, repair, work, pole, electric, power, repair, damage, fix",
+      "keywords": "streetlight, light, repair, work, pole, electric, power, damage, fix"

-      "keywords": "water, supply, shortage, drink, tap, connection,leakage,less",
+      "keywords": "water, supply, shortage, drink, tap, connection, leakage, less"

-      "keywords": "illegal, parking, car, vehicle, space, removal, road, street, vehicle",
+      "keywords": "illegal, parking, car, vehicle, space, removal, road, street",

Also applies to: 24-24, 83-83, 228-229

data/in/DataSecurity/EncryptionPolicy.json (2)

29-35: Use stronger classification for Aadhaar/PAN and verify deterministic encryption for searchable fields

PAN and Aadhaar typically require stronger handling (e.g., asymmetric or field-specific “Sensitive/PII” type). Also, if these fields (or mobile/email) are used in searches/joins, ensure the chosen type supports deterministic encryption or tokenization.

If the enc-service supports richer types, consider:

-            "jsonPath" : "pan",
-            "type" : "Normal"
+            "jsonPath" : "pan",
+            "type" : "Sensitive"
-            "jsonPath" : "aadhaarNumber",
-            "type" : "Normal"
+            "jsonPath" : "aadhaarNumber",
+            "type" : "Sensitive"

Please confirm valid enum values for “type”.

Also applies to: 70-76


55-81: Encrypting UserSearchCriteria fields may break search unless engine supports it

If searches hit encrypted columns, confirm the platform uses deterministic encryption, hashing, or search tokens for userName/name/mobileNumber/pan/emailId/aadhaarNumber. Otherwise, move search keys to a searchable token.

data/in/DataSecurity/README.md (3)

45-50: Add language to fenced code block

Linting improvement.

-```
+```java
 class RoleAttributeAccess {
     String roleCode;
     List<AttributeAccess> attributeAccessList;
 }

---

`39-43`: **Tighten wording of AccessType list**

Minor clarity: “mask the data according to maskingTechnique” → “mask using maskingTechnique”. Also ensure priority semantics are documented if enforced by engine.

```diff
-1. PLAIN - Decrypt the attribute and show the data in plain form. 
-2. MASK - Decrypt the attribute then mask the data according to the maskingTechnique specified in the Attrbute object. 
-3. NONE - Replace the data with an empty string.
+1. PLAIN — Decrypt the attribute and return it as-is.
+2. MASK — Decrypt the attribute, then mask it using the maskingTechnique specified in the Attribute.
+3. NONE — Replace the value with an empty string.

52-53: Clarify ABAC key semantics and defaults

Document what happens for attributes not present in a role’s attributeAccessList (default NONE/PLAIN/MASK?) and the intended scope of the ALL_ACCESS key to avoid misuse.

data/in/Workflow/BusinessService.json (2)

127-171: FIELDINSPECTION: Fill empty flags and actions metadata.

Keep metadata consistent and explicit.

-          "applicableActions": "",
-          "docUploadRequired": "",
-          "UpdateAllowed": "",
+          "applicableActions": "CANCEL,REJECT,MARK,FORWARD",
+          "docUploadRequired": "false",
+          "UpdateAllowed": "true",

195-215: CANCELLED: Remove empty placeholder action.

An empty action object is noise and can confuse loaders.

-          "actions": [
-            {
-              "stateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
-              "action": "",
-              "nextStateId": "",
-              "roles": "",
-              "tenantId": "in",
-              "uuid": "4bd112e8-f7d3-11e8-8eb2-f2801f1b9fd1"
-            }
-          ]
+          "actions": []
data/in/FinanceService/EgfInstrumentStatusMapping.json (2)

8-9: Fix grammar in descriptions.

Use “assigned” instead of “assign” for clarity.

-      "description": "Status assign when instrument is created"
+      "description": "Status assigned when instrument is created"
-      "description": "Status assign when instrument is deposited to bank"
+      "description": "Status assigned when instrument is deposited to bank"
-      "description": "Status assign when instrument is reconciled"
+      "description": "Status assigned when instrument is reconciled"
-      "description": "Status assign when instrument is Dishonored"
+      "description": "Status assigned when instrument is dishonored"
-      "description": "Status assign when instrument is given back"
+      "description": "Status assigned when instrument is given back"
-      "description": "Status assign when instrument is cancelled"
+      "description": "Status assigned when instrument is cancelled"

Also applies to: 13-14, 18-19, 23-24, 28-29, 33-34


4-35: Validate status set completeness.

Confirm if intermediate statuses (e.g., Submitted/SentToBank/Realized) are required by Finance workflows; add if needed.

data/in/FinanceService/BusinessServiceMapping.json (1)

11-13: Use nulls instead of empty strings for optional fields.

Prefer null over "" for functionary/scheme/subscheme if schema allows.

-      "functionary":"",
-      "scheme":"",
-      "subscheme":"",
+      "functionary": null,
+      "scheme": null,
+      "subscheme": null,

Also applies to: 27-29, 39-41, 51-53, 63-65, 75-77, 87-89, 99-101, 111-113, 123-125, 135-137, 147-149, 159-161, 171-173, 183-185

data/in/BillingService/TaxPeriod.json (1)

1-486: Automate sanity checks for epoch lengths and overlaps

Use the following updated script to flag any non-13-digit epoch values and detect overlapping periods within each service:

#!/usr/bin/env bash
file=data/in/BillingService/TaxPeriod.json

# 1) Flag non-ms epochs
jq -r '.TaxPeriod[]
  | select((.fromDate|tostring|length)!=13 or (.toDate|tostring|length)!=13)
  | "\(.service): non-ms epoch from \(.fromDate) to \(.toDate)"' "$file"

# 2) Flag overlaps per service
jq -c '.TaxPeriod[] | {service:.service, from:.fromDate, to:.toDate, code:.code}' "$file" \
  | jq -s '
      group_by(.service)[]
      | sort_by(.from)
      | reduce .[] as $item ({prev:null; overlaps:[]};
          (if .prev and $item.from < .prev.to
             then .overlaps += ["Overlap in \($item.service): \(.prev.code) (\(.prev.from)-\(.prev.to)) vs \($item.code) (\($item.from)-\($item.to))"]
             else . end)
          | .prev = $item
      )
      | .overlaps
    ' \
  | jq -r '.[]'

Run this before merging to ensure all timestamps are in milliseconds and no periods overlap.

data/in/FinanceService/AccountCodeTemplate.json (3)

456-458: Fix spelling in user-facing names.

“Appliancess” → “Appliances”; “Empy.” → “Emp.” (or “Employee”).

-      "name": "Furniture, Fixtures, Fittings and Electrical Appliancess",
+      "name": "Furniture, Fixtures, Fittings and Electrical Appliances",
-      "name": "Salaries & Wages (Govt.Empy.)",
+      "name": "Salaries & Wages (Govt. Emp.)",

Also applies to: 492-495, 697-699


621-631: Duplicate GL code in Printing and Stationery.

glcode 2202102 appears twice; confirm if a second head (e.g., 2202103) was intended.


557-566: Template code contains special characters.

Codes like “S&W (Con.)” can be fragile in lookups. Consider normalizing to safe identifiers (e.g., “S_AND_W_CONTRACT”).

Also applies to: 571-576

data/in/BillingService/BusinessService.json (3)

171-183: Correct spelling in display names.

“Stationary” → “Stationery”, “santitation” → “sanitation”, “Compremasing” → “Compromising”, etc.

Sample fixes:

-      "businessService": "Stationary.Stationary (Not Income)",
+      "businessService": "Stationery.Stationery (Not Income)",
-      "businessService": "Stationary.Expenditure santitation (Not Income)",
+      "businessService": "Stationery.Expenditure sanitation (Not Income)",
-      "businessService": "Fee Town Planning.Compremasing fees",
+      "businessService": "Fee Town Planning.Compromising fees",

Also applies to: 185-195, 197-207, 221-231, 233-243, 245-255, 257-267, 269-279, 281-291, 293-303


809-819: Fix spelling in code/display.

“Rikshaw” → “Rickshaw”.

-      "businessService": "License Fee.Manual Rikshaw",
-      "code": "LCF.Manual_Rikshaw",
+      "businessService": "License Fee.Manual Rickshaw",
+      "code": "LCF.Manual_Rickshaw",

833-843: Fix spelling in code/display.

“Cigrette” → “Cigarette”.

-      "code": "CH.Bidi_&_Cigrette_Challan",
+      "code": "CH.Bidi_&_Cigarette_Challan",
data/in/FinanceService/AccountheadMapping.json (2)

376-381: Round-off GL code inconsistency across services

PT/FIRENOC/TL use 1808003 for round‑off; WS/SW use 1404011 here. If your CoA expects a single round‑off GL (commonly 1808003), align for consistency.

Also applies to: 579-584


1-4: Add lightweight validation guardrails

Consider adding a small CI check to validate:

  • epoch is in ms (13 digits),
  • taxhead naming matches ^[A-Z0-9_\.]+$,
  • no duplicate (billingservicecode, taxhead, serviceAttribute) tuples,
  • validFrom <= validTo.

I can contribute a repo script.

data/in/WaterCharges/readme.txt (1)

1-1: Fix minor grammar in README line.

Add “the” and a period for clarity.

-This folder contains master data for Water Charges module
+This folder contains master data for the Water Charges module.
data/in/common-masters/UOM.json (1)

1-18: Confirm display names vs. relying on codes; optionally add “name”.

If UI expects human-readable names from MDMS (not localization), add name fields; otherwise confirm i18n keys exist. Also validate “GROSSUNITS” is a known UOM in consuming services.

Example (only if schema/UI supports it):

   "UOM": [
     {
       "code": "GALLONS",
+      "name": "Gallons",
       "active": true
     },
     {
       "code": "GROSSUNITS",
+      "name": "Gross Units",
       "active": true
     },
     {
       "code": "HP",
+      "name": "Horsepower",
       "active": true
     }
   ]
data/in/TradeLicense/Rebate.json (1)

4-20: Review Rebate coverage for FYs beyond 2019-20

Rebate entries currently cover only FY 2018-19 and 2019-20 in data/in/TradeLicense/Rebate.json. Confirm intended behavior for calculations beyond FY 2019-20 (carry-forward last rate vs. no rebate) and, if the 10% rate persists, append new FY blocks (e.g. “2020-21”, “2021-22”, etc.) with the same rate and endingDay.

data/in/egov-hrms/EmployeeStatus.json (1)

4-33: Optional: add display labels/i18n mapping.

If the UI renders human-readable labels from MDMS, consider adding a name or messageCode per status to avoid hardcoding strings in frontend.

data/in/WaterCharges/DocumentType.json (1)

11-13: Minor copy/style: normalize descriptions.

Capitalize consistently; prefer "Driving Licence" and "Voter ID".

-      "description": "driving licence",
+      "description": "Driving Licence",
@@
-      "description": "voter id",
+      "description": "Voter ID",

Also applies to: 16-18

data/in/TradeLicense/AccessoriesCategory.json (1)

21-28: Change null uom values to empty string or remove the key
Two entries in data/in/TradeLicense/AccessoriesCategory.json still have "uom": null (lines 21–28); update them to:

     {
       "code": "ACC-4",
-      "uom": null,
+      "uom": "",
       "active": true
     },
     {
       "code": "ACC-5",
-      "uom": null,
+      "uom": "",
       "active": true
     }
data/in/TradeLicense/Penalty.json (1)

10-40: Date format consistency (nit)

Consider zero-padding for day to improve uniformity (e.g., 01/09/2019).

Example:

-      "startingDay": "1/09/2019"
+      "startingDay": "01/09/2019"
data/in/PropertyTax/MutationReason.json (1)

4-53: Consolidate MutationReason with ReasonForTransfer
The two code lists are identical; extract a single enumeration or reference ReasonForTransfer directly to prevent drift. If separation is required, add a CI validation to enforce parity.

data/in/PropertyTax/FireCess.json (1)

1-19: Confirm dynamic keys and flag casing consistency.

  • Verify property name "dynamicFirecess" and keys "firecess_inflammable", "firecess_building_height", "firecess_category_major" match what the billing/calculation service expects (exact key matches are usually required).
  • Minor: File uses "FireCess" (capital C), field uses "dynamicFirecess" (lowercase c). Consider normalizing for consistency if schema allows.
data/in/common-masters/financemasters.json (1)

7-9: Use arrays instead of comma-separated strings for machine readability and schema consistency.
Switch departments/designation to arrays to avoid downstream parsing errors.

Apply:

       "departments": "DEPT_3,DEPT_9,DEPT_13,DEPT_25,DEPT_35,DEPT_24",
-      "designation": "DESIG_1001,DESIG_58,DESIG_24,DESIG_47,JE_PWSSB,DESIG_15,DESIG_13" 
+      "designation": "DESIG_1001,DESIG_58,DESIG_24,DESIG_47,JE_PWSSB,DESIG_15,DESIG_13" 

Example (preferred):

-      "departments": "DEPT_3,DEPT_9,DEPT_13,DEPT_25,DEPT_35,DEPT_24",
-      "designation": "DESIG_1001,DESIG_58,DESIG_24,DESIG_47,JE_PWSSB,DESIG_15,DESIG_13"
+      "departments": ["DEPT_3","DEPT_9","DEPT_13","DEPT_25","DEPT_35","DEPT_24"],
+      "designation": ["DESIG_1001","DESIG_58","DESIG_24","DESIG_47","JE_PWSSB","DESIG_15","DESIG_13"]
data/in/common-masters/DocumentType.json (1)

118-137: Normalize flags and file constraints; verify size units.

  • Some items (OWNERIDPROOF, OWNERSHIPPROOF, OWNERPHOTO, OLDLICENCENO) lack "active": true while others include it. Align for consistency.
  • COURTORDER excludes ".pdf"; confirm if intended.
  • Confirm maxFileSize unit (KB vs MB) matches platform expectations.

Also applies to: 139-167

data/in/PropertyTax/OccupancyType.json (1)

1-22: Optional: confirm code compatibility with calculators/UI.
Ensure tariff/calculation configs and i18n keys expect exactly these codes (esp. SELFOCCUPIED vs SELF_OCCUPIED).

data/in/FSM/Config.json (2)

11-15: Missing default for tripAmount (optional).

If UI/validators expect a numeric default for additionalDetails.tripAmount, consider adding "default": 0 to avoid undefined handling.

       {
         "code":"additionalDetails.tripAmount",
         "override":false,
+        "default": 0,
         "active":true
       },

21-38: ALLOW_MODIFY list: verify field names and presence in FSM schema.

  • propertyUsage: Confirm FSM payload uses propertyUsage (not propertyType). The PR seeds PropertyType; mismatch can break editability.
  • sanitationtype: Check casing vs domain model (often sanitationType).
  • address.city: Usually derived from tenantId; ensure address.city exists in FSM schema.

Run a quick grep against FSM schemas to ensure exact field paths.

data/in/common-masters/wfSlaConfig.json (1)

4-11: Validate SLA slab config shape and totals.

Only one slot with slotPercentage: 33 is provided. If consumers expect multiple slabs summing to 100, add remaining slots or adjust docs. Colors per object also suggest a single-slab model—confirm expected contract.

Example (if 3 slabs are needed):

-  "wfSlaConfig":[
-      {
-        "slotPercentage" :   33,
-        "positiveSlabColor" : "#4CAF50",
-        "negativeSlabColor" : "#F44336",
-        "middleSlabColor" : "#EEA73A"
-      }
-  ]
+  "wfSlaConfig": [
+    { "slotPercentage": 33, "positiveSlabColor": "#4CAF50", "middleSlabColor": "#EEA73A", "negativeSlabColor": "#F44336" },
+    { "slotPercentage": 33 },
+    { "slotPercentage": 34 }
+  ]
data/in/PropertyTax/MutationRebate.json (2)

5-21: Normalize types and date formats.

  • mutationPaymentPeriodInMonth is a string "06". If the consumer expects a number, switch to 6 for consistency with arithmetic.
  • endingDay uses "dd/MM" (no year). Confirm this is the intended pattern across PT services.
-        "mutationPaymentPeriodInMonth": "06"
+        "mutationPaymentPeriodInMonth": 6

22-29: Consistency across entries.

Second and third entries should mirror the same typing/format decisions as above. Apply the same normalization if agreed.

data/in/PropertyTax/Floor.json (1)

7-11: Optional: tighten phrasing.

"floor number of the floor" is redundant; prefer "floor number".

Example diff:

-      "description": "floor number of the floor",
+      "description": "floor number",

Also applies to: 13-17, 19-23, 25-29, 31-35, 37-41, 49-53, 55-59, 61-65, 67-71, 73-77, 79-83, 85-89, 91-95, 97-101, 103-107

data/in/common-masters/TablePaginationOptions.json (1)

4-9: Pagination options look fine; default is included in options.

LGTM. If large tables are common, consider adding 200 to options; if most screens are narrow, consider 10 or 20.

Confirm the consuming UI reads this path for tenant "in"; some deployments override at city-level.

data/in/FSM/FSTPPlantInfo.json (2)

18-21: Correct naming consistency for SeTP/ STP.

"SeTPP" looks like a typo; "SeTP" vs "STP" should match the allowed PlantType list.

-            "PlantName": "Mohali SeTPP",
+            "PlantName": "Mohali STP",
-            "PlantType":"SeTP",
+            "PlantType":"STP",

If "SeTP" is intentional per schema, keep it but fix the extra trailing "P" in name.


12-13: Normalize time format.

Prefer a consistent, parseable format (e.g., "10:00-20:00" 24h or "10:00 AM - 8:00 PM").

-            "PlantOperationalTimings":"10.00am-08.00pm",
+            "PlantOperationalTimings":"10:00-20:00",
...
-            "PlantOperationalTimings":"10.00am-06.00pm",
+            "PlantOperationalTimings":"10:00-18:00",

Also applies to: 23-24

data/in/common-masters/Department.json (2)

36-39: Title-case the department name.

For consistency with others: "Citizen Service Desk".

-      "name": "Citizen service desk",
+      "name": "Citizen Service Desk",

6-69: Verify code set alignment.

Codes skip 11/12 and jump to 25/35. If codes map to legacy systems, fine; otherwise consider compact/contiguous coding.

data/in/egov-hrms/EmployeeType.json (1)

4-25: Employee types set looks standard.

LGTM.

If the UI shows display labels from MDMS, consider adding "name" fields for localization; else keep as-is to avoid duplication.

data/in/FSM/VehicleType.json (1)

6-11: Standardize attributes across entries.

Only the first record has "make". Either add "make" for all or remove it for consistency, based on the FSM schema.

If removing "make":

-            "make": "MAHINDRA",

If adding "make", add plausible placeholders and update later with correct values:

+            "make": "TATA"

Also applies to: 14-19, 21-26, 28-33, 35-40

data/in/ACCESSCONTROL-ROLES/roles.json (2)

41-44: Role codes with spaces are risky; prefer underscore/uppercase.

Spaces in "code" can cause ACL/lookup issues. Suggest normalizing to uppercase underscore format (keep names user-friendly in "name").

Example changes:

-      "code": "Asset Administrator",
+      "code": "ASSET_ADMINISTRATOR",
@@
-      "code": "ULB Operator",
+      "code": "ULB_OPERATOR",
@@
-      "code": "EMPLOYEE ADMIN",
+      "code": "EMPLOYEE_ADMIN",
@@
-      "code": "Property Approver",
+      "code": "PROPERTY_APPROVER",
@@
-      "code": "Property Verifier",
+      "code": "PROPERTY_VERIFIER",

Ensure downstream RBAC mappings are updated if you adopt this.

Also applies to: 46-49, 51-54, 56-59, 61-64


23-24: Fix typos in user-facing descriptions.

Multiple typos reduce polish and may surface in admin UIs.

Apply corrections:

-      "description": "Heads the grivance cell. Also all complaints that cannot be routed based on the rules are routed to Grievance Officer."
+      "description": "Heads the grievance cell. Complaints that cannot be routed based on rules are routed to the Grievance Officer."
@@
-      "name": "Grivance Administrator",
-      "description": "System Administator for PGR. Can change PGR Master data only."
+      "name": "Grievance Administrator",
+      "description": "System Administrator for PGR. Can change PGR master data only."
@@
-      "description": "GRO for a sepcific dept who assings the grievances to last mile employees"
+      "description": "GRO for a specific department who assigns grievances to last-mile employees"
@@
-      "description": "WS Inspector can take action like verify and forword, send back to do"
+      "description": "WS Inspector can take action like verify and forward, send back to do"
@@
-      "name": "FSM FSTP Opperator",
-      "description": "FSM FSTP Opperator"
+      "name": "FSM FSTP Operator",
+      "description": "FSM FSTP Operator"
@@
-      "name": "FSM Desluding Operator",
-      "description": "FSM Desluding Operator"
+      "name": "FSM Desludging Operator",
+      "description": "FSM Desludging Operator"
@@
-      "name": "Finance Adminsitrator",
+      "name": "Finance Administrator",

Also applies to: 32-34, 213-214, 463-464, 567-569, 557-559, 321-324

data/in/common-masters/uiCommonConstants.json (1)

6-20: Route path segments need verification

  • data/in/common-masters/uiCommonConstants.json:6–20 – The tradelicense iframe routes use /employee-tradelicence/.../tradelicence/... (spelling “licence”); confirm this legacy path prefix is correct for the IN tenant (27 occurrences in data/).
  • data/in/common-masters/uiCommonConstants.json:45–89 – Ensure each /dashboard/... route (overview, propertytax, tradelicense, pgr, ulb-*, ws) is backed by an actual DSS endpoint for “in”.
    Alphabetize route blocks for consistency.
    Also applies to lines 40–90, 92–99
data/in/WaterCharges/BillingSlab.json (1)

54-56: Polish customer-facing descriptions

Fix grammar/typos (“that”→“than”, range wording, stray spaces).

Suggested examples:

-      "description": "The amount to be paid for the plot range between 200 & 800sqft",
+      "description": "Amount payable for plot area between 200 and 800 sqft",
@@
-      "description": "The amount to be paid for 1 to 4 taps",
+      "description": "Amount payable for 1 to 4 taps",
@@
-      "description": "fixed bill of monthly 100" ,
+      "description": "Fixed monthly bill of 100"

Also applies to: 67-69, 80-82, 93-95, 106-108, 119-121, 132-134

data/in/common-masters/CronJobAPIConfig.json (1)

5-5: Disambiguate jobName or add identifiers

All entries use "daily". Consider unique names or an additional "jobId"/"module" field to simplify ops.

Also applies to: 17-17, 29-29, 41-41

data/in/PropertyTax/OwnerType.json (2)

6-15: Normalize numeric formats for consistency.

Use a consistent number type for rate values (all integers or all decimals).

-        "rate": 100,
+        "rate": 100.0
-        "rate": 100.0,
+        "rate": 100.0,

Also applies to: 39-47, 55-57


28-36: Consider inclusive language.

“Handicapped Person” is outdated. If UI strings are shown directly from MDMS, prefer “Person with Disability (PwD)”.

-      "name": "Handicapped Person",
+      "name": "Person with Disability (PwD)",
data/in/egf-master/FinancialYear.json (1)

1-215: Offer: add missing FYs up to current year.

Dataset stops at 2020-21. If “in” is active in 2025, add 2021-22 through 2025-26 for all relevant modules.

Do you want me to draft those entries with consistent epoch boundaries?

data/in/PropertyTax/ReasonForTransfer.json (1)

21-23: Standardize capitalization for display consistency.

Use consistent Title Case for “Will Deed”.

-      "name": "Registered will deed",
+      "name": "Registered Will Deed",
...
-      "name": "Unregistered Will deed",
+      "name": "Unregistered Will Deed",

Also applies to: 51-53

data/in/dss-dashboard/dashboard-config.json (1)

8-8: Unify “Trade License” spelling.

Elsewhere the module is “TradeLicense”. Align display strings to avoid UX inconsistencies.

-    {"tradelicense":{"services_name":"Trade licence","filterKey":"TL"}},
+    {"tradelicense":{"services_name":"Trade License","filterKey":"TL"}},
...
-    "SERVICES": ["Property Tax", "Trade licence"],
+    "SERVICES": ["Property Tax", "Trade License"],

Also applies to: 12-12

data/in/PropertyTax/OwnerShipCategory.json (1)

12-15: Remove trailing space from display name.

Prevents subtle UI/translation mismatches.

-      "name": "Institutional - Private ",
+      "name": "Institutional - Private",
data/in/TradeLicense/documentObj.json (1)

5-40: De-duplicate identical allowedDocs blocks.

GOODS and SERVICES have identical allowedDocs. If schema permits a default block, consider one definition to reduce maintenance.

If not supported by MDMS schema, keep both as-is. No functional issue.

Also applies to: 41-77

data/in/FSM/PropertyType.json (1)

76-83: Normalize casing: “Community hall” → “Community Hall”.

Consistency improves UX.

-      "name": "Community hall",
+      "name": "Community Hall",
data/in/PropertyTax/UsageCategorySubMinor.json (1)

42-52: Trim trailing spaces in names.

"Event Space ", "Other Commercial Usage ", and "Other Industrial Usage " have trailing spaces; causes UI and equality issues.

-      "name": "Event Space ",
+      "name": "Event Space",
...
-      "name": "Other Commercial Usage ",
+      "name": "Other Commercial Usage",
...
-      "name": "Other Industrial Usage ",
+      "name": "Other Industrial Usage",

Also applies to: 102-112, 138-148

data/in/common-masters/Designation.json (2)

30-33: Minor: “Land Scape” → “Landscape”.

-      "name": "Land Scape Officer",
-      "description": "Land Scape Officer",
+      "name": "Landscape Officer",
+      "description": "Landscape Officer",

6-9: Remove extra spaces inside parentheses.

Use “(B&R)”, “(O&M)”, “(Light)” consistently.

-      "name": "Superintending Engineer ( B&R)",
+      "name": "Superintending Engineer (B&R)",

(Apply similarly to related entries.)

Also applies to: 18-21, 24-27, 48-51, 72-75

data/in/PropertyTax/UsageCategory.json (1)

287-291: Trim trailing spaces in names.

“Multiplex ”, “Others ”, “Golf Club ”.

-      "name": "Multiplex ",
+      "name": "Multiplex",
...
-      "name": "Others ",
+      "name": "Others",
...
-      "name": "Golf Club ",
+      "name": "Golf Club",

Also applies to: 359-363, 377-381

data/in/FSM/SanitationType.json (1)

21-24: Align sanitation type code with name
Change the "code" field from "IMPROVED_PACKED" to "IMPROVED_PACKAGED" in all three FSM/SanitationType.json files (data/pg, data/pb, data/in); no non-JSON references to the existing code value were found.

data/in/BillAmendment/documentObj.json (2)

6-149: Consider allowing PDFs; image/ already covers .png/.jpeg (redundant).*

Typical govt docs are PDFs. If product allows, add ".pdf" (or application/pdf) and drop redundant extensions.

-          "allowedFormat": ["image/*", ".png", ".jpeg"],
+          "allowedFormat": ["image/*", ".pdf"],

Please confirm product expectations before changing.

Also applies to: 153-285, 289-421, 425-557, 561-701, 703-845


30-81: Identity vs address proof lists: review “ELECTRICITYBILL” under IDENTITYPROOF.

Electricity bill is usually address proof. Validate with business and adjust lists if needed.

Also applies to: 177-230, 313-366, 449-502, 737-789

data/in/egov-hrms/EmploymentTest.json (1)

4-16: Add display names or confirm UI uses codes as labels

If HRMS UIs display this master, consider adding a human-friendly "name" per entry or confirm downstream renders "code" directly.

       {
-        "code": "PRELIMS",
+        "code": "PRELIMS",
+        "name": "Prelims",
         "active": true
       },
       {
-        "code": "APTITUDETEST",
+        "code": "APTITUDETEST",
+        "name": "Aptitude Test",
         "active": true
       },
       {
-        "code": "MAINS",
+        "code": "MAINS",
+        "name": "Mains",
         "active": true
       }
data/in/BPA/SubOccupancyType.json (1)

6-16: Normalize colorCode typing

Mix of integers and nulls. Confirm schema; if hex strings are expected, convert; if optional, consider removing when unknown.

-         "colorCode":25
+         "colorCode":25
# If schema expects hex strings instead:
# +         "colorCode":"#19A974"

Also applies to: 18-28, 30-40, 42-52, 54-64, 66-76, 78-88, 90-100

data/in/common-masters/uiCommonConfig.json (2)

21-23: Polish the message copy (grammar, punctuation).

Tighten phrasing and remove the extra space before the colon.

-                "title": "Complaint Summary",
-                "template": "Dear Sir/Madam,\nPlease find complaint detail given below :\n{0}, {1},\n{2}, {3}\nAddress: {4},\n{5},\n{6}\nSLA: {7}\nThanks"
+                "title": "Complaint Summary",
+                "template": "Dear Sir/Madam,\nPlease find complaint details below:\n{0}, {1}\n{2}, {3}\nAddress: {4},\n{5},\n{6}\nSLA: {7}\nThanks"

9-25: Consider adding CITIZEN mapping if the share view is needed outside employee.

If intentional to limit to EMPLOYEE, ignore. Otherwise mirror the config under a CITIZEN key.

data/in/BPA/Usages.json (1)

146-152: Fix spelling/casing in display names; keep codes stable.

Typos can leak to UI and reports.

-         "name":"Childrens nursary",
+         "name":"Children's nursery",
          "code":"A-SR-CN",
@@
-         "name":"reading rooms",
+         "name":"Reading rooms",
          "code":"A-SR-RM",
@@
-         "name":"Libraries",
+         "name":"Libraries",
          "code":"A-SR-LIB",
@@
-         "name":"Small proffessional offices or spaces",
+         "name":"Small professional offices or spaces",
          "code":"A-AF-SPOOS",
@@
-         "name":"Proffessional offices part of residential",
+         "name":"Professional offices part of residential",
          "code":"A-PO-POPOR",

Also applies to: 156-162, 166-172, 216-224, 226-232

data/in/PropertyTax/OwnerTypeDocument.json (1)

6-10: Remove stray space after slash in name.

Minor copy fix.

-      "name": "Certificate issued by DC/ Competent Authority",
+      "name": "Certificate issued by DC/Competent Authority",
data/in/BPA/RiskTypeComputation.json (1)

11-27: Fix typos in notes (Heigh/upto/units).

Purely cosmetic but user-facing.

-            "note": "(Heigh 15 Mt or More) or ( Plot area >=800 sq.Mt)"
+            "note": "(Height 15 m or more) or (Plot area ≥ 800 sq.m)"
@@
-            "note": "(Heigh >10 mt and <15) or ( Plot area < 800 sq.Mt and > 300 sq.Mt.)"
+            "note": "(Height > 10 m and < 15 m) or (Plot area < 800 sq.m and > 300 sq.m)"
@@
-            "note": "Up to 10.0 mt Height and Plot area upto 300 sq.mt and No basement and No stilt floor and Number of floor <=3"
+            "note": "Up to 10.0 m height and plot area up to 300 sq.m; No basement; No stilt floor; Floors ≤ 3"
data/in/BPA/CheckList.json (2)

167-167: Fix minor grammar: "land/ Building" → "land/building".

- "The land/ Building shall be used exclusively for the above occupancy for which you applied and the uses shall not be changed to any other use without prior approval of this Authority.",
+ "The land/building shall be used exclusively for the above occupancy for which you applied and the use shall not be changed to any other use without prior approval of this Authority.",

Also applies to: 368-368, 385-385, 402-402


56-154: Optional: deduplicate identical blocks across risk types.

If the engine supports "RiskType": "ALL", you can reduce repetition by collapsing identical LOW/MEDIUM/HIGH entries to a single rule.

Also applies to: 155-205, 206-255, 256-305, 306-355, 356-406

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between b32904c and 7346fa4.

📒 Files selected for processing (107)
  • CODEOWNERS (1 hunks)
  • data/in/ACCESSCONTROL-ROLES/roles.json (1 hunks)
  • data/in/BPA/ApplicationType.json (1 hunks)
  • data/in/BPA/CalculationType.json (1 hunks)
  • data/in/BPA/CheckList.json (1 hunks)
  • data/in/BPA/NocTypeMapping.json (1 hunks)
  • data/in/BPA/OccupancyType.json (1 hunks)
  • data/in/BPA/ProposedLandUse.json (1 hunks)
  • data/in/BPA/RiskTypeComputation.json (1 hunks)
  • data/in/BPA/ServiceType.json (1 hunks)
  • data/in/BPA/SubOccupancyType.json (1 hunks)
  • data/in/BPA/TownPlanningScheme.json (1 hunks)
  • data/in/BPA/Usages.json (1 hunks)
  • data/in/BillAmendment/DemandRevisionBasis.json (1 hunks)
  • data/in/BillAmendment/documentObj.json (1 hunks)
  • data/in/BillingService/BusinessService.json (1 hunks)
  • data/in/BillingService/TaxPeriod.json (1 hunks)
  • data/in/DIGIT-UI/RoleActionMetadata.json (1 hunks)
  • data/in/DataSecurity/DecryptionABAC.json (1 hunks)
  • data/in/DataSecurity/EncryptionPolicy.json (1 hunks)
  • data/in/DataSecurity/README.md (1 hunks)
  • data/in/FSM/ApplicationChannel.json (1 hunks)
  • data/in/FSM/CheckList.json (1 hunks)
  • data/in/FSM/Config.json (1 hunks)
  • data/in/FSM/FSTPPlantInfo.json (1 hunks)
  • data/in/FSM/PitType.json (1 hunks)
  • data/in/FSM/PropertyType.json (1 hunks)
  • data/in/FSM/SanitationType.json (1 hunks)
  • data/in/FSM/VehicleType.json (1 hunks)
  • data/in/FinanceService/AccountCodeTemplate.json (1 hunks)
  • data/in/FinanceService/AccountheadMapping.json (1 hunks)
  • data/in/FinanceService/BusinessServiceMapping.json (1 hunks)
  • data/in/FinanceService/EgfInstrumentStatusMapping.json (1 hunks)
  • data/in/NOC/DocumentTypeMapping.json (1 hunks)
  • data/in/NOC/NocType.json (1 hunks)
  • data/in/PropertyTax/CancerCess.json (1 hunks)
  • data/in/PropertyTax/ConstructionSubType.json (1 hunks)
  • data/in/PropertyTax/ConstructionType.json (1 hunks)
  • data/in/PropertyTax/Documents.json (1 hunks)
  • data/in/PropertyTax/FireCess.json (1 hunks)
  • data/in/PropertyTax/Floor.json (1 hunks)
  • data/in/PropertyTax/Interest.json (1 hunks)
  • data/in/PropertyTax/MutationDocuments.json (1 hunks)
  • data/in/PropertyTax/MutationPenalty.json (1 hunks)
  • data/in/PropertyTax/MutationReason.json (1 hunks)
  • data/in/PropertyTax/MutationRebate.json (1 hunks)
  • data/in/PropertyTax/OccupancyType.json (1 hunks)
  • data/in/PropertyTax/OwnerShipCategory.json (1 hunks)
  • data/in/PropertyTax/OwnerType.json (1 hunks)
  • data/in/PropertyTax/OwnerTypeDocument.json (1 hunks)
  • data/in/PropertyTax/PTWorkflow.json (1 hunks)
  • data/in/PropertyTax/Penalty.json (1 hunks)
  • data/in/PropertyTax/PropertyConfiguration.json (1 hunks)
  • data/in/PropertyTax/PropertySubType.json (1 hunks)
  • data/in/PropertyTax/PropertyType.json (1 hunks)
  • data/in/PropertyTax/ReasonForTransfer.json (1 hunks)
  • data/in/PropertyTax/Rebate.json (1 hunks)
  • data/in/PropertyTax/SubOwnerShipCategory.json (1 hunks)
  • data/in/PropertyTax/UsageCategory.json (1 hunks)
  • data/in/PropertyTax/UsageCategoryDetail.json (1 hunks)
  • data/in/PropertyTax/UsageCategoryMajor.json (1 hunks)
  • data/in/PropertyTax/UsageCategoryMinor.json (1 hunks)
  • data/in/PropertyTax/UsageCategorySubMinor.json (1 hunks)
  • data/in/RAINMAKER-PGR/ServiceDefs.json (1 hunks)
  • data/in/RAINMAKER-PGR/UIConstants.json (1 hunks)
  • data/in/StakeholderRegistraition/TradeTypetoRoleMapping.json (1 hunks)
  • data/in/TradeLicense/AccessoriesCategory.json (1 hunks)
  • data/in/TradeLicense/ApplicationType.json (1 hunks)
  • data/in/TradeLicense/Documents.json (1 hunks)
  • data/in/TradeLicense/Penalty.json (1 hunks)
  • data/in/TradeLicense/Rebate.json (1 hunks)
  • data/in/TradeLicense/TradeRenewal.json (1 hunks)
  • data/in/TradeLicense/documentObj.json (1 hunks)
  • data/in/Vehicle/SuctionType.json (1 hunks)
  • data/in/Vehicle/VehicleMakeModel.json (1 hunks)
  • data/in/WaterCharges/ApplicationType.json (1 hunks)
  • data/in/WaterCharges/BillingSlab.json (1 hunks)
  • data/in/WaterCharges/BillingType.json (1 hunks)
  • data/in/WaterCharges/DocumentType.json (1 hunks)
  • data/in/WaterCharges/PipeSize.json (1 hunks)
  • data/in/WaterCharges/readme.txt (1 hunks)
  • data/in/Workflow/BusinessService.json (1 hunks)
  • data/in/Workflow/BusinessServiceConfig.json (1 hunks)
  • data/in/common-masters/CancelReceiptReason.json (1 hunks)
  • data/in/common-masters/CronJobAPIConfig.json (1 hunks)
  • data/in/common-masters/Department.json (1 hunks)
  • data/in/common-masters/Designation.json (1 hunks)
  • data/in/common-masters/DocumentType.json (1 hunks)
  • data/in/common-masters/IdFormat.json (1 hunks)
  • data/in/common-masters/OwnerShipCategory.json (1 hunks)
  • data/in/common-masters/OwnerType.json (1 hunks)
  • data/in/common-masters/StateInfo.json (1 hunks)
  • data/in/common-masters/StructureType.json (1 hunks)
  • data/in/common-masters/TablePaginationOptions.json (1 hunks)
  • data/in/common-masters/UOM.json (1 hunks)
  • data/in/common-masters/financemasters.json (1 hunks)
  • data/in/common-masters/uiCommonConfig.json (1 hunks)
  • data/in/common-masters/uiCommonConstants.json (1 hunks)
  • data/in/common-masters/uiCommonPay.json (1 hunks)
  • data/in/common-masters/wfSlaConfig.json (1 hunks)
  • data/in/dss-dashboard/dashboard-config.json (1 hunks)
  • data/in/egf-master/FinancialYear.json (1 hunks)
  • data/in/egov-hrms/DeactivationReason.json (1 hunks)
  • data/in/egov-hrms/Degree.json (1 hunks)
  • data/in/egov-hrms/EmployeeStatus.json (1 hunks)
  • data/in/egov-hrms/EmployeeType.json (1 hunks)
  • data/in/egov-hrms/EmploymentTest.json (1 hunks)
⛔ Files not processed due to max files limit (14)
  • data/in/egov-hrms/Specalization.json
  • data/in/firenoc/ApplicationType.json
  • data/in/firenoc/BuildingType.json
  • data/in/firenoc/Documents.json
  • data/in/firenoc/FireNocStateConstats.json
  • data/in/firenoc/FireStations.json
  • data/in/firenoc/PropertyType.json
  • data/in/firenoc/UOMs.json
  • data/in/mseva/EventCategories.json
  • data/in/mseva/EventTypes.json
  • data/in/pb/Chatbot/CityLocaleMasterData.json
  • data/in/pb/Chatbot/CityNames.json
  • data/in/pb/Chatbot/KeyWords.json
  • data/in/pb/Chatbot/StopWords.json
🧰 Additional context used
🪛 LanguageTool
data/in/WaterCharges/readme.txt

[grammar] ~1-~1: There might be a mistake here.
Context: This folder contains master data for Water Charges module

(QB_NEW_EN)

data/in/DataSecurity/README.md

[grammar] ~27-~27: Ensure spelling is correct
Context: ...de the encryption technique to be used (Asymettric/Symmetric). ## Guideline for Decrypti...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~39-~39: There might be a mistake here.
Context: ...according to its priority is as follows: 1. PLAIN - Decrypt the attribute and show t...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...tribute and show the data in plain form. 2. MASK - Decrypt the attribute then mask t...

(QB_NEW_EN)


[grammar] ~41-~41: Ensure spelling is correct
Context: ...o the maskingTechnique specified in the Attrbute object. 3. NONE - Replace the data wit...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~41-~41: There might be a mistake here.
Context: ...hnique specified in the Attrbute object. 3. NONE - Replace the data with an empty st...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
data/in/DataSecurity/README.md

6-6: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


18-18: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


33-33: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


45-45: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

Comment on lines +66 to +76
"businessService": "FIRENOC",
"code": "FIRENOC",
"collectionModesNotAllowed": [
"DD","OFFLINE_NEFT","OFFLINE_RTGS","POSTAL_ORDER"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true,
"type": "Adhoc"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Voucher mapping coverage.

Many services have "isVoucherCreationEnabled": true but lack corresponding entries in FinanceService/BusinessServiceMapping.json. This will cause voucher creation failures.

Either:

  • Add matching BusinessServiceMapping rows for these codes, or
  • Set isVoucherCreationEnabled to false where finance posting isn’t required.

I can help generate the missing stubs if you confirm the intended fund/function/department.

Also applies to: 88-97, 100-111, 113-123, 125-135, 137-147, 149-159, 161-171, 173-183, 185-195, 197-207, 209-219, 221-231, 233-243, 245-255, 257-267, 269-279, 281-291, 293-303, 305-315, 317-327, 329-339, 341-351, 353-363, 365-375, 377-387, 389-399, 401-411, 413-423, 425-435, 437-447, 449-459, 461-471, 473-483, 485-495, 497-507, 509-519, 521-531, 533-543, 545-555, 557-567, 569-579, 581-591, 593-603, 605-615, 617-627, 629-639, 641-651, 653-663, 665-675, 677-687, 689-699, 701-711, 713-723, 725-735, 737-747, 749-759, 761-771, 773-783, 785-795, 797-807, 809-819, 821-831, 833-843, 845-855, 857-867, 869-879, 881-891, 893-903, 905-915, 917-927, 929-939, 941-951, 953-962, 964-974, 976-986, 988-998, 1000-1010, 1012-1021, 1049-1058, 1060-1069, 1071-1080, 1082-1091, 1093-1102, 1114-1124, 1126-1135, 1137-1146, 1148-1157

🤖 Prompt for AI Agents
In data/in/BillingService/BusinessService.json (notably around lines 66-76 and
the many ranges listed in the review), multiple entries have
"isVoucherCreationEnabled": true but there are no corresponding entries in
FinanceService/BusinessServiceMapping.json; to fix, either (A) add matching
BusinessServiceMapping records for each BusinessService.code with the correct
fund, function, department and any required mapping fields (ensure
businessServiceCode matches the BillingService code and include necessary
accountingHead/ledger references used by the finance posting flow), or (B) set
"isVoucherCreationEnabled" to false for any service that should not trigger
finance posting; apply this change consistently for all the ranges called out in
the comment and validate by running the voucher creation path to ensure no
missing mapping errors remain.

Comment on lines +110 to +116
"fromDate": 1585704194000,
"toDate": 1617235154000,
"periodCycle": "ANNUAL",
"service": "TX.No_Dues_Certificate",
"code": "TXNDCAN2017",
"financialYear": "2020-21"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Code/year mismatch for TX.No_Dues_Certificate.

Code “TXNDCAN2017” paired with FY “2020-21” and 2020 dates looks wrong.

-      "code": "TXNDCAN2017",
+      "code": "TXNDCAN2020",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"fromDate": 1585704194000,
"toDate": 1617235154000,
"periodCycle": "ANNUAL",
"service": "TX.No_Dues_Certificate",
"code": "TXNDCAN2017",
"financialYear": "2020-21"
},
"fromDate": 1585704194000,
"toDate": 1617235154000,
"periodCycle": "ANNUAL",
"service": "TX.No_Dues_Certificate",
"code": "TXNDCAN2020",
"financialYear": "2020-21"
},
🤖 Prompt for AI Agents
In data/in/BillingService/TaxPeriod.json around lines 110 to 116, the entry uses
code "TXNDCAN2017" while the financialYear is "2020-21" and the from/to
timestamps correspond to 2020–2021; fix by making the code and year consistent:
either change the code to match the 2020 financial year (e.g., "TXNDCAN2020")
or, if the code must remain "TXNDCAN2017", update financialYear and
fromDate/toDate to the 2017 period; ensure whichever choice you make follows the
project's naming convention and update the other fields accordingly so code,
financialYear, and dates align.

Comment on lines +294 to +300
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "DISP_FIXED_ASSET.LAND",
"code": "DFAL10YRS2018",
"financialYear": "2018-28"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Period cycle value “FORTENYEARS” is likely invalid/inconsistent.

Elsewhere you use “TENYEARS”. Align to the accepted enum to avoid validator failures.

-      "periodCycle": "FORTENYEARS",
+      "periodCycle": "TENYEARS",

Recommend validating allowed values:

Also applies to: 302-308, 310-316, 318-324, 342-348, 350-356, 454-460, 462-476


🏁 Script executed:

#!/bin/bash
jq -r '.TaxPeriod[].periodCycle' data/in/BillingService/TaxPeriod.json | sort -u

Length of output: 119


🏁 Script executed:

#!/bin/bash
# Search for PeriodCycle enum definitions in Java source
rg -nP 'enum\s+PeriodCycle' -g '*.java'

# Check for any references to the invalid value across the codebase
rg -n 'FORTENYEARS'

# Look for periodCycle definitions in JSON schemas (excluding the input data)
rg -n '"periodCycle"' -g '*.json' -C3 | grep -v 'data/in/BillingService/TaxPeriod.json'

Length of output: 149278


Replace all “FORTENYEARS” periodCycle values with “TENYEARS” in TaxPeriod.json files.
Every entry whose code ends in “10YRS…” currently uses the invalid “FORTENYEARS” cycle; update them to the TENYEARS enum in data/in/BillingService/TaxPeriod.json (e.g. lines 294–300, 302–308, 310–316, 318–324, 342–348, 350–356, 454–460, 462–476) and the corresponding data/pg and data/pb files.

🤖 Prompt for AI Agents
In data/in/BillingService/TaxPeriod.json around lines 294–300 (and likewise at
302–308, 310–316, 318–324, 342–348, 350–356, 454–460, 462–476) replace the
invalid "periodCycle": "FORTENYEARS" values with "TENYEARS" for entries whose
"code" ends with "10YRS…"; apply the same replacement to the corresponding
records in data/pg and data/pb files so all representations use the TENYEARS
enum consistently.

Comment on lines +1 to +239
{
"tenantId" : "in",
"moduleName" : "DataSecurity",
"DecryptionABAC" : [
{
"key" : "ALL_ACCESS",
"roleAttributeAccessList" : [
{
"roleCode": "SYSTEM",
"attributeAccessList": [
{
"attribute": {
"jsonPath": "*/name"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/mobileNumber"
},
"accessType": "PLAIN"
}
]
},
{
"roleCode" : "CITIZEN",
"attributeAccessList" : [
{
"attribute" : {
"jsonPath" : "*/name"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/mobileNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/emailId"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/username"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/altContactNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/pan"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/aadhaarNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/guardian"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/permanentAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/correspondenceAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/addresses/*/address"
},
"accessType" : "PLAIN"
}
]
},
{
"roleCode": "ANONYMOUS",
"attributeAccessList": [
{
"attribute": {
"jsonPath": "*/name"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/mobileNumber"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/emailId"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/username"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/altContactNumber"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/pan"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/aadhaarNumber"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/guardian"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/permanentAddress/address"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/correspondenceAddress/address"
},
"accessType": "PLAIN"
},
{
"attribute": {
"jsonPath": "*/addresses/*/address"
},
"accessType": "PLAIN"
}
]
},
{
"roleCode" : "EMPLOYEE",
"attributeAccessList" : [
{
"attribute" : {
"jsonPath" : "*/name"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/mobileNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/emailId"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/username"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/altContactNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/pan"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/aadhaarNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/guardian"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/permanentAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/correspondenceAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/addresses/*/address"
},
"accessType" : "PLAIN"
}
]
}
]
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Normalize attribute naming and masking consistency across the file

  • Ensure all occurrences use camelCase jsonPaths (mobileNumber vs mobilenumber).
  • Prefer explicit entries for every encrypted field per role to avoid default behaviors.
  • Where maskingTechnique is provided, accessType should be MASK (not PLAIN).

I can script a consistency check for jsonPath keys across EncryptionPolicy and DecryptionABAC if helpful.

Also applies to: 451-596, 598-873, 875-1340

🤖 Prompt for AI Agents
In data/in/DataSecurity/DecryptionABAC.json around lines 1-239, the file shows
inconsistent attribute naming and masking: jsonPath keys must use camelCase,
encrypted fields should be explicitly listed per role (no implicit/default
behavior), and any attribute that has a maskingTechnique must use accessType
"MASK" instead of "PLAIN"; fix by normalizing all jsonPath values to camelCase
(e.g., mobileNumber, emailId, aadhaarNumber, altContactNumber, pan,
permanentAddress/address, correspondenceAddress/address, addresses/*/address),
add explicit attributeAccessList entries for every encrypted field for each role
instead of relying on defaults, and change accessType to "MASK" wherever a
maskingTechnique is present; apply the same normalization and fixes to the other
sections noted (lines 451-596, 598-873, 875-1340) and run a consistency check
comparing EncryptionPolicy and DecryptionABAC to ensure parity.

Comment on lines +26 to +95
"roleCode" : "CITIZEN",
"attributeAccessList" : [
{
"attribute" : {
"jsonPath" : "*/name"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/mobileNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/emailId"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/username"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/altContactNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/pan"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/aadhaarNumber"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/guardian"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/permanentAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/correspondenceAddress/address"
},
"accessType" : "PLAIN"
},
{
"attribute" : {
"jsonPath" : "*/addresses/*/address"
},
"accessType" : "PLAIN"
}
]
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Block CITIZEN PLAIN access to PAN/Aadhaar/PII under ALL_ACCESS

Granting PLAIN access to PAN, Aadhaar, email, altContactNumber, addresses, etc., to all CITIZENs for key ALL_ACCESS is an over-permissioning risk. Limit ALL_ACCESS to system/internal roles and use UserListSelf for self-access.

Apply this change (remove the CITIZEN block under ALL_ACCESS):

-          {
-            "roleCode" : "CITIZEN",
-            "attributeAccessList" : [
-              { "attribute" : { "jsonPath" : "*/name" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/mobileNumber" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/emailId" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/username" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/altContactNumber" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/pan" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/aadhaarNumber" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/guardian" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/permanentAddress/address" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/correspondenceAddress/address" }, "accessType" : "PLAIN" },
-              { "attribute" : { "jsonPath" : "*/addresses/*/address" }, "accessType" : "PLAIN" }
-            ]
-          },

Alternatively, if ALL_ACCESS must include CITIZEN, set PAN/Aadhaar/email/altContactNumber/addresses to NONE and mobileNumber to MASK. Want a patch for that variant?

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In data/in/DataSecurity/DecryptionABAC.json around lines 26-95, the CITIZEN role
under the ALL_ACCESS key grants PLAIN access to highly sensitive PII (PAN,
aadhaarNumber, emailId, altContactNumber, addresses, etc.), which is
over-permissive; to fix this either remove the entire CITIZEN block under
ALL_ACCESS so only system/internal roles keep ALL_ACCESS, or modify the CITIZEN
attributeAccessList so that PAN, aadhaarNumber, emailId, altContactNumber and
all address jsonPaths have "accessType": "NONE" and set mobileNumber to "MASK"
(keep non-sensitive attributes such as name/username/guardian as needed), then
validate JSON and update any tests/policies that assume CITIZEN ALL_ACCESS.

Comment on lines +35 to +79
"businessServiceId": "NewTL",
"state": "APPLIED",
"applicableNextStates": "Paid,Cancelled,Rejected",
"applicableActions": "Reject,Pay,Cancel,Mark",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "PAY",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "SYSTEM_PAYMENT",
"tenantId": "in",
"uuid": "4bd0f2a4-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f3ee-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f524-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fe444-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "APPROVE",
"nextStateId": "bf5fdfbc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "TL_APPROVER",
"tenantId": "in",
"uuid": "543f802e-f952-11e8-8eb2-f2801f1b9fd1"
}
]
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

APPLIED: Fix casing, remove misplaced APPROVE action (wrong stateId), and sync actions.

  • applicableNextStates casing inconsistent with defined states.
  • applicableActions lists "Mark" but no MARK action here.
  • The APPROVE action’s stateId points to PENDINGAPPROVAL and shouldn’t be under APPLIED.
-          "applicableNextStates": "Paid,Cancelled,Rejected",
-          "applicableActions": "Reject,Pay,Cancel,Mark",
+          "applicableNextStates": "PAID,CANCELLED,REJECTED",
+          "applicableActions": "PAY,CANCEL,REJECT",
@@
-            },
-            {
-              "stateId": "bf5fe444-f7df-11e8-8eb2-f2801f1b9fd1",
-              "action": "APPROVE",
-              "nextStateId": "bf5fdfbc-f7df-11e8-8eb2-f2801f1b9fd1",
-              "roles": "TL_APPROVER",
-              "tenantId": "in",
-              "uuid": "543f802e-f952-11e8-8eb2-f2801f1b9fd1"
-            }
+            }

Note: remove the trailing comma from the previous item if necessary.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"businessServiceId": "NewTL",
"state": "APPLIED",
"applicableNextStates": "Paid,Cancelled,Rejected",
"applicableActions": "Reject,Pay,Cancel,Mark",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "PAY",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "SYSTEM_PAYMENT",
"tenantId": "in",
"uuid": "4bd0f2a4-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f3ee-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f524-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fe444-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "APPROVE",
"nextStateId": "bf5fdfbc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "TL_APPROVER",
"tenantId": "in",
"uuid": "543f802e-f952-11e8-8eb2-f2801f1b9fd1"
}
]
},
"businessServiceId": "NewTL",
"state": "APPLIED",
"applicableNextStates": "PAID,CANCELLED,REJECTED",
"applicableActions": "PAY,CANCEL,REJECT",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "PAY",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "SYSTEM_PAYMENT",
"tenantId": "in",
"uuid": "4bd0f2a4-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f3ee-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fd8c8-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0f524-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
🤖 Prompt for AI Agents
In data/in/Workflow/BusinessService.json around lines 35–79, the APPLIED state
block has casing and action mismatches: change applicableNextStates values to
the correct uppercase state names (e.g. PAID,CANCELLED,REJECTED), remove "Mark"
from applicableActions (since there's no MARK action), delete the APPROVE action
object whose stateId points to PENDINGAPPROVAL (bf5fe444...) so the actions
array only contains PAY, CANCEL, REJECT for this state, and ensure JSON
punctuation is valid (remove any now-invalid trailing comma before/after the
removed object).

Comment on lines +81 to +125
"businessServiceId": "NewTL",
"state": "PAID",
"applicableNextStates": "Intermediate",
"applicableActions": "Approve,Cancel,Reject,Mark",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0faa6-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0fc54-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "MARK",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0feac-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "FORWARD",
"nextStateId": "bf5fdd28-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd10136-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

PAID: Replace invalid next state label and sync actions list.

"Intermediate" is not a defined state; actions metadata should match defined actions.

-          "applicableNextStates": "Intermediate",
-          "applicableActions": "Approve,Cancel,Reject,Mark",
+          "applicableNextStates": "FIELDINSPECTION,PENDINGAPPROVAL",
+          "applicableActions": "CANCEL,REJECT,MARK,FORWARD",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"businessServiceId": "NewTL",
"state": "PAID",
"applicableNextStates": "Intermediate",
"applicableActions": "Approve,Cancel,Reject,Mark",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0faa6-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0fc54-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "MARK",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0feac-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "FORWARD",
"nextStateId": "bf5fdd28-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd10136-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
"businessServiceId": "NewTL",
"state": "PAID",
"applicableNextStates": "FIELDINSPECTION,PENDINGAPPROVAL",
"applicableActions": "CANCEL,REJECT,MARK,FORWARD",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "false",
"uuid": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "CANCEL",
"nextStateId": "bf5fe0fc-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0faa6-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REJECT",
"nextStateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0fc54-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "MARK",
"nextStateId": "bf5fdaee-f7df-11e8-8eb2-f2801f9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd0feac-f7d3-11e8-8eb2-f2801f1b9fd1"
},
{
"stateId": "bf5fdaee-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "FORWARD",
"nextStateId": "bf5fdd28-f7df-11e8-8eb2-f2801f9fd1",
"roles": "CLERK",
"tenantId": "in",
"uuid": "4bd10136-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
🤖 Prompt for AI Agents
In data/in/Workflow/BusinessService.json around lines 81–125, the
"applicableNextStates" value "Intermediate" is not a defined state and the
"applicableActions" list ("Approve,Cancel,Reject,Mark") is out of sync with the
actions array (which contains CANCEL, REJECT, MARK, FORWARD). Replace
"Intermediate" with the correct defined next-state label(s) or state UUID(s)
that this PAID state transitions to; then sync the actions: either add a
corresponding APPROVE action object to the actions array (with proper
nextStateId/roles/uuid) if Approve is valid, or remove "Approve" from
"applicableActions" and/or remove the FORWARD action if it should not be
available — ensure the string lists exactly match the action names
(case/spacing) present in the actions array and that all state names/UUIDs
referenced exist in the workflow definitions.

Comment on lines +217 to +237
"businessServiceId": "NewTL",
"state": "REJECTED",
"applicableNextStates": "Initiated",
"applicableActions": "Reapply",
"docUploadRequired": "true",
"UpdateAllowed": "true",
"isTerminateState": "true",
"isStartState": "false",
"uuid": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REINITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "4bd115fe-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

REJECTED: Normalize next state/action names to match actual transition.

Use "INITIATED" and "REINITIATE" to match the defined state and action.

-          "applicableNextStates": "Initiated",
-          "applicableActions": "Reapply",
+          "applicableNextStates": "INITIATED",
+          "applicableActions": "REINITIATE",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"businessServiceId": "NewTL",
"state": "REJECTED",
"applicableNextStates": "Initiated",
"applicableActions": "Reapply",
"docUploadRequired": "true",
"UpdateAllowed": "true",
"isTerminateState": "true",
"isStartState": "false",
"uuid": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REINITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "4bd115fe-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
"businessServiceId": "NewTL",
"state": "REJECTED",
- "applicableNextStates": "Initiated",
"applicableNextStates": "INITIATED",
"applicableActions": "REINITIATE",
"docUploadRequired": "true",
"UpdateAllowed": "true",
"isTerminateState": "true",
"isStartState": "false",
"uuid": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "bf5fe318-f7df-11e8-8eb2-f2801f1b9fd1",
"action": "REINITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "4bd115fe-f7d3-11e8-8eb2-f2801f1b9fd1"
}
]
},
🤖 Prompt for AI Agents
In data/in/Workflow/BusinessService.json around lines 217 to 237, the REJECTED
state's applicableNextStates and applicableActions values are not normalized to
the actual transition names; change "Initiated" to "INITIATED" and "Reapply" to
"REINITIATE" so the JSON matches the defined state/action enums and the
REINITIATE action string used in the actions array.

Comment on lines +277 to +297
"businessServiceId": "NewTL",
"state": "",
"applicableNextStates": "Initiated",
"applicableActions": "INITIATE",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "true",
"uuid": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"action": "INITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "2efb9036-f895-11e8-8eb2-f2801f1b9fd1"
}
]
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Start (blank) state: Normalize next state name casing.

Keep labels consistent with defined state "INITIATED".

-          "applicableNextStates": "Initiated",
+          "applicableNextStates": "INITIATED",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"businessServiceId": "NewTL",
"state": "",
"applicableNextStates": "Initiated",
"applicableActions": "INITIATE",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "true",
"uuid": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"action": "INITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "2efb9036-f895-11e8-8eb2-f2801f1b9fd1"
}
]
}
"businessServiceId": "NewTL",
"state": "",
"applicableNextStates": "INITIATED",
"applicableActions": "INITIATE",
"docUploadRequired": "false",
"UpdateAllowed": "true",
"isTerminateState": "false",
"isStartState": "true",
"uuid": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"tenantId": "in",
"actions": [
{
"stateId": "9d458700-f894-11e8-8eb2-f2801f1b9fd1",
"action": "INITIATE",
"nextStateId": "bf5fd4f4-f7df-11e8-8eb2-f2801f1b9fd1",
"roles": "CITIZEN,TL_CEMP",
"tenantId": "in",
"uuid": "2efb9036-f895-11e8-8eb2-f2801f1b9fd1"
}
]
}
🤖 Prompt for AI Agents
In data/in/Workflow/BusinessService.json around lines 277-297, the start state's
"state" field is empty and "applicableNextStates" uses "Initiated" (wrong
casing); set "state" to "INITIATED" and change "applicableNextStates" to
"INITIATED" so labels match the defined state casing.

Comment on lines +6 to +8
"code": "NEWTL",
"isStateLevel": true
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix service code mismatch with BusinessService.json ("NEWTL" vs "NewTL").

Config uses "NEWTL" but the workflow defines businessService "NewTL". This breaks state-level resolution.

Apply:

-      "code": "NEWTL",
+      "code": "NewTL",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"code": "NEWTL",
"isStateLevel": true
},
"code": "NewTL",
"isStateLevel": true
},
🤖 Prompt for AI Agents
In data/in/Workflow/BusinessServiceConfig.json around lines 6 to 8, the "code"
entry uses "NEWTL" but the workflow's businessService value is "NewTL", causing
state-level resolution failures; update the "code" field to exactly "NewTL"
(match case and spelling) so it matches BusinessService.json, and verify any
other references in this file or related configs use the same exact string.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +126 to +134
"code": "testonecode112234324",
"name": "test3test2",
"description": "test123description"
},
{
"code": "testtwocode11234354",
"name": "test4test1",
"description": "testcodedescription"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove leftover test roles from production tenant data.

Entries with codes like testonecode..., testtwocode..., directortestcode..., and QA_AUTOMATION should not ship for tenant "in".

Proposed removals:

-    {
-      "code": "testonecode112234324",
-      "name": "test3test2",
-      "description": "test123description"
-    },
-    {
-      "code": "testtwocode11234354",
-      "name": "test4test1",
-      "description": "testcodedescription"
-    },
-    {
-      "code": "testonecode112234324",
-      "name": "test3test21",
-      "description": "test123description"
-    },
-    {
-      "code": "directortestcode112234324",
-      "name": "director123456",
-      "description": "test123description"
-    },
-    {
-      "code": "QA_AUTOMATION",
-      "name": "QA Automation",
-      "description": "QA Automation Role"
-    },

Also applies to: 136-139, 146-149, 576-579

🤖 Prompt for AI Agents
In data/in/ACCESSCONTROL-ROLES/roles.json around lines 126-134 (and also remove
similar test entries at 136-139, 146-149, and 576-579), there are leftover test
role objects (codes like testonecode..., testtwocode..., directortestcode...,
QA_AUTOMATION) that must be removed from the production tenant data; delete
those entire role objects (the full JSON objects including their opening and
closing braces and trailing commas as needed to keep valid JSON), ensure
surrounding commas and array structure remain valid after removal, and run a
JSON lint/parse to confirm the file remains well-formed.

Comment on lines +126 to +139
"code": "testonecode112234324",
"name": "test3test2",
"description": "test123description"
},
{
"code": "testtwocode11234354",
"name": "test4test1",
"description": "testcodedescription"
},
{
"code": "testonecode112234324",
"name": "test3test21",
"description": "test123description"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Duplicate role codes will break RBAC merges. Remove duplicates or consolidate.

  • testonecode112234324 appears twice (Lines 126-129 and 136-139).
  • TL_APPROVER appears twice (Lines 116-119 and 311-314).

Deduplicate to ensure unique role codes.

Apply removals (choose one occurrence for each):

-    {
-      "code": "testonecode112234324",
-      "name": "test3test21",
-      "description": "test123description"
-    },
@@
-    {
-      "code": "TL_APPROVER",
-      "name": "TL Approver",
-      "description": "Approver who verifies and approves the TL application"
-    },

Also applies to: 311-314

🤖 Prompt for AI Agents
In data/in/ACCESSCONTROL-ROLES/roles.json around lines 116-119, 126-129, 136-139
and 311-314 there are duplicate role codes (TL_APPROVER appears at 116-119 and
311-314; testonecode112234324 appears at 126-129 and 136-139) which will break
RBAC merges; remove or consolidate duplicates so each role.code is unique by
deleting the redundant entry (or merging descriptions/names if they differ) and
keep only one canonical occurrence for each duplicated code, then validate JSON
structure remains intact.

"moduleName": "common-masters",
"CronJobAPIConfig": [{
"jobName": "daily",
"active": "false",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

active should be boolean, not string

Strings may be truthy in some parsers and break scheduling toggles.

Apply:

-      "active": "false",
+      "active": false,
@@
-      "active": "false",
+      "active": false,
@@
-      "active": "true",
+      "active": true,
@@
-      "active": "true",
+      "active": true,

Also applies to: 18-18, 30-30, 42-42

🤖 Prompt for AI Agents
In data/in/common-masters/CronJobAPIConfig.json around line 6 (and similarly
lines 18, 30, 42), the "active" values are written as JSON strings ("false")
instead of booleans; replace the quoted "false"/"true" values with unquoted
false/true booleans so the JSON contains proper boolean types for the scheduler
to parse reliably.

Comment on lines +107 to +109
"code": "APPL.LOCALBODY.MUNCIPAL_APPROVAL",
"active": true
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Typo in code: MUNCIPAL → MUNICIPAL.
Avoid hard-to-find mismatches across configs referencing this code.

-      "code": "APPL.LOCALBODY.MUNCIPAL_APPROVAL",
+      "code": "APPL.LOCALBODY.MUNICIPAL_APPROVAL",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"code": "APPL.LOCALBODY.MUNCIPAL_APPROVAL",
"active": true
},
"code": "APPL.LOCALBODY.MUNICIPAL_APPROVAL",
"active": true
},
🤖 Prompt for AI Agents
In data/in/common-masters/DocumentType.json around lines 107 to 109, the "code"
value contains a typo "APPL.LOCALBODY.MUNCIPAL_APPROVAL" (MUNCIPAL → MUNICIPAL);
update the string to "APPL.LOCALBODY.MUNICIPAL_APPROVAL" everywhere this key
appears to maintain consistency across configs and run a quick search/replace
across the repo to update any references and tests that rely on the old code.

Comment on lines +163 to +167
"code": "GOVTNOTIFICATION",
"active": true,
"allowedFormat" : ["image/*", ".png", ".jpeg"],
"maxFileSize": 3000
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Duplicate GOVTNOTIFICATION entry — must be unique.
Two entries with code "GOVTNOTIFICATION" will cause conflicts during MDMS load/reads.

Remove the duplicate:

     {
-      "code": "GOVTNOTIFICATION",
-      "active": true,
-      "allowedFormat" : ["image/*", ".png", ".jpeg"],
-      "maxFileSize": 3000
-    },
+      "code": "GOVTNOTIFICATION",
+      "active": true,
+      "allowedFormat" : ["image/*", ".png", ".jpeg"],
+      "maxFileSize": 3000
+    }

Also applies to: 151-155

🤖 Prompt for AI Agents
In data/in/common-masters/DocumentType.json around lines 163-167 (and the
duplicate at 151-155), there are two entries with "code": "GOVTNOTIFICATION"
which must be unique; remove one of the duplicate object entries so only a
single GOVTNOTIFICATION entry remains, ensure the remaining entry has the
correct allowedFormat and maxFileSize values, and run a quick JSON lint/check to
confirm no trailing commas or structural issues after deletion.

Comment on lines +45 to +82
"type":"PLOT",
"from": "100",
"to": "800",
"unitRate": 2,
"Uom": "sqft",
"minimumAmount": 20,
"monthlyAmount": 100,
"fromDate": 1522540800000,
"todate": 1554076799000,
"description": "The amount to be paid for the plot range between 200 & 800sqft",
"isActive": true
},
{
"type":"PLOT",
"from": "801",
"to": "1500",
"unitRate": 3,
"Uom": "sqft",
"minimumAmount": 35,
"monthlyAmount": 150,
"fromDate": 1522540800000,
"todate": 1554076799000,
"description": "The amount to be paid for the plot range between 800 & 1500sqft",
"isActive": true
},
{
"type":"PLOT",
"from": "1501",
"to": ">",
"unitRate": 5,
"Uom": "sqft",
"minimumAmount": 40,
"monthlyAmount": 220,
"fromDate": 1522540800000,
"todate": 1554076799000,
"description":"The amount to be paid for the plot range between 1500 & 2000sqft",
"isActive": true
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Normalize key name: use a single discriminator (billingType) across all slabs

Later entries use "type" while earlier use "billingType". Pick one (recommend "billingType") to avoid ingestion failures.

Example changes:

-      "type":"PLOT",
+      "billingType":"PLOT",
@@
-      "type":"PLOT",
+      "billingType":"PLOT",
@@
-      "type":"PLOT",
+      "billingType":"PLOT",
@@
-      "type": "TABBASED",
+      "billingType": "TAPBASED",
@@
-      "type": "TAB",
+      "billingType": "TAP",
@@
-      "type": "TAP",
+      "billingType": "TAP",
@@
-      "type": "FIXED",
+      "billingType": "FIXED",

If the canonical key is "type" in your schema, invert the change consistently instead.

Also applies to: 83-134

🤖 Prompt for AI Agents
In data/in/WaterCharges/BillingSlab.json around lines 45 to 82 (and also apply
the same change to lines 83-134), the objects use the key "type" while earlier
entries use "billingType"; replace the discriminator consistently across the
whole file by renaming every "type" key to "billingType" (or if your canonical
schema uses "type" instead, rename all "billingType" to "type") so all slab
objects use the same field name, keeping values unchanged and ensuring no
duplicate keys per object.

{
"code": "PAN",
"description": "PAN card",
"isActive": true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Use "active" instead of "isActive" to match common MDMS conventions.

Most masters use "active". A mismatched key can break lookups.

-      "isActive": true
+      "active": true

(Applies to all four entries.)

Also applies to: 13-13, 18-18, 23-23

🤖 Prompt for AI Agents
In data/in/WaterCharges/DocumentType.json around lines 8, 13, 18 and 23, the
entries use the key "isActive" which diverges from the MDMS convention of using
"active"; change each "isActive": true/false to "active": true/false for all
four entries so the key names match the rest of the masters and avoid lookup
failures.

Comment on lines +21 to +23
"code": "AADHAR",
"description": "Aadhar id",
"isActive": true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Correct Aadhaar spelling and code for cross-module consistency.

Common usage is code "AADHAAR" and label "Aadhaar". Please align unless existing consumers require "AADHAR".

-      "code": "AADHAR",
-      "description": "Aadhar id",
+      "code": "AADHAAR",
+      "description": "Aadhaar ID",

Verification helper:


🏁 Script executed:

#!/bin/bash
# Check how Aadhaar is referenced across MDMS
rg -nP '"AADH?A?AR?"' -C2 --type=json

Length of output: 2946


🏁 Script executed:

#!/bin/bash
# Find all occurrences of "AADHAR" in JSON files
rg -n '"AADHAR"' -g '*.json'

Length of output: 486


Align Aadhaar spelling and code across all WaterCharges configs
Mandatory: update every DocumentType.json and corresponding ApplicationType.json under data/*/WaterCharges to use

-      "code": "AADHAR",
-      "description": "Aadhar id",
+      "code": "AADHAAR",
+      "description": "Aadhaar ID",

Affected files:

  • data/pg/WaterCharges/DocumentType.json
  • data/in/WaterCharges/DocumentType.json
  • data/pb/WaterCharges/DocumentType.json
  • data/pg/WaterCharges/ApplicationType.json (change "AADHAR" to "AADHAAR")
  • data/in/WaterCharges/ApplicationType.json (change "AADHAR" to "AADHAAR")
  • data/pb/WaterCharges/ApplicationType.json (change "AADHAR" to "AADHAAR")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"code": "AADHAR",
"description": "Aadhar id",
"isActive": true
"code": "AADHAAR",
"description": "Aadhaar ID",
"isActive": true
🤖 Prompt for AI Agents
In data/in/WaterCharges/DocumentType.json around lines 21-23 (and apply same
change in data/pg/WaterCharges/DocumentType.json and
data/pb/WaterCharges/DocumentType.json): the document entry currently uses
"code": "AADHAR" and "description": "Aadhar id" — update the code to "AADHAAR"
and the description to "Aadhaar id" (or "Aadhaar ID") to standardize spelling;
also update the corresponding entries in
data/pg/WaterCharges/ApplicationType.json,
data/in/WaterCharges/ApplicationType.json, and
data/pb/WaterCharges/ApplicationType.json by changing any "AADHAR" values to
"AADHAAR" so codes and descriptions are consistent across all WaterCharges
configs.

"sizeInInch": 3,
"code": "3Inch",
"description": "three inch pipe",
"isActive": true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Use “active” instead of “isActive” for MDMS consistency.

Most masters in this PR and repo use “active”; “isActive” risks being ignored by consumers.

       "description": "three inch pipe",
-      "isActive": true
+      "active": true
...
       "description": "four inch pipe",
-      "isActive": true
+      "active": true
...
       "description": "five inch pipe",
-      "isActive": true
+      "active": true

Also applies to: 15-15, 21-21


🏁 Script executed:

#!/bin/bash
# Count occurrences of "isActive" and "active" keys in data/in JSON files
echo "Occurrences of isActive:"
rg -n '"isActive"\s*:' -t json -g 'data/in/**/*'
echo "Occurrences of active:"
rg -n '"active"\s*:' -t json -g 'data/in/**/*'

Length of output: 128276


Rename isActive to active for MDMS consistency
Replace the three "isActive" entries in data/in/WaterCharges/PipeSize.json (lines 9, 15 and 21) with "active" so this master aligns with the rest of the repo’s JSON schemas.

🤖 Prompt for AI Agents
In data/in/WaterCharges/PipeSize.json around lines 9, 15 and 21, the property
name "isActive" must be renamed to "active" to match MDMS/JSON schema
conventions; update each of the three occurrences by replacing the key
"isActive" with "active" (preserve the boolean values and surrounding JSON
structure) and validate the file is still valid JSON after the change.

Comment on lines +12 to +15
"sizeInInch": 4,
"code": "3Inch",
"description": "four inch pipe",
"isActive": true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Duplicate code for 4-inch entry (“3Inch”)—will break lookups/uniqueness.

Change the 4-inch code to a unique, correct value.

     {
       "sizeInInch": 4,
-      "code": "3Inch",
+      "code": "4Inch",
       "description": "four inch pipe",
       "isActive": true
     },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"sizeInInch": 4,
"code": "3Inch",
"description": "four inch pipe",
"isActive": true
{
"sizeInInch": 4,
"code": "4Inch",
"description": "four inch pipe",
"isActive": true
},
🤖 Prompt for AI Agents
In data/in/WaterCharges/PipeSize.json around lines 12 to 15, the 4-inch entry
incorrectly uses the duplicate/wrong code "3Inch"; change the "code" field to a
unique, correct value (e.g., "4Inch" or another project-standard identifier) so
it no longer duplicates the 3-inch code and preserves lookup/uniqueness across
the dataset.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +1 to +848
{
"tenantId": "in",
"moduleName": "BillAmendment",
"documentObj": [
{
"allowedDocs": [
{
"documentType": "COURTORDER",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"COURT_CASE_SETTLEMENT"
],
"hasDropDown":true,
"dropdownData":[{"code":"COURTORDER","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"COURT_CASE_SETTLEMENT"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
},
{
"documentType": "IDENTITYPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"COURT_CASE_SETTLEMENT"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"COURT_CASE_SETTLEMENT"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "SELFDECLARATION",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"COURT_CASE_SETTLEMENT"
],
"hasDropDown":true,
"dropdownData":[{"code":"SELFDECLARATION","active":true}],
"required": true
}
]
},
{
"allowedDocs": [
{
"documentType": "GOVTNOTIFICATION",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ARREAR_WRITE_OFF"
],
"hasDropDown":true,
"dropdownData":[{"code":"GOVTNOTIFICATION","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ARREAR_WRITE_OFF"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
},
{
"documentType": "IDENTITYPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ARREAR_WRITE_OFF"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ARREAR_WRITE_OFF"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
}
]
},
{
"allowedDocs": [
{
"documentType": "OFFICENOTEORDER",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"DCB_CORRECTION"
],
"hasDropDown":true,
"dropdownData":[{"code":"OFFICENOTEORDER","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"DCB_CORRECTION"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
},
{
"documentType": "IDENTITYPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"DCB_CORRECTION"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"DCB_CORRECTION"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
}
]
},
{
"allowedDocs": [
{
"documentType": "GOVTNOTIFICATION",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ONE_TIME_SETTLEMENT"
],
"hasDropDown":true,
"dropdownData":[{"code":"GOVTNOTIFICATION","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ONE_TIME_SETTLEMENT"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
},
{
"documentType": "IDENTITYPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ONE_TIME_SETTLEMENT"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"ONE_TIME_SETTLEMENT"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
}
]
},
{
"allowedDocs": [
{
"documentType": "OFFICENOTEORDER",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"dropdownData":[{"code":"OFFICENOTEORDER","active":true}],
"required": true
}, {
"documentType": "IDENTITYPROOF",
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "SELFDECLARATION",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"dropdownData":[{"code":"SELFDECLARATION","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
}
]
},
{
"allowedDocs": [
{
"documentType": "SELFDECLARATION",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"OTHERS"
],
"hasDropDown":true,
"dropdownData":[{"code":"SELFDECLARATION","active":true}],
"required": true
},
{
"documentType": "SUPPORTINGDOCUMENT",
"demandRevisionBasis": [
"OTHERS"
],
"hasDropDown":true,
"dropdownData":[{"code":"SUPPORTINGDOCUMENT","active":true}],
"required": true
},
{
"documentType": "PASTBILLS",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"OTHERS"
],
"hasDropDown":true,
"dropdownData":[{"code":"PASTBILLS","active":true}],
"required": true
},
{
"documentType": "IDENTITYPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"OTHERS"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
{
"documentType": "ADDRESSPROOF",
"maxFileSize":5000,
"allowedFormat": ["image/*", ".png", ".jpeg"],
"demandRevisionBasis": [
"OTHERS"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "ADDRESSPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "ADDRESSPROOF.PAN",
"active": true
},
{
"code": "ADDRESSPROOF.AADHAAR",
"active": true
},
{
"code": "ADDRESSPROOF.VOTERID",
"active": true
},
{
"code": "ADDRESSPROOF.DRIVING",
"active": true
}
],
"required": true
}
]
}
]
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Automated validation: required keys across allowedDocs.

Run a structural check to catch missing keys (documentType, required, hasDropDown, dropdownData; and toolTipData when hasToolTip=true).


🏁 Script executed:

#!/bin/bash
set -e
f='data/in/BillAmendment/documentObj.json'
# 1) Missing required fields
jq -r '
  .documentObj[].allowedDocs[]
  | {documentType,required,hasDropDown,dropdownData,hasToolTip,toolTipData,maxFileSize,allowedFormat}
  | @json
' "$f" >/dev/null || { echo "Invalid JSON"; exit 1; }

# 2) Report entries missing maxFileSize or allowedFormat
echo "Missing maxFileSize:" 
jq -r '.documentObj[].allowedDocs[] | select(.maxFileSize|not) | .documentType + " @" + (.demandRevisionBasis|join("|"))' "$f" | sort -u
echo "Missing allowedFormat:"
jq -r '.documentObj[].allowedDocs[] | select(.allowedFormat|not) | .documentType + " @" + (.demandRevisionBasis|join("|"))' "$f" | sort -u

# 3) hasToolTip=true but no toolTipData
echo "hasToolTip without toolTipData:"
jq -r '.documentObj[].allowedDocs[] | select(.hasToolTip==true and (.toolTipData|length==0 or .toolTipData|not)) | .documentType' "$f" | sort -u

Length of output: 1271


Add missing maxFileSize and allowedFormat to these allowedDocs

The following entries in data/in/BillAmendment/documentObj.json lack both properties:

  • REMISSION_FOR_PROPERTY_TAX: IDENTITYPROOF, PASTBILLS
  • OTHERS: SUPPORTINGDOCUMENT

These fields are required for validating upload size and formats.

🤖 Prompt for AI Agents
In data/in/BillAmendment/documentObj.json lines 1-848, several allowedDocs
entries are missing upload validation fields; specifically add "maxFileSize":
5000 and "allowedFormat": ["image/*", ".png", ".jpeg"] to the
REMISSION_FOR_PROPERTY_TAX IDENTITYPROOF entry, the REMISSION_FOR_PROPERTY_TAX
PASTBILLS entry, and the OTHERS SUPPORTINGDOCUMENT entry so they match the
format used elsewhere (keep existing keys like hasDropDown/required as-is).

Comment on lines +40 to +58
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Normalize code names: “DRIVING” → “DRIVINGLICENSE” (if that’s the canonical code).

Multiple modules use DRIVINGLICENSE. Standardize if possible.

-              "code": "IDENTITYPROOF.DRIVING",
+              "code": "IDENTITYPROOF.DRIVINGLICENSE",
...
-              "code": "ADDRESSPROOF.DRIVING",
+              "code": "ADDRESSPROOF.DRIVINGLICENSE",

Search for existing convention:

Also applies to: 56-58, 199-205, 339-341, 475-477, 762-764, 817-819


🏁 Script executed:

#!/bin/bash
rg -nP 'DRIVINGLICENSE|ADDRESSPROOF\.DRIVING|IDENTITYPROOF\.DRIVING' data -C2

Length of output: 47891


Standardize Driving proof codes to DrivingLicense
DocumentType.json defines the canonical code as “DRIVINGLICENSE” (e.g. APPL.IDENTITYPROOF.DRIVINGLICENSE), but all documentObj.json entries still use “IDENTITYPROOF.DRIVING” and “ADDRESSPROOF.DRIVING”. Rename every occurrence to “IDENTITYPROOF.DRIVINGLICENSE” and “ADDRESSPROOF.DRIVINGLICENSE” across data/pg, data/in, and data/pb modules to align with the master definitions.

🤖 Prompt for AI Agents
In data/in/BillAmendment/documentObj.json around lines 40 to 58, the document
codes use the old “DRIVING” token (IDENTITYPROOF.DRIVING / ADDRESSPROOF.DRIVING)
which must be renamed to the canonical “DRIVINGLICENSE” form; update every
occurrence in this file and likewise search-and-replace across data/pg, data/in,
and data/pb modules to change IDENTITYPROOF.DRIVING ->
IDENTITYPROOF.DRIVINGLICENSE and ADDRESSPROOF.DRIVING ->
ADDRESSPROOF.DRIVINGLICENSE so all documentObj and related JSON entries match
DocumentType.json canonical codes.

Comment on lines +572 to +624
}, {
"documentType": "IDENTITYPROOF",
"demandRevisionBasis": [
"REMISSION_FOR_PROPERTY_TAX"
],
"hasDropDown":true,
"hasToolTip":true,
"toolTipData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"dropdownData": [
{
"code": "IDENTITYPROOF.ELECTRICITYBILL",
"active": true
},
{
"code": "IDENTITYPROOF.PAN",
"active": true
},
{
"code": "IDENTITYPROOF.AADHAAR",
"active": true
},
{
"code": "IDENTITYPROOF.VOTERID",
"active": true
},
{
"code": "IDENTITYPROOF.DRIVING",
"active": true
}
],
"required": true
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Make file constraints consistent across documents (missing maxFileSize/allowedFormat).

Several entries (e.g., IDENTITYPROOF at Line 572 and PASTBILLS at Line 692) omit maxFileSize/allowedFormat unlike other blocks. This can break UI validations.

         {
           "documentType": "IDENTITYPROOF",
+          "maxFileSize":5000,
+          "allowedFormat": ["image/*", ".png", ".jpeg"],
           "demandRevisionBasis": [
             "REMISSION_FOR_PROPERTY_TAX"
           ],
...
         {
           "documentType": "PASTBILLS",
+          "maxFileSize":5000,
+          "allowedFormat": ["image/*", ".png", ".jpeg"],
           "demandRevisionBasis": [
             "REMISSION_FOR_PROPERTY_TAX"
           ],

Also applies to: 626-699

🤖 Prompt for AI Agents
In data/in/BillAmendment/documentObj.json around lines 572-624 and 626-699, some
document entries (notably the IDENTITYPROOF block at ~572 and the PASTBILLS
block around ~692) are missing maxFileSize and allowedFormat properties which
other document objects include for UI validation; add maxFileSize and
allowedFormat keys to these blocks (and any other missing blocks in these
ranges) using the same values used by the other document definitions in this
file (copy the exact maxFileSize and allowedFormat settings from a nearby,
correct document entry) so the UI validation is consistent.

Comment on lines +1 to +140
{
"tenantId":"in",
"moduleName":"BPA",
"CalculationType":[
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":100
},
{
"applicationType": "ALL",
"serviceType": "ALL",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":110
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "ALL",
"feeType":"ApplicationFee",
"amount":120
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":200
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"Low_ApplicationFee",
"amount":100
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"Low_SanctionFee",
"amount":500
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"SanctionFee",
"amount":500
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "LOW",
"feeType":"SanctionFee",
"amount":500
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "ALL",
"feeType":"SanctionFee",
"amount":500
},
{
"applicationType": "BUILDING_OC_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "LOW",
"feeType": "ApplicationFee",
"amount": 100
},
{
"applicationType": "BUILDING_OC_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "ALL",
"feeType": "ApplicationFee",
"amount": 120
},
{
"applicationType": "BUILDING_OC_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType": "ApplicationFee",
"amount": 200
},
{
"applicationType": "BUILDING_OC_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType": "Low_ApplicationFee",
"amount": 100
},

{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "LOW",
"feeType": "SanctionFee",
"amount": 500
},
{
"applicationType": "BUILDING_OC_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "ALL",
"feeType": "SanctionFee",
"amount": 500,
"calsiLogic": [
{
"parameter": "builtuparea",
"tolerancelimit": 1,
"calculationType": "number",
"deviation": [
{
"from": 1,
"to": 3,
"MF": 1,
"uom": 100
},
{
"from": 3,
"to": 5,
"MF": 2,
"uom": 150
},
{
"from": 5,
"to": 499,
"MF": 3,
"uom": 200
}
],
"paramPath": "edcrDetail[0].planDetail.virtualBuilding.totalBuitUpArea"
}
]
}
]
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Automated duplicate/overlap check for CalculationType.

Run this script to list duplicates and overlaps by composite key (applicationType, serviceType, riskType, feeType):


🏁 Script executed:

#!/bin/bash
jq -r '
  .CalculationType
  | map({k: ([.applicationType,.serviceType,.riskType,.feeType]|join("|")), v: .})
  | group_by(.k)
  | map(select(length>1))
  | if length==0 then "No exact duplicates." else .[] end
' data/in/BPA/CalculationType.json

# Show broad "ALL" rules that can overlap specifics
jq -r '
  .CalculationType
  | map({idx: (._idx // 0), app:.applicationType, svc:.serviceType, risk:.riskType, fee:.feeType, amount:.amount})
' data/in/BPA/CalculationType.json

Length of output: 3160


Remove exact duplicate entry for BUILDING_PLAN_SCRUTINY|ALL|LOW|SanctionFee in data/in/BPA/CalculationType.json – two identical objects with amount 500 must be de-duplicated. Also verify generic “ALL” rules (applicationType, serviceType or riskType = ALL) don’t unintentionally override more specific entries.

🤖 Prompt for AI Agents
In data/in/BPA/CalculationType.json around lines 1 to 140 there is an exact
duplicate object for applicationType "BUILDING_PLAN_SCRUTINY", serviceType
"ALL", riskType "LOW", feeType "SanctionFee" with amount 500; remove the
duplicate so only one identical entry remains, then scan the file for other
generic "ALL" rules and ensure they do not unintentionally override more
specific entries by ordering specific entries before generic ones or adding
specificity to the generic rules as needed.

Comment on lines +5 to +39
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "ALL",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":100
},
{
"applicationType": "ALL",
"serviceType": "ALL",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":110
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "ALL",
"feeType":"ApplicationFee",
"amount":120
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"ApplicationFee",
"amount":200
},
{
"applicationType": "BUILDING_PLAN_SCRUTINY",
"serviceType": "NEW_CONSTRUCTION",
"riskType": "LOW",
"feeType":"Low_ApplicationFee",
"amount":100
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Overlapping rules may lead to ambiguous fee resolution.

You have multiple ApplicationFee entries that overlap on (applicationType/serviceType/riskType), e.g., ALL/ALL/LOW (amount 110) vs BPS/ALL/LOW (100) vs BPS/NEW_CONSTRUCTION/ALL (120) vs BPS/NEW_CONSTRUCTION/LOW (200). If precedence isn’t explicitly defined, results can vary.

Action:

  • Document and enforce precedence (e.g., most-specific wins).
  • Remove or consolidate broad “ALL” rules where a more specific rule exists.
    Would you like me to propose a normalized table?

Comment on lines +198 to +208
"name": "Religious Instituition",
"code": "RELIGIOUSINSTITUTION",
"usageCategoryMinor": "INSTITUTIONAL",
"active": true,
"fromFY": "2015-16",
"exemption": {
"rate": 100,
"maxAmount": 0,
"flatAmount": 0
}
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix typo: “Religious Instituition” → “Religious Institution”.

User-facing text; correct spelling.

-      "name": "Religious Instituition",
+      "name": "Religious Institution",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"name": "Religious Instituition",
"code": "RELIGIOUSINSTITUTION",
"usageCategoryMinor": "INSTITUTIONAL",
"active": true,
"fromFY": "2015-16",
"exemption": {
"rate": 100,
"maxAmount": 0,
"flatAmount": 0
}
},
"name": "Religious Institution",
"code": "RELIGIOUSINSTITUTION",
"usageCategoryMinor": "INSTITUTIONAL",
"active": true,
"fromFY": "2015-16",
"exemption": {
"rate": 100,
"maxAmount": 0,
"flatAmount": 0
}
},
🤖 Prompt for AI Agents
In data/in/PropertyTax/UsageCategorySubMinor.json around lines 198 to 208 the
"name" field contains a typo "Religious Instituition"; update the value to
"Religious Institution" (preserve surrounding fields and formatting) so the
user-facing text is correctly spelled.

Comment on lines +1 to +31
{
"tenantId": "in",
"moduleName": "TradeLicense",
"Documents": [
{
"code": "OWNER.OWNERIDPROOF",
"documentType": "OWNER",
"required": true,
"active": true,
"dropdownData": [
{
"code": "OWNER.OWNERIDPROOF",
"active": false
},
{
"code": "OWNER.OWNERSHIPPROOF",
"active": false
},
{
"code": "OWNER.OWNERPHOTO",
"active": false
},
{
"code": "OWNER.OLDLICENCENO",
"active": false
}
],
"description": "OWNER.OWNERIDPROOF.OWNERIDPROOF_DESCRIPTION"
}
]
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Quick JSON lint and referential check.

Run a sanity check after applying fixes.


🏁 Script executed:

#!/bin/bash
set -e
# Lint the changed JSONs
jq empty data/in/PropertyTax/ReasonForTransfer.json
jq empty data/in/dss-dashboard/dashboard-config.json
jq empty data/in/PropertyTax/OwnerShipCategory.json
jq empty data/in/TradeLicense/documentObj.json
jq empty data/in/TradeLicense/Documents.json

# Validate color hexes
jq -r '."dashboard-config"[0].CHART_COLOR_CODE[]' data/in/dss-dashboard/dashboard-config.json \
 | awk '!match($0,/^#[0-9a-fA-F]{6}$/){print "Invalid color:",$0}' || true

Length of output: 475


Fix invalid hex codes in dashboard-config.json
Two CHART_COLOR_CODE entries in data/in/dss-dashboard/dashboard-config.json are not valid 6-digit hex codes (#1sacq4, #1gvcf4). Replace them with valid hex values.

🤖 Prompt for AI Agents
In data/in/TradeLicense/Documents.json lines 1-31: the review points to invalid
6-digit hex color codes in data/in/dss-dashboard/dashboard-config.json — locate
data/in/dss-dashboard/dashboard-config.json and replace the two CHART_COLOR_CODE
entries that are currently invalid ("#1sacq4" and "#1gvcf4") with valid 6-digit
hexadecimal color values (use only characters 0-9 and A-F, e.g. replace them
with values like "#1A5C94" and "#1B7DF4" or other valid hex codes), then
validate the file JSON and commit the change.

Comment on lines +10 to +29
"dropdownData": [
{
"code": "OWNER.OWNERIDPROOF",
"active": false
},
{
"code": "OWNER.OWNERSHIPPROOF",
"active": false
},
{
"code": "OWNER.OWNERPHOTO",
"active": false
},
{
"code": "OWNER.OLDLICENCENO",
"active": false
}
],
"description": "OWNER.OWNERIDPROOF.OWNERIDPROOF_DESCRIPTION"
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

All dropdown options are inactive; UI will show none.

Set dropdownData[].active to true for selectable options.

       "dropdownData": [
         {
           "code": "OWNER.OWNERIDPROOF",
-          "active": false
+          "active": true
         },
         {
           "code": "OWNER.OWNERSHIPPROOF",
-          "active": false
+          "active": true
         },
         {
           "code": "OWNER.OWNERPHOTO",
-          "active": false
+          "active": true
         },
         {
           "code": "OWNER.OLDLICENCENO",
-          "active": false
+          "active": true
         }
       ],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"dropdownData": [
{
"code": "OWNER.OWNERIDPROOF",
"active": false
},
{
"code": "OWNER.OWNERSHIPPROOF",
"active": false
},
{
"code": "OWNER.OWNERPHOTO",
"active": false
},
{
"code": "OWNER.OLDLICENCENO",
"active": false
}
],
"description": "OWNER.OWNERIDPROOF.OWNERIDPROOF_DESCRIPTION"
}
"dropdownData": [
{
"code": "OWNER.OWNERIDPROOF",
"active": true
},
{
"code": "OWNER.OWNERSHIPPROOF",
"active": true
},
{
"code": "OWNER.OWNERPHOTO",
"active": true
},
{
"code": "OWNER.OLDLICENCENO",
"active": true
}
],
"description": "OWNER.OWNERIDPROOF.OWNERIDPROOF_DESCRIPTION"
🤖 Prompt for AI Agents
In data/in/TradeLicense/Documents.json around lines 10 to 29, all entries in the
dropdownData array have "active": false which makes the UI render no selectable
options; update the appropriate dropdownData entries to "active": true for any
options that should be selectable (e.g., owner ID proof, ownership proof, owner
photo, old licence no) so the UI displays them as available choices.

Comment on lines +4 to +35
"BillingType": [
{
"name": "Meter Based",
"code": "METER",
"description": "charges will be calculated based on meter readings",
"active": true
},
{
"name": "Fixed",
"code": "FIXED",
"description": "charges will be calculated based on Fixed values",
"active": true
},
{
"name": "Plot Based",
"code": "PLOT",
"description": "charges will be calculated based on plot size of the property",
"active": true
},
{
"name": "Tab Based",
"code": "TAP",
"description": "charges will be calculated based on tabs",
"active": true
},
{
"name": "Custom",
"code": "CUSTOM",
"description": "charges will be calculated based on the custom config given",
"active": true
}
]
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Confirm code alignment with slabs/configs (TAP/TAB).

Validate that BillingSlab and any calculation configs reference exactly these codes: METER, FIXED, PLOT, TAP, CUSTOM.


🏁 Script executed:

#!/bin/bash
rg -nP '\b(TAB|TABBASED|TAP|METER|FIXED|PLOT|CUSTOM)\b' data/in/WaterCharges -C2

Length of output: 4726


Align BillingSlab entries to defined BillingType codes

  • In data/in/WaterCharges/BillingSlab.json, replace "type": "TABBASED" (line 84) and "type": "TAB" (line 97) with "billingType": "TAP" to match the "TAP" code in BillingType.json.
  • Normalize the slab property name—use billingType (not type) for all entries so every slab references the same field.
🤖 Prompt for AI Agents
In data/in/WaterCharges/BillingSlab.json around lines 84 to 97, some slab
entries use the wrong field name and values: they have "type": "TABBASED" and
"type": "TAB" which do not match BillingType.json (where the code is "TAP") and
other slabs use "billingType". Update those two entries to use the normalized
property name billingType and set its value to "TAP" (i.e., replace "type":
"TABBASED" and "type": "TAB" with "billingType": "TAP") so all slabs
consistently reference the BillingType codes.

Comment on lines +24 to +28
"name": "Tab Based",
"code": "TAP",
"description": "charges will be calculated based on tabs",
"active": true
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

“Tab Based” likely meant “Tap Based.” Align naming.

Water domain uses “Tap.” Keep code “TAP” but fix label/description.

-      "name": "Tab Based",
+      "name": "Tap Based",
       "code": "TAP",
-      "description": "charges will be calculated based on tabs",
+      "description": "charges will be calculated based on taps",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"name": "Tab Based",
"code": "TAP",
"description": "charges will be calculated based on tabs",
"active": true
},
"name": "Tap Based",
"code": "TAP",
"description": "charges will be calculated based on taps",
"active": true
🤖 Prompt for AI Agents
In data/in/WaterCharges/BillingType.json around lines 24 to 28 the display name
and description use "Tab Based" and "tabs" but the domain standard is "Tap"
(code remains "TAP"); update the "name" to "Tap Based" and the "description" to
reference "taps" (e.g., "charges will be calculated based on taps") so label and
description align with the existing code and domain terminology.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +355 to +396
"code": "OWNER.OCCUPANCYPROOF",
"documentType": "OWNER",
"required": true,
"active": true,
"hasDropdown": true,
"additionalDetails": {
"filterCondition": {
"filterValue": [
"SELFOCCUPIED",
"UNOCCUPIED"
],
"jsonPath": "Properties[0].propertyDetails[0].units",
"onArray": true,
"arrayAttribute": "occupancyType"
},
"enabledActions": {
"assess": {
"disableUpload": true,
"disableDropdown": true
},
"reassess": {
"disableUpload": true,
"disableDropdown": true
},
"update": {
"disableUpload": false,
"disableDropdown": false
},
"create": {
"disableUpload": false,
"disableDropdown": false
}
}
},
"dropdownData": [
{
"code": "OWNER.OCCUPANCYPROOF.RENTAGREEMENT",
"active": true
}
],
"description": "OWNER.OCCUPANCYPROOF.OCCUPANCYPROOF_DESCRIPTION"
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

OCCUPANCYPROOF gating looks inverted; requires Rent Agreement for self/unooccupied.

Current filterValue is ["SELFOCCUPIED","UNOCCUPIED"] but dropdown contains RENTAGREEMENT, which applies to RENTED. Also, required: true would then block self/unooccupied cases.

Apply this:

-      "required": true,
+      "required": true,
...
-        "filterValue": [
-          "SELFOCCUPIED",
-          "UNOCCUPIED"
-        ],
+        "filterValue": ["RENTED"],

Assumption: form engine enforces "required" only when the document is shown by filter. If not, set required to false and enforce at UI validation when RENTED.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"code": "OWNER.OCCUPANCYPROOF",
"documentType": "OWNER",
"required": true,
"active": true,
"hasDropdown": true,
"additionalDetails": {
"filterCondition": {
"filterValue": [
"SELFOCCUPIED",
"UNOCCUPIED"
],
"jsonPath": "Properties[0].propertyDetails[0].units",
"onArray": true,
"arrayAttribute": "occupancyType"
},
"enabledActions": {
"assess": {
"disableUpload": true,
"disableDropdown": true
},
"reassess": {
"disableUpload": true,
"disableDropdown": true
},
"update": {
"disableUpload": false,
"disableDropdown": false
},
"create": {
"disableUpload": false,
"disableDropdown": false
}
}
},
"dropdownData": [
{
"code": "OWNER.OCCUPANCYPROOF.RENTAGREEMENT",
"active": true
}
],
"description": "OWNER.OCCUPANCYPROOF.OCCUPANCYPROOF_DESCRIPTION"
}
"code": "OWNER.OCCUPANCYPROOF",
"documentType": "OWNER",
"required": true,
"active": true,
"hasDropdown": true,
"additionalDetails": {
"filterCondition": {
- "filterValue": [
- "SELFOCCUPIED",
- "UNOCCUPIED"
"filterValue": ["RENTED"],
"jsonPath": "Properties[0].propertyDetails[0].units",
"onArray": true,
"arrayAttribute": "occupancyType"
},
"enabledActions": {
"assess": {
"disableUpload": true,
"disableDropdown": true
},
"reassess": {
"disableUpload": true,
"disableDropdown": true
},
"update": {
"disableUpload": false,
"disableDropdown": false
},
"create": {
"disableUpload": false,
"disableDropdown": false
}
}
},
"dropdownData": [
{
"code": "OWNER.OCCUPANCYPROOF.RENTAGREEMENT",
"active": true
}
],
"description": "OWNER.OCCUPANCYPROOF.OCCUPANCYPROOF_DESCRIPTION"
🤖 Prompt for AI Agents
In data/in/PropertyTax/Documents.json around lines 355–396, the OCCUPANCYPROOF
gating is inverted: the filterValue lists ["SELFOCCUPIED","UNOCCUPIED"] while
the dropdown is RENTAGREEMENT which should apply to RENTED, causing
required:true to block non-rented cases; fix by changing the
filterCondition.filterValue to ["RENTED"] so the document appears (and remains
required) only for rented units, and if the form engine does not support
conditional required, set required to false here and move the required
validation into the UI form logic to enforce presence only when occupancyType
=== "RENTED".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.