npm package: @sptdev/itpv
Description: Reimplementación ITPV
Author: sptdev
Latest version: 1.0.21

# @sptdev/itpv

> Módulo nativo de React Native para procesamiento de pagos con terminales MITM POS. Compatible con Android (Kotlin) e iOS (Swift), e implementado con la nueva arquitectura de React Native.

---

## ✨ Características

- Login bancario con validación de usuario bloqueado
- Conexión a dispositivos vía Bluetooth
- Selección de dispositivos emparejados
- Procesamiento de pagos con múltiples métodos:
  - Contado
  - Meses sin intereses (MSI)
  - Meses con intereses (MCI)
- Lectura de tarjeta (chip/contactless)
- Emisión de voucher vía email
- Soporte para firma digital
- Soporte para múltiples merchant IDs y monedas

---

## 🚀 Instalación

```bash
npm install @sptdev/itpv
```

ó con yarn:

```bash
yarn add @sptdev/itpv
```

---

## ⚙️ Uso básico

```tsx
import Itpv from '@sptdev/itpv';

// Login
await Itpv.loginUser({
  user: 'usuario123',
  password: 'claveSegura',
  reference: 'Ref001',
  amount: '100.00',
  currency: 'mxn',
  email: 'cliente@correo.com',
  usrTrx: '',
  useMSI: false,
  activeMonths: '',
  company: 'ecompany',
  branch: 'ebranch',
  merchant: 'merchantMode',
});

// Inicializar dispositivo
await Itpv.initDevice({
  reader: 'DEVICE_NAME',
  amount: 12345,
  reference: 'Ref001',
  mcurrency: 'MXN',
  user: 'usuario123',
  email: 'cliente@correo.com',
  companyEmail: 'empresa@correo.com',
  useMSI: true,
  activeMonths: ['3', '6', '12'],
});

// Procesar pago
await Itpv.startTransaction();

// Desconectar dispositivo
await Itpv.disconnectDevice();
```

---

## 📋 API Métodos

### `loginUser(params: LoginParams): Promise<void>`
Autentica al usuario en el sistema de pagos.

**Parámetros:**
- `user`: string - Usuario de acceso
- `password`: string - Contraseña de acceso 
- `reference`: string - Referencia de la transacción
- `amount`: string - Monto de la transacción
- `currency`: string - Moneda (ej: 'mxn', 'usd')
- `email`: string - Email del cliente
- `company`: string - Empresa
- `branch`: string - Sucursal
- `merchant`: string - Modo de merchant

### `initDevice(params: DeviceParams): Promise<void>`
Inicializa y configura el dispositivo de pago.

### `startTransaction(): Promise<void>`
Inicia el proceso de transacción de pago. El dispositivo debe estar conectado y configurado previamente.

### `disconnectDevice(): Promise<void>`
Desconecta el dispositivo de pago.

---

## 📡 Eventos disponibles

Puedes escuchar eventos emitidos por el módulo:

```tsx
import { NativeEventEmitter, NativeModules } from 'react-native';

const eventEmitter = new NativeEventEmitter(NativeModules.Itpv);

eventEmitter.addListener('loginStatus', (status) => {
  console.log('Login:', status);
});

eventEmitter.addListener('deviceState', (state) => {
  console.log('Dispositivo:', state); // 'connected' o 'disconnected'
});

eventEmitter.addListener('transactionStatus', (statusData) => {
  console.log('Estado transacción:', statusData.message); // Actualizaciones en tiempo real
});

eventEmitter.addListener('transactionResult', (data) => {
  console.log('Transacción aprobada:', data);
});

eventEmitter.addListener('transactionResultError', (error) => {
  console.error('Error en transacción:', error);
});

eventEmitter.addListener('voucherResult', (mensaje) => {
  console.log('Voucher:', mensaje);
});
```

---

## 🛠️ Requisitos

- React Native >= 0.70
- Permisos Bluetooth habilitados en Android (BLUETOOTH_CONNECT y BLUETOOTH_SCAN)
- Android SDK 31+ para permisos dinámicos
- iOS con soporte para Swift

---

## 🧪 En desarrollo

Este módulo está en fase inicial y se encuentra en evolución activa. Se recomienda probar en ambientes controlados antes de implementarlo en producción.

---

## 📄 Licencia

MIT © [sptdev](https://github.com/sptdev)