-
Notifications
You must be signed in to change notification settings - Fork 217
Shreya egov patch 24 #4421
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: DEV
Are you sure you want to change the base?
Shreya egov patch 24 #4421
Conversation
Update roleactions for bulPdfGeneration
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
Update actions-test.json
Update actions-test.json: Made all unique entries url=url
added mapconfig for iccd_mb country code
Added FRENCH language option with value fr_MZ
Updated masters to support v1 mdms call from Console for App Configurations- SMC and Bednet
WalkthroughAdds 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
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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Poem
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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 alldocTypes: nullentries with[]
docTypes is defined as an array in other MDMS files—usingnullhere breaks null-unsafe consumers. Update every"docTypes": nullto"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 fieldsPAN 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 itIf 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 blockLinting 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 defaultsDocument 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 overlapsUse 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 servicesPT/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 guardrailsConsider 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-20Rebate 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 nulluomvalues 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
tradelicenseiframe routes use/employee-tradelicence/.../tradelicence/...(spelling “licence”); confirm this legacy path prefix is correct for the IN tenant (27 occurrences indata/).- 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–99data/in/WaterCharges/BillingSlab.json (1)
54-56: Polish customer-facing descriptionsFix 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 identifiersAll 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 labelsIf 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 typingMix 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.
📒 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)
| "businessService": "FIRENOC", | ||
| "code": "FIRENOC", | ||
| "collectionModesNotAllowed": [ | ||
| "DD","OFFLINE_NEFT","OFFLINE_RTGS","POSTAL_ORDER" | ||
| ], | ||
| "partPaymentAllowed": false, | ||
| "isAdvanceAllowed": false, | ||
| "isVoucherCreationEnabled": true, | ||
| "isActive": true, | ||
| "type": "Adhoc" | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "fromDate": 1585704194000, | ||
| "toDate": 1617235154000, | ||
| "periodCycle": "ANNUAL", | ||
| "service": "TX.No_Dues_Certificate", | ||
| "code": "TXNDCAN2017", | ||
| "financialYear": "2020-21" | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
| "fromDate": 1522540801000, | ||
| "toDate": 1838159999000, | ||
| "periodCycle": "FORTENYEARS", | ||
| "service": "DISP_FIXED_ASSET.LAND", | ||
| "code": "DFAL10YRS2018", | ||
| "financialYear": "2018-28" | ||
| }, |
There was a problem hiding this comment.
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 -uLength 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.
| { | ||
| "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" | ||
| } | ||
| ] | ||
| } | ||
| ] | ||
| }, |
There was a problem hiding this comment.
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.
| "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" | ||
| } | ||
| ] | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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" | ||
| } | ||
| ] | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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).
| "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" | ||
| } | ||
| ] | ||
| }, |
There was a problem hiding this comment.
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.
| "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.
| "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" | ||
| } | ||
| ] | ||
| }, |
There was a problem hiding this comment.
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.
| "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.
| "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" | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
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.
| "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.
| "code": "NEWTL", | ||
| "isStateLevel": true | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
There was a problem hiding this 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...
| "code": "testonecode112234324", | ||
| "name": "test3test2", | ||
| "description": "test123description" | ||
| }, | ||
| { | ||
| "code": "testtwocode11234354", | ||
| "name": "test4test1", | ||
| "description": "testcodedescription" | ||
| }, |
There was a problem hiding this comment.
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.
| "code": "testonecode112234324", | ||
| "name": "test3test2", | ||
| "description": "test123description" | ||
| }, | ||
| { | ||
| "code": "testtwocode11234354", | ||
| "name": "test4test1", | ||
| "description": "testcodedescription" | ||
| }, | ||
| { | ||
| "code": "testonecode112234324", | ||
| "name": "test3test21", | ||
| "description": "test123description" | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "code": "APPL.LOCALBODY.MUNCIPAL_APPROVAL", | ||
| "active": true | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
| "code": "GOVTNOTIFICATION", | ||
| "active": true, | ||
| "allowedFormat" : ["image/*", ".png", ".jpeg"], | ||
| "maxFileSize": 3000 | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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 | ||
| }, |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "code": "AADHAR", | ||
| "description": "Aadhar id", | ||
| "isActive": true |
There was a problem hiding this comment.
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=jsonLength 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.
| "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 |
There was a problem hiding this comment.
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": trueAlso 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.
| "sizeInInch": 4, | ||
| "code": "3Inch", | ||
| "description": "four inch pipe", | ||
| "isActive": true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
There was a problem hiding this 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...
| { | ||
| "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 | ||
| } | ||
| ] | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
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 -uLength 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).
| "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 | ||
| } |
There was a problem hiding this comment.
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 -C2Length 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.
| }, { | ||
| "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 | ||
| }, |
There was a problem hiding this comment.
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.
| { | ||
| "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" | ||
| } | ||
| ] | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
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.jsonLength 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.
| { | ||
| "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 | ||
| }, |
There was a problem hiding this comment.
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?
| "name": "Religious Instituition", | ||
| "code": "RELIGIOUSINSTITUTION", | ||
| "usageCategoryMinor": "INSTITUTIONAL", | ||
| "active": true, | ||
| "fromFY": "2015-16", | ||
| "exemption": { | ||
| "rate": 100, | ||
| "maxAmount": 0, | ||
| "flatAmount": 0 | ||
| } | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
| { | ||
| "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" | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
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}' || trueLength 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.
| "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" | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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.
| "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 | ||
| } | ||
| ] |
There was a problem hiding this comment.
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 -C2Length 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(nottype) 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.
| "name": "Tab Based", | ||
| "code": "TAP", | ||
| "description": "charges will be calculated based on tabs", | ||
| "active": true | ||
| }, |
There was a problem hiding this comment.
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.
| "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.
There was a problem hiding this 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...
| "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" | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| "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".
Summary by CodeRabbit