> For the complete documentation index, see [llms.txt](https://docs.bullcredtech.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bullcredtech.com/api-reference/apis-en/guias/recontracting.md).

# Multiple Loans within the Global Limit

The **Multiple Loans within the Global Limit** allows a customer who already has an active contract (signed or disbursed) to start a new payroll-deducted credit proposal, without needing to wait for the previous contract to be fully closed.

***

## What is it and why does it exist?

In payroll-deducted credit operations, it is common for a customer to want to contract an additional amount before settling the current contract. Recontracting was designed to make this process seamless:

* The customer **does not need to be a new user** to start a proposal
* The API automatically detects whether a previous contract exists and decides whether the customer can proceed
* The verification of **delinquency** protects the operation: only customers up to date can recontract

{% hint style="info" %}
**For non-technical people**

When a customer already has a loan and wants to request another one, the system automatically checks whether they are paying the installments on time and whether the recontracting feature is enabled. If everything is okay, a new proposal is created normally.
{% endhint %}

***

## Full Flow

```mermaid
flowchart TD
    START(["Customer calls\nPOST /proposals/start"]) --> CHECK_APPROVED{{"CPF has a proposal\nawaiting disbursement?"}}

    CHECK_APPROVED -->|Yes| BLOCK_AWAIT[/"409\nPROPOSAL_AWAITING_DISBURSEMENT"/]
    CHECK_APPROVED -->|No| CHECK_FAILED{{"CPF has a proposal with\ndisbursement failure?"}}

    CHECK_FAILED -->|Yes| BLOCK_FINAL_F[/"409\nPROPOSAL_FINALIZED"/]
    CHECK_FAILED -->|No| CHECK_EXISTING{{"CPF has a contract\nSIGNED or DISBURSED?"}}

    CHECK_EXISTING -->|No| CREATE["✅ New proposal created\nstatus: CREATED"]

    CHECK_EXISTING -->|Yes| CHECK_ORIGIN{{"Recontracting\nenabled for\nthis origin?"}}

    CHECK_ORIGIN -->|No| BLOCK_FINAL[/"409\nPROPOSAL_FINALIZED"/]
    CHECK_ORIGIN -->|Yes| CHECK_DELINQ{{"Customer with\nactive delinquency?"}}

    CHECK_DELINQ -->|Yes| BLOCK_DELIN[/"409\nDELINQUENT_CONTRACT"/]
    CHECK_DELINQ -->|No| CREATE

    style CREATE fill:#90EE90,color:#000
    style BLOCK_AWAIT fill:#FFB6C1,color:#000
    style BLOCK_FINAL fill:#FFB6C1,color:#000
    style BLOCK_FINAL_F fill:#FFB6C1,color:#000
    style BLOCK_DELIN fill:#FFB6C1,color:#000
```

***

## Business Rules

### 1. Multiple loans enabled

When the feature is enabled for the origin, customers with contracts `SIGNED` or `DISBURSED` **can** start a new proposal, as long as they:

* Do not have overdue installments
* Do not have a proposal in the status `ANALYSIS_APPROVED` awaiting disbursement
* Do not have a pending disbursement failure

### 2. Multiple loans not enabled

When the feature is not enabled for the origin, any customer with a contract `SIGNED` or `DISBURSED` is **blocked** and receives the error `PROPOSAL_FINALIZED`.

### 3. Blocks independent of configuration

Regardless of whether recontracting is enabled or not, the following states always block the creation of a new proposal:

| Status                | Error Code                       | Reason                                                                 |
| --------------------- | -------------------------------- | ---------------------------------------------------------------------- |
| `ANALYSIS_APPROVED`   | `PROPOSAL_AWAITING_DISBURSEMENT` | Approved proposal awaiting disbursement; another one cannot be created |
| `DISBURSEMENT_FAILED` | `PROPOSAL_FINALIZED`             | Disbursement failure must be resolved first                            |

***

## Delinquency Check

When recontracting is enabled and the customer has an active contract, the API automatically checks whether there are overdue installments before allowing the creation of a new proposal.

* **No delinquency** → new proposal created successfully
* **With delinquency** → blocked with error `DELINQUENT_CONTRACT` and indication of the number of days overdue

***

## Scenarios and Responses

### Scenario 1: Successful recontracting

Customer has an active contract, is up to date, and recontracting is enabled for the origin.

**Request:**

```json
POST /proposals/start

{
  "cpf": "67593082121",
  "full_name": "Pedro Test Proposal",
  "birth_date": "1980-01-22"
}
```

**Response `201 Created`:**

```json
{
  "message": "Proposal created successfully",
  "proposal_id": "c3d4e5f6-0000-4000-8000-123456789abc",
  "cpf": "67593082121",
  "full_name": "PEDRO TEST PROPOSAL",
  "product_id": "d82b9334-0cdf-494c-b414-d12b356e54e6",
  "status": "CREATED"
}
```

From here on, the flow continues normally through the [7 proposal steps](/api-reference/apis-en/guias/proposal-flow.md).

***

### Scenario 2: Block due to delinquency

Customer has a contract with overdue installments.

**Response `409 Conflict`:**

```json
{
  "statusCode": 409,
  "message": "At the moment, it is not possible to proceed with the contract. Please contact our support.",
  "error": "Conflict",
  "errorCode": "DELINQUENT_CONTRACT",
  "longest_overdue_days": 45
}
```

The field `longest_overdue_days` indicates how many overdue days the most overdue installment in the contract has.

***

### Scenario 3: Block due to recontracting not enabled

The recontracting feature is not enabled for this origin.

**Response `409 Conflict`:**

```json
{
  "statusCode": 409,
  "message": "There is already a finalized proposal for this CPF",
  "error": "Conflict",
  "errorCode": "PROPOSAL_FINALIZED",
  "proposal_id": "a1b2c3d4-0000-4000-8000-aabbccddeeff",
  "status": "SIGNED"
}
```

***

### Scenario 4: Block due to proposal awaiting disbursement

There is an approved proposal that has not yet been disbursed.

**Response `409 Conflict`:**

```json
{
  "statusCode": 409,
  "message": "There is already an approved proposal awaiting disbursement for this CPF",
  "error": "Conflict",
  "errorCode": "PROPOSAL_AWAITING_DISBURSEMENT",
  "proposal_id": "b2c3d4e5-0000-4000-8000-112233445566",
  "status": "ANALYSIS_APPROVED"
}
```

***

## Decision Matrix

| Customer situation               | Recontracting enabled | Delinquency | Result                             |
| -------------------------------- | :-------------------: | :---------: | ---------------------------------- |
| No previous contracts            |           —           |      —      | ✅ New proposal                     |
| Contract `SIGNED` or `DISBURSED` |          Yes          |      No     | ✅ New proposal                     |
| Contract `SIGNED` or `DISBURSED` |          Yes          |     Yes     | ❌ `DELINQUENT_CONTRACT`            |
| Contract `SIGNED` or `DISBURSED` |           No          |      —      | ❌ `PROPOSAL_FINALIZED`             |
| Proposal `ANALYSIS_APPROVED`     |           —           |      —      | ❌ `PROPOSAL_AWAITING_DISBURSEMENT` |
| Proposal `DISBURSEMENT_FAILED`   |           —           |      —      | ❌ `PROPOSAL_FINALIZED`             |

***

## Enabling Multiple Loans

Multiple Loans is a feature configured by origin. To check whether it is enabled for your integration or to request activation, contact the Bull team.

***

## How to Handle Errors in Integration

| Error Code                       | Recommended action                                                                                                                                                                    |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DELINQUENT_CONTRACT`            | Inform the customer that it is not possible to proceed at the moment and instruct them to contact support. The field `longest_overdue_days` can be used to contextualize the message. |
| `PROPOSAL_AWAITING_DISBURSEMENT` | Inform the customer that there is already an approved proposal being processed and instruct them to wait for disbursement before trying again.                                        |
| `PROPOSAL_FINALIZED`             | Recontracting is not enabled for this origin or the customer already has an active contract that prevents a new contract.                                                             |

{% hint style="success" %}
**Next Step**

After creating the proposal successfully, continue through the normal flow: [Proposal Flow](/api-reference/apis-en/guias/proposal-flow.md)
{% endhint %}


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.bullcredtech.com/api-reference/apis-en/guias/recontracting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
