Measurement Book Service

Overview

The measurement book service integrates estimate line item validation and workflow along with the measurement book registry.

Pre-requisites

A running DIGIT platform is needed to deploy the measurement service. Specifically, the following dependencies are needed:

  • DIGIT backbone services

  • Persister

  • Indexer

  • MDMS

  • Measurement Book Registry

  • Estimate

  • Contract

  • Project

  • HRMS

  • Localization

  • Workflow

Functionality

This service provides APIs to create, update and search for measurement service. Refer to the functional specifications here.

Deployment

The below variables should be configured for the measurement registry in the Helm environment file prior to deployment. The Helm environment file will be located under:

https://github.com/{{ORG}}/DIGIT-DevOps/deploy-as-code/helm/environments/{{EnvironmentFile}}.yaml

Refer to the sample here.

  • Add db-host,db-name,db-url,domain and all the digit core platform services configurations (Idgen, workflow,user etc.) in the YAML file.

  • Add the ‘egov-mdms-service’ related configuration to the respective environment YAML file. Make sure you change the gitsync.branch name.

  • Check the measurement-registry persister file is added to the egov-persister.perister-yml-path variable. If not, please add the way it's done here.

  • Make sure to add the DB(Postgres and flyway) username & password in the respective environment secret yaml file. Follow the steps here.

  • Make sure to add the DIGIT core services-related secrets configured in the respective environment secret file. Follow the steps here.

Restart egov-mdms-service, egov-persister, egov-indexer, inbox, egov-workflow-v2, egov-accesscontrol and zuul after the above changes are performed.

Configuration

Configure MDMS

Configure actions, roles and role-action mappings from the table below. Follow the steps here.

Role
APIs

MB_CREATOR

/measurement-service/v1/_create

/measurement-service/v1/_update

/measurement-service/v1/_search

/wms/measurement-service/_search

MB_VERIFIER

/measurement-service/v1/_update

/measurement-service/v1/_search

/wms/measurement-service/_search

MB_APPROVER

/measurement-service/v1/_update

/measurement-service/v1/_search

MB_VIEWER

/measurement-service/v1/_search

/wms/measurement-service/_search

EMPLOYEE_COMMON

/inbox/v2/_search

These must be translated into JSON in the role-action mapping module in MDMS.

Example - available here.

Configure Workflows

Measurement Service Workflow

The following workflow JSON needs to be put in the request body of the /egov-workflow-v2/egov-wf/businessservice/_create API.

"BusinessServices": [
{
  "tenantId": "pg",
  "businessService": "MB",
  "business": "measurement-book-service",
  "businessServiceSla": 432000000,
  "states": [
    {
      "sla": null,
      "state": null,
      "applicationStatus": null,
      "docUploadRequired": true,
      "isStartState": true,
      "isTerminateState": false,
      "isStateUpdatable": true,
      "actions": [
        {
          "action": "SAVE_AS_DRAFT",
          "nextState": "DRAFTED",
          "roles": [
           "MB_CREATOR"
          ]
        }
      ]
    },
    {
      "sla": null,
      "state": "DRAFTED",
      "applicationStatus": "DRAFTED",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": false,
      "isStateUpdatable": false,
      "actions": [
        {
          "action": "SUBMIT",
          "nextState": "PENDING_FOR_VERIFICATION",
          "roles": [
            "MB_CREATOR"
          ]
        },
        {
          "action": "REJECT",
          "nextState": "REJECTED",
          "roles": [
            "MB_CREATOR"
          ]
        }
      ]
    },
    {
      "sla": 172800000,
      "state": "PENDING_FOR_VERIFICATION",
      "applicationStatus": "SUBMITTED",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": false,
      "isStateUpdatable": false,
      "actions": [
        {
          "action": "VERIFY_AND_FORWARD",
          "nextState": "PENDING_FOR_APPROVAL",
          "roles": [
           "MB_VERIFIER"
          ]
        },
        {
          "action": "SENT_BACK",
          "nextState": "PENDING_FOR_CORRECTION",
          "roles": [
            "MB_VERIFIER"
          ]
        },
        {
          "action": "REJECT",
          "nextState": "REJECTED",
          "roles": [
            "MB_VERIFIER"
          ]
        }
      ]
    },
    {
      "sla": 86400000,
      "state": "PENDING_FOR_APPROVAL",
      "applicationStatus": "VERIFIED",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": false,
      "isStateUpdatable": false,
      "actions": [
        {
          "action": "SENT_BACK",
          "nextState": "PENDING_FOR_VERIFICATION",
          "roles": [
            "MB_APPROVER"
          ]
        },
        {
          "action": "APPROVE",
          "nextState": "APPROVED",
          "roles": [
            "MB_APPROVER"
          ]
        },
        {
          "action": "REJECT",
          "nextState": "REJECTED",
          "roles": [
            "MB_APPROVER"
          ]
        },
        {
          "action": "SEND_BACK_TO_ORIGINATOR",
          "nextState": "PENDING_FOR_VERIFICATION",
          "roles": [
            "MB_APPROVER"
          ]
        }
      ]
    },
    {
      "sla": 86400000,
      "state": "PENDING_FOR_CORRECTION",
      "applicationStatus": "SENT_BACK",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": false,
      "isStateUpdatable": false,
      "actions": [
        {
          "action": "EDIT/RE-SUBMIT",
          "nextState": "PENDING_FOR_VERIFICATION",
          "roles": [
            "MB_CREATOR"
          ]
        },
        {
          "action": "REJECT",
          "nextState": "REJECTED",
          "roles": [
            "MB_CREATOR"
          ]
        },
        {
          "action": "SEND_BACK_TO_ORIGINATOR",
          "nextState": "PENDING_FOR_VERIFICATION",
          "roles": [
            "MB_CREATOR"
          ]
        }
      ]
    },
    {
      "sla": null,
      "state": "REJECTED",
      "applicationStatus": "REJECTED",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": true,
      "isStateUpdatable": false,
      "actions": null
    },
    {
      "sla": null,
      "state": "APPROVED",
      "applicationStatus": "APPROVED",
      "docUploadRequired": false,
      "isStartState": false,
      "isTerminateState": true,
      "isStateUpdatable": false,
      "actions": null
    }

  ]
}
]

