> ## Documentation Index
> Fetch the complete documentation index at: https://iso8583sim.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Demo helpers

> Demo module with helper functions for notebooks and interactive use.

`iso8583sim.demo`

This module provides convenient functions for:

* Pretty-printing ISO 8583 messages
* Generating sample messages for different scenarios
* Explaining message components

## Functions

### `pretty_print()`

```python theme={null}
def pretty_print(message: ISO8583Message | str, show_raw: bool = False) -> None
```

Pretty print an ISO 8583 message.

**Parameters**

<ResponseField name="message" type="ISO8583Message | str" required>
  ISO8583Message object or raw message string
</ResponseField>

<ResponseField name="show_raw" type="bool" default="False">
  Whether to show the raw message bytes
</ResponseField>

### `explain_field()`

```python theme={null}
def explain_field(field_number: int, value: str | None = None) -> None
```

Explain a specific field's definition and optionally its value.

**Parameters**

<ResponseField name="field_number" type="int" required>
  The field number to explain
</ResponseField>

<ResponseField name="value" type="str | None" default="None">
  Optional field value to interpret
</ResponseField>

### `generate_auth_request()`

```python theme={null}
def generate_auth_request(
    pan: str = '4111111111111111',
    amount: int = 1000,
    stan: str = '123456',
    terminal_id: str = 'TERM0001',
    merchant_id: str = 'MERCHANT123456 ',
    network: CardNetwork | None = None,
) -> ISO8583Message
```

Generate a sample authorization request.

**Parameters**

<ResponseField name="pan" type="str" default="'4111111111111111'">
  Primary Account Number
</ResponseField>

<ResponseField name="amount" type="int" default="1000">
  Transaction amount in cents
</ResponseField>

<ResponseField name="stan" type="str" default="'123456'">
  System Trace Audit Number
</ResponseField>

<ResponseField name="terminal_id" type="str" default="'TERM0001'">
  Terminal ID (8 chars)
</ResponseField>

<ResponseField name="merchant_id" type="str" default="'MERCHANT123456 '">
  Merchant ID (15 chars)
</ResponseField>

<ResponseField name="network" type="CardNetwork | None" default="None">
  Optional network type
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  ISO8583Message object
</ResponseField>

### `generate_financial_request()`

```python theme={null}
def generate_financial_request(
    pan: str = '4111111111111111',
    amount: int = 5000,
    stan: str = '654321',
    processing_code: str = '000000',
) -> ISO8583Message
```

Generate a sample financial request (0200).

**Parameters**

<ResponseField name="pan" type="str" default="'4111111111111111'">
  Primary Account Number
</ResponseField>

<ResponseField name="amount" type="int" default="5000">
  Transaction amount in cents
</ResponseField>

<ResponseField name="stan" type="str" default="'654321'">
  System Trace Audit Number
</ResponseField>

<ResponseField name="processing_code" type="str" default="'000000'">
  Processing code (default: purchase)
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  ISO8583Message object
</ResponseField>

### `generate_reversal()`

```python theme={null}
def generate_reversal(
    original: ISO8583Message,
    new_stan: str = '999999',
) -> ISO8583Message
```

Generate a reversal message for an original transaction.

**Parameters**

<ResponseField name="original" type="ISO8583Message" required>
  The original transaction message
</ResponseField>

<ResponseField name="new_stan" type="str" default="'999999'">
  New STAN for the reversal
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  ISO8583Message reversal
</ResponseField>

### `generate_network_message()`

```python theme={null}
def generate_network_message(message_type: str = 'echo') -> ISO8583Message
```

Generate a network management message.

**Parameters**

<ResponseField name="message_type" type="str" default="'echo'">
  Type of message - 'echo', 'signon', 'signoff', 'key\_exchange'
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  ISO8583Message object
</ResponseField>

### `generate_emv_auth()`

```python theme={null}
def generate_emv_auth(
    pan: str = '4111111111111111',
    amount: int = 10000,
    cryptogram: str = 'AABBCCDD11223344',
) -> ISO8583Message
```

Generate an EMV chip card authorization.

**Parameters**

<ResponseField name="pan" type="str" default="'4111111111111111'">
  Primary Account Number
</ResponseField>

<ResponseField name="amount" type="int" default="10000">
  Transaction amount in cents
</ResponseField>

<ResponseField name="cryptogram" type="str" default="'AABBCCDD11223344'">
  Application cryptogram (8 bytes hex)
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  ISO8583Message with EMV data
</ResponseField>

### `build_and_parse()`

```python theme={null}
def build_and_parse(message: ISO8583Message) -> ISO8583Message
```

Build a message to raw format and parse it back.

Useful for testing roundtrip.

**Parameters**

<ResponseField name="message" type="ISO8583Message" required>
  ISO8583Message to process
</ResponseField>

<ResponseField name="Returns" type="ISO8583Message">
  Parsed message
</ResponseField>

### `validate()`

```python theme={null}
def validate(message: ISO8583Message | str) -> None
```

Validate a message and print results.

**Parameters**

<ResponseField name="message" type="ISO8583Message | str" required>
  ISO8583Message or raw message string
</ResponseField>

### `explain_emv()`

```python theme={null}
def explain_emv(emv_hex: str) -> None
```

Parse and explain EMV data.

**Parameters**

<ResponseField name="emv_hex" type="str" required>
  Hex-encoded EMV TLV data
</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.