Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Product Documents & Resources
A step-by-step guide to using the mGramSeva App
mGramSeva is a standalone app-based module that enables the GPWSC committee to create new consumers, generates demand, revenue collection and recording the expenditure transaction etc.
mGramSeva enables GPWSCs to maintain financial records of GPWSCs following established procedures and practices.
This section of the user manual guides you through the user login process.
Sarpanch, Treasurer, Secretary and Revenue Collector as the first time user can log in to the mGramSeva app following the steps given in the Login to App section.
Click on the preferred language button. The app functions and screens will be available in the selected language.
Enter the registered mobile number and the Password received via SMS.
The user receives an OTP on the registered mobile number. Enter the OTP. Enter a New Password and retype the password to confirm in the Confirm New Password field. Follow the Password Hint on the screen while setting up the password.
Click on the Confirm button. The user password is now updated. Click on the Continue to Login button to log in with the new password.
Click on the relevant village tenant assigned to the user from the screen.
This redirects the user to the relevant mGramSeva functionalities available for the selected tenant.
Users can edit their profiles and change passwords as and when required. Click on the User icon on the top section of the screen. Click on Edit Profile to make profile changes.
Update Name, Gender, or Email ID as required. Make note that the registered Mobile Number cannot be changed. Save the changes.
Click on the Change Password button to change the password.
Click on the Create Consumer icon on the screen to create a new consumer.
This opens the Consumer Details screen. Enter the requested consumer details.
Name
Gender
Father Name
Phone Number
Old Connection ID
Door Number
Street Name/Number
Ward Name/Number
Property Type
Service Type
Previous Billing cycle
Arrears
Previous meter reading (if it is a metered connection)
Users can also edit the consumer details if any changes need to be made in the consumer record. Click on the Edit Consumer Details icon on the home screen to make necessary changes.
Check the option Mark this connection as Inactive to indicate that the given consumer connection is inactive.
Click on the Submit button to save these changes.
Search Consumer and Generate Payment: Metered and Non-Metered Connection.
Click on the Generate Demand icon on the home page to search for a consumer record once the consumer is created. The application enables the users to search a consumer record by Consumer’s Phone Number or Name of the Consumer or Old Connection ID or New Connection ID.
Click on the Search button to view the consumer records. Click on the View Consumer Details button to perform the necessary action.
Users can see the relevant information of a particular consumer. Click on Generate a New Bill button to create a fresh bill. Enter the Previous Meter Reading, New Meter Reading and Meter Reading Date. Click on Generate Bill. A fresh bill is generated for the consumer.
Once the bill is generated, the user can collect payment for the particular bill. Click on the Collect Payment button to collect the payment via cash or online payment.
Click on the phone icon in green to share the bill with the consumer via SMS.
Select Full Payment or Partial Payment to indicate whether the consumer is paying the bill amount in full or making a partial payment. Enter the Amount that is being paid by the consumer in case it is a Partial Payment.
Select the applicable Payment Method as either Cash or Online. Users can also provide the consumers with a scannable QR code to make the payment online.
Click on the Download button to download the payment receipt.
Click on the Share icon to send the receipt to the consumer via SMS.
Click on the Collect Payment icon on the home page to search for a consumer record by Consumer’s Phone Number or Name of the Consumer or Old Connection ID or New Connection ID.
Click on the Search button to view the consumer records. Click on the View Consumer Details button to perform the necessary action.
Click on the Collect Payment button to collect the payment via cash or online payment. Click on the Share Bill button to send the bill to the consumer on the registered mobile number via SMS.
Select Full Payment or Partial Payment to indicate whether the consumer is paying the bill amount in full or making a partial payment. Enter the Amount that is being paid by the consumer in case it is a Partial Payment.
Select the applicable Payment Method as either Cash or Online. Users can also provide the consumers with a scannable QR code to make the payment online.
Click on the Download button to download the payment receipt. Click on the Share icon to send the receipt to the consumer via SMS.
Once the payment is completed an SMS is sent to the consumer to take the survey on the water service.
Users can enter the expenses details as and when incurred. Click on the Add Expense icon on the home page.
Enter expense information like Type of Expense from the drop-down list available. Type of expenses can be Electricity, O&M, Salary & MISC etc.
Enter Vendor Name, Amount, Bill Date, Party Bill Date. Select Yes or No to indicate if the bill is paid or not. Click on Choose File button to attach a supporting document.
Enter the Payment Date if the bill is already paid before recording it into the system. Click on Submit to register the expense details.
The expenditure entry is saved successfully.
Click on the Modify Expenses icon on the home page to modify expense details. Enter the Vendor Name, or Type of Expense or Bill ID details to search for the specific expense record which needs to be modified.
The system shows the expense records filtered by the search parameter. Click on the Update Expenditure button to modify a particular bill.
Make the necessary modifications to the bill. Update the expense type, or vendor name, amount, or bill date details as required.
Click on Submit to save the changes. Check the Mark this Bill as Cancelled box to indicate that the bill is cancelled.
The Dashboard provides the stakeholders at the department level with a consolidated view of the information on Revenue and Expenditure trends month wise.
The Sarpanch, Treasurer and Secretary at the GPWSC level can view the collection details like Demand, Pending Collection, Actual Collection, Collection from Residential, Collection from Commercial and Collection from Others. The consumer wise collection details view is also available.
The Sarpanch, Treasurer and Secretary at the GPWSC level can view the expenditure details like total expenditure, amount unpaid, the amount paid, total bills, pending bills, bills paid, Electricity bills, O&M and salary. The individual expense wise details view is also available.
Users are redirected to this screen after successful login.
This screen consists of multiple sections and user interactions.
If the user is mapped to multiple tenants then a dropdown appears. The user can select the desired tenant to proceed further.
Once the user selects the tenant, the features cards are displayed on the screen based on the roles mapped for the selected tenant.
YES → WalkThrough/User Guidance Enabled
NO → Home Screen
If the user logs in for the first time a system walkthrough begins automatically.
Else, users can view walkthroughs any time by clicking on the help icon.
Create a global key for each card.
Create placeholder cards, pointer and description widgets.
On click, the position of the card is determined and the placeholder card appears on the overlay exactly.
Primary Files
Next → Changes the active index of the global key and repeats the same process outlined in the implementation logic
Home Screen - consists of multiple feature cards
Cards are displayed based on Role Access
The home screen also consists of notifications. The notifications are customized for each user ID and user role.
Individual API calls are made with the user ID and with the user role that merges both and notifications are displayed accordingly.
mGramSeva is a Hybrid Application(web + App(Android + IOS)) built utilising Open Source Framework Flutter.
CrossPlatform Application
Faster
Single Codebase - Easy To Maintain
Large Community Support
Open Source
Link to Learn Flutter - Flutter - Beautiful native apps in record time
Flutter Version Utilised for Development
Flutter 2.2.3
Languages - > Dart 2.13.4
UI Mockups on Figma
→ {base url}/mgramseva/selectLanguage/login
Users are redirected to this screen once they select the preferred language in the previous screen
Users enter the registered Phone Number and Password.
Click on Continue.
First-time login users navigate to Reset Password Page.
Log in with the default password
1 → Language Selection Screen. + Login Screen.
Pop → Language Selection Screen.
Widgets Utilised from Library
Users are redirected to this screen if they click on the Forgot Password link on the home screen.
This feature allows users to request OTP by entering a valid (the registered) mobile number.
Follow the steps below to set a new password -
Click on the Forgot Password link visible on the login screen
Enter a valid mobile number
Other steps are explained in the Reset Password Section.
2 → Language Selection Screen. + Login Screen + ForgotPassword
Pop → Login Screen Screen.
Widgets Utilised from Library
→ {base url}/mgramseva/selectLanguage/login/forgotPassword/resetPassword.
Enter the OTP sent on the user’s 10 digit Mobile Number.
Set the new password for logging into the application.
Click on Change Password to apply new password credentials for the user.
This feature helps to provide the users with a clear indication of what the password should contain. Acceptable passwords must contain -
Minimum 6 digits
At least one special character ( !#$%^&...)
At least one letter
At least one number
1 → Language Selection Screen. + Login Screen + Forgot Password + Reset Password.
Pop → Forgot Password Screen.
Widgets Utilised from Library
→ {base url}/mgramseva/selectLanguage
User will be Landed/ Navigated to Language Selection Screen
APP → Initial Screen
Users can switch to different languages which the application supports
LocalStorage
0 → Langage Selection Screen
Pop → Application closes
Widgets Utilised from Library
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
skip, End → closes the overlay
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
YES →
NO →
Primary Files
All content on this page by is licensed under a .
Primary Files
Users are redirected to this screen if they click on the Continue button on Forgot Password screen.
Primary Files
All content on this page by is licensed under a .
Click on to navigate to the next screen
Primary Files
Secondary Files
All content on this page by is licensed under a .
SL | Fileds | Validations |
1 | Phone Number* |
|
2 | Password* |
|
SL | End Point | Request Method | Request Info |
1 |
|
| username: {} password:{} scope: read grant_type: password tenantId: {} userType: EMPLOYEE |
SL | Fields | Validation |
1 | Phone Number* |
|
SL | End Point | Request Method | Request Info |
1 |
|
| "otp": { "mobileNumber": {}, "tenantId": {}, "type": "passwordreset", "userType": "Employee" } |
SL | Fileds | Validations |
1 | Enter the OTP sent * |
|
2 | Enter a New Password* |
|
3 | Confirm New Password | Match with New Password |
SL | End Point | Request Method | Request Info |
1 |
|
| "otpReference": {}, "userName": {}, "newPassword": {}, "tenantId": {}, "type": “Employee” |
SL No | Key | Stored Data |
1 |
| State Information for From MDMS Service |
2. | ex : | Localisation codes |
API EndPoint | Input Params (Modules) | Description |
|
| To Fetch the Details State Info
|
| ALL the necessary Modules, with locale key and tenant Id | To Load the Localised data |
SL No | Widgets Library |
1 | Button Bar |
SL No | Widgets | File Path | Description |
1 |
| Text Field |
2 |
| Button |
SL No | Widgets | File Path | Description |
1 |
| Text Field |
2 |
| Button |
SL No | Widgets | File Path | Description |
1 |
| Text Field |
2 |
| Button |
3 |
| Password Hint Card |
→ {base url}/mgramseva/home/editProfile
User can change their profile name, gender and email on this screen
Click on the Save button triggers a Details Saved Successfully message on the screen and saves the changes to the profile.
1 → Home Screen. + Edit Profile Screen
Pop → Home Screen
Widgets Utilised from Library
Make sure the below-mentioned Permissions are Allowed or Accepted:
Internet Access
FileStore Read and Write
Bluetooth connection
Request Packages
Query all packages
punjab-mgramseva/pubspec.yaml at develop · egovernments/punjab-mgramseva
Download the flutter sdk 2.8.1 from Flutter SDK releases
Install Android Studio for setting the IDE.
Open Android Studio, Open plugin preferences (File > Settings > Plugins) and select Marketplace, select the Flutter plugin and click Install as shown in the below image and also click Yes when prompted to install the Dart plugin.
Set the Flutter SDK path in android studio by navigating to (File > Settings > Plugins > Language & Frameworks >>flutter) flutter as shown in the image below.
Add the flutter path to the System path variable for running the flutter commands as shown in the below image.
Open a new terminal and run the flutter doctor command, this will download the respective Dart sdk version, run flutter doctor --android-licenses to accept the android licenses.
The steps below will guide us to run the project in both Web and Mobile 1. Clone the project from Git repo. 2. Open the project in android studio by selecting (File > open), select the flutter project (punjab-mgramseva/frontend/mgramseva) from the cloned path as shown in the image below.
Select the AVD manager from the right side top corner as shown in the image. Now, select any device by tapping on the play button. Thus, the Android studio launches the emulator and the device is auto-selected. There are two modes for running the application - play and debug. Tap on any one of the modes to launch the mgramseva application in the emulator as shown in the image.
Select the chrome option from device selection and tap on the play button. This launches the application on a chrome window.
Note: To resolve cors error follow the steps provided in this link.
Navigate to mgramseva Folder → cd punjab-mgramseva/frontend/mgramseva
.upgrading the version in the pubspec.yml ( version: 1.0.2+3) 1.0.2 => version name (which displayed in playstore)
+3 => version code (increment by +1 every time)
Comment the below line File → link export 'dart:js' show allowInterop, allowInteropCaptureThis;
Executing flutter clean command → flutter clean
Execute the flutter pub get command. → flutter pub get
1. Enable the USB debugging option on your Mobile Phone. (Reference Link )
2. Connect your Phone to the system and enable File transfer.
3. Select the AVD manager(your Phone) from the right side top corner in Android Studio
4. Go to the frontend/mgramseva/utils/execute_integration.sh file and run it.
5. Integration test will start on your device.
Demo Video
A quick walkthrough of mGramseva
Detailed version - https://docs.google.com/presentation/d/1nQM9Anwk6gwcuMmZSm5q5gSRsLcjKWY0hmxV5_er450/edit#slide=id.gf3054c88ec_0_154
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
→ {base url}/mgramseva/home/changepassword.
Enter the Current Password
Enter and Confirm a New Password to set the login credentials for next time login
Click the Change Password Button. The user login password is set to the new password.
This feature helps match the user password to the requirements and checks if the password contains
Minimum 6 digits
At least one special character ( !#$%^&...)
At least one letter
Atleast one number
1 → Home Screen. + Change Password Screen
Pop → Home Screen
Widgets Utilised from Library
Link
→ {base url}/mgramseva/home/billmanualgenerate.
Users are redirected to this screen if they click on the Generate Demand card on the home screen.
This will be used in cases when the scheduler is not run (due to technical errors) and GP wants to run manually.
The service category displays water charges by default
The service type displays non-metered connection by default
Set the billing year from the drop-down which contains the list of financial years.
Set the Billing cycle which contains billing cycles for the selected financial year.
On Click of Generate Demand Button, Bulk Demand is generated and the user is navigated to the success screen.
The Billing Cycle drop-down shows a list of months starting from the selected financial year from Date month till current date month.
On selection of the desired month, the billing period value is set from the selected month’s first date to the selected month’s last date. (Eg. Selected Billing Cycle: June 2021, so Billing period: 01/07/2021 - 30/07/2021)
1 → Home Screen. + Generate Bulk Demand Screen
Pop → Home Screen
Widgets Utilised from Library
→ {base url}/mgramseva/home/householddetails/billgenerate.
Users are redirected to the Generate New Bill screen if they click the Generate New Bill option in the household detail screen.
The service category defaults to water charges
The service type defaults to metered connection
The property type defaults to the selected property type of the consumer
Previous Meter Reading: Takes input from the user only for first time Bill generation and if the Previous meter reading is null, else it's defaulted if the meter reading is present.
New Meter Reading: Takes input from the user
Meter Reading Date: Defaulted to today’s date, the User can change it to the desired date.
Users have the option of downloading the bill or sharing it via Whatsapp
On click of the Collect Payment button, the user is navigated to the Payment Screen
1 → Home Screen + Household Details Screen + Generate Bill Metered
Pop → Household Details Screen
Widgets Utilised from Library
→ {base url}/mgramseva/selectLanguage/login/updatepassword
Enter the OTP sent on the user’s 10 digit Mobile Number.
Set the new password for logging into the application.
Click on Change Password to apply new password credentials for the user.
Users can see the allocated Grama Panchayat name and code in the table.
This feature helps to Match with the user’s password and check if the Password contains
Minimum 6 digits
At least one special character ( !#$%^&...)
At least one letter
At least one number
Fetching the tenants from MDMS, based on the user roles in the user request filtering the tenants by comparing tenant Id.
1 → Language Selection Screen. + Login Screen + Update Password + Update password success
Pop → Login
Widgets Utilised from Library
→ {base url}/mgramseva/home/householdSearch?Mode=collect
→ {base url}/mgramseva/home/consumersearchupdate?Mode=update
→ {base url}/mgramseva/home/householdReceiptsSearch?Mode=receipts
Users can search the consumer/connection with their Mobile Number / Name / Old Connection ID / New Connection ID ( Search with any one of these
)
Click on Search to get the household details of the Consumer/Connection
1 → Home Screen. + Search Connection Screen
Pop → Home Screen
Widgets Utilised from Library
Enables employees to create new Consumers or Connections - The process of onboarding the end-users.
→ {base url}/mgramseva/home/consumercreate
The Create Consumer card is available on the home screen as per the defined user role.
Click on the Consumer Create card navigates the user to the consumer creation screen.
Users enter the required details for the creation of Consumer.
If a user logs in for the first time then a walkthrough is populated following the same logic as in the home screen.
Note: All fields are validated on Submit except the Phone number which gets validated on change.
Consumer creation involves 2 sequential Process
Property Creation
Water connection Creation
After creating a property, the Property ID is linked to the WaterConnection Request JSON.
Water connection creation is of two types:
A metered connection that requires Meter ID and meter installation Date/ Last Meter Reading Date and an optional field to capture meter reading.
Non-Metered Connection which requires the last billing cycle as mandatory params captured in the field as shown below.
Users can switch between connection types by selecting a desired value from the Service Type DropDown.
Components utilised from Widgets Library
→ {base url}/mgramseva/home/searchExpense/result/updateExpense
Enables employees to modify/edit the expenses based on the status of the payment.
Update Expenses card is visible on the home screen for defined user roles that have EXPENSE PROCESSING permission.
Clicking on the Update Expenditure card in the expense search results screen navigates the user to the Edit Expense Bills screen.
Users can edit the previously populated expense details for the vendors.
Clicking on the Submit button navigates the users to the Modified Expenditure Success screen.
Use Case1: When the status is “Unpaid”
Allows modification of all the details except the Bill Id. Users can Mark the Bill as “Cancelled” by checking on the option.
Use Case2: When the status is “Paid”
Cannot modify any details. But the users can Mark the Bill as “Cancelled” by checking the option.
1 → Home Screen. + Search Expense Screen + Expense Results Screen + Edit Expense Bills Screen
Pop → Expense Results Screen
Widgets Utilised from Library
Enables employees to update consumer details.
Users are redirected to this screen/page when they click on the Update Consumer Details card
→ {base url}/mgramseva/home/consumersearchupdate?Mode=update
→ {base url}/mgramseva/home/consumersearchresult
It redirects to Search Connection Page in update
mode where users enter specific consumer details to search for consumers. The search result screen has the Edit Consumer button. Clicking on this button navigates the users to the Update Consumer screen.
Note: All fields are validated on Submit apart from the phone number which gets validated on change.
Components utilised from Widgets Library
→ {base url}/mgramseva/home/addExpense
Enables employees to add expenses - the process of onboarding the end-users.
Add Expenses card is available on the home screen for defined user roles having the EXPENSE PROCESSING permission.
Clicking the Add Expense Record tile/card on the home screen navigates the user to Add Expenses screen.
The user enters the required details to add the expenses for the vendors.
If a user logs in for the first time then a walkthrough is populated following the same logic as in the home screen.
Clicking on the Submit button navigates the user to the Expenditure Added Successful acknowledgement screen.
This feature allows the user to take a picture or choose a single file. The Image Picker plugin is used to implement this.
Whenever this application is used on mobile, it prompts the user with two options - Camera and File Picker. If the application is opened on desktop or laptop browsers, the camera option is not available. The user has to select an image from the folder.
The maximum supported file size is 5 MB.
For validating the form we use the Form widget. Once the user selects a bill date the Bill Pay option is enabled. Else, the auto validation process is enabled.
Based on the bill date, the party selection date is enabled. If the user selects the party selection date first, the bill date can be selected only after entering the party date.
Whenever the bill paid option is true, the paid date field is enabled and mandatory. The date selection range allows date input only after the bill date and before the current date.
Primary Files -
Note: All fields are validated on Submit apart from the Mobile number which gets validated on change.
1 → Home Screen. + Add Expense Screen
Pop → Home Screen
Widgets Utilised from Library
→ {base url}/mgramseva/household/details/collectPayment
After the demand is generated for Metered and non-metered connections or if any arrears are present, the Revenue collector uses this screen to collect payments.
Collect Payment card is available on the home screen to the user role having COLLECTION_OPERATOR
permission.
Users can pay the total due amount by selecting the Full Amount option below Payment Amount.
Or, Users can also pay a partial amount by selecting Partial Amount from the Payment Amount options. If Partial Amount is selected, users have to provide the amount that he wants to pay.
Clicking on Collect Payment navigates the user to the Payment Success screen. The user can download the receipt or share the receipt for the collected amount.
The Arrears is broken into 'BL_(TaxHeadCode)' which we get from Bill details-->Bill Account details ---> Tax Head Code and the amount of particular arrears is similar to the Bill details--> amount from the Fetch Bill API.
(Eg. if there are two bills with tax head codes is 10101 and 10102, then Arrears break up is represented as BL_10101(Water Charges) with the corresponding amount and BL_10102(Water Charges-Arrears) with the corresponding amount
)
1 → Home Screen. + Search Connection Screen + Household Results + Household Details Screen + Collect Payment Screen
Pop → Household Details Screen
Widgets Utilised from Library
All content on this page by is licensed under a .
Link → {base url}/mgramseva/home/householdRegister
Users are redirected to this screen if they select the Household Register tile/card on the home screen.
The Household Register tile/card is displayed to the user with COLLECTION_OPERATOR
role.
From the text field, users can search connections by using connection ID.
Users can see all the connections data of the selected tenant till the current date based on their payment status (Ex: All, Paid, Pending).
Initially, only 10 connections are loaded for the selected tab. The pagination drop-down and right arrow click enable users to view more connections.
By selecting any connection ID users are navigated to the View Consumer Details Screen.
Click on the Download button to get all the household records in PDF format
Click on Share to share the PDF in Whats App
Primary Files :
Stack
1 → Home Screen. + Household Register Screen
Pop → Household Register Screen→ Home Screen
2 → Home Screen. + Household Register Screen + View Consumer Details Screen
Pop → View Consumer Details Screen → Household Register Screen
Widgets used from Library
Role Access Mapping
Users can provide their feedback by giving a rating.
It's an Open URL. It doesn’t require any Authentication user.
→ {baseURL}mgramseva/feedBack?paymentId={}&connectionno={}&tenantId={}
User can able to switch to multiple Languages
After submitting the feedback, users are navigated to the feedback submitted successfully acknowledgement screen.
Portable Bluetooth thermal printers are used to generate the mini receipts.
bluetooth_thermal_printer
js
Enable the Bluetooth in the respective mobile device.
Switch the thermal printer.
Tap on the Print button from the respective screen if the printer device is connected already it will print the receipt directly or else it will show a dialogue with a list of Bluetooth devices, from their user need to a selected respective thermal printer, once the device is paired successfully it will generate a receipt in the printer.
printTicket
→ Used to write the bytes to the thermal printer if the device is connected otherwise it will show paired Bluetooth devices in a dialogue.
Required Arguments → bytes, context
getTicket
→ Used to generate the bytes from Image and also sets the paper size.
Required Arguments → Image
showMyDialog
→ Used to show the Paired Bluetooth devices
Required Arguments → bytes, context
setConnect
→ If the device is already connected it will generate the receipt or else it will show the paired devices to connect.
→ {base url}/mgramseva/home/searchExpense
Update Expenses card is available on the home screen for defined roles that have EXPENSE PROCESSING permission.
Users can search the expense bills with the Vendor Name / Type of Expense / Bill ID ( Search with any one of these criteria
)
Click on Search navigates the user to the expense results screen which lists the expenditure bills matching the search criteria.
Primary Files:
1 → Home Screen. + Search Expense Bills Screen
Pop → Home Screen
Widgets Utilised from Library
Link. → {base url}/mgramseva/home/dashboard
Users are redirected to this screen if they select the GPWSC Dashboard option on the home screen.
Users can select the year from the drop-down which contains the list of the last 5 Financial years, on tap of any year respective months will be displayed.
Users can see the user satisfaction average scores of the selected month.
Users can see the Trend line graph plotted based on both Revenue and Expenditure.
Users can see the WhatsApp Share button, by tapping on it users can share the Monthly dashboard as a screenshot via WhatsApp.
1 → Home Screen + Monthly Dashboard + Revenue Dashboard + update connection screen
Pop → Revenue Dashboard screen → Home Screen
2 → Home Screen + Monthly Dashboard + Expenditure Dashboard + update expenditure screen
Pop → Expenditure Dashboard Screen → Home Screen
3 → Home Screen + Monthly Dashboard + Revenue Dashboard + update connection screen + Update Success
Pop → Home Screen
4 → Home Screen + Monthly Dashboard + Expenditure Dashboard + update expenditure screen + Update Success
Pop → Home Screen
Widgets Utilised from Library
→ {base url}/mgramseva/home/dashboard?tab=0.
Users are redirected to this screen if they select the GPWSC Dashboard option on the home screen.
Users can select the year from the drop-down which contains the list of financial years.
From the text field, users can search connections by using connection ID.
Users can see the connections data based on the property type for each respective tab (Ex: All, Residential, Commercial).
Initially, only 10 connections are loaded for the selected tab. The pagination dropdown and right arrow click enable users to view more connections.
Primary Files:
1 → Home Screen. + Dashboard collection screen + update connection screen
Pop → Dashboard collection screen → Home Screen
2 → Home Screen. + Dashboard collection screen + update connection screen + Update Success
Pop → Home Screen
Widgets Utilised from Library
Integration testing (also called end-to-end testing or GUI testing) is used to simulate a user interacting
with your app by doing things like clicking buttons, selecting items, scrolling items, etc. Integration testing is used to test how individual pieces work together as a whole, or capture the performance of an application running on a real device.
integration_test
We declared the integration_test package in pubspec.yaml as shown in the img.1
The test_driver directory, contains the integration_test_driver.dart file. (The folder structure is shown in img. 2). Inside this file, the integration driver is called.
The integration_test directory contains the test script files of different screens.
The Test Inputs directory contains the test_inputs.dart file. This file has the user actions inputs in json format. We can change user actions in this file.
There are two ways to start the integration testing :
To run the integration test on virtual emulator / mobile , run the command on your terminal :
cd ./frontend/mgramseva && flutter drive --driver=test_driver/integration_test_driver.dart
--target=integration_test/login_test.dart
(---or---)
Go to ./frontend/mgramseva/utils/execute_integration.sh
and run the execute_integration.sh
file on the virtual emulator / mobile . The integration test will start.
User actions Inputs - .frontend/mgramseva/integration_test/Test Inputs/test_inputs.dart
Integration Test Driver - .frontend/mgramseva/test_driver/integration_test_driver.dart
Execute Integration Test - .frontend/mgramseva/utils/execute_integration.sh
Users are navigated to this screen if they click on the Edit Profile option on the Side Bar app Drawer.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Clone the Repo → git clone GitHub - misdwss/punjab-mgramseva
Replace the base Url with Prod Url. File → app.config.dart _baseUrl: window.location.origin + "/", => _baseUrl: "mgramseva "
Download the key-store from the below link https://drive.google.com/file/d/14teTA0nqHaFLEkgg_LCHTcji5cRJDnXR/view?usp=sharing - Restricted link, try another account Add this properties file to the android app folder as shown in below image android → key.properties
Download the google service json from below link google-services.json Add this json file to the android app folder as shown in below image android → app → google-services.json
Build the prod app bundle → flutter build appbundle Kindly check the attached drive link below which includes key-store, version tracker and also updated the version and release date in the sheet. Path → D:\mgramseva_prod\punjab-mgramseva\frontend\mgramseva\build\app\outputs\bundle\release\app-release.aab https://docs.google.com/spreadsheets/d/1aH596FxtPISIlQzxw9jO_Ex1dttpJJvweib2F9nJj9o/edit#gid=0 - Restricted link, try another account
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Users are redirected to this screen if they click on the Change Password option in the Side Bar app Drawer.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Users are redirected to the Update Password screen once they log in successfully the first time.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Users are redirected to this screen once they click on the Collect Payment Card or the Update Consumer Details Card or Download Bills and Receipts Card on Home Screen.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Primary Files - punjab-mgramseva/WalkFlowContainer.dart at develop · egovernments/punjab-mgramseva , punjab-mgramseva/walkthrough.dart at develop · egovernments/punjab-mgramseva
Model → punjab-mgramseva/property.dart at develop · egovernments/punjab-mgramseva , punjab-mgramseva/water_connection.dart at develop · egovernments/punjab-mgramseva
Controller → punjab-mgramseva/consumer_details_repo.dart at develop · egovernments/punjab-mgramseva , punjab-mgramseva/consumer_details_provider.dart at develop · egovernments/punjab-mgramseva
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Users can also print mini receipts with the help of Bluetooth thermal printers by selecting the option.
Primary Files:
All content on this page by is licensed under a .
Model → ,
View →
Controller → ,
All content on this page by is licensed under a .
All content on this page by is licensed under a .
All content on this page by is licensed under a .
Users are redirected to this screen by selecting the Update Expense card on the home screen.
All content on this page by is licensed under a .
By selecting any Month from the table, users are navigated to the and Dashboard screen.
Primary Files:
Secondary Files: ,
Model →
View → ,
Controller → , https://github.com/misdwss/punjab-mgramseva/blob/develop/frontend/mgramseva/lib/providers/revenuedashboard_provider.dart
All content on this page by is licensed under a .
By selecting any connection ID users are navigated to the .
Model →
View → ,
Controller → ,
All content on this page by is licensed under a .
All content on this page by is licensed under a .
SL
Fileds
Validations
1
Name
r'^[a-zA-Z ]+$'
2
Email ID
r'^$|^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
SL
End Point
Request Method
Request Info
1
/user/profile/_update
POST
"user": { "id": {}, "userName": {}, "salutation": null, "name": {}, "gender": {}, "mobileNumber": "9191919146", "emailId": {}, "altContactNumber": null, "pan": null, "aadhaarNumber": null, "permanentAddress": null, "permanentCity": null, "permanentPinCode": null, "correspondenceAddress": null, "correspondenceCity": null, "correspondencePinCode": null, "active": true, "locale": null, "type": "EMPLOYEE", "accountLocked": false, "accountLockedDate": 0, "fatherOrHusbandName": null, "relationship": null, "signature": null, "bloodGroup": null, "photo": null, "identificationMark": null, "createdBy": {}, "lastModifiedBy": {}, "tenantId": {}, "roles": [ {} ], }
SL
Fileds
Validations
1
Current Password*
No Validation
2
Set a New Password*
r'^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$'
3
Confirm New Password*
Match with New Password
SL
End Point
Request Method
Request Info
1
user/password/_update
POST
"userName": {}, "existingPassword": {}, "newPassword": {}, "tenantId": {}, "type": {}
SL
Fileds
Validations
1
Billing Year*
isMandatory
2
Billing Cycle*
isMandatory
API EndPoint
Input Params (Modules)
Description
egov-mdms-service/v1/_search
ws-services-masters
PropertyTax
BillingService
To Fetch the Details of
connectionType
from ws-services-masters
TaxPeriod
from BillingService
where service=='WS' && @.fromDate <= $datestamp && @.toDate >= $datestamp
SL
End Point
Request Method
Request Info
1
/ws-calculator/waterCalculator/_bulkDemand
POST
"tenantId": {}, "billingPeriod": {}
SL
Fileds
Validations
1
Previous Meter Reading*
r'^[0-9]+$'
5 - digit reading
if Meter Reading < 5 digit, prepend zeroes
2
New Meter Reading*
r'^[0-9]+$'
5 - digit reading
if Meter Reading < 5 digit, prepend zeroes
3
Meter Reading Date*
Shows dates till today's date
API EndPoint
Input Params (Modules)
Description
egov-mdms-service/v1/_search
ws-services-masters
PropertyTax
BillingService
To Fetch the Details of
connectionType
from ws-services-masters
PropertyType
from PropertyTax
TaxHeadMaster
from BillingService
where service=='WS'
SL
End Point
Request Method
Request Info
1
/ws-calculator/meterConnection/_create
POST
"meterReadings": { "currentReading": {}, "currentReadingDate": {}, "billingPeriod": {}, "meterStatus": "Working", "connectionNo": {}, "lastReading": {}, "lastReadingDate": {}, "generateDemand": true, "tenantId": {}
}
SL
Fileds
Validations
1
Enter the OTP sent *
r'^[0-9]+$'
, 6 digit
2
Enter a New Password*
r'^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$'
3
Confirm New Password
Match with New Password
SL
End Point
Request Method
Request Info
1
user/password/nologin/_update
POST
"otpReference": {}, "userName": {}, "newPassword": {}, "tenantId": {}, "type": “Employee”
2
egov-mdms-service/v1/_search
POST
"MdmsCriteria": { "tenantId": tenantId, "moduleDetails": [ { "moduleName": "tenant", "masterDetails": [ {"name": "tenants"} ], }, ] }
SL
Fileds
Validations
1
Owner Mobile Number
r'^(?:[+0]9)?[0-9]{10}$'
2
Name of the Consumer
r'^[A-Za-z ]'
3
Old Connection ID
No Validation
4
New Connection ID
No Validation
SL
End Point
Request Method
Request Info
1
/ws-services/wc/_search
POST
tenantId: {}
oldConnectionNumber: {}
name: {}
connectionNumber: {}
mobileNumber: {}
Fields
Validations
consumer Name*
[A-Za-z ]
Gender*
None
Spouse/Parent’s Name*
[A-Za-z ]
Phone Number*
[0-9]
Old Connection No
None
Door Number
None
Street Name/Number
None
Gram Panchayat Name*
None- Disabled
Propert Type*
None
Service Type*
None
Meter Id
[a-zA-Z0-9]
Meter Reading
[0-9]
Billing Cycle
None
Arrears
[0-9.]
API
Params
Description
/egov-mdms-service/v1/_search
[{"moduleName":"ws-services-masters","masterDetails":[{"name":"connectionType"}]},{"moduleName":"PropertyTax","masterDetails":[{"name":"PropertyType"}]},{"moduleName":"BillingService","masterDetails":[{"name":"TaxPeriod","filter":"[?(@.service=='WS' && @.fromDate <= 1631989800000 && @.toDate >= 1631989800000)]
To get the Property Type and service Type and billing cycle values for the Dropdown
egov-location/location/v11/boundarys/_search?
hierarchyTypeCode=REVENUE&boundaryType=Locality&tenantId={tenantID}
To get the values for Locality DropDow
Fields
Validations
Vendor Name*
[A-Za-z ]
Mobile Number*
[0-9] & is mandatory only if a new vendor is added
Type of Expense*
None
Amount*
[0-9]
Bill Date*
Before Current Date and after party Bill Date.
Party Bill Date
Should be before the Bill Date
Bill Paid
None
Paid Date
After Bill date and less than current Date.
Attach Documents
Option to upload a single document, Supported files - PDF, JPEG, PNG (maximun 5MB)
Mark this Bill as Cancelled
None
API
Params
Description
/egov-mdms-service/v1/_search
[{"moduleName": "Expense", "masterDetails": [{"name": "ExpenseType"},]}, {"moduleName": "BillingService", "masterDetails": [{"name": "BusinessService"}, {"name": "TaxHeadMaster"},]}]
To get the Expense Type for the Dropdown
egov.org.in/vendor/v1/_search
tenantId: {}
To get the list of vendors in the selected tenant for the suggestion text box - Vendor Name
Fields
Validations
consumer Name*
[A-Za-z ]
Gender*
None
Spouse/Parent’s Name*
[A-Za-z ]
Phone Number*
[0-9]
Old Connection No
None
Door Number
None
Street Name/Number
None
Gram Panchayat Name*
None- Disabled
Property Type*
None
Service Type*
None
Meter Id
[a-zA-Z0-9]
Meter Reading
[0-9]
Billing Cycle
None
Arrears
[0-9.]
API
Params
Description
/egov-mdms-service/v1/_search
[{"moduleName":"ws-services-masters","masterDetails":[{"name":"connectionType"}]},{"moduleName":"PropertyTax","masterDetails":[{"name":"PropertyType"}]},{"moduleName":"BillingService","masterDetails":[{"name":"TaxPeriod","filter":"[?(@.service=='WS' && @.fromDate <= 1631989800000 && @.toDate >= 1631989800000)]
To get the Property Type and service Type and billing cycle values for the Dropdown
egov-location/location/v11/boundarys/_search?
hierarchyTypeCode=REVENUE&boundaryType=Locality&tenantId={tenantID}
To get the values for Locality DropDow
billing-service/demand/_search
consumerCode
, businessService
, tenantId
To Fetch Demand Details
property-services/property/_search
propertyIds
, tenantId
To Fetch Property Type
ws-services/wc/_search
connectionNumber
, tenantId
On Demand this API is Made
Fields
Validations
Vendor Name*
[A-Za-z ]
Mobile Number*
[0-9] & is mandatory only if a new vendor is added
Type of Expense*
None
Amount*
[0-9]
Bill Date*
Before Current Date and after party Bill Date.
Party Bill Date
Should be before the Bill Date
Bill Paid
None
Paid Date
After Bill date and less than current Date.
Attach Documents
Option to upload a single document, Supported files - PDF, JPEG, PNG (maximum 5MB)
API
Params
Description
/egov-mdms-service/v1/_search
[{"moduleName": "Expense", "masterDetails": [{"name": "ExpenseType"},]}, {"moduleName": "BillingService", "masterDetails": [{"name": "BusinessService"}, {"name": "TaxHeadMaster"},]}]
To get the Expense Type for the Dropdown
egov.org.in/vendor/v1/_search
tenantId: {}
To get the list of vendors in the selected tenant for the suggestion text box - Vendor Name
Fields | Validations |
Payment Amount : Full Amount or Partial Amount | None |
Partial Amount ( |
|
Payment Method | None |
API EndPoint | Input Params (Modules) | Description |
| | To get the billGeneiURL, Calculation of Water services and collectionModesNotAllowed |
|
| To fetch the bills of the connection/Consumer |
End Point | Request Method | Request Info |
/ | POST |
|
| POST |
|
| POST |
|
SL | API | Params | Description |
1 |
|
| API to Submit user feedback |
Fileds | Validations |
Owner Mobile Number |
|
Name of the Consumer |
|
Old Connection ID |
|
New Connection ID |
|
API | Params | Description |
|
| To get the Expense Type for the Dropdown |
End Point | Request Method | Request Info |
| POST |
|
| POST | tenantId : {} fromDate : {} toDate : {}
|
| POST | tenantId : {} fromDate : {} toDate : {}
|
| POST |
|
| POST |
|
End Point | Request Method | Request Info |
/ | POST | tenantId : {}
offset ; {}
limit : {}
fromDate : {}
toDate : {}
sortOrder ; {} sortBy : {} |
SL No
Widgets
File Path
Description
1
BuildTextField
Text Field
2
BottomButtonBar
Button
3
RadioButtonField
Radio Buttons for options
SL No
Widgets
File Path
Description
1
BuildTextField
Text Field
2
Button
Button
SL No
Widgets
File Path
Description
1
SelectFieldBuilder
(Primary File)
SearchSelectFieldBuilder
(Secondary File)
Searchable Dropdown
2
CommonSuccessPage
Success Screen
3
BottomButtonBar
Button
SL No
Widgets
File Path
Description
1
MeterReading
Meter Reading 5 digit boxes field
2
SelectFieldBuilder
(Primary File)
SearchSelectFieldBuilder
(Secondary File)
Searchable Drop down
3
DatePickerFieldBulder
Date Picker
4
CommonSuccessPage
Success Screen
5
BottomButtonBar
Button
SL No
Widgets
File Path
Description
1
BuildTextField
Text Field
2
BottomButtonBar
Button
3
PasswordHint
Password Hint Card
SL No
Widgets
File Path
Description
1
BuildTextField
Text Field
2
BottomButtonBar
Button
API
Description
property-services/property/_create
Property Creation Request JSON
ws-services/wc/_create
Components
File Path
TextField Builder
RadioButtonField Builder
SearchSelectField Builder
DatePicker Builder
Widgets
File Path
Description
BuildTextField
Text Field
AutoCompleteView
Suggestion Text Field
SelectFieldBuilder
(Primary File)
SearchSelectFieldBuilder
(Secondary File)
Searchable Drop down
DatePickerFieldBulder
Date Picker
CommonSuccessPage
Success Screen
BottomButtonBar
Button
Components
File Path
TextField Builder
RadioButtonField Builder
SearchSelectField Builder
DatePicker Builder
Widgets
File Path
Description
BuildTextField
Text Field
AutoCompleteView
Suggestion Text Field
SelectFieldBuilder
(Primary File)
SearchSelectFieldBuilder
(Secondary File)
Searchable Drop down
DatePickerFieldBulder
Date Picker
CommonSuccessPage
Success Screen
BottomButtonBar
Button
Widgets | File Path | Description |
| Text Field |
| Button |
| Radio Buttons for options |
Widgets | File Path | Description |
| Pagination |
| Text Field |
| Table |
| Title |
| Subtitle |
Widgets | File Path | Description |
| Text Field |
(Primary File)
(Secondary File) | Searchable Drop down |
| Button |
Widgets | File Path | Description |
| Pagination |
| Text Field |
| Table |
| Subtitle |
| Nested Date Picker |
Widgets | File Path | Description |
| Pagination |
| Text Field |
| Table |
| Subtitle |
User service is responsible for user data management and providing functionality to log in and log out of the DIGIT system.
Before you proceed with the configuration, make sure the following pre-requisites are met -
Java 8
Kafka server is up and running
Encryption and MDMS services are running
PSQL server is running and the database
Redis is running
Store, update and search user data
Provide authentication
Provide login,logout functionality into MgramSeva platform
Store user data PIIs in encrypted form
Setup latest version of egov-enc-service and egov-mdms- service
Deploy the latest version of egov-user service
Add Role-Action mapping for API’s
Following are the properties in application.properties file in user service which is configurable.
User data management and functionality to log in and log out into the DIGIT system using OTP and password.
Providing the following functionality to citizen and employee type users
Employee:
User registration
Search user
Update user details
Forgot password
Change password
User role mapping(Single ULB to multiple roles)
Enable employees to login into the DIGIT system based on the password.
Citizen:
Create user
Update user
Search user
User registration using OTP
OTP based login
To integrate, the host of egov-user should be overwritten in the helm chart.
Use /citizen/_create
endpoint for creating users into the system. This endpoint requires the user to validate his mobile Number using OTP. The first OTP will be sent to his mobile number and then that OTP will be sent as otpReference
in the request body
Use /v1/_search
and /_search
endpoints to search users in the system depending on various search parameters
Use /profile/_update
for updating the user profile. The user will be validated (either by OTP based validation or password validation) when this API is called
/users/_createnovalidate
and /users/_updatenovalidate
are endpoints to create user data into the system without any validations (no OTP or password required). They should be strictly used only for creating/updating user’s internally and should not be exposed outside
Forgot password: In case the user forgets the password it can be reset by first calling /user-otp/v1/_send
which will generate and send OTP on employee’s mobile number, the password can then be updated using this OTP by calling API /password/nologin/_update
in which a new password along with the OTP has to be sent.
Use /password/_update
to update the existing password by logging in. In the request body, both old and new password has to be sent. Details of the API can be found in the attached swagger documentation
Use /user/oauth/token
for generating tokens, /_logout
for logout and /_details
for getting user information from his token
Multi Tenant User : The Multi-tenant User functionality allows a user to perform actions across multiple ULB’s. For example, an employee belonging to Amritsar can perform the role of say Trade License Approver for Jalandhar by assigning a tenant level role of tenantId pb.jalandhar to him. Following is an example of such a user:
If an employee has a role with state level tenantId
he can perform actions corresponding to that role across all tenants
Refresh Token: Whenever the /user/oauth/token
is called to generate the access_token
, along with the access_token
one more token is generated called refresh_token
. The refresh token is used to generate new access_token
whenever the existing one expires. Till the time the refresh token is valid the user won’t have to log in even if his access_token
get’s expired, as it will be generated using refresh_token
. The validity time of the refresh token is configurable and can be configured using the property: refresh.token.validity.in.minutes
(Note: All the API’s are in the same postman collection therefore the same link is added in each row)
Water service is a DIGIT application that helps and gives flexibility to municipalities and citizens to manage water service requirements like apply for a water connection or search for water connections. The application goes through various steps as defined by the states. The application is passed through different users who verify and inspect the application details before moving it to the next stage. Based on the state, citizens get notifications (SMS and in-app ). Citizens can also pay for application fees or employees can collect the fee for the application.
Before you proceed with the documentation, make sure the following pre-requisites are met -
Java 8
Kafka server is up and running
egov-persister service is running and has a water service persister config path added to it
PSQL server is running and a database is created to store water connection/application data
knowledge of eGov-mdms service, eGov-persister, eGov-idgen, eGov-sms, eGov-email,eGov-user, eGov-localization, eGov-workflow-service will be helpful.
Add old water connection to the system with/without arrears
Create a new Water Connection
Searching for water connections
Notification based on the application state
Table UML Diagram
Mdms configuration
mdms-mgramseva/data at DEV · egovernments/egov-mdms-data
master-config.json for water service
ConnectionType
Two connection types supported Metered and Non metered.
CheckList
CheckList is used to define the Q & A for the feedback form and its validation.
Category
Predefined list of categories allowed.
SubCategory
Predefined list of subcategories allowed
Property creation through WNS module mdms-mgramseva/PTWorkflow.json at DEV · egovernments/egov-mdms-data
Persister configuration
Actions
Role Action Mapping
Roles available
Workflow business service config:
Create businessService (workflow configuration) using the /businessservice/_create
. Following is the product configuration for water service
Indexer config for water service:
Provide the absolute path of the checked-in file to DevOps, to add it to the file-read path of egov-indexer. The file will be added to the egov-indexer's environment manifest file for it to be read at the start-up of the application.
Run the egov-indexer app, Since it is a consumer, it starts listening to the configured topics and indexes the data.
Notification will be sent to the property owners and connection holders based on different application states.
We can add connection holders to the water connection which will be the owner of the connection. We can fill in the connection holders' details or we can just make the property owner to the connection holder.
The connection holder will get a notification based on a different state of the application. We are pushing the data of the connection holders in the user service too.
We can add road cutting details of multiple roads to the water connection. For each road that goes undercutting process, we have to fill their road type details and road cutting area. Based on this information, the application one-time fee estimate is calculated.
Add mdms configs required for water connection registration and restart mdms service.
Deploy the latest version of ws-services service.
Add water-service and water-services-meter persister yaml path in persister configuration and restart persister service.
Add Role-Action mapping for API’s.
Create businessService (workflow configuration) according to trade water connection, modify water connection
Add ws-service indexer yaml path in indexer service configuration and restart indexer service.
This ws-service module is used to manage water service connections against a property in the system.
Provide backend support for the different water connection registration processes.
Mseva and SMS notifications on application status changes.
The elastic search index for creating visualizations and Dashboards.
Supports workflow which is configurable
To integrate, the host of ws-service module should be overwritten in helm chart.
/ws-services/wc/_create
should be added as the create endpoint for creating water application/connection in the system.
/ws-services/wc/_search
should be added as the search endpoint . This method handles all requests to search existing records depending on different search criteria.
/ws-services/wc/_update
should be added as the update endpoint. This method is used to update fields in existing records or to update the status of the application based on workflow.
(Note: All the API’s are in the same postman collection therefore the same link is added in each row)
Water Calculator Service is used for creating meter reading, searching meter reading, updating existing meter reading, calculation of water charge, demand generation, SMS & email notification to ULB officials on-demand generation and estimation of water charge(one-time cost) which involves cost like road-cutting charge, form fee, scrutiny fee, etc.
Before you proceed with the documentation, make sure the following pre-requisites are met -
Java 8
Kafka server is up and running
egov-persister service is running and has water service persister configs path added in it
PSQL server is running and a database is created to store water connection/application data
Following services should be up and running:
egov-perister
egov-mdms
ws-services
billing-service
Calculate water charges and taxes based on billing slab
Calculate meter reading charge for water connection
Generate demand
Scheduler for generating the demand(for non metered connection)
Deploy the latest version of ws-service and ws-calculator
Add water-persist.yml & water-meter.yml file in config folder in git and add that path in persister. (The file path is to be added in environment yaml file in param called persist-yml-path
)
Master Config
Criteria
connection type
building type
calculation attribute
property usage type
The combination of the above can be used to define the billing slab. Billing Slab is defined in mdms under ws-services-calculation folder with the WCBillingSlab. The following is the sample slab.
If all criteria will match for that water connection this slab will use for calculation.
Water charge is based on billing slab, for water application charge will be based on slab and tax based on master configuration.
Actions
Role Action Mapping
Charge for the given connection for a given billing cycle will be defined/identified by the system with the help of the CalculationAtrribute MDMS and WCBillngSlab MDMS.
CalcualtionAttribute helps to identify the type of calculation for the given connectionType below mdms of
Metered Connection water consumption is the attribute used for the calculation of charge for billing cycle i.e Based no the units consumed for a given billing cycle for a given connection would identify the actual charge from the WCBIllingSlab mdms based on the propertyType, calcautionAttribute derived for a connection and ConnectionType
Non-Metered Connection Flat is the attribute used for calculation of the charge for a given billing cycle, i.e for NonMetered connection, there would be a flat charge for the given billing cycle. The amount can be derived from the WCBillingSlab mdms based on the propertyType, calcautionAttribute derived for a connection and ConnectionType.
Once water is sent to the calculator its tax estimates are calculated. Using these tax head estimates demand details are created. For every tax head, the estimated demand generates function will create a corresponding demand detail.
Whenever _calculate API is called demand is first searched based on the connection no and the demand from and to period. If demand already exists the same demand is updated else new demand is generated with consumer code as connection no and demand from and to a period equal to financial year start and end period.
In the case of the update, if the tax head estimates change, the difference in amount for that tax head is added as new demand detail. For example, if the initial demand has one demand detail with WATER_CHARGE equal to 120.
After updating if the WATER_CHARGE increases to 150 we add one more demand detail to account for the increased amount. The demand detail will be updated to:
RoundOff is bill based i.e every time bill is generated round off is adjusted so that payable amount is the whole number. Individual WS_ROUNDOFF in demand detail can be greater than 0.5 but the sum of all WS_ROUNDOFF will always be less than 0.5.
Description
For generating the demand for non metered connections we have a feature for generating the demand in batch. The scheduler is responsible for generating the demand based on the tenant.
The scheduler can be hit by scheduler API or we can schedule cron job or we can put config to kubectl which will hit scheduler based on config.
After the scheduler has been hit we will search the list of the tenant (city) present in the database.
After getting the tenants we will pick up tenants one by one and generate the demand for that tenant.
We will load the consumer codes for the tenant and push the calculation criteria to Kafka. Calculation criteria contain minimal information (We are not pushing large data to Kafka), calculation criteria contain consumer code and one boolean variable.
After pushing the data into Kafka we are consuming the records based on the batch configuration. Ex:-> if the batch configuration is 50 so we will consume the 50 calculation criteria at a time.
After consuming the record(Calculation criteria) we will process the batch for generating the demand. If the batch is successful so will log the consumer codes which have been processed.
If some records failed in batch so we will push the batch into dead letter batch topic. From the dead letter batch topic, we will process the batch one by one.
If the record is successful we will log the consumer code, If the record is failed so we will push the data into a dead letter single topic.
Dead letter single topic contains information about failure records in Kafka.
Use cases
If the same job trigger multiple time what will happen?
If the same job triggers multiple times we will process again as mentioned above but at the demand level we will check the demand based on consumer code and billing period, If demand already exists then we will update the demand otherwise we will create the demand.
Are we maintaining success or failure status anywhere?
Currently, we are maintaining the status of failed records in Kafka.
Configuration
We need to configure the batch size for Kafka consumers. This configuration is for how much data will be processed at a time.
ws-calculator will be integrated with ws-service. ws-services internally invoke the ws-calculator service to calculate and generate demand for the charges.
WS calculator application is used to calculate the water application one-time Fees and meter reading charges based on the different billing slabs that's why the calculation and demand generation logic will be separated out from the WS service. So in future, if calculation logic needs to modify then changes can be carried out for each implementation without modifying the WS service.
Once the water connection is activated for metered connection, an employee can add meter reading details using this API - /ws-calculator/meterConnection/_create
which in turn will generate the demand. For the Non-Metered connections, the scheduler APIs need to be called periodically to generate the demand.
For the Metered Connection service, to get the previous meter reading /meterConnection/_search
API is used.
To generate the demand for metered or non-metered water connection /waterCalculator/_calculate
API is used.
Users can pay partial/full/advance amount for the Metered or Non-Metered connection bill. In these cases, the Billing service would call back /waterCalculator/_updateDemand
API to update the details of the demand generated.
/waterCalculator/_jobscheduler
API is used to generate demand for Non-metered connections. This API can be called periodically.
(Note: All the API’s are in the same postman collection therefore the same link is added in each row)
We are using re-indexing to get all the data to the respective indexer. We have 2 steps for this. The first step is to run the connector from the playground, which is followed by legacyindexer service call from indexer service, which internally calls the respective plain search service to get the data and to send it to the respective indexer.
Access to kubectl of the environment targetted
Postman scripts
Plain search apis in the respective services
We have mainly 3 indexes in mGramSeva for Re-indexing.
Water-services
Echallan-services
dss-collection_v2
ws-services re-indexing
Kafka Connector Curl to be run from playground pod
Plain Search call
EChallan -Reindexing Kafka Connector Call to be run from Playground pod
Legacy Index call from postman
Dss collection v2 re-indexing
Kafka Connector call to be run from playground pod
payment re-indexing run from postman call
user-otp service is used to generate OTP for user login, user registration and user password change.
Prior Knowledge of Java/J2EE.
Prior Knowledge of Spring Boot.
Prior Knowledge of KAFKA
Prior Knowledge of REST APIs and related concepts like path parameters, headers, JSON, etc.
Following services should be up and running:
user
MDMS
Id-Gen
URL-Shortening
notification-sms
user-otp service generate validates the user details and request type and send OTP for a particular action.
Deploy the latest image of the user-otp service available.
User OTP service can be integrated with any organization or system that wants OTP based validation for user login, registration.
Easy to create and simple process of generating bills from demands.
Easy to generate OTP to validate mobile number for registration, login and password reset with simple API calls
otp can be generate calling /user-otp/v1/_send
The purpose of the mGramSeva IFIX adapter service is to push the demand, bill, and payment events to IFIX from the mGramSeva.
mGramSeva IFIX adapter service is a wrapper for pushing data from the mGramSeva to IFIX. When demand or payment is generated in the mGramSeva system, mGramSeva IFIX adapter service listens to those topics and it calls the IFIX reference adapter service push API to publish the data to IFIX.
Before you proceed with the configuration, make sure the following pre-requisites are met -
Java 8
Kafka
Spring boot
Pushing demand, bill and payment events to IFIX adapter
The following topics interact with the mGramSeva IFIX adapter service - When we create demand for ws-services, then it sends an event as demand for IFIX. If it is expense demand, it sends the event as a bill for IFIX. If it is ws-services payment, then it sends the event as a receipt for IFIX. If it is an expense payment, it sends the payment as an event for IFIX.
mgramseva-create-demand
mgramseva-update-demand
egov.collection.payment-create
Please deploy the following build.
ifix-adapter:v1.0.0-4e24064-14
mGramSeva IFIX adapter is integrated with the IFIX Reference adaptor service. mGramSeva IFIX adapter Application internally invokes the IFIX Reference adaptor service to push the data.
mGramSeva IFIX adapter application to call IFIX-reference-adapter/events/v1/_push to push the demand, bill, and payment events from mGramSeva to IFIX.
mGramsev-DSS Documentation
DSS has two sides to it. One is, the process in which the Data is pooled to ElasticSearch and the other is the way it is fetched, aggregated, computed, transformed and sent across.
As this revolves around a variety of Data Sets, there is a need for making this configurable. So that, tomorrow, given a new scenario is introduced, then it is just a configuration away from getting the newly introduced scenario involved in this process flow.
This document explains the steps on how to define the configurations for the Analytics Side Of DSS for mGramSeva.
Analytics : Micro Service which is responsible for building, fetching, aggregating and computing the Data on ElasticSearch to a consumable Data Response. Which shall be later used for visualizations and graphical representations.
Analytics Configurations: Analytics contains multiple configurations. we need to add the changes related to mGramseva in this dashboard-analytics. Here is the location: https://github.com/misdwss/config-mgramseva/tree/QA/egov-dss-dashboards/dashboard-analytics Below is a list of configurations that need to be changed to run mGramSeva successfully.
Chart API Configuration
Master Dashboard Configuration
Each Visualization has its own properties. Each Visualization comes from different data sources (Sometimes it is a combination of different data sources)
In order to configure each visualization and its properties, we have a Chart API Configuration Document.
In this, Visualization Code, which happens to be the key, will be having its properties configured as a part of the configuration and are easily changeable.
Here is the sample ChartApiConfiguration.json data for the mGramSeva.
Click here to check the complete configuration.
Master Dashboard Configuration is the main configuration that defines as to which are the Dashboards that are to be painted on the screen.
It includes all the Visualizations, their groups, the charts which comes within them and even their dimensions as what should be their height and width.
Click here to check the complete configuration
Master Dashboard Configuration which was explained earlier hold the list of Dashboards that are available.
Given the instance where Role Action Mapping is not maintained in the Application Service, this configuration will act as Role - Dashboard Mapping Configuration
In this, each Role is mapped against the Dashboard which they are authorized to see
This was used earlier when the Role Action Mapping of eGov was not integrated.
Later, when the Role Action Mapping started controlling the Dashboards to be seen on the client-side, this configuration was just used to enable the Dashboards for viewing.
Click Here to check the complete configuration.
Transform collection schema for V2
This transform collection v1 configuration file is used to map with the incoming data. This mapped data will go inside the data object in the DSS collection v2 index.
Here: $i, the variable value that gets incremented for the number of records of paymentDetails
$j, the variable value that gets incremented for the number of records of billDetails.
This configuration defines and directs the Enrichment Process which the data goes through.
For example, if the Data which is incoming is belonging to a Collection Module data, then the Collection Domain Config is picked. And based on the Business Type specified in the data, the right config is picked.
In order to enhance the data of Collection, the domain index specified in the configuration is queried with the right arguments and the response data is obtained, transformed and set.
Domain Configuration
Topic Context Configuration
transform_expense.electricity_bill_v1 Configuration
transform_expense.om_v1 Configuration
transform_expense.salary_v1 Configuration
transform_ws_v1 Configuration
Below are the list of configurations made changes or added newly for mGramseva
Click here to see the complete configuration.
Topic Context Configuration is an outline to define which data is received on which Kafka Topic.
Indexer Service and many other services are sending out data on different Kafka Topics. If the Ingest Service is asked to receive those data and pass it through the pipeline, the context and the version of the data being received has to be set. This configuration is used to identify as in which Kafka topic consumed the data and what is the mapping for that.
Click here to see the complete configuration.
Based on expense and water-service business service we added transfororm configurations as per below.
Note: For Kafka connect to work, Ingest pipeline application properties or in environments direct push must be disabled.
es.push.direct=false
If DSS collection index data is indexing directly ( without Kafka connector) to ES through the ingest pipeline then, make the application properties or in environments, direct push must be enabled.
es.push.direct=true
Configure the Kafka topics in the environments or Ingest pipeline application properties as shown below.
Kafka connection and re-indexing is available in this documentation. Please check from here. mGramseva- Services Re-Indexing
Main-Monthly Dashboard
For the main monthly dashboard, we are using the service API to fetch the data and to show it in the main monthly dashboard table.
Ws-services:
/ws-services/wc/_revenueCollectionData
Should be added to get the main monthly dashboard details. It is used to show the table data based on the no of months for selected financial year.
eChallan-Service:
/echallan-services/eChallan/v1/_chalanCollectionData
it is added to get the main monthly dashboard data for the expense.
Dashboard-Metrix:
To show the data in metrix format in specific month dashboard we are using service API which will fetch the data based on dash board type.
Ws-services:
/ws-services/wc/_revenueDashboard
Should be added to get the revenue dashboard metrix data. It will show the data of revenue collections information
eChallan-Service:
/echallan-services/eChallan/v1/_expenseDashboard
Is added in echallan-service to show the data of expenses in metrix format.
MDMS- changes for the dashboard:
The main objective of the billing module is to serve the Bill for all revenue Business services. To serve the Bill, Billing-Service requires demand. Demands will be prepared by Revenue modules and stored by billing based on which it will generate the Bill.
Prior Knowledge of Java/J2EE.
Prior Knowledge of Spring Boot.
Prior Knowledge of KAFKA
Prior Knowledge of REST APIs and related concepts like path parameters, headers, JSON, etc.
Prior knowledge of the demand-based systems.
Following services should be up and running:
user
MDMS
Id-Gen
URL-Shortening
notification-sms
eGov billing service creates and maintains demands.
Generates bills based on demands.
push created and updated bill/demand to Kafka on specified topics
Updates the demands from payment when the collection service takes a payment.
Deploy the latest image of the billing service available.
In the MDMS data configuration, the following master data is needed for the functionality of the billing
Business Service JSON
TAX-Head JSON
Tax-Period JSON
Billing service can be integrated with any organization or system that wants a demand-based payment system.
Easy to create and simple process of generating bills from demands
The amalgamation of bills period-wise for a single entity like Water connection.
Amendment of bills in case of legal requirements.
Customers can create a demand using the /demand/_create
Organizations or Systems can search the demand using /demand/_search
endpoint
Once the demand is raised the system can call /demand/_update
endpoint to update the demand as per need.
Bills can be generated using, which is a self-managing API that generates a new bill only when the old one expires /bill/_fetchbill.
Bills can be searched using /bill/_search.
Amendment facility can be used in case of a legal issue to add values to existing demands using /amendment/_create
and /amendment/_update
can be used to cancel the created ones or update workflow if configured.
Interaction Diagram V1.1
Adjusting the receivable amount with the individual tax head.
Default order based apportioning(Based on apportioning order adjust the received amount with each tax head).V1.1
Proportionate based apportioning (Adjust total receivable with all the tax head equally)
Order & Percentage based apportioning(Adjust total receivable based on order and the percentage which is defined for each tax head).
The basic principle of apportioning is, if the full amount is paid for any bill then each individual tax head should get nullify with their corresponding adjusted amount.
Example: Case 1: When there are no arrears all tax heads belong to their current purpose:
Case 2: Apportioning with two years of arrear: If the current financial year is 2014-15. Below are the demands
if any payment is not done, and we generating demand in 2015-16 then the demand structure will as follows:
Google Analytics helps you understand how people use the web and Android apps. Analytics helps you understand how your users behave, so we can make informed decisions about how to market our app.
Plugin used
firebase_analytics
About Firebase Console
In the Firebase console we can track the real-time user usage, Below are the main core features for tracking the user
Users in the last 30 minutes.
User's activity over time using a date picker represents inline charts.
Track the users by app version.
Track users by device Model.
User Retention.
→ {base url}/mgramseva/home/dashboard?tab=1.
Users are redirected to this screen when they select the GPWSC Dashboard option on the home screen.
Users can select the year from the drop-down which contains the list of financial years.
From the text field, users can search the expenses using Bill ID or vendor name.
Users can see the expense data for paid and pending with respective tabs.
Initially, only 10 expenses are loaded for the selected tab. The pagination dropdown and right arrow click enable the user to load and view more expense records.
Selecting any Bill ID navigates the users to the Expense update screen.
1 → Home Screen. + Dashboard expenditure screen + update expense screen
Pop → Dashboard expenditure screen → Home Screen
2 → Home Screen. + Dashboard expenditure screen + update expense screen + expense update success
Pop → Home Screen
Widgets Utilised from Library
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
eChallan system enables employees to generate the challans for Adhoc services so that the payment can be recorded into the system along with service-specific details.
Before you proceed with the documentation, make sure the following pre-requisites are met -
Java 8
Kafka server is up and running
egov-persister service is running and has workflow persister config path added in it
PSQL server is running and a database is created to store workflow configuration and data
Allow employees to capture service details for miscellaneous services and mark as paid
Allow employees to update/cancel challan.
MDMS Configuration Actions & Role Action Mapping
Actions
Role Action Mapping
Roles available
Add mdms configs required for eChallan Service and calculator and restart mdms service.
Deploy the latest version of eChallan Service and calculator.
Add eChallan Service persister yaml path in persister configuration and restart persister service
Add Role-Action mapping for API’s.
Add pdf configuration file for challan and bill.
The eChallan service is used to generate e-challans / bills for all miscellaneous / adhoc services .
Can perform service-specific business logic without impacting the other module.
Provides the capability of capturing the unique identifier of the entity for which the challan is generated.
In the future, if we want to expose the application to citizens then it can be done easily.
The workflow or Service-specific workflow can be enabled at the challan service level at any time without changing the design.
Allow employees to update/cancel challan
To integrate, the host of echallan-services module should be overwritten in helm chart.
echallan-services/eChallan/v1/_create
should be added as the create endpoint for creating eChallan in the system.
echallan-services/eChallan/v1/_search
should be added as the search endpoint. This method handles all requests to search existing records depending on different search criteria.
echallan-services/eChallan/v1/_update
should be added as the update endpoint. This method is used to update fields in existing records or to update the status of application based on workflow.
/echallan-services/eChallan/v1/_expenseDashboard
Is added in echallan-service to show the data of expenses in metrix format.
/echallan-services/eChallan/v1/_chalanCollectionData
it is added to get the main monthly dashboard data for the expense.
(Note: All the API’s are in the same postman collection therefore the same link is added in each row)
GitHub Actions enables you to create custom software development lifecycle workflows directly in your GitHub repository. This enables you to include Continues Integration (CI) and continuous deployment (CD) capabilities. it easier to automate how you build, test, and deploy your projects on any platform, including Linux, macOS, and Windows. Run your workflows in a virtual machine and local machine as well.
It is easy to build the app in artefacts.
Analyze, Build, Test and Deploy our applications on any platform.
Easily release the app bundle in the Play store.
The speed of GitHub Actions is good
Every command will be written in yml files and all these files will be in .github/workflows/ directory of your repository, then only git will identify our script files.
In our repository we are maintaining this file as main.yml, In this yml file we are executing the android drive job, which will run the integration testing scripts, once all the tests are passed then only it will build the app in QA ENV and store it in the artefacts as shown image.
Explained every line of main.yml file with comments below.
We can host your own runners and customize the environment used to run jobs in your GitHub Actions workflows.
Self-hosted runners can be physical, virtual, in a container, on-premises, or in a cloud.
With self-hosted runners, you can choose to create a custom hardware configuration with more processing power or memory to run larger jobs, install software available on your local network, and choose an operating system not offered by GitHub-hosted runners.
On GitHub.com, navigate to the main page of the repository.
Under your repository name, click Settings as shown in the image.
In the left sidebar, click Actions.
In the left sidebar, under "Actions", click Runners.
Click New self-hosted runner
Select the operating system image and architecture of your self-hosted runner machine.
You will see instructions showing you how to download the runner application and install it on your self-hosted runner machine.
After completing the steps to add a self-hosted runner, the runner and its status are now listed under "Runners".
Now you will have to edit the main.yaml file for using our local machine, replace the runs on with self-hosted
as shown below.
runs-on: ubuntu-latest
>> runs-on: self-hosted
Objective
The purpose of the mGramSeva Rollout Dashboard Scripts to aggregate the data points from mgramseva DB and services for Rollout dashboard in Metabase
mGramSeva Rollout Dashboard is a python script for pushing the data from the mGramSeva to s a specific table in DB on a daily basis which can be loaded to Metabase and graphical dashboard built on top of this table in the Metabase.
Before you proceed with the configuration, make sure the following pre-requisites are met -
Python 3.9
mGramSeva DB
mGramseva user details who has access to MDMS service API
mGramSeva mdms service access
Collecting the data on certain data points and inserting the data into the rollout dashboard table in the DB User Story with details of the data point: IFIX-485: [1.0.1] Rollout Dashboards on MetabaseQA SIGNOFF
Please deploy the following build.
rollout-dashboard-cronjob:develop-2a8d6a44-3
mGramSeva Rollout Dashboard is not directly integrated with any of the services except this scripts fetch the data from the MDMS service and mGramSeva DB
please follow the steps below
The python script inserts the data into table “roll_out_dashboard
“ in mgramSevaDb for every run, it cleans the old data and creates new data.
This table has to be loaded into the metabase by adding mGramSeva DB to the metabase.
Schedulers are designed to run a particular service at a scheduled time, without triggering manually. We can have multiple schedulers for an application. It will consider the GMT time format only.
The python script (name) would read the mdms-read-cronjob json from the mdms service which users CRONJOB user for a token to access mdms service.
Try to identify the API's configured in this mdms with the argument passed while invoking the script.
With the identified configs from the mdms, the script calls the respective API configured there.
Total 7 schedulers are available in the mGramSeva: _schedulerTodaysCollection: This scheduler will run daily to send the day collection amount to the collection employee. _jobscheduler/true: This is to send the notification to the ULB employee when the bulk demand auto-generation is failed.
_schedulermarkexpensebill: This scheduler is used to mark the expense as paid for the paid expenses once for every fortnight. _schedulernewexpenditure: This is used to send the notification once for every fortnight regarding the no of expenditures created. _schedulermonthsummary: This is to send the monthly summary details to the ULB employee. _schedulerpendingcollection: This is to send the total pending amount details to the respective ULB employee user once every fortnight. _jobscheduler/false: This is used to generate the bulk demand automatically once every month.
As we have 7 different schedulers in mGramSeva which will be running in 4 different time slots so we have to configure, all of them run the same python scripts with the different argument which you can see in the file under command -> args
The Time of the scheduler to run should be configured under cron-> schedule option.
Example of failedBulkDemand scheduler.
You can observer
command->args value is failedbulkdemand ( through which python script understand to invoke only api configured in mdms-read-cronjob mdms json file with the name as “failedbulkdemand”
cron->schedule value is “ 30 3 5 * *” which define the time to kick this scheduler i.e at 3.30 on 5th day of every month. As the crontab follows GMT timezone converting this time to IST this jobs run on 9am of on 5th day of every month Crontab.guru - The cron schedule expression editor helps to define the pattern for the schedule cron.Crontab.guru - The cron schedule expression editor
PriorNote: In Devops for every configuration app name will change according to the name of the cron job file given and the schedule will change according to the time set, and argument will be as per job name given in mdms configuration.
labels: app: monthly-cronjob // This name will change based on the cronjob schedular we are using group: mdms-read-cronjob // this is same for all as we are using same python script
cron: schedule: 30 3 4 * * // This depends on the time we need to run the schedular
image: repository: api-cronjob tag: v1
command:
python3
cronJobAPIConfig.py
args:
monthly // This will be the job name which will differ with the requirement of scheduler type.
env: |
name: JOB_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
resources: |
requests: {}
The remaining fields will be the same for all the schedulers.
Monthly: This will run and send the notification to the ULB employee or consumer on the 4th of every month morning at 9 am as per the scheduled time. Fortnightevening: This scheduler will run on the 1st and 15th of every month evening at 6 pm to send the respective notification to the Consumer. Failedbulkdemand: When the bulk demand generation is failed this scheduler will run and share the message to ULB employees to generate demand manually. Dailyevening: This schedular will run daily and send notifications to the collection operator on a daily basis. Here are the links
MDMS Object details and Configuration: {
"jobName": "monthly", // This will change based on the job name
"active": "true", // when it is true schedular will run automatically and when it is false schedular won’t run.
"method": "POST",
"url": "http://echallan-services.mgramseva:8080/echallan-services/eChallan/v1/_schedulermonthsummary", // This is the respective service url to call that service as per the scheduler
"payload": {
"RequestInfo": "{DEFAULT_REQUESTINFO}" // this is common in all the schedulers to send the request info
},
"header": {
"Content-Type": "application/json" // This is one of the common property for all the schedulers
}
}
Here is the Configuration for all the schedulers: Click here to see
Need to create a user with CRONJOB as name and type as SYSTEM and ROLE as SYSTEM AND EMPLOYEE here is the sample curl to create the user.
When you build the cronjob you will get the build id like below. api-cronjob:develop-c0aa08a-2 From this you will take the only id instead of complete name like develop-c0aa08a-2. This will be used as the id for your respective yaml files and will be deployed the same to you required environment to test the cron job. For example :
Mdms-read-cronjob:develop-c0aa08a-2,
fAiledbulkdemand:develop-c0aa08a-2,
Fortnightevening:develop-c0aa08a-2,
monthly:develop-c0aa08a-2 Note: develop-c0aa08a-2 is the common build id for all the files which you are using.
How to run the cronjob manually
Please delete the existing cron jobs if they are already exists with same name.
kubectl delete cronjob mdms-read-cronjob -n mgramseva
Please deploy these builds in QA environments, which are related to cronjob schedulars.
mdms-read-cronjob:develop-c0aa08a-2,failedbulkdemand:develop-c0aa08a-2,fortnightevening:develop-c0aa08a-2,monthly:develop-c0aa08a-2
Steps to test the cron job schedular.
kubectl get cronjob -n mgramseva -- to check the list of cron jobs
We will create the job manually to test the messages.
Here are the commands to create the jobs.
Will receive a message for the respective schedular each time we run it.
We can increase the no to test again like failedbulkdemand-manually-1 next it will be failedbulkdemand-manually-2
kubectl create job --from=cronjob/failedbulkdemand failedbulkdemand-manually-1 -n mgramseva
kubectl create job --from=cronjob/fortnightevening fortnightevening-manually-1 -n mgramseva
kubectl create job --from=cronjob/mdms-read-cronjob mdms-read-cronjob-manually-1 -n mgramseva
kubectl create job --from=cronjob/monthly monthly-manually-1 -n mgramseva
kubectl get job -n mgramseva -- to check the list of jobs
To check the cronjob image
kubectl describe cronjob mdms-read-cronjob -n mgramseva
To delete specific job
kubectl delete jobs mdms-read-cronjob-manually-1 -n mgramseva
Water Connection Request JSON defined in punjab-mgramseva/water_connection.dart at develop · egovernments/punjab-mgramseva
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
config-mgramseva/water-persist.yml at DEV · egovernments/configs configs/water-meter.yml at master · egovernments/configs
The indexer provides the facility for indexing the data to elastic search. config-mgramseva/water-service.yml at DEV · egovernments/config-mgramseva
Write the configuration for water service. config-mgramseva/water-service.yml at DEV · egovernments/config-mgramseva
Put indexer config file to the config repo under egov-indexer folder.(GitHub - egovernments/configs at master )
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
transform_expense.electricity_bill_v1 Configuration: config-mgramseva/transform_expense.electricity_bill_v1.json at QA · misdwss/config-mgramseva
transform_expense.om_v1 Configuration : config-mgramseva/transform_expense.om_v1.json at QA · misdwss/config-mgramseva
transform_expense.salary_v1 Configuration: config-mgramseva/transform_expense.salary_v1.json at QA · misdwss/config-mgramseva
transform_ws_v1 Configuration: config-mgramseva/transform_ws_v1.json at QA · misdwss/config-mgramseva
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by is licensed under a .
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Primary Files: punjab-mgramseva/Dashboard.dart at develop · egovernments/punjab-mgramseva punjab-mgramseva/search_expense.dart at develop · egovernments/punjab-mgramseva
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
Configure the username, tenantId and password of the user for which mdms service access is available on the environment specific yaml file in DevOps. Example below iFix-DevOps/mgramseva-qa.yaml at e471be940b88ccd8811b2dfb7a0e4187b0ec39cd · misdwss/iFix-DevOps
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.
End Point
Request Method
Request Info
/echallan-services/eChallan/v1/_create
POST
tenantId : {} offset ; {} limit : {} fromDate : {} toDate : {} vendorName : {} challanNo : {} toDate : {} freeSearch : {} status : {} isBillCount : {}
sortOrder ; {} sortBy : {} isBillPaid : {}
Property
Value
Remarks
egov.user.search.default.size
10
default search record number limit
citizen.login.password.otp.enabled
true
whether citizen login otp based
employee.login.password.otp.enabled
false
whether employee login otp based
citizen.login.password.otp.fixed.value
123456
fixed otp for citizen
citizen.login.password.otp.fixed.enabled
false
allow fixed otp for citizen
otp.validation.register.mandatory
true
whether otp compulsory for registration
access.token.validity.in.minutes
10080
validity time of access token
refresh.token.validity.in.minutes
20160
validity time of refresh token
default.password.expiry.in.days
90
expiry date of a password
account.unlock.cool.down.period.minutes
60
unlock time
max.invalid.login.attempts.period.minutes
30
window size for counting attempts for lock
max.invalid.login.attempts
5
max failed login attempts before account is locked
egov.state.level.tenant.id
pb
Title
Link
User Data encryption promotion details
Encryption Service
Link
/citizen/_create
/users/_createnovalidate
/_search
/v1/_search
/_details
/users/_updatenovalidate
/profile/_update
/password/_update
/password/nologin/_update
/_logout
/user/oauth/token
Environment Variables
Description
egov.waterservice.createwaterconnection
This variable contains the kafka topic name which is used to create new water connection application in the system.
egov.waterservice.updatewaterconnection
This variable contains the kafka topic name which is used to update the existing water connection application in the system.
egov.waterservice.updatewaterconnection.workflow.topic
This variable contains the kafka topic name which is used to update the process instance of the water connection application.
egov.idgen.wcapid.name
This variable contains the idgen format name for water application
egov.idgen.wcapid.format
This variable contains the idgen format for water application ex:- WS/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]
egov.idgen.wcid.name
This variable contains the idgen format name for water connection
egov.idgen.wcid.format
This variable contains the idgen format for water connection ex:- WS_AP/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]
Title
Link
API Swagger Documentation
Water Calculator Service
Link
/ws-services/wc/_create
/ws-services/wc/_update
/ws-services/wc/_search
/ws-services/wc/_submitfeedback
/ws-services/wc/_getfeedback
/ws-services/wc/_revenueDashboard
/ws-services/wc/_revenueCollectionData
Environment Variables
Description
egov.user.event.notification.enabled
This variable is to check the event Notification enabled or not.
egov.challan.default.limit
This variable is to get the default limit value
egov.challan.max.limit
This variable to check the max limit value.
create.ws.workflow.name
This variable will give the business service name while creating the workflow.
notification.sms.enabled
This variable is to check the SMS notifications are enabled or not.
egov.localization.statelevel
This variable is used to check the localizations are state level or not.
egov.pending.collection.link
variable for collection list screen link for notifications
egov.monthly.summary.link
variable for monthly summary screen link for notifications
egov.new.Expenditure.link
variable for new expenditure screen link
egov.mark.paid.Expenditure.link
variable for paid expenditure screen link
egov.bilk.demand.failed.link
variable for mnaul bulk demand generation screen link
egov.today.collection.link
variable for today’s collection screen link
Title
Link
API Swagger Documentation
Link
echallan-services/eChallan/v1/_create
echallan-services/eChallan/v1/_update
echallan-services/eChallan/v1/_search
echallan-services/eChallan/v1/_chalanCollectionData
echallan-services/eChallan/v1/_chalanCollectionData
Environment Variables
Description
notification.sms.enabled
This variable is to check the SMS notifications are enabled or not.
notification.email.enabled
This variable is to check the email notifications are enabled or not.
download.bill.link.path
This variable is for download bill reciept path
egov.demand.gp.user.link
This variable is to get the common link to the home page
Link
/ws-calculator/meterConnection/_create
/ws-calculator/meterConnection/_search
/waterCalculator/_estimate
/waterCalculator/_calculate
/waterCalculator/_updateDemand
/waterCalculator/_jobscheduler
expiry.time.for.otp
3000
Expiry time of the otp
echallan-services/eChallan/v1/_chalanCollectionData
echallan-services/eChallan/v1/_chalanCollectionData
/ws-services/wc/_revenueDashboard
/ws-services/wc/_revenueCollectionData
/dashboard-analytics/dashboard/getChartV2
Title | Link |
Id-Gen service |
url-shortening |
MDMS |
TaxHead | Amount | Order | Full Payment(2000) | Partial Payment1(1500) | Partial payment2(750) | Partial payment2 with rebate(500) |
WS_CHARGE | 1000 | 6 | 1000 | 1000 | 750 | 750 |
AdjustedAmt | 1000 | -250 | -750 | -750 |
RemainingAMTfromPayableAMT | 0 | 0 | 0 | 0 |
Penality | 500 | 5 | 500 | 500 |
AdjustedAmt | 500 | -500 |
RemainingAMTfromPayableAMT | 1000 | 250 |
Interest | 500 | 4 | 500 | 500 |
AdjustedAmt | 500 | -500 |
RemainingAMTfromPayableAMT | 1500 | 750 |
Cess | 500 | 3 | 500 | 500 |
AdjustedAmt | 500 | -500 |
RemainingAMTfromPayableAMT | 2000 | 1250 |
Exm | -250 | 1 | -250 | -250 |
AdjustedAmt | -250 | 250 |
RemainingAMTfromPayableAMT | 2250 | 1750 |
Rebate | -250 | 2 | -250 | -250 |
AdjustedAmt | -250 | 250 |
RemainingAMTfromPayableAMT | 2500 | 750 |
TaxHead | Amount | TaxPeriodFrom | TaxPeriodTo | Order | Purpose |
WS_CHARGE | 1000 | 2014 | 2015 | 6 | Current |
AdjustedAmt | 0 |
Penality | 500 | 2014 | 2015 | 5 | Current |
AdjustedAmt | 0 |
Interest | 500 | 2014 | 2015 | 4 | Current |
AdjustedAmt | 0 |
Cess | 500 | 2014 | 2015 | 3 | Current |
AdjustedAmt | 0 |
Exm | -250 | 2014 | 2015 | 1 | Current |
AdjustedAmt | 0 |
TaxHead | Amount | TaxPeriodFrom | TaxPeriodTo | Order | Purpose |
WS_CHARGE | 1000 | 2014 | 2015 | 6 | Arrear |
AdjustedAmt | 0 |
WS_CHARGE | 1500 | 2015 | 2016 | 6 | Current |
AdjustedAmt | 0 |
Penality | 600 | 2014 | 2015 | 5 | Arrear |
AdjustedAmt | 0 |
Penalty | 500 | 2015 | 2016 | 5 | Current |
AdjustedAmt | 0 |
Interest | 500 | 2014 | 4 | Arrear |
AdjustedAmt | 0 |
Cess | 500 | 2014 | 3 | Arrear |
AdjustedAmt | 0 |
Exm | -250 | 2014 | 1 | Arrear |
AdjustedAmt | 0 |
Widgets
File Path
Description
Pagination
Pagination
BuildTextField
Text Field
BillsTable
Table
LabelText
Subtitle
Title
Link
API Swagger Contract
Water Service Document
bs.businesscode.demand.updateurl | { | Each module’s application calculator should provide its own update URL. if not present then new bill will be generated without making any changes to the demand. |
bs.bill.billnumber.format | BILLNO-{module}-[SEQ_egbs_billnumber{tenantid}] | IdGen format for bill number |
|
|
|
| enable disable workflow of bill amendment |
|
| topic name to push demand created, to be consumed by mgramseva adaptor |
|
| topic name to push demand updated, to be consumed mgram sevaadaptor |
|
| topic name to push bill created, to be consumed mgram seva |
|
| topic name to push bill updated, to be consumed mgram seva |
Title | Link |
/demand/_create, _update, _search |
/bill/_fetchbill, _search |
/amendment/_create, _update |
"WS":"