# Configure Census Connection

The objective of this service is to be able to configure the connection with a census through the administration panel without having to modify the application code.

It should be noted that to properly configure this connection, a technical profile that knows the WebService with which we want to connect will be required.

## Enabling the feature

To enable the feature you have to access from the administration panel to the **Settings > Global settings > Features** section and enable the **Configure connection to the remote census (SOAP)** module.

## Configuration

Once the feature is activated, we can access the section **Settings > Global settings** and click on the tab **Remote Census Configuration** to be able to configure the connection with the census.

The information to be filled in is divided into three sections:

### General Information

* **Endpoint**: Host name where the census service is available (wsdl).

### Request data

In this section we will fill in all the necessary fields to be able to make a request to verify a user through a census.

To help you understand how to fill in each of the fields, we will rely on a supposed WebService that receives a method called `:get_habita_datos` with the following structure:

```ruby
{
  request: {
    codigo_institucion: 12,        # Static Value
    codigo_portal:      5,         # Static Value
    codigo_usuario:     10,        # Static Value
    documento:          12345678Z, # Dynamic value related to Document Number
    tipo_documento:     1,         # Dynamic value related to Document Type
    nivel:              3          # Static Value
  }
}
```

Required fields for the request:

* **Request method name**: Request method name accepted by the census WebService.

  ![Request data - Request method name is filled in with get\_habita\_datos](/files/3ckEnlhT9PxFUIGGftLC)
* **Request Structure**: Structure of the request received by the WebService of the census. The *static* values of this request should be reported. The *dynamic* values related to Document Type, Document Number, Date of Birth and Postal Code should be filled with *null* value.

  ![Request data - Structure](/files/8hbHr2iKN5meB42yk7zf)

  ```ruby
  {
    request: {
      codigo_institucion: 12,        # Since it is a "fixed" value in all requests, we fill in it.
      codigo_portal:      5,         # Since it is a "fixed" value in all requests, we fill in it.
      codigo_usuario:     10,        # Since it is a "fixed" value in all requests, we fill in it.
      documento:          null,      # Since it is a value related to Document Type, Document Number, Date of Birth or Postal Code, we fill it in with a null value
      tipo_documento:     null,      # Since it is a value related to Document Type, Document Number, Date of Birth or Postal Code, we fill it in with a null value
      codigo_idioma:      102,       # Since it is a "fixed" value in all requests, we fill in it.
      nivel:              3          # Since it is a "fixed" value in all requests, we fill in it.
    }
  }
  ```
* **Path for document type**: Path in the request structure that sends the Document Type.

  *NOTE: DO NOT FILL IN if the WebService does not require the Document Type to verify a user.*

  ![Request data - Path for document type is filled in with request.tipo\_documento](/files/pYfZWYvMfgnQ3oBF0A4C)
* **Path for document number**: Path in the request structure that sends the Document Number.

  *NOTE: DO NOT FILL IN if the WebService does not require the Document Number to verify a user.*

  ![Request data - Path for document number is filled in with request.documento](/files/Jo0Nx5ip572KdP7j47rr)
* **Path for date of birth**: Path in the request structure that sends the Date of Birth.

  *NOTE: DO NOT FILL IN if the WebService does not require the Date of Birth to verify a user.*

  In *this example*, we will leave it blank, since it is not necessary to send the date of birth to verify a user.

  ![Request data - Path for date of birth is left blank](/files/MZhAW6V8lq4LnSEqvlnv)
* **Path for Postal Code**: Path in the request structure that sends the Postal Code.

  *NOTE: DO NOT FILL IN if the WebService does not require the Postal Code to verify a user.*

  In *this example*, we will leave it blank, since it is not necessary to send the postal code to verify a user.

  ![Request data - Path for postal code is left blank](/files/6kBNEo3ctPJB13RSigZE)

### Response data

In this section we will configure all the necessary fields to be able to receive the answer of the WebService and to verify a user in the application.

As in the previous section, we will define an example answer to help you understand how to fill in each of the fields in this section.

```ruby
{
  get_habita_datos_response: {
    get_habita_datos_return: {
      datos_habitante: {
        item: {
          fecha_nacimiento_string: "31-12-1980",
          identificador_documento: "12345678Z",
          descripcion_sexo: "Varón",
          nombre: "José",
          apellido1: "García"
        }
      },
      datos_vivienda: {
        item: {
          codigo_postal: "28013",
          codigo_distrito: "01"
        }
      }
    }
  }
}
```

Required fields to parse the response:

* **Path for Date of Birth**: Path in the response structure containing the user's Date of Birth.

  ![Response data - Path for date of birth is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_habitante.item.fecha\_nacimiento\_string](/files/6Pl5V9lXt79UXuLjwX1t)
* **Path for Postal Code**: Path in the response structure containing the user's Postal Code.

  ![Response data - Path for postal code is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_vivienda.item.codigo\_postal](/files/8EGztHDcJQa5Hr2h1TNj)
* **Path for District**: Path in the response structure containing the user's District.

  ![Response data - Path for district is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_vivienda.item.codigo\_distrito](/files/80BM28OJg6k7eyIyqQkD)
* **Path for Gender**: Path in the response structure containing the user's Gender.

  ![Response data - Path for gender is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_habitante.item.descripcion\_sexo](/files/WYorw6KQ4Xljy0oBxWzx)
* **Path for Name**: Path in the response structure containing the user's Name.

  ![Response data - Path for name is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_habitante.item.nombre](/files/jdkgm6St4Qe4uLH6IK3c)
* **Path for the Last Name**: Path in the response structure containing the user's Last Name.

  ![Response data - Path for last name is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_habitante.item.apellido1](/files/iDU2OBKAWBhulvVIQeU5)
* **Path for detecting a valid response**: Path in the response structure that must be filled in in valid responses.

  ![Response data - Path for valid response is filled in with get\_habita\_datos\_response.get\_habita\_datos\_return.datos\_habitante.item](/files/gaA1RjQq1qQSMfKoyy3q)

  Once the general data, the necessary fields of the request and **all** fields to validate the response have been correctly filled in, the application will be able to verify any user through the defined WebService.


---

# Agent Instructions: 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.consuldemocracy.org/tech_docs/features/census_configuration.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.
