# Integration Paradigms

## Semi-Integrated <a href="#semi-integrated" id="semi-integrated"></a>

The payment device contains a complete payment application which interfaces to an external ECR/POS system, and handles all host interactions. The Payment SDK is embedded in the ECR/POS system.

{% @plantuml/diagram content="    @startuml

```
actor "Cashier"

component "BYOD\n" as byod <<device>> {
  rectangle "POS"
  rectangle "PSDK" as PSDK <<highlight>> {
    rectangle "Payment App\nProtocol Adapter" as ProtocolAdapter <<highlight>>
  }
  POS <<-d->> PSDK
  POS <<-l->> Cashier
}

component "POI\n" as POI <<device>> {
  rectangle "Payment App" as PaymentApp <<highlight>>
  ProtocolAdapter <<-r->> PaymentApp
}

actor "Customer"
PaymentApp <<-r->> Customer

cloud "Payment Host" as Host
PaymentApp <<-d->> Host

@enduml" %}
```

## Semi-Integrated <a href="#slim-integrated" id="slim-integrated"></a>

{% @plantuml/diagram content="    @startuml

```
actor "Cashier"

component "BYOD\n" as byod <<device>> {
  rectangle "POS"
  rectangle "PSDK" as PSDK <<highlight>> {
    rectangle "Payment App\nProtocol Adapter" as ProtocolAdapter <<highlight>>
  }
  POS <<-d->> PSDK
  POS <<-l->> Cashier
}

component "POI\n" as POI <<device>> {
  rectangle "Payment App" as PaymentApp <<highlight>>
  ProtocolAdapter <<-r->> PaymentApp
}

actor "Customer"
PaymentApp <<-r->> Customer

cloud "Payment Host" as Host
PaymentApp <<-d->> Host

@enduml" %}
```

## Slim-Integrated <a href="#slim-integrated" id="slim-integrated"></a>

In the slim-integrated model, supported only by the Android terminal, the payment application no longer communicates directly with the host, but rather sends a transaction event for host authorization/finalization to the POS application, which manages the host interactions.

{% @plantuml/diagram content="        @startuml
scale 300 width
scale 300 height

```
    component "Retailer ECR System\n" as ECR <<device>> #Ivory {
      rectangle "POS" #LightYellow {
        rectangle "Cross-Platform PSDK" #LightSkyBlue {
          rectangle "Payment Adapter" as PA
        }
      }
    }

    cloud "Payment Host" as HOST #ivory
    PA <<-d->> HOST

    component "Engage Payment Device\n" as Engage <<device>> 

    Engage -[hidden]> ECR
    hide Engage

    component "Android Payment Device\n" as Android <<device>> #Ivory {
      rectangle "POS Application" as POSAPP {
        rectangle "PSDK" as PSDKAND #LightSkyBlue
      }
      rectangle "Android Payment\nApplication" as AndroidAPP
      rectangle "Card Reader\nService" as CRS
      rectangle "Headless SDI" as HeadlessSDI #LightSalmon
      POSAPP <<-d->> AndroidAPP
      AndroidAPP <<-d->> CRS
      CRS <<-d->> HeadlessSDI 
      PA <<-r->> AndroidAPP
    }
   
    @enduml" %}
```

## Fully-integrated Android Design

{% @plantuml/diagram content="    @startuml

```
actor "Cashier"

component "BYOD\n" as byod <<device>> {
  rectangle "POS"
  rectangle "PSDK" as PSDK <<highlight>> {
    rectangle "Payment App\nProtocol Adapter" as ProtocolAdapter <<highlight>>
    rectangle "Host Module Adapter" as HostAdapter <<highlight>>
    ProtocolAdapter -[hidden]- HostAdapter
  }
  POS <<-d->> PSDK
  POS <<-l->> Cashier
}

component "POI\n" as POI <<device>> {
  rectangle "Payment App" as PaymentApp <<highlight>>
  rectangle "Host Module Proxy" as HostModule <<highlight>>
  PaymentApp <<-d->> HostModule
  ProtocolAdapter <<-r->> PaymentApp
  HostAdapter <<-r->> HostModule
}

actor "Customer"
PaymentApp <<-r->> Customer

cloud "Payment Host" as Host
POS <<-r->> Host

@enduml" %}
```

## Fully-integrated Engage Design

{% @plantuml/diagram content="    @startuml

```
actor "Cashier"

component "BYOD\n" as byod <<device>> {
  rectangle "POS"
  rectangle "PSDK" as PSDK <<highlight>> {
    rectangle "SDI\nProtocol Adapter" as ProtocolAdapter <<highlight>>
  }
  POS <<-d->> PSDK
  POS <<-l->> Cashier
}

component "POI\n" as POI <<device>> {
  rectangle "SDI Server" as PaymentApp <<highlight>>
  ProtocolAdapter <<-r->> PaymentApp
}

actor "Customer"
PaymentApp <<-r->> Customer

cloud "Payment Host" as Host
POS <<-r->> Host


@enduml" %}
```


---

# 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.verifone.com/psdk/not-sure-where-these-live/integration_types.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.