Workflow configuration

Configure Persister

Make sure that the file measurement-service-persister.yml is present in the configs repository in the below location.

https://github.com/<YOUR ORGANISATION>/configs/tree/UNIFIED-DEV/works/egov-persister

Configure Indexer

Please make sure that the file measurement-service-indexer.yml is present in the configs repository in the below location.

https://github.com/<YOUR ORGANISATION>/configs/tree/UNIFIED-DEV/works/egov-indexer

Make sure to restart MDMS, persister service and indexer service after adding the file at the above location.

Configure Inbox

In the MDMS repository, locate the inbox configuration file. Make sure the following JSON is added to the inbox configuration:

{
  "module": "measurement-service",
  "index": "measurement-service-index",
  "allowedSearchCriteria": [
    {
      "name": "tenantId",
      "path": "Data.tenantId.keyword",
      "isMandatory": true,
      "operator": "EQUAL"
    },
    {
      "name": "status",
      "path": "Data.currentProcessInstance.state.uuid.keyword",
      "isMandatory": false
    },
    {
      "name": "measurementNumber",
      "path": "Data.measurementNumber.keyword",
      "isMandatory": false,
      "operator": "EQUAL"
    },
    {
      "name": "projectId",
      "path": "Data.contract.additionalDetails.projectId.keyword",
      "isMandatory": false,
      "operator": "EQUAL"
    },
    {
      "name": "ward",
      "path": "Data.contract.additionalDetails.ward.keyword",
      "isMandatory": false,
      "operator": "EQUAL"
    },
    {
      "name": "assignee",
      "path": "Data.currentProcessInstance.assignes.uuid.keyword",
      "isMandatory": false
    },
    {
      "name": "projectType",
      "path": "Data.contract.additionalDetails.projectType.keyword",
      "isMandatory": false,
      "operator": "EQUAL"
    }

  ],
  "sortBy": {
    "path": "Data.auditDetails.createdTime",
    "defaultOrder": "DESC"
  },
  "sourceFilterPathList": [
    "Data.referenceId",
    "Data.id",
    "Data.measurementNumber",
    "Data.measures",
    "Data.auditDetails",
    "Data.history",
    "Data.currentProcessInstance",
    "Data.additionalDetails",
    "Data.workflow",
    "Data.wfStatus",
    "Data.contract.additionalDetails",
    "Data.contract.id",
    "Data.contract.contractNumber",
    "Data.contract.additionalDetails"
  ]
}

Last updated

All content on this page by eGov Foundation is licensed under a Creative Commons Attribution 4.0 International License.