Titan ESB API Documentation
Enterprise Service Bus con Healthcare nativo (HL7 v2/v3, FHIR R4), Channel Pipeline (source → transform → destination) y arquitectura WhatsApp (2M+ conexiones por nodo). Construido sobre Erlang/Elixir.
🚀 Resumen
La API de Titan te permite enviar, recibir y gestionar mensajes a velocidades extremas. Diseñada para ser 10-20x más rápida que RabbitMQ con una API simple y poderosa.
Base URL
https://tu-servidor.com/api
Formato de Respuesta
Todas las respuestas están en formato JSON con estructura consistente.
🔐 Autenticación
Titan utiliza API Keys para autenticación. Incluye tu API key en el header Authorization:
curl -H "Authorization: Bearer TU_API_KEY" \\
-H "Content-Type: application/json" \\
https://tu-servidor.com/api/send
Obtén tu API key en el dashboard después de registrarte. Las API keys son específicas por proyecto y pueden tener permisos granulares.
📨 Enviar Mensaje
Envía un mensaje individual a través del bus de Titan. Ultra-rápido y confiable.
Parámetros
- to (string, requerido): Destino del mensaje
- message (object, requerido): Contenido del mensaje
- priority (integer, opcional): Prioridad 1-10
- ttl (integer, opcional): Time to live en segundos
Ejemplo
POST /api/send Content-Type: application/json Envía un JSON con los campos to, message, priority, etc.
⚡ Ultra Batch
Procesamiento por lotes inteligente que puede manejar miles de mensajes simultáneamente. Esta es la característica que hace Titan 10-20x más rápido que RabbitMQ.
Ultra Batch puede procesar hasta 50,000 mensajes/segundo con latencia < 1ms. Utiliza smart batching y compresión automática para maximizar el throughput.
🔧 Health Check
Verifica el estado del sistema Titan y todos sus componentes.
Respuesta
HTTP/1.1 200 OK Content-Type: application/json Retorna información del estado del sistema
🏥 Healthcare: HL7 v2/v3 y FHIR R4
Titan incluye soporte nativo para los estándares de salud usados por Mirth Connect, Epic, Cerner y otros — sin plugins externos.
Estándares soportados
- HL7 v2.x (2.3, 2.4, 2.5, 2.5.1, 2.7, 2.8): ADT, ORM, ORU, SIU, MDM, DFT, RDE, RDS, RAS, VXU, ACK, QRY, RSP
- HL7 v3 / CDA R2 / CCD / C-CDA: parser XML con extracción de secciones clínicas (allergies, medications, problems, results, vital signs, immunizations…)
- FHIR R4: Patient, Practitioner, Organization, Encounter, Condition, Observation, MedicationRequest, AllergyIntolerance, Procedure, Immunization, DiagnosticReport, Coverage, Bundle
📋 HL7 v2.x Parser
Parser completo con escape sequences, custom delimiters (MSH-1/MSH-2), repeticiones, componentes y subcomponentes.
Ejemplo (IEx)
alias Titan.Healthcare.HL7.Parser
hl7 = "MSH|^~\\&|EPIC|HOSP|LAB|LAB|20231215120000||ADT^A01|MSG1|P|2.5\\rPID|1||12345|||DOE^JOHN||19800101|M\\rPV1|1|I|ICU"
{:ok, parsed} = Parser.parse(hl7)
# => %{message_type: "ADT", trigger_event: "A01",
# message_control_id: "MSG1", segments: [...]}
pid = Parser.get_segment(parsed, "PID")
{:ok, regenerated} = Parser.generate(parsed)
📦 FHIR R4 Resources
Constructores de recursos FHIR R4 con limpieza automática de campos nulos (clean_resource) y soporte de code systems (LOINC, SNOMED, ICD-10, RxNorm, terminology HL7).
Ejemplo
alias Titan.Healthcare.FHIR.Resources
patient = Resources.patient(%{
id: "patient-123",
family_name: "García",
given_names: ["Juan", "Carlos"],
birth_date: "1985-03-15",
gender: "male"
})
observation = Resources.observation(%{
id: "obs-1",
status: "final",
code: %{codings: [%{system: "http://loinc.org", code: "2339-0", display: "Glucose"}]},
value_quantity: %{value: 95, unit: "mg/dL"},
patient: "Patient/patient-123"
})
bundle = Resources.bundle(%{
type: "transaction",
entries: [%{resource: patient}, %{resource: observation}]
})
🔁 Mapeo HL7 ↔ FHIR Bidireccional
Conversión automática entre HL7 v2 y FHIR R4. Mapea PID→Patient, PV1→Encounter, OBX→Observation, DG1→Condition, AL1→AllergyIntolerance, RXA→Immunization, RXE→MedicationRequest, IN1→Coverage.
Ejemplo
alias Titan.Healthcare.FHIR.HL7Mapper
# HL7 v2 → FHIR Bundle
{:ok, bundle} = HL7Mapper.to_fhir(hl7_raw_string)
# Bundle entry incluye Patient + Encounter + Condition + Coverage…
# FHIR Bundle → HL7 v2
{:ok, hl7_string} = HL7Mapper.from_fhir(bundle, message_type: "ADT^A01")
📡 Channels: ESB Pipeline
Cada integración corre como un proceso supervisado (ChannelServer) con el flujo source → transformer pipeline → destination. Configurable vía API REST o YAML hot-reload sin downtime.
Arquitectura
- HTTP / TCP
- Kafka
- RabbitMQ
- SQS
- FTP / SFTP
- Database
- StreamForge
- field_mapper
- filter
- enrich (API / DB)
- javascript
- aggregator
- splitter
- HTTP / SOAP
- Database
- File
- TCP
- Kafka
- StreamForge
🔌 Channels API REST
Lista todos los canales configurados.
Crea un nuevo canal.
POST /api/channels
Authorization: Bearer <api-key>
Content-Type: application/json
{
"name": "lab-results-hl7-to-fhir",
"source_type": "tcp_listener",
"source_config": {"port": 6661, "protocol": "mllp"},
"transformers": [
{"type": "javascript", "config": {"script": "..."}}
],
"destination_type": "http",
"destination_config": {"url": "https://fhir.epic.com/Observation"}
}
Métricas de procesamiento del canal (mensajes procesados, fallidos, latencia).
Logs de mensajes recientes procesados por el canal.
📥 Source Connectors
- http_listener — recibe HTTP POST en puerto dedicado
- tcp_listener — TCP/MLLP (típico para HL7 v2)
- database_reader — polling de tablas PostgreSQL/MySQL/SQL Server
- file_reader — watch de directorio
- ftp_reader — FTP/SFTP polling
- kafka_consumer — consume Kafka topics
- rabbitmq_consumer — consume colas AMQP
- sqs_consumer — consume colas AWS SQS
- streamforge_consumer — consume del bus interno StreamForge
📤 Destination Connectors
- http — POST/PUT a URL HTTP
- tcp — TCP/MLLP
- soap — invocación SOAP 1.1/1.2 con WSDL
- database — INSERT/UPDATE en PostgreSQL/MySQL/SQL Server/Oracle
- file — escribir a archivo (template path con timestamps)
- streamforge_producer — produce al bus StreamForge
🏢 ESB Overview
Titan ESB soporta 13+ protocolos empresariales nativos para integración completa:
Protocolos Soportados
- HTTP/REST: 50-200K msg/s - API REST nativa
- SOAP 1.1/1.2: 50K+ msg/s - WSDL + WS-Security
- Kafka: consumer / producer nativos con consumer groups
- RabbitMQ: AMQP 0.9.1 con backpressure
- AWS SQS: long polling, batch send
- StreamForge: bus interno de Titan
- Database: 50K+ records/s - PostgreSQL, MySQL, SQL Server, Oracle
- SAP: 5K+ RFC/s - RFC, IDoc, BAPI support
- Salesforce: 10K+ API/s - REST, SOAP, Bulk API
- Microsoft Dynamics: 8K+ API/s - OData, Web API
- FTP/FTPS/SFTP: 10K+ files/s - Batch operations
- TCP/SSL: 75K+ msg/s - Raw socket communication
- File I/O: 25K+ files/s - JSON, XML, CSV, EDI
ESB Admin Interface
https://tu-servidor.com/esb-admin
Interfaz gráfica para configurar protocolos, registrar servicios y monitorear integraciones.
🗄️ Database Adapter
Conecta directamente con bases de datos empresariales sin drivers externos:
Ejemplo: Insertar en PostgreSQL
POST /api/database/insert
{
"database_type": "postgresql",
"hostname": "localhost",
"port": 5432,
"database": "mi_empresa",
"username": "user",
"password": "pass",
"table": "clientes",
"data": {
"nombre": "Juan Pérez",
"email": "juan@empresa.com",
"activo": true
}
}
Operaciones Soportadas
- INSERT: Crear nuevos registros
- UPDATE: Actualizar registros existentes
- UPSERT: Insertar o actualizar automáticamente
- DELETE: Eliminar registros
- SELECT: Consultar datos
- STORED_PROCEDURE: Ejecutar procedimientos almacenados
- RAW_SQL: SQL directo
🌍 ERP/CRM Adapters
Integración nativa con sistemas ERP y CRM empresariales:
SAP Integration
POST /api/erp/sap/rfc
{
"system_type": "sap",
"hostname": "sap.empresa.com",
"system_number": "00",
"client": "100",
"username": "SAP_USER",
"password": "sap_pass",
"function_name": "BAPI_CUSTOMER_GETDETAIL",
"parameters": {
"CUSTOMERNO": "0000001000"
}
}
Salesforce Integration
POST /api/erp/salesforce/create
{
"system_type": "salesforce",
"instance_url": "https://empresa.my.salesforce.com",
"username": "user@empresa.com",
"password": "pass",
"security_token": "token123",
"sobject_type": "Account",
"data": {
"Name": "Empresa Cliente",
"Industry": "Technology",
"Phone": "+1234567890"
}
}
Microsoft Dynamics
POST /api/erp/dynamics/create
{
"system_type": "dynamics",
"tenant_id": "tenant-uuid",
"client_id": "app-uuid",
"client_secret": "secret",
"resource_url": "https://empresa.crm.dynamics.com",
"entity_name": "accounts",
"data": {
"name": "Cliente Nuevo",
"telephone1": "+1234567890"
}
}
⚙️ Protocol Configuration
Configuración avanzada de protocolos a través de API:
Configurar FTP/SFTP
POST /api/protocol/configure
{
"protocol": "ftp",
"config": {
"hostname": "ftp.empresa.com",
"port": 21,
"username": "ftpuser",
"password": "ftppass",
"mode": "passive",
"ssl": false
}
}
Test Protocol Health
GET /api/protocol/test/database GET /api/protocol/test/sap GET /api/protocol/test/salesforce
{
"protocol": "database",
"status": "ok",
"latency_ms": 45,
"last_test": "2024-01-15T10:30:00Z"
}
🔄 Transformation Engine
Motor de transformación enterprise-grade con soporte para múltiples formatos y transformaciones complejas:
Capacidades del Engine
- Format Conversion: XML ↔ JSON ↔ CSV ↔ EDI ↔ SOAP
- XSLT Processing: XSLT 1.0/2.0 con template caching
- Schema Mapping: Field-to-field mapping avanzado
- Performance: 50K+ transformaciones/segundo
- Custom Functions: Biblioteca de funciones empresariales
Ejemplo: Transformación Básica
POST /api/transform
{
"source_format": "json",
"target_format": "xml",
"message": {
"customer": {
"name": "Juan Pérez",
"email": "juan@empresa.com",
"phone": "555-0123"
}
},
"config": {
"root_element": "Customer",
"namespace": "http://empresa.com/schemas"
}
}
{
"status": "success",
"transformed_message": "<?xml version="1.0" encoding="UTF-8"?><Customer xmlns="http://empresa.com/schemas"><name>Juan Pérez</name><email>juan@empresa.com</email><phone>555-0123</phone></Customer>",
"transformation_time_ms": 5,
"source_format": "json",
"target_format": "xml"
}
🎨 XSLT Transformations
Transformaciones XSLT empresariales con template caching y funciones personalizadas:
Ejemplo: XSLT Template
POST /api/transform/xslt
{
"source_format": "xml",
"target_format": "xml",
"xml_data": "<order><customer>John</customer><amount>100</amount></order>",
"xslt_template": "<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><invoice><client><xsl:value-of select="order/customer"/></client><total><xsl:value-of select="order/amount * 1.21"/></total><generated><xsl:value-of select="titan:current-timestamp()"/></generated></invoice></xsl:template></xsl:stylesheet>"
}
Funciones XSLT Disponibles
- titan:format-phone(phone, format): Formateo de teléfonos
- titan:validate-email(email): Validación de emails
- titan:generate-uuid(): Generación de UUIDs
- titan:current-timestamp(format?): Timestamp actual
- Funciones XPath estándar: concat, substring, normalize-space, etc.
{
"status": "success",
"transformed_message": "<?xml version="1.0" encoding="UTF-8"?><invoice><client>John</client><total>121.0</total><generated>2024-01-15T10:30:00Z</generated></invoice>",
"transformation_time_ms": 15,
"template_cached": true
}
🗺️ Schema Mapping
Mapeo avanzado de esquemas con transformaciones condicionales y validación:
Ejemplo: Schema Mapping
POST /api/transform/schema-mapping
{
"source_data": {
"customer_name": "Juan Pérez",
"customer_email": "JUAN@EMPRESA.COM",
"customer_phone": "5551234567",
"order_date": "2024-01-15",
"order_total": "100.50"
},
"mapping_config": {
"rules": [
{
"source_path": "customer_name",
"target_path": "client.fullName",
"transform_fn": "normalize_name"
},
{
"source_path": "customer_email",
"target_path": "client.email",
"transform_fn": "lowercase"
},
{
"source_path": "customer_phone",
"target_path": "client.phone",
"transform_fn": "format_phone"
},
{
"source_path": "order_total",
"target_path": "invoice.amount",
"transform_fn": "to_float"
}
]
}
}
Transformaciones Disponibles
- String: uppercase, lowercase, trim, capitalize, normalize_name
- Numeric: to_integer, to_float, abs, round
- Date: to_iso8601, parse_date, format_date
- Business: format_phone, validate_email, generate_slug
- Array: join, split, first, last
{
"status": "success",
"mapped_data": {
"client": {
"fullName": "Juan Pérez",
"email": "juan@empresa.com",
"phone": "(555) 123-4567"
},
"invoice": {
"amount": 100.5
}
},
"transformation_time_ms": 8,
"rules_applied": 4
}
🔄 Format Conversion
Conversión entre múltiples formatos empresariales con alta performance:
Formatos Soportados
- JSON: Parsing avanzado, JSONPath queries, schema validation
- XML: SOAP envelopes, namespace handling, XPath queries
- CSV: RFC 4180 compliant, auto type detection, custom delimiters
- EDI: X12, EDIFACT, HL7 healthcare messages
- SOAP: Envelope processing, WS-Security
Ejemplo: JSON a EDI X12
POST /api/transform/format
{
"source_format": "json",
"target_format": "edi",
"message": {
"transaction_type": "850",
"sender_id": "COMPANY123",
"receiver_id": "VENDOR456",
"purchase_order": {
"po_number": "PO-2024-001",
"order_date": "2024-01-15",
"items": [
{"sku": "ITEM001", "quantity": 10, "price": 25.00}
]
}
},
"config": {
"edi_type": "x12",
"element_separator": "*",
"segment_terminator": "~"
}
}
{
"status": "success",
"transformed_message": "ISA*00* *00* *ZZ*COMPANY123 *ZZ*VENDOR456 *240115*1030*U*00401*000000001*0*P*>~GS*PO*COMPANY123*VENDOR456*20240115*1030*1*X*004010~ST*850*0001~BEG*00*SA*PO-2024-001**20240115~PO1*1*10*EA*25.00**VP*ITEM001~CTT*1~SE*5*0001~GE*1*1~IEA*1*000000001~",
"transformation_time_ms": 12,
"format": "x12",
"segments_generated": 8
}
🛡️ Rate Limiting
Titan incluye rate limiting avanzado para proteger tu infraestructura:
- API Pública: 1,000 requests/minuto
- API Autenticada: 10,000 requests/minuto
- Ultra Batch: Sin límites (autoadaptativo)
Titan usa algoritmos adaptativos que ajustan automáticamente los límites según la carga del sistema y el comportamiento del cliente.