> For the complete documentation index, see [llms.txt](https://docs.digit.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digit.org/local-governance/access/local-governance-stack/water-and-sewerage/water-services/sewerage-service/sewerage-disconnection-calculator-service.md).

# Sewerage Disconnection Calculator Service

## Overview <a href="#overview" id="overview"></a>

TheSewerage Calculator Service is used for creating meter readings, searching meter readings, updating existing meter readings, calculating sewerage charges, demand generation, SMS & email notification to ULB officials on-demand generation and estimation of sewerage charges on basis of meter reading for existing sewerage application until the application is disconnected.

## Configuration Details <a href="#configuration-details" id="configuration-details"></a>

### MDMS Configuration <a href="#mdms-configuration" id="mdms-configuration"></a>

There are no additional billing slabs to be configured for sewerage disconnection, the calculation happens with the meter reading if added and uses existing billing slabs.

### **Billing Slabs**

**Criteria**

1. connection type
2. building type
3. calculation attribute
4. 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](https://github.com/egovernments/mdms-mgramseva/blob/DEV/data/pb/ws-services-calculation/WCBillingSlab.json). The following is the sample slab (Same as the water connection).

```
{
  "tenantId": "pb",
  "moduleName": "sw-services-calculation",
  "SCBillingSlab": [
    {
      "id": "1",
      "buildingType": "RESIDENTIAL",
      "calculationAttribute": "No. of water closets",
      "connectionType": "Non Metered",
      "minimumCharge": 0,
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 15
        }
      ]
    },
    {
      "id": "2",
      "buildingType": "RESIDENTIAL",
      "calculationAttribute": "No. of toilets",
      "connectionType": "Non Metered",
      "minimumCharge": 0,
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 15
        }
      ]
    },
    {
      "id": "3",
      "buildingType": "NONRESIDENTIAL",
      "calculationAttribute": "No. of water closets",
      "connectionType": "Non Metered",
      "minimumCharge": 0,
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "4",
      "buildingType": "NONRESIDENTIAL",
      "calculationAttribute": "No. of toilets",
      "connectionType": "Non Metered",
      "minimumCharge": 0,
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "5",
      "buildingType": "Commercial",
      "calculationAttribute": "No. of water closets",
      "connectionType": "Non Metered",
      "minimumCharge": 0,
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "6",
      "buildingType": "Commercial",
      "calculationAttribute": "No. of toilets",
      "connectionType": "Non Metered",
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "7",
      "buildingType": "Government",
      "calculationAttribute": "No. of water closets",
      "connectionType": "Non Metered",
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "8",
      "buildingType": "Government",
      "calculationAttribute": "No. of toilets",
      "connectionType": "Non Metered",
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 30
        }
      ]
    },
    {
      "id": "9",
      "buildingType": "Partly Commercial",
      "calculationAttribute": "No. of water closets",
      "connectionType": "Non Metered",
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 25
        }
      ]
    },
    {
      "id": "10",
      "buildingType": "Partly Commercial",
      "calculationAttribute": "No. of toilets",
      "connectionType": "Non Metered",
      "slabs": [
        {
          "from": 0,
          "to": 1000000000,
          "charge": 25
        }
      ]
    },
    {
      "id": "11",
      "buildingType": "RESIDENTIAL",
      "calculationAttribute": "Flat",
      "connectionType": "Non Metered",
      "minimumCharge": 100,
      "slabs": []
    },
    {
      "id": "12",
      "buildingType": "NONRESIDENTIAL",
      "calculationAttribute": "Flat",
      "connectionType": "Non Metered",
      "minimumCharge": 250,
      "slabs": []
    },
    {
      "id": "13",
      "buildingType": "Commercial",
      "calculationAttribute": "Flat",
      "connectionType": "Non Metered",
      "minimumCharge": 250,
      "slabs": []
    },
    {
      "id": "14",
      "buildingType": "Government",
      "calculationAttribute": "Flat",
      "connectionType": "Non Metered",
      "minimumCharge": 350,
      "slabs": []
    },
    {
      "id": "15",
      "buildingType": "Partly commercial",
      "calculationAttribute": "Flat",
      "connectionType": "Non Metered",
      "minimumCharge": 200,
      "slabs": []
    }
  ]
}
```

#### **Estimation** <a href="#estimation" id="estimation"></a>

For the disconnection application fee, the estimation will return all the related tax heads based on the criteria.

Following are the exemptions and taxes that are calculated:

* Form fee
* Scrutiny fee
* Other charges
* Security charges
* Tax and cess

#### Sewerage Disconnection Charge and Tax <a href="#sewerage-disconnection-charge-and-tax" id="sewerage-disconnection-charge-and-tax"></a>

The sewerage charge is based on the billing slab, and for sewerage disconnection application charge will be based on the slab and tax based on the master configuration.

**Interest**

Below is a sample of the master data JSON for interest:

```
{
  "tenantId": "pb",
  "moduleName": "sw-services-calculation",
  "Interest": [
    {
      "rate": 5,
      "minAmount": null,
      "applicableAfterDays":0,
      "flatAmount": null,
      "maxAmount": null,
      "fromFY": "2019-20",
      "startingDay": "1/01/2019"
    }
  ]
}


```

**Penalty**

Below is a sample of the master data JSON for penalty:

```
{
  "tenantId": "pb",
  "moduleName": "sw-services-calculation",
  "Penalty": [
    {
      "rate": 10,
      "minAmount": null,
      "applicableAfterDays": 0,
      "flatAmount": null,
      "fromFY": "2019-20",
      "startingDay": "1/01/2019"
    }
  ]
}


```

**Round Off**

If the fraction is greater than equal to 0.5 the number is rounded up else it’s rounded down. eg: 100.4 will be rounded to 100 while 100.6 will be rounded to 101.

## Demand Generation <a href="#demand-generation" id="demand-generation"></a>

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 the financial year start and end period.

In 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 SEWERAGE\_CHARGE equal to 120.

```
"demandDetails": [
                {
                    "id": "77ba1e93-a535-409c-b9d1-a312c409bd45",
                    "demandId": "687c3176-305b-461d-9cec-2fa26a30c88f",
                    "taxHeadMasterCode": "SEWERAGE_CHARGE",
                    "taxAmount": 120,
                    "collectionAmount": 120,
                    "additionalDetails": null,
                    "auditDetails": {
                        "createdBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "lastModifiedBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "createdTime": 1583675275873,
                        "lastModifiedTime": 1583675298705
                    },
                    "tenantId": "pb.amritsar"
                }
            ],

```

After updating if the SEWERAGE\_CHARGE increases to 150 we add one more demand detail to account for the increased amount. The demand detail will be updated to:

```
"demandDetails": [
                {
                    "id": "77ba1e93-a535-409c-b9d1-a312c409bd45",
                    "demandId": "687c3176-305b-461d-9cec-2fa26a30c88f",
                    "taxHeadMasterCode": "SEWERAGE_CHARGE",
                    "taxAmount": 120,
                    "collectionAmount": 0,
                    "additionalDetails": null,
                    "auditDetails": {
                        "createdBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "lastModifiedBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "createdTime": 1583675275873,
                        "lastModifiedTime": 1583675298705
                    },
                    "tenantId": "pb.amritsar"
                },
                {
                    "id": "0d83f4b0-6442-11ea-bc55-0242ac130003 ",
                    "demandId": "687c3176-305b-461d-9cec-2fa26a30c88f",
                    "taxHeadMasterCode": "SEWERAGE_CHARGE",
                    "taxAmount": 30,
                    "collectionAmount": 0,
                    "additionalDetails": null,
                    "auditDetails": {
                        "createdBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "lastModifiedBy": "04956309-87cd-4526-b4e6-48123abd4f3d",
                        "createdTime": 1583675275873,
                        "lastModifiedTime": 1583675298705
                    },
                    "tenantId": "pb.amritsar"
                }
            ],


```

The disconnection charges will be the addition of both demand details taxAmount and we can generate demand until the workflow is in `PENDING_FOR_DISCONNECTION_EXECUTION`.

{% hint style="info" %}
**Note:** if there is no pending payment when the connection gets approved then the workflow gets updated from `PENDING_APPROVAL_FOR_DISCONNECTION` to `PENDING_FOR_DISCONNECTION_EXECUTION` (it skips the payment step in the workflow internally).
{% endhint %}

Here the disconnection charges will be 120+30 = 150

RoundOff is bill based i.e every time bill is generated round off is adjusted so that the payable amount is the whole number. Individual SW\_ROUNDOFF in demand detail can be greater than 0.5 but the sum of all SW\_ROUNDOFF will always be less than 0.5.

**Final sewerage charges calculation**

`Final Sewerage Charges = Last Billing Period Amount * Days (Proposed disconnection date - Last Billing Date) / No. of days in last billing period`

The additional parameter is being sent in the calculation request for the disconnection application.

`disconnectRequest = true` if the request is for `_calculate` API disconnection application.

## API List

| <h4 id="title"><strong>Title</strong> </h4>       | **Link**                                                      |
| ------------------------------------------------- | ------------------------------------------------------------- |
| `/sw-calculator/sewerageCalculator/_calculate`    | <https://www.getpostman.com/collections/17c4374366ee4970ee0b> |
| `/sw-calculator/sewerageCalculator/_updateDemand` | <https://www.getpostman.com/collections/17c4374366ee4970ee0b> |

*(Note: All the APIs are in the same postman collection therefore the same link is added in each row)*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digit.org/local-governance/access/local-governance-stack/water-and-sewerage/water-services/sewerage-service/sewerage-disconnection-calculator-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
