"""visaacceptancemergedspec.

This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
"""

# ruff: noqa: E501
from visaacceptancemergedspec.api_helper import (
    APIHelper,
)
from visaacceptancemergedspec.models.emv import (
    Emv,
)


class PointOfSaleInformation(object):
    """Implementation of the 'PointOfSaleInformation' model.

    Attributes:
        terminal_id (str): Identifier for the terminal at your retail location. You
            can define this value yourself, but consult the processor for
            requirements.  #### Visa Acceptance through VisaNet A list of all
            possible values is stored in your Visa Acceptance account. If terminal ID
            validation is enabled for your Visa Acceptance account, the value you
            send for this field is validated against the list each time you include
            the field in a request. To enable or disable terminal ID validation,
            contact Visa Acceptance Customer Support.  When you do not include this
            field in a request, Visa Acceptance uses the default value that is
            defined in your Visa Acceptance account.  #### FDC Nashville Global To
            have your account configured to support this field, contact Visa
            Acceptance Customer Support. This value must be a value that FDC
            Nashville Global issued to you.  #### For Payouts This field is
            applicable for Visa Acceptance through VisaNet.  #### GPX Identifier for
            the terminal at your retail location. A list of all possible values is
            stored in your account. If terminal ID validation is enabled for your
            account, the value you send for this field is validated against the list
            each time you include the field in a request. To enable or disable
            terminal ID validation, contact customer support.  When you do not
            include this field in a request, the default value that is defined in
            your account is used.  Optional for authorizations.  #### Used by
            **Authorization** Optional for the following processors. When you do not
            include this field in a request, the default value that is defined in
            your account is used.   - American Express Direct   - Credit Mutuel-CIC
            - FDC Nashville Global   - SIX - Chase Paymentech Solutions: Optional
            field. If you include this field in your request, you must also include
            `pointOfSaleInformation.catLevel`. - FDMS Nashville: The default value
            that is defined in your account is used. - GPX - OmniPay Direct: Optional
            field.  For the following processors, this field is not used. - GPN - JCN
            Gateway - RBS WorldPay Atlanta - TSYS Acquiring Solutions - Worldpay VAP
            #### Card Present reply Terminal identifier assigned by the acquirer.
            This value must be printed on the receipt.
        terminal_serial_number (str): Terminal serial number assigned by the hardware
            manufacturer. This value is provided by the client software that is
            installed on the POS terminal.  This value is not forwarded to the
            processor. Instead, the value is forwarded to the reporting
            functionality.  #### Used by **Authorization and Credit** Optional. This
            field is supported only by client software that is installed on your POS
            terminals for the following processors: - American Express Direct -
            Credit Mutuel-CIC - FDC Nashville Global - OmniPay Direct - SIX
        cardholder_verification_method_used (int): Method that was used to verify the
            cardholder's identity. Possible values:    - `0`: No verification   -
            `1`: Signature   - `2`: PIN   - `3`: Cardholder device CVM   - `4`:
            Biometric   - `5`: OTP
        lane_number (str): Identifier for an alternate terminal at your retail
            location. You define the value for this field.  This field is supported
            only for MasterCard transactions on FDC Nashville Global. Otherwise, this
            field is not used by all other processors. Use the `terminalId` field to
            identify the main terminal at your retail location. If your retail
            location has multiple terminals, use this `laneNumber` field to identify
            the terminal used for the transaction.  This field is a pass-through,
            which means that the value is not checked or modified in any way before
            sending it to the processor.  Optional field.  #### Card present reply
            messaging Identifier for an alternate terminal at your retail location.
            You defined the value for this field in the request message. This value
            must be printed on the receipt.  This field is supported only for
            MasterCard transactions on FDC Nashville Global.
        cat_level (int): Type of cardholder-activated terminal. Possible values:   -
            1: Automated dispensing machine  - 2: Self-service terminal  - 3: Limited
            amount terminal  - 4: In-flight commerce (IFC) terminal  - 5: Radio
            frequency device  - 6: Mobile acceptance terminal  - 7: Electronic cash
            register  - 8: E-commerce device at your location  - 9: Terminal or cash
            register that uses a dialup connection to connect to the transaction
            processing network  - 10: Card Activated Fuel Dispenser  - 11: Travel
            ticket vending machine #### Chase Paymentech Solutions Only values 1, 2,
            and 3 are supported.  Required if `pointOfSaleInformation.terminalID` is
            included in the request; otherwise, optional.  #### Visa Acceptance
            through VisaNet Values 1 through 6 are supported on Visa Acceptance
            through VisaNet, but some acquirers do not support all six values.
            Optional field.  #### FDC Nashville Global Only values 7, 8, and 9 are
            supported.  Optional field for EMV transactions; otherwise, not used.
            #### GPN Only values 6, 7, 8, and 9 are supported.  Required field.  ####
            JCN Gateway Only values 6, 7, 8, and 9 are supported.  Required field.
            #### TSYS Acquiring Solutions Only value 6 is supported.  Required for
            transactions from mobile devices; otherwise, not used.  #### All other
            processors Not used.  Nonnegative integer.
        entry_mode (str): Method of entering payment card information into the POS
            terminal. Possible values:   - `contact`: Read from direct contact with
            chip card.  - `contactless`: Read from a contactless interface using chip
            data.  - `keyed`: Manually keyed into POS terminal. This value is not
            supported on OmniPay Direct.  - `msd`: Read from a contactless interface
            using magnetic stripe data (MSD). This value is not supported on OmniPay
            Direct.  - `swiped`: Read from credit card magnetic stripe.  The
            `contact`, `contactless`, and `msd` values are supported only for EMV
            transactions.  #### Used by **Authorization** Required field.  #### Card
            Present Card present information about EMV applies only to credit card
            processing and PIN debit processing. All other card present information
            applies only to credit card processing.  #### PIN debit Required for a
            PIN debit purchase and a PIN debit credit request.
        terminal_capability (int): POS terminal’s capability. Possible values:   -
            `1`: Terminal has a magnetic stripe reader only.  - `2`: Terminal has a
            magnetic stripe reader and manual entry capability.  - `3`: Terminal has
            manual entry capability only.  - `4`: Terminal can read chip cards.  -
            `5`: Terminal can read contactless chip cards; cannot use contact to read
            chip cards.  For an EMV transaction, the value of this field must be `4`
            or `5`.  #### PIN debit Required for PIN debit purchase and PIN debit
            credit request.  #### Used by **Authorization** Required for the
            following processors: - American Express Direct - Chase Paymentech
            Solutions - Credit Mutuel-CIC - FDC Nashville Global - FDMS Nashville -
            OmniPay Direct - SIX - Worldpay VAP  Optional for the following
            processors: - Visa Acceptance through VisaNet - GPN - GPX - JCN Gateway -
            RBS WorldPay Atlanta - TSYS Acquiring Solutions
        operating_environment (str): Operating environment.  Possible values for all
            card types except Mastercard: - `0`: No terminal used or unknown
            environment. - `1`: On merchant premises, attended. - `2`: On merchant
            premises, unattended. Examples: oil, kiosks, self-checkout, mobile
            telephone, personal digital assistant (PDA). - `3`: Off merchant
            premises, attended. Examples: portable POS devices at trade shows, at
            service calls, or in taxis. - `4`: Off merchant premises, unattended.
            Examples: vending machines, home computer, mobile telephone, PDA. - `5`:
            On premises of cardholder, unattended. - `9`: Unknown delivery mode. -
            `S`: Electronic delivery of product. Examples: music, software, or
            eTickets that are downloaded over the internet. - `T`: Physical delivery
            of product. Examples: music or software that is delivered by mail or by a
            courier.  #### Possible values for Mastercard: - `2`: On merchant
            premises, unattended, or cardholder terminal. Examples: oil, kiosks,
            self-checkout, home computer, mobile telephone, personal digital
            assistant (PDA). Cardholder terminal is supported only for Mastercard
            transactions on Visa Acceptance through VisaNet. - `4`: Off merchant
            premises, unattended, or cardholder terminal. Examples: vending machines,
            home computer, mobile telephone, PDA. Cardholder terminal is supported
            only for Mastercard transactions on Visa Acceptance through VisaNet.
            This field is supported only for American Express Direct and Visa
            Acceptance through VisaNet.
        emv (Emv): The model property of type Emv.
        amex_capn_data (str): Point-of-sale details for the transaction. This value
            is returned only for **American Express Direct**. Visa Acceptance
            generates this value, which consists of a series of codes that identify
            terminal capability, security data, and specific conditions present at
            the time the transaction occurred. To comply with the CAPN requirements,
            this value must be included in all subsequent follow-on requests, such as
            captures and follow-on credits.  When you perform authorizations,
            captures, and credits through Visa Acceptance, Visa Acceptance passes
            this value from the authorization service to the subsequent services for
            you. However, when you perform authorizations through Visa Acceptance and
            perform subsequent services through other financial institutions, you
            must ensure that your requests for captures and credits include this
            value.
        track_data (str): Card’s track 1 and 2 data. For all processors except FDMS
            Nashville, this value consists of one of the following:   - Track 1 data
            - Track 2 data  - Data for both tracks 1 and 2  For FDMS Nashville, this
            value consists of one of the following:  - Track 1 data  - Data for both
            tracks 1 and 2  Example: %B4111111111111111^SMITH/JOHN
            ^1612101976110000868000000?;4111111111111111=16121019761186800000?  ####
            Used by **Authorization** Required for Chase Paymentech Solutions, Credit
            Mutuel-CIC, Visa Acceptance through VisaNet, FDC Nashville Global, JCN
            Gateway, OmniPay Direct, and SIX if `pointOfSaleInformation.entryMode` is
            equal to one of these values: - `contact` - `contactless` - `msd` -
            `swiped` Otherwise, this field not used.  Required for all other
            processors if `pointOfSaleInformation.entryMode=swiped`; otherwise, this
            field is not used.  #### GPX This field only supports transactions from
            the following card types: - Visa - Mastercard - AMEX - Discover - Diners
            - JCB - Union Pay International  #### PIN debit Track 2 data from the
            debit card. The sentinels are required. Required field for a PIN debit
            purchase and a PIN debit credit.
        store_and_forward_indicator (str): When connectivity is unavailable, the
            client software that is installed on the POS terminal can store a
            transaction in its memory and send it for authorization when connectivity
            is restored. This value is provided by the client software that is
            installed on the POS terminal.  This value is not forwarded to the
            processor. Instead, the value is forwarded to the reporting
            functionality.  Possible values: - `Y`: Transaction was stored and then
            forwarded. - `N` (default): Transaction was not stored and then
            forwarded.  For authorizations and credits, this field is supported only
            on these processors: - American Express Direct - FDC Nashville Global -
            OmniPay Direct - SIX  Optional field.
        cardholder_verification_method (List[str]): Complete list of cardholder
            verification methods (CVMs) supported by the terminal. Optional field.
            Possible values: - `PIN`: For terminals with a PIN Pad - `Signature`: For
            terminals capable of receiving a signature - `pinOnGlass`: For terminals
            where PIN is entered on a glass-based capture mechanism  **EXAMPLE**:
            ["PIN","Signature"]; ["pinOnGlass","Signature"]
        terminal_category (str): Indicates the type of terminal.   Possible values: -
            `AFD`: Automated Fuel Dispenser
        terminal_input_capability (List[str]): Complete list of card input methods
            supported by the terminal.  Possible values: - `Keyed`: Terminal can
            accept card data that is entered manually. - `Swiped`: Terminal can
            accept card data from a magnetic stripe reader. - `Contact`: Terminal can
            accept card data in EMV contact mode ("dipping a card"). - `Contactless`:
            Terminal can accept card data in EMV contactless mode ("tapping a card").
            - `BarCode`: Terminal can read bar codes. - `QRcode`: Terminal can read
            or scan QR codes. - `OCR`: Terminal can perform optical character
            recognition (OCT) on the card.  **EXAMPLE**:
            ["Keyed","Swiped","Contact","Contactless"]  #### Used by **Authorization
            and Credit** Optional. This field is supported only by client software
            that is installed on your POS terminals for the following processors: -
            American Express Direct - Credit Mutuel-CIC - FDC Nashville Global -
            OmniPay Direct - SIX
        terminal_card_capture_capability (str): Indicates whether the terminal can
            capture the card.  Possible values: - `1`: Terminal can capture card. -
            `0`: Terminal cannot capture card.  For authorizations and credits, this
            field is supported only by these processors: - American Express Direct -
            Credit Mutuel-CIC - OmniPay Direct  Optional field.
        terminal_output_capability (str): Indicates whether the terminal can print or
            display messages.  Possible values: - 1: Neither - 2: Print only - 3:
            Display only - 4: Print and display - 5: Merchant terminal supports
            purchase only approvals  This field is supported for authorizations and
            credits only on the following processors: - American Express Direct -
            Credit Mutuel-CIC - FDC Nashville Global - OmniPay Direct - SIX - VisaNet
            Optional field.
        terminal_pin_capability (int): Maximum PIN length that the terminal can
            capture.  Possible values: -  0: No PIN capture capability -  1: PIN
            capture capability unknown -  2: PIN Pad down -  4: Four characters -  5:
            Five characters -  6: Six characters -  7: Seven characters -  8: Eight
            characters -  9: Nine characters - 10: Ten characters - 11: Eleven
            characters - 12: Twelve characters  This field is supported for
            authorizations and credits only on the following processors: - American
            Express Direct - Credit Mutuel-CIC - OmniPay Direct - SIX - Visa Platform
            Connect  Required field for authorization or credit of PIN transactions.
        pin_entry_solution (str): This field will contain the type of Pin Pad the
            terminal has.  Possible values: -   PCI-SPoC: Where the pin is being put
            on screen -   PCI-PTS: Where the pin is being put on actual hardware pin
            pad
        device_id (str): Value created by the client software that uniquely
            identifies the POS device. This value is provided by the client software
            that is installed on the POS terminal.  Visa Acceptance does not forward
            this value to the processor. Instead, the value is forwarded to the Visa
            Acceptance reporting functionality.  This field is supported only on
            American Express Direct, FDC Nashville Global, and SIX.
        pin_block_encoding_format (int): Format that is used to encode the PIN block.
            This value is provided by the client software that is installed on the
            POS terminal.  Possible values: - `0`: ISO 9564 format 0 - `1`: ISO 9564
            format 1 - `2`: ISO 9564 format 2 - `3`: ISO 9564 format 3  #### Used by
            **Authorization, PIN Debit** - Required when the cardholder enters a PIN
            and the card cannot verify the PIN, which means that the issuer must
            verify the PIN. - Required for PIN debit credit or PIN debit purchase.
            For authorizations, this field is supported only on these processors: -
            American Express Direct - Credit Mutuel-CIC - FDC Nashville Global -
            OmniPay Direct - SIX  This field is also supported by processors that
            support chip and online PIN transactions. The following table lists the
            EMV Cards and Cardholder Verification Methods (CVMs) that these
            processors support:  | Processor | Chip and Offline PIN | Chip and Online
            PIN | Chip and Signature | | --- | --- | --- | --- | | American Express
            Direct | Yes | Yes | Yes | | Chase Paymentech Solutions | No | No | Yes |
            | Credit Mutuel-CIC | Yes | Yes | Yes | | Visa Acceptance through VisaNet
            | Yes | No | Yes | | FDC Nashville Global | Yes | Yes | Yes | | GPN | No
            | No | Yes | | OmniPay Direct | Yes | No | Yes | | SIX | Yes | Yes | Yes
            |  #### GPX For chip and online PIN transactions for authorization, GPX
            supports the following EMV Cards and Cardholder Verification Methods
            (CVMs): - Chip and Offline PIN - Chip and Signature  For PIN Debit
            Purchase and Credit Service transactions, GPX supports the following EMV
            Cards and Cardholder Verification Methods (CVMs): - Chip and Online PIN
        encrypted_pin (str): Encrypted PIN.  This value is provided by the client
            software that is installed on the POS terminal.  #### Used by
            **Authorization, PIN Debit** Required when the cardholder enters a PIN
            and the card cannot verify the PIN, which means that the issuer must
            verify the PIN. Required for PIN debit credit or PIN debit purchase.
            Required for online PIN transactions.  For authorizations, this field is
            supported only on these processors: - American Express Direct - Credit
            Mutuel-CIC - FDC Nashville Global - OmniPay Direct - SIX  This field is
            also used by processors that support chip and online PIN transactions.
            The following table lists the EMV Cards and Cardholder Verification
            Methods (CVMs) that these processors support:  | Processor | Chip and
            Offline PIN | Chip and Online PIN | Chip and Signature | | --- | --- |
            --- | --- | | American Express Direct | Yes | Yes | Yes | | Chase
            Paymentech Solutions | No | No | Yes | | Credit Mutuel-CIC | Yes | Yes |
            Yes | | Visa Acceptance through VisaNet | Yes | No | Yes | | FDC
            Nashville Global | Yes | Yes | Yes | | GPN | No | No | Yes | | OmniPay
            Direct | Yes | No | Yes | | SIX | Yes | Yes | Yes |
        encrypted_key_serial_number (str): Combination of the device's unique
            identifier and a transaction counter that is used in the process of
            decrypting the encrypted PIN. The entity that injected the PIN encryption
            keys into the terminal decrypts the encrypted PIN and creates this value.
            For all terminals that are using derived unique key per transaction
            (DUKPT) encryption, this is generated as a single number within the
            terminal.  #### Used by **Authorization, PIN Debit** - Required when the
            cardholder enters a PIN and the card cannot verify the PIN, which means
            that the issuer must verify the PIN. - Required for PIN debit credit or
            PIN debit purchase. - Required for online PIN transactions  For
            authorizations, this field is supported only on these processors: -
            American Express Direct - Credit Mutuel-CIC - FDC Nashville Global -
            OmniPay Direct - SIX  This field is also used by processors that support
            chip and online PIN transactions. The following table lists the EMV Cards
            and Cardholder Verification Methods (CVMs) that these processors support:
            | Processor | Chip and Offline PIN | Chip and Online PIN | Chip and
            Signature | | --- | --- | --- | --- | | American Express Direct | Yes |
            Yes | Yes | | Chase Paymentech Solutions | No | No | Yes | | Credit
            Mutuel-CIC | Yes | Yes | Yes | | Visa Acceptance through VisaNet | Yes |
            No | Yes | | FDC Nashville Global | Yes | Yes | Yes | | GPN | No | No |
            Yes | | OmniPay Direct | Yes | No | Yes | | SIX | Yes | Yes | Yes |
        partner_sdk_version (str): Version of the software installed on the POS
            terminal. This value is provided by the client software that is installed
            on the POS terminal.  Visa Acceptance does not forward this value to the
            processor. Instead, the value is forwarded to the Visa Acceptance
            reporting functionality.  This field is supported only on American
            Express Direct, FDC Nashville Global, and SIX.  For authorizations and
            credits, this field is supported only on these processors: - American
            Express Direct - Credit Mutuel-CIC - FDC Nashville Global - OmniPay
            Direct - SIX
        emv_application_identifier_and_dedicated_file_name (str): This 32 byte
            length-maximum EBCDIC-K value is used to identify which chip application
            was performed between the terminal and the chip product. The included
            values are the Application Identifier (AID) and the Dedicated File (DF)
            name. It is available to early- or full-option VSDC issuers. Only single
            byte Katakana characters that can map to the EBCDIC-K table expected in
            the name.
        terminal_compliance (str): Flag that indicates whether the terminal is
            compliant with standards mandated by the Reserve Bank of India for
            card-present domestic transactions in India.  Format: - First character
            indicates whether the terminal supports terminal line encryption (TLE).
            Possible values:   - 1: Not certified   - 2: Certified - Second character
            indicates whether the terminal supports Unique Key Per Transaction (UKPT)
            and Derived Unique Key Per Transaction (DUKPT). Possible values:   - 1:
            Not certified   - 2: Certified  **Example** `21` indicates that the
            terminal supports TLE but does not support UKPT/DUKPT.  You and the
            terminal vendors are responsible for terminal certification. If you have
            questions, contact your acquirer.  This field is supported only for
            Mastercard transactions on Visa Acceptance through VisaNet.  **Note** On
            Visa Acceptance through VisaNet, the value for this field corresponds to
            the following data in the TC 33 capture file: - Record: CP01 TCR6 -
            Position: 92-93 - Field: Mastercard Terminal Compliance Indicator  The TC
            33 Capture file contains information about the purchases and refunds that
            a merchant submits to Visa Acceptance. Visa Acceptance through VisaNet
            creates the TC 33 Capture file at the end of the day and sends it to the
            merchant’s acquirer, who uses this information to facilitate end-of-day
            clearing processing with payment networks.  #### Used by
            **Authorization** Required for card-present transactions in India.
            Otherwise, not used.
        is_dedicated_hardware_terminal (str): Type of mPOS device. Possible values: -
            0: Dongle - 1: Phone or tablet  This optional field is supported only for
            Mastercard transactions on Visa Acceptance through VisaNet.  The value
            for this field corresponds to the following data in the TC 33 capture
            file: - Record: CP01 TCR6 - Position: 141 - Field: Mastercard mPOS
            Transaction  The TC 33 Capture file contains information about the
            purchases and refunds that a merchant submits to Visa Acceptance. Visa
            Acceptance through VisaNet creates the TC 33 Capture file at the end of
            the day and sends it to the merchant’s acquirer, who uses this
            information to facilitate end-of-day clearing processing with payment
            networks.
        terminal_model (str): This is the model name of the reader which is used to
            accept the payment. Possible values:  - E3555  - P400  - A920
        terminal_make (str): This is the manufacturer name of the reader which is
            used to accept the payment. Possible values:  - PAX  - Verifone  -
            Ingenico
        service_code (str): #### Visa Platform Connect Mastercard service code that
            is included in the track data.  This field is supported only for
            Mastercard on Visa Platform Connect.   You can extract the service code
            from the track data and provide it in this API field.   When not provided
            it will be extracted from:   - Track2Data for MSR transactions   - EMV
            tag 5F30 for EMV transactions  To enable this feature please call support.
        additional_properties (Dict[str, Any]): The additional properties for the
            model.

    """

    # Create a mapping from Model property names to API property names
    _names = {
        "terminal_id": "terminalId",
        "terminal_serial_number": "terminalSerialNumber",
        "cardholder_verification_method_used": "cardholderVerificationMethodUsed",
        "lane_number": "laneNumber",
        "cat_level": "catLevel",
        "entry_mode": "entryMode",
        "terminal_capability": "terminalCapability",
        "operating_environment": "operatingEnvironment",
        "emv": "emv",
        "amex_capn_data": "amexCapnData",
        "track_data": "trackData",
        "store_and_forward_indicator": "storeAndForwardIndicator",
        "cardholder_verification_method": "cardholderVerificationMethod",
        "terminal_category": "terminalCategory",
        "terminal_input_capability": "terminalInputCapability",
        "terminal_card_capture_capability": "terminalCardCaptureCapability",
        "terminal_output_capability": "terminalOutputCapability",
        "terminal_pin_capability": "terminalPinCapability",
        "pin_entry_solution": "pinEntrySolution",
        "device_id": "deviceId",
        "pin_block_encoding_format": "pinBlockEncodingFormat",
        "encrypted_pin": "encryptedPin",
        "encrypted_key_serial_number": "encryptedKeySerialNumber",
        "partner_sdk_version": "partnerSdkVersion",
        "emv_application_identifier_and_dedicated_file_name":
            "emvApplicationIdentifierAndDedicatedFileName",
        "terminal_compliance": "terminalCompliance",
        "is_dedicated_hardware_terminal": "isDedicatedHardwareTerminal",
        "terminal_model": "terminalModel",
        "terminal_make": "terminalMake",
        "service_code": "serviceCode",
    }

    _optionals = [
        "terminal_id",
        "terminal_serial_number",
        "cardholder_verification_method_used",
        "lane_number",
        "cat_level",
        "entry_mode",
        "terminal_capability",
        "operating_environment",
        "emv",
        "amex_capn_data",
        "track_data",
        "store_and_forward_indicator",
        "cardholder_verification_method",
        "terminal_category",
        "terminal_input_capability",
        "terminal_card_capture_capability",
        "terminal_output_capability",
        "terminal_pin_capability",
        "pin_entry_solution",
        "device_id",
        "pin_block_encoding_format",
        "encrypted_pin",
        "encrypted_key_serial_number",
        "partner_sdk_version",
        "emv_application_identifier_and_dedicated_file_name",
        "terminal_compliance",
        "is_dedicated_hardware_terminal",
        "terminal_model",
        "terminal_make",
        "service_code",
    ]

    def __init__(
        self,
        terminal_id=APIHelper.SKIP,
        terminal_serial_number=APIHelper.SKIP,
        cardholder_verification_method_used=APIHelper.SKIP,
        lane_number=APIHelper.SKIP,
        cat_level=APIHelper.SKIP,
        entry_mode=APIHelper.SKIP,
        terminal_capability=APIHelper.SKIP,
        operating_environment=APIHelper.SKIP,
        emv=APIHelper.SKIP,
        amex_capn_data=APIHelper.SKIP,
        track_data=APIHelper.SKIP,
        store_and_forward_indicator=APIHelper.SKIP,
        cardholder_verification_method=APIHelper.SKIP,
        terminal_category=APIHelper.SKIP,
        terminal_input_capability=APIHelper.SKIP,
        terminal_card_capture_capability=APIHelper.SKIP,
        terminal_output_capability=APIHelper.SKIP,
        terminal_pin_capability=APIHelper.SKIP,
        pin_entry_solution=APIHelper.SKIP,
        device_id=APIHelper.SKIP,
        pin_block_encoding_format=APIHelper.SKIP,
        encrypted_pin=APIHelper.SKIP,
        encrypted_key_serial_number=APIHelper.SKIP,
        partner_sdk_version=APIHelper.SKIP,
        emv_application_identifier_and_dedicated_file_name=APIHelper.SKIP,
        terminal_compliance=APIHelper.SKIP,
        is_dedicated_hardware_terminal=APIHelper.SKIP,
        terminal_model=APIHelper.SKIP,
        terminal_make=APIHelper.SKIP,
        service_code=APIHelper.SKIP,
        additional_properties=None):
        """Initialize a PointOfSaleInformation instance."""
        # Initialize members of the class
        if terminal_id is not APIHelper.SKIP:
            self.terminal_id = terminal_id
        if terminal_serial_number is not APIHelper.SKIP:
            self.terminal_serial_number = terminal_serial_number
        if cardholder_verification_method_used is not APIHelper.SKIP:
            self.cardholder_verification_method_used =\
                 cardholder_verification_method_used
        if lane_number is not APIHelper.SKIP:
            self.lane_number = lane_number
        if cat_level is not APIHelper.SKIP:
            self.cat_level = cat_level
        if entry_mode is not APIHelper.SKIP:
            self.entry_mode = entry_mode
        if terminal_capability is not APIHelper.SKIP:
            self.terminal_capability = terminal_capability
        if operating_environment is not APIHelper.SKIP:
            self.operating_environment = operating_environment
        if emv is not APIHelper.SKIP:
            self.emv = emv
        if amex_capn_data is not APIHelper.SKIP:
            self.amex_capn_data = amex_capn_data
        if track_data is not APIHelper.SKIP:
            self.track_data = track_data
        if store_and_forward_indicator is not APIHelper.SKIP:
            self.store_and_forward_indicator = store_and_forward_indicator
        if cardholder_verification_method is not APIHelper.SKIP:
            self.cardholder_verification_method = cardholder_verification_method
        if terminal_category is not APIHelper.SKIP:
            self.terminal_category = terminal_category
        if terminal_input_capability is not APIHelper.SKIP:
            self.terminal_input_capability = terminal_input_capability
        if terminal_card_capture_capability is not APIHelper.SKIP:
            self.terminal_card_capture_capability = terminal_card_capture_capability
        if terminal_output_capability is not APIHelper.SKIP:
            self.terminal_output_capability = terminal_output_capability
        if terminal_pin_capability is not APIHelper.SKIP:
            self.terminal_pin_capability = terminal_pin_capability
        if pin_entry_solution is not APIHelper.SKIP:
            self.pin_entry_solution = pin_entry_solution
        if device_id is not APIHelper.SKIP:
            self.device_id = device_id
        if pin_block_encoding_format is not APIHelper.SKIP:
            self.pin_block_encoding_format = pin_block_encoding_format
        if encrypted_pin is not APIHelper.SKIP:
            self.encrypted_pin = encrypted_pin
        if encrypted_key_serial_number is not APIHelper.SKIP:
            self.encrypted_key_serial_number = encrypted_key_serial_number
        if partner_sdk_version is not APIHelper.SKIP:
            self.partner_sdk_version = partner_sdk_version
        if emv_application_identifier_and_dedicated_file_name is not APIHelper.SKIP:
            self.emv_application_identifier_and_dedicated_file_name =\
                 emv_application_identifier_and_dedicated_file_name
        if terminal_compliance is not APIHelper.SKIP:
            self.terminal_compliance = terminal_compliance
        if is_dedicated_hardware_terminal is not APIHelper.SKIP:
            self.is_dedicated_hardware_terminal = is_dedicated_hardware_terminal
        if terminal_model is not APIHelper.SKIP:
            self.terminal_model = terminal_model
        if terminal_make is not APIHelper.SKIP:
            self.terminal_make = terminal_make
        if service_code is not APIHelper.SKIP:
            self.service_code = service_code

        # Add additional model properties to the instance
        if additional_properties is None:
            additional_properties = {}
        self.additional_properties = additional_properties

    @classmethod
    def from_dictionary(cls,
                        dictionary):
        """Create an instance of this model from a dictionary

        Args:
            dictionary (dictionary): A dictionary representation of the object
            as obtained from the deserialization of the server's response. The
            keys MUST match property names in the API description.

        Returns:
            object: An instance of this structure class.

        """
        if not isinstance(dictionary, dict) or dictionary is None:
            return None

        # Extract variables from the dictionary
        terminal_id =\
            dictionary.get("terminalId")\
            if dictionary.get("terminalId")\
                else APIHelper.SKIP
        terminal_serial_number =\
            dictionary.get("terminalSerialNumber")\
            if dictionary.get("terminalSerialNumber")\
                else APIHelper.SKIP
        cardholder_verification_method_used =\
            dictionary.get("cardholderVerificationMethodUsed")\
            if dictionary.get("cardholderVerificationMethodUsed")\
                else APIHelper.SKIP
        lane_number =\
            dictionary.get("laneNumber")\
            if dictionary.get("laneNumber")\
                else APIHelper.SKIP
        cat_level =\
            dictionary.get("catLevel")\
            if dictionary.get("catLevel")\
                else APIHelper.SKIP
        entry_mode =\
            dictionary.get("entryMode")\
            if dictionary.get("entryMode")\
                else APIHelper.SKIP
        terminal_capability =\
            dictionary.get("terminalCapability")\
            if dictionary.get("terminalCapability")\
                else APIHelper.SKIP
        operating_environment =\
            dictionary.get("operatingEnvironment")\
            if dictionary.get("operatingEnvironment")\
                else APIHelper.SKIP
        emv =\
            Emv.from_dictionary(
                dictionary.get("emv"))\
                if "emv" in dictionary.keys()\
                else APIHelper.SKIP
        amex_capn_data =\
            dictionary.get("amexCapnData")\
            if dictionary.get("amexCapnData")\
                else APIHelper.SKIP
        track_data =\
            dictionary.get("trackData")\
            if dictionary.get("trackData")\
                else APIHelper.SKIP
        store_and_forward_indicator =\
            dictionary.get("storeAndForwardIndicator")\
            if dictionary.get("storeAndForwardIndicator")\
                else APIHelper.SKIP
        cardholder_verification_method =\
            dictionary.get("cardholderVerificationMethod")\
            if dictionary.get("cardholderVerificationMethod")\
                else APIHelper.SKIP
        terminal_category =\
            dictionary.get("terminalCategory")\
            if dictionary.get("terminalCategory")\
                else APIHelper.SKIP
        terminal_input_capability =\
            dictionary.get("terminalInputCapability")\
            if dictionary.get("terminalInputCapability")\
                else APIHelper.SKIP
        terminal_card_capture_capability =\
            dictionary.get("terminalCardCaptureCapability")\
            if dictionary.get("terminalCardCaptureCapability")\
                else APIHelper.SKIP
        terminal_output_capability =\
            dictionary.get("terminalOutputCapability")\
            if dictionary.get("terminalOutputCapability")\
                else APIHelper.SKIP
        terminal_pin_capability =\
            dictionary.get("terminalPinCapability")\
            if dictionary.get("terminalPinCapability")\
                else APIHelper.SKIP
        pin_entry_solution =\
            dictionary.get("pinEntrySolution")\
            if dictionary.get("pinEntrySolution")\
                else APIHelper.SKIP
        device_id =\
            dictionary.get("deviceId")\
            if dictionary.get("deviceId")\
                else APIHelper.SKIP
        pin_block_encoding_format =\
            dictionary.get("pinBlockEncodingFormat")\
            if dictionary.get("pinBlockEncodingFormat")\
                else APIHelper.SKIP
        encrypted_pin =\
            dictionary.get("encryptedPin")\
            if dictionary.get("encryptedPin")\
                else APIHelper.SKIP
        encrypted_key_serial_number =\
            dictionary.get("encryptedKeySerialNumber")\
            if dictionary.get("encryptedKeySerialNumber")\
                else APIHelper.SKIP
        partner_sdk_version =\
            dictionary.get("partnerSdkVersion")\
            if dictionary.get("partnerSdkVersion")\
                else APIHelper.SKIP
        emv_application_identifier_and_dedicated_file_name =\
            dictionary.get("emvApplicationIdentifierAndDedicatedFileName")\
            if dictionary.get("emvApplicationIdentifierAndDedicatedFileName")\
                else APIHelper.SKIP
        terminal_compliance =\
            dictionary.get("terminalCompliance")\
            if dictionary.get("terminalCompliance")\
                else APIHelper.SKIP
        is_dedicated_hardware_terminal =\
            dictionary.get("isDedicatedHardwareTerminal")\
            if dictionary.get("isDedicatedHardwareTerminal")\
                else APIHelper.SKIP
        terminal_model =\
            dictionary.get("terminalModel")\
            if dictionary.get("terminalModel")\
                else APIHelper.SKIP
        terminal_make =\
            dictionary.get("terminalMake")\
            if dictionary.get("terminalMake")\
                else APIHelper.SKIP
        service_code =\
            dictionary.get("serviceCode")\
            if dictionary.get("serviceCode")\
                else APIHelper.SKIP

        additional_properties = APIHelper.get_additional_properties(
            dictionary={k: v for k, v in dictionary.items()
                        if k not in cls._names.values()},
            unboxing_function=lambda value: value)

        # Return an object of this model
        return cls(terminal_id,
                   terminal_serial_number,
                   cardholder_verification_method_used,
                   lane_number,
                   cat_level,
                   entry_mode,
                   terminal_capability,
                   operating_environment,
                   emv,
                   amex_capn_data,
                   track_data,
                   store_and_forward_indicator,
                   cardholder_verification_method,
                   terminal_category,
                   terminal_input_capability,
                   terminal_card_capture_capability,
                   terminal_output_capability,
                   terminal_pin_capability,
                   pin_entry_solution,
                   device_id,
                   pin_block_encoding_format,
                   encrypted_pin,
                   encrypted_key_serial_number,
                   partner_sdk_version,
                   emv_application_identifier_and_dedicated_file_name,
                   terminal_compliance,
                   is_dedicated_hardware_terminal,
                   terminal_model,
                   terminal_make,
                   service_code,
                   additional_properties)

    def __repr__(self):
        """Return a unambiguous string representation."""
        _terminal_id=(
            self.terminal_id
            if hasattr(self, "terminal_id")
            else None
        )
        _terminal_serial_number=(
            self.terminal_serial_number
            if hasattr(self, "terminal_serial_number")
            else None
        )
        _cardholder_verification_method_used=(
            self.cardholder_verification_method_used
            if hasattr(self, "cardholder_verification_method_used")
            else None
        )
        _lane_number=(
            self.lane_number
            if hasattr(self, "lane_number")
            else None
        )
        _cat_level=(
            self.cat_level
            if hasattr(self, "cat_level")
            else None
        )
        _entry_mode=(
            self.entry_mode
            if hasattr(self, "entry_mode")
            else None
        )
        _terminal_capability=(
            self.terminal_capability
            if hasattr(self, "terminal_capability")
            else None
        )
        _operating_environment=(
            self.operating_environment
            if hasattr(self, "operating_environment")
            else None
        )
        _emv=(
            self.emv
            if hasattr(self, "emv")
            else None
        )
        _amex_capn_data=(
            self.amex_capn_data
            if hasattr(self, "amex_capn_data")
            else None
        )
        _track_data=(
            self.track_data
            if hasattr(self, "track_data")
            else None
        )
        _store_and_forward_indicator=(
            self.store_and_forward_indicator
            if hasattr(self, "store_and_forward_indicator")
            else None
        )
        _cardholder_verification_method=(
            self.cardholder_verification_method
            if hasattr(self, "cardholder_verification_method")
            else None
        )
        _terminal_category=(
            self.terminal_category
            if hasattr(self, "terminal_category")
            else None
        )
        _terminal_input_capability=(
            self.terminal_input_capability
            if hasattr(self, "terminal_input_capability")
            else None
        )
        _terminal_card_capture_capability=(
            self.terminal_card_capture_capability
            if hasattr(self, "terminal_card_capture_capability")
            else None
        )
        _terminal_output_capability=(
            self.terminal_output_capability
            if hasattr(self, "terminal_output_capability")
            else None
        )
        _terminal_pin_capability=(
            self.terminal_pin_capability
            if hasattr(self, "terminal_pin_capability")
            else None
        )
        _pin_entry_solution=(
            self.pin_entry_solution
            if hasattr(self, "pin_entry_solution")
            else None
        )
        _device_id=(
            self.device_id
            if hasattr(self, "device_id")
            else None
        )
        _pin_block_encoding_format=(
            self.pin_block_encoding_format
            if hasattr(self, "pin_block_encoding_format")
            else None
        )
        _encrypted_pin=(
            self.encrypted_pin
            if hasattr(self, "encrypted_pin")
            else None
        )
        _encrypted_key_serial_number=(
            self.encrypted_key_serial_number
            if hasattr(self, "encrypted_key_serial_number")
            else None
        )
        _partner_sdk_version=(
            self.partner_sdk_version
            if hasattr(self, "partner_sdk_version")
            else None
        )
        _emv_application_identifier_and_dedicated_file_name=(
            self.emv_application_identifier_and_dedicated_file_name
            if hasattr(self, "emv_application_identifier_and_dedicated_file_name")
            else None
        )
        _terminal_compliance=(
            self.terminal_compliance
            if hasattr(self, "terminal_compliance")
            else None
        )
        _is_dedicated_hardware_terminal=(
            self.is_dedicated_hardware_terminal
            if hasattr(self, "is_dedicated_hardware_terminal")
            else None
        )
        _terminal_model=(
            self.terminal_model
            if hasattr(self, "terminal_model")
            else None
        )
        _terminal_make=(
            self.terminal_make
            if hasattr(self, "terminal_make")
            else None
        )
        _service_code=(
            self.service_code
            if hasattr(self, "service_code")
            else None
        )
        _additional_properties=self.additional_properties
        return (
            f"{self.__class__.__name__}("
            f"terminal_id={_terminal_id!r}, "
            f"terminal_serial_number={_terminal_serial_number!r}, "
            f"cardholder_verification_method_used={_cardholder_verification_method_used!r}, "
            f"lane_number={_lane_number!r}, "
            f"cat_level={_cat_level!r}, "
            f"entry_mode={_entry_mode!r}, "
            f"terminal_capability={_terminal_capability!r}, "
            f"operating_environment={_operating_environment!r}, "
            f"emv={_emv!r}, "
            f"amex_capn_data={_amex_capn_data!r}, "
            f"track_data={_track_data!r}, "
            f"store_and_forward_indicator={_store_and_forward_indicator!r}, "
            f"cardholder_verification_method={_cardholder_verification_method!r}, "
            f"terminal_category={_terminal_category!r}, "
            f"terminal_input_capability={_terminal_input_capability!r}, "
            f"terminal_card_capture_capability={_terminal_card_capture_capability!r}, "
            f"terminal_output_capability={_terminal_output_capability!r}, "
            f"terminal_pin_capability={_terminal_pin_capability!r}, "
            f"pin_entry_solution={_pin_entry_solution!r}, "
            f"device_id={_device_id!r}, "
            f"pin_block_encoding_format={_pin_block_encoding_format!r}, "
            f"encrypted_pin={_encrypted_pin!r}, "
            f"encrypted_key_serial_number={_encrypted_key_serial_number!r}, "
            f"partner_sdk_version={_partner_sdk_version!r}, "
            f"emv_application_identifier_and_dedicated_file_name={_emv_application_identifier_and_dedicated_file_name!r}, "
            f"terminal_compliance={_terminal_compliance!r}, "
            f"is_dedicated_hardware_terminal={_is_dedicated_hardware_terminal!r}, "
            f"terminal_model={_terminal_model!r}, "
            f"terminal_make={_terminal_make!r}, "
            f"service_code={_service_code!r}, "
            f"additional_properties={_additional_properties!r}, "
            f")"
        )

    def __str__(self):
        """Return a human-readable string representation."""
        _terminal_id=(
            self.terminal_id
            if hasattr(self, "terminal_id")
            else None
        )
        _terminal_serial_number=(
            self.terminal_serial_number
            if hasattr(self, "terminal_serial_number")
            else None
        )
        _cardholder_verification_method_used=(
            self.cardholder_verification_method_used
            if hasattr(self, "cardholder_verification_method_used")
            else None
        )
        _lane_number=(
            self.lane_number
            if hasattr(self, "lane_number")
            else None
        )
        _cat_level=(
            self.cat_level
            if hasattr(self, "cat_level")
            else None
        )
        _entry_mode=(
            self.entry_mode
            if hasattr(self, "entry_mode")
            else None
        )
        _terminal_capability=(
            self.terminal_capability
            if hasattr(self, "terminal_capability")
            else None
        )
        _operating_environment=(
            self.operating_environment
            if hasattr(self, "operating_environment")
            else None
        )
        _emv=(
            self.emv
            if hasattr(self, "emv")
            else None
        )
        _amex_capn_data=(
            self.amex_capn_data
            if hasattr(self, "amex_capn_data")
            else None
        )
        _track_data=(
            self.track_data
            if hasattr(self, "track_data")
            else None
        )
        _store_and_forward_indicator=(
            self.store_and_forward_indicator
            if hasattr(self, "store_and_forward_indicator")
            else None
        )
        _cardholder_verification_method=(
            self.cardholder_verification_method
            if hasattr(self, "cardholder_verification_method")
            else None
        )
        _terminal_category=(
            self.terminal_category
            if hasattr(self, "terminal_category")
            else None
        )
        _terminal_input_capability=(
            self.terminal_input_capability
            if hasattr(self, "terminal_input_capability")
            else None
        )
        _terminal_card_capture_capability=(
            self.terminal_card_capture_capability
            if hasattr(self, "terminal_card_capture_capability")
            else None
        )
        _terminal_output_capability=(
            self.terminal_output_capability
            if hasattr(self, "terminal_output_capability")
            else None
        )
        _terminal_pin_capability=(
            self.terminal_pin_capability
            if hasattr(self, "terminal_pin_capability")
            else None
        )
        _pin_entry_solution=(
            self.pin_entry_solution
            if hasattr(self, "pin_entry_solution")
            else None
        )
        _device_id=(
            self.device_id
            if hasattr(self, "device_id")
            else None
        )
        _pin_block_encoding_format=(
            self.pin_block_encoding_format
            if hasattr(self, "pin_block_encoding_format")
            else None
        )
        _encrypted_pin=(
            self.encrypted_pin
            if hasattr(self, "encrypted_pin")
            else None
        )
        _encrypted_key_serial_number=(
            self.encrypted_key_serial_number
            if hasattr(self, "encrypted_key_serial_number")
            else None
        )
        _partner_sdk_version=(
            self.partner_sdk_version
            if hasattr(self, "partner_sdk_version")
            else None
        )
        _emv_application_identifier_and_dedicated_file_name=(
            self.emv_application_identifier_and_dedicated_file_name
            if hasattr(self, "emv_application_identifier_and_dedicated_file_name")
            else None
        )
        _terminal_compliance=(
            self.terminal_compliance
            if hasattr(self, "terminal_compliance")
            else None
        )
        _is_dedicated_hardware_terminal=(
            self.is_dedicated_hardware_terminal
            if hasattr(self, "is_dedicated_hardware_terminal")
            else None
        )
        _terminal_model=(
            self.terminal_model
            if hasattr(self, "terminal_model")
            else None
        )
        _terminal_make=(
            self.terminal_make
            if hasattr(self, "terminal_make")
            else None
        )
        _service_code=(
            self.service_code
            if hasattr(self, "service_code")
            else None
        )
        _additional_properties=self.additional_properties
        return (
            f"{self.__class__.__name__}("
            f"terminal_id={_terminal_id!s}, "
            f"terminal_serial_number={_terminal_serial_number!s}, "
            f"cardholder_verification_method_used={_cardholder_verification_method_used!s}, "
            f"lane_number={_lane_number!s}, "
            f"cat_level={_cat_level!s}, "
            f"entry_mode={_entry_mode!s}, "
            f"terminal_capability={_terminal_capability!s}, "
            f"operating_environment={_operating_environment!s}, "
            f"emv={_emv!s}, "
            f"amex_capn_data={_amex_capn_data!s}, "
            f"track_data={_track_data!s}, "
            f"store_and_forward_indicator={_store_and_forward_indicator!s}, "
            f"cardholder_verification_method={_cardholder_verification_method!s}, "
            f"terminal_category={_terminal_category!s}, "
            f"terminal_input_capability={_terminal_input_capability!s}, "
            f"terminal_card_capture_capability={_terminal_card_capture_capability!s}, "
            f"terminal_output_capability={_terminal_output_capability!s}, "
            f"terminal_pin_capability={_terminal_pin_capability!s}, "
            f"pin_entry_solution={_pin_entry_solution!s}, "
            f"device_id={_device_id!s}, "
            f"pin_block_encoding_format={_pin_block_encoding_format!s}, "
            f"encrypted_pin={_encrypted_pin!s}, "
            f"encrypted_key_serial_number={_encrypted_key_serial_number!s}, "
            f"partner_sdk_version={_partner_sdk_version!s}, "
            f"emv_application_identifier_and_dedicated_file_name={_emv_application_identifier_and_dedicated_file_name!s}, "
            f"terminal_compliance={_terminal_compliance!s}, "
            f"is_dedicated_hardware_terminal={_is_dedicated_hardware_terminal!s}, "
            f"terminal_model={_terminal_model!s}, "
            f"terminal_make={_terminal_make!s}, "
            f"service_code={_service_code!s}, "
            f"additional_properties={_additional_properties!s}, "
            f")"
        )
