sabre-client 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/testing/queue-fake.ts","../src/queue/queue-access.ts","../src/http/soap-transport.ts","../src/queue/queue-ref.ts","../src/queue/host-date.ts","../src/queue/queue-paragraph.ts","../src/queue/queue-place.ts","../src/testing/anonymize.ts","../src/testing/fixture-pnrs.ts","../test/fixtures/queue.production-place.json","../test/fixtures/queue.production-place-sin-pic.json","../test/fixtures/queue.production-place-sin-pic-adentro.json","../test/fixtures/queue.production-walk-empty-queue.json","../test/fixtures/queue.production-walk.json","../src/testing/fixtures.ts"],"sourcesContent":["// Fake de colas para los tests de los consumidores: un `fetch` que responde como Sabre a la sesión\n// SOAP y a Queue Management, sin red. Ver sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md\n// (punto 7 y su decisión). Se publica en `sabre-client/testing`, fuera del bundle principal.\n//\n// Las respuestas imitan lo observado en producción (#95, #96 y #97): la cola vacía como\n// `QUEUE SELECTED WAS EMPTY`, el fin de cola en el `Paragraph`, `place` dentro de una cola que\n// mueve el PNR y devuelve el siguiente, y los errores de host con el código en `ShortText`.\nimport { XMLParser } from 'fast-xml-parser';\nimport { END_OF_DISPLAY, OFF_QUEUE, QUEUE_EMPTY } from '../queue/queue-access.js';\nimport { parseQueueParagraph } from '../queue/queue-paragraph.js';\nimport { signatureLocator } from '../queue/queue-place.js';\nimport type { QueueActivityCounters } from '../queue/queue-activity.js';\nimport { MAX_QUEUE_NUMBER, MESSAGE_QUEUE, MIN_QUEUE_NUMBER, type QueueRef, toQueueRef } from '../queue/queue-ref.js';\nimport type {\n ReservationHistoryAccounting,\n ReservationHistoryFlightSegment,\n ReservationHistoryText,\n ReservationHistoryTransaction,\n} from '../reservation/reservation-history.js';\n\n/** Un PNR del fake, con los campos que Sabre manda en `Line`. */\nexport interface QueueFakePnr {\n /** Localizador de 6 caracteres alfanuméricos. */\n locator: string;\n /**\n * Las líneas del PNR en formato de host, como el `Paragraph` de Access Queue. Si no termina en\n * una línea de firma (`… HHMM/DDMMMYY <localizador> H`), el fake agrega una: `place` dentro de\n * una cola saca el localizador de ahí, igual que con Sabre. `selection` `AL` y `AC` filtran por\n * los segmentos del párrafo, y `PI` por su aviso de PIC (`011 SEE REMARKS`), como los lee\n * `parseQueueParagraph`.\n */\n paragraph?: readonly string[];\n /** `Line/DateTime`, tal cual. Es la fecha por la que filtra `selection` `QD`. */\n placedAt?: string;\n /** `Line/POS/Source`. `selection` `AK` filtra por el PCC más la firma (`'ABCDAAT'`). */\n placedBy?: { agentSine?: string; pseudoCityCode?: string };\n /** `Line/PassengerName`. Solo llega en `list` con `primaryPassenger: true`. */\n primaryPassenger?: string;\n}\n\n/**\n * Los contadores de `queue.activity` que se siembran para una cola. `numMessages` no va: sale\n * siempre de lo que hay en la cola del fake.\n */\nexport type QueueFakeActivity = Partial<Omit<QueueActivityCounters, 'numMessages'>>;\n\n/**\n * Una transacción del historial de un PNR, como la devuelve `reservation.history`. Las listas que\n * falten van vacías.\n */\nexport type QueueFakeHistoryTransaction = Omit<\n ReservationHistoryTransaction,\n 'flightSegments' | 'generalInfo' | 'remarks' | 'accounting'\n> & {\n flightSegments?: readonly ReservationHistoryFlightSegment[];\n generalInfo?: readonly ReservationHistoryText[];\n remarks?: readonly ReservationHistoryText[];\n accounting?: readonly ReservationHistoryAccounting[];\n};\n\n/** Un PNR: sus campos, o solo el párrafo. Con solo el párrafo, el localizador sale de la línea de firma. */\nexport type QueueFakeItem = QueueFakePnr | readonly string[];\n\nexport interface QueueFakeOptions {\n /**\n * El contenido de cada cola, en orden. La clave es el número de cola (`'12'`, de 0 a 511), una\n * cola alfabética (`'S'`, una o dos letras mayúsculas) o una cola con nombre (`'name:HOTELS'`, o\n * `'HOTELS'` sin el prefijo). La alfabética y la con nombre viajan por atributos distintos\n * (`Number` y `Name`, ADR-028). El fake no distingue PCC: las colas son las mismas para cualquier\n * `pcc`.\n *\n * La `'S'` es la cola de mensajes: cada elemento es el texto de un mensaje (`string[]`), no un\n * PNR. `access` lo muestra sin `Line`, como Sabre en CERT, e `ignore` lo deja en la cola. Que\n * `remove` lo saque es un supuesto del fake: no se probó con Sabre.\n */\n queues?: Readonly<Record<string, readonly QueueFakeItem[]>>;\n /** PNR que no están en ninguna cola, para colocarlos con `place({ locators })`. */\n pnrs?: readonly QueueFakeItem[];\n /**\n * Los contadores de `queue.activity` por cola, con las mismas claves que `queues`. `numMessages`\n * sale del estado del fake, como en `count`: sin el PNR en pantalla (CERT, #167). Los demás valen\n * lo que se siembre aquí, o 0. Las acciones del fake (`ignore`, `remove`, `place`, `exit`) **no**\n * los cambian: no se probó qué contador sube Sabre con cada una (Q-097).\n */\n activity?: Readonly<Record<string, QueueFakeActivity>>;\n /**\n * El historial de cada PNR para `reservation.history`, por localizador. Un PNR que el fake\n * conoce y no está aquí devuelve una transacción sintética (la creación). Un localizador que\n * el fake no conoce da un error de host marcado como no simulado.\n */\n histories?: Readonly<Record<string, readonly QueueFakeHistoryTransaction[]>>;\n /** Reloj de las fechas de `count` y de `place`. Por defecto, `new Date()`. Las fechas van en UTC. */\n now?: () => Date;\n}\n\n/** Qué le pidió el SDK al fake. */\nexport type QueueFakeCommand =\n | 'open'\n | 'close'\n | 'ping'\n | 'count'\n | 'access'\n | 'list'\n | 'ignore'\n | 'remove'\n | 'exit'\n | 'place'\n | 'activity'\n | 'history';\n\nexport interface QueueFakeCall {\n command: QueueFakeCommand;\n /** La cola de `access` y `list`. */\n queue?: QueueRef;\n /** El localizador de `history`. */\n locator?: string;\n}\n\nexport interface QueueFake {\n /** Se pasa como `config.fetch` de `SabreLegacy`. */\n readonly fetch: typeof fetch;\n /** Los localizadores de una cola, en orden, con lo que el recorrido haya sacado o colocado. */\n locators(queue: QueueRef): string[];\n /** El texto de los mensajes que siguen en la cola `S`, en orden. */\n messages(): string[][];\n /** Las llamadas recibidas, en orden. */\n readonly calls: readonly QueueFakeCall[];\n /** Cuántas sesiones siguen abiertas: sirve para comprobar que el consumidor las cierra. */\n readonly openSessions: number;\n /**\n * Vence todas las sesiones abiertas. La siguiente llamada de cada una recibe el fault de una\n * sesión vencida (`USG_INVALID_SECURITY_TOKEN`), y el SDK la convierte en `SabreSessionError`\n * con `kind: 'expired'`.\n */\n expireSessions(): void;\n}\n\nconst SWS_NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\nconst STL_NAMESPACE = 'http://services.sabre.com/STL/v01';\nconst SIGNATURE_DATE = '1200/01JAN26';\nconst LOCATOR = /^[A-Z0-9]{6}$/;\nconst NAVIGATION: Readonly<Record<string, QueueFakeCommand>> = { I: 'ignore', QR: 'remove', QXI: 'exit' };\n\ntype XmlNode = Record<string, unknown>;\n\ninterface Pnr {\n locator: string;\n paragraph: readonly string[];\n primaryPassenger: string | undefined;\n}\n\n/** Un PNR dentro de una cola: el PNR y los datos de su colocación. */\ninterface Entry {\n /** Vacío en un mensaje de la `S`. */\n locator: string;\n /** El texto de un mensaje de la `S`. */\n message?: readonly string[];\n placedAt: string | undefined;\n placedBy: { agentSine?: string; pseudoCityCode?: string } | undefined;\n /** El PIC con que se colocó con `place`. Los PNR sembrados lo sacan del aviso de su párrafo. */\n instructionCode?: number;\n}\n\ninterface Session {\n conversationId: string;\n /**\n * La cola en la que está la sesión y la posición del PNR en pantalla. Con `selection`, `matches`\n * dice qué PNR cumplen: el recorrido salta los demás.\n */\n inside: { key: string; index: number; matches?: (entry: Entry) => boolean } | undefined;\n}\n\n/**\n * Las funciones de `selection` que simula el fake (#202). En `list`, Sabre acepta solo `QD` y `AK`\n * (producción, #155); en `access` y `count`, cualquiera (#213), pero el fake simula solo estas.\n * Las demás dan un error de host marcado como no simulado.\n */\nexport const QUEUE_FAKE_SELECTION_FUNCTIONS = ['QD', 'AK', 'AL', 'PI', 'AC'] as const;\nconst LIST_SELECTION_FUNCTIONS = ['QD', 'AK'];\nconst MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];\n\n/** `05NOV` o `5NOV` contra un `placedAt` `2026-11-05T…` (o `11-05T…`, sin año). */\nfunction placedOn(placedAt: string | undefined, criteria: string): boolean {\n const date = /^(\\d{1,2})([A-Z]{3})$/.exec(criteria.toUpperCase());\n const placed = /(\\d{2})-(\\d{2})T/.exec(placedAt ?? '');\n if (date === null || placed === null) return false;\n return Number(placed[1]) === MONTHS.indexOf(date[2]!) + 1 && Number(placed[2]) === Number(date[1]);\n}\n\ninterface Reply {\n status: number;\n body: string;\n}\n\nfunction fail(message: string): never {\n throw new TypeError(`sabre-client/testing: ${message}`);\n}\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n removeNSPrefix: true,\n parseTagValue: false,\n parseAttributeValue: false,\n isArray: (name) => name === 'QueueIdentifier' || name === 'UniqueID' || name === 'Selection',\n});\n\nfunction node(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return node(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nfunction nodes(value: unknown): XmlNode[] {\n if (value === undefined) return [];\n return (Array.isArray(value) ? value : [value]).filter((item): item is XmlNode => node(item) !== undefined);\n}\n\nfunction text(value: unknown): string | undefined {\n if (typeof value === 'string') return value.trim();\n const inner = node(value)?.['#text'];\n return typeof inner === 'string' ? inner.trim() : undefined;\n}\n\nfunction attr(value: unknown, name: string): string | undefined {\n const found = node(value)?.[`@${name}`];\n return typeof found === 'string' ? found : undefined;\n}\n\nfunction escape(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\n/**\n * Clave interna de una cola (ADR-028): `'12'` (numérica), `'S'` (alfabética) o `'name:HOTELS'` (con\n * nombre). Las alfabéticas y las con nombre viajan por atributos distintos, así que no comparten clave.\n */\nfunction queueKey(queue: QueueRef): string {\n if (typeof queue === 'number') return String(queue);\n if (typeof queue === 'string') return queue;\n return `${NAME_PREFIX}${queue.name}`;\n}\n\nconst NAME_PREFIX = 'name:';\nconst ALPHA_KEY = /^[A-Z]{1,2}$/;\n\n/**\n * Clave de `QueueFakeOptions.queues`: un número (`'12'`), una cola alfabética (`'S'`), o una con\n * nombre, como `'name:HOTELS'` o, sin el prefijo, `'HOTELS'`.\n */\nfunction optionKey(key: string): string {\n if (key.startsWith(NAME_PREFIX) || /^\\d+$/.test(key) || ALPHA_KEY.test(key)) return key;\n return `${NAME_PREFIX}${key}`;\n}\n\n/** La `QueueRef` de una clave interna. */\nfunction refOfKey(key: string): QueueRef {\n if (key.startsWith(NAME_PREFIX)) return { name: key.slice(NAME_PREFIX.length) };\n return /^\\d+$/.test(key) ? Number(key) : key;\n}\n\n/** Atributo de `QueueIdentifier` de una clave, como lo manda Sabre en la respuesta. */\nfunction keyAttribute(key: string, pad = false): string {\n if (key.startsWith(NAME_PREFIX)) return `Name=\"${escape(key.slice(NAME_PREFIX.length))}\"`;\n return `Number=\"${escape(pad && /^\\d+$/.test(key) ? key.padStart(4, '0') : key)}\"`;\n}\n\nfunction validateKey(key: string): void {\n if (/^\\d+$/.test(key)) {\n const number = Number(key);\n if (number < MIN_QUEUE_NUMBER || number > MAX_QUEUE_NUMBER) fail(`la cola ${key} está fuera de 0–511`);\n return;\n }\n if (key.startsWith(NAME_PREFIX) ? key.slice(NAME_PREFIX.length).trim() === '' : key.trim() === '') {\n fail('el nombre de una cola no puede estar vacío');\n }\n}\n\n/** `MM-DDTHH:mm`, como el `DateTime` de `QueueCountRS` y `QueuePlaceRS`. */\nfunction shortDate(date: Date): string {\n return date.toISOString().slice(5, 16);\n}\n\n/** `YYYY-MM-DDTHH:mm`, como el `Line/DateTime` real de Access Queue. */\nfunction longDate(date: Date): string {\n return date.toISOString().slice(0, 16);\n}\n\n/** Un mensaje de `queues['S']`: una lista de líneas, con al menos una que no esté vacía. */\nfunction toMessage(item: unknown, index: number): string[] {\n const label = `queues['${MESSAGE_QUEUE}'][${index}]`;\n if (!Array.isArray(item) || item.some((line) => typeof line !== 'string')) {\n fail(`${label}: la S es la cola de mensajes; cada elemento es el texto de un mensaje (string[])`);\n }\n const lines = item as string[];\n if (!lines.some((line) => line.trim() !== '')) fail(`${label}: el mensaje no puede estar vacío`);\n return [...lines];\n}\n\nfunction toPnr(item: QueueFakeItem, label: string): Pnr & Omit<Entry, 'locator'> {\n if (Array.isArray(item)) {\n const lines = item as readonly string[];\n const locator = signatureLocator(lines);\n if (locator === undefined) fail(`${label}: el párrafo no tiene línea de firma; pasa { locator, paragraph }`);\n return { locator, paragraph: [...lines], primaryPassenger: undefined, placedAt: undefined, placedBy: undefined };\n }\n const pnr = item as QueueFakePnr;\n if (typeof pnr !== 'object' || pnr === null || typeof pnr.locator !== 'string' || !LOCATOR.test(pnr.locator)) {\n fail(`${label}: locator debe ser de 6 caracteres alfanuméricos en mayúscula`);\n }\n const lines = [...(pnr.paragraph ?? [])];\n const signed = signatureLocator(lines);\n if (signed !== undefined && signed !== pnr.locator) fail(`${label}: la línea de firma es de ${signed}, no de ${pnr.locator}`);\n if (signed === undefined) lines.push(`XXXX.XXXX*AAA ${SIGNATURE_DATE} ${pnr.locator} H`);\n return {\n locator: pnr.locator,\n paragraph: lines,\n primaryPassenger: pnr.primaryPassenger,\n placedAt: pnr.placedAt,\n placedBy: pnr.placedBy,\n };\n}\n\nfunction envelope(action: string, conversationId: string, token: string | undefined, body: string): string {\n const security =\n token === undefined\n ? ''\n : `<wsse:Security xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/12/secext\"><wsse:BinarySecurityToken valueType=\"String\" EncodingType=\"wsse:Base64Binary\">${escape(token)}</wsse:BinarySecurityToken></wsse:Security>`;\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<soap-env:Envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap-env:Header>',\n '<eb:MessageHeader xmlns:eb=\"http://www.ebxml.org/namespaces/messageHeader\" eb:version=\"1.0\" soap-env:mustUnderstand=\"1\">',\n `<eb:ConversationId>${escape(conversationId)}</eb:ConversationId><eb:Action>${escape(action)}</eb:Action>`,\n '</eb:MessageHeader>',\n security,\n `</soap-env:Header><soap-env:Body>${body}</soap-env:Body></soap-env:Envelope>`,\n ].join('');\n}\n\nfunction results(status: 'Complete' | 'NotProcessed', inner: string): string {\n return `<stl:ApplicationResults status=\"${status}\">${inner}</stl:ApplicationResults>`;\n}\n\nconst success = '<stl:Success/>';\n\n/** Un error de host con la forma real: `Message` sin `@code` y el código en `ShortText`. */\nfunction hostResult(kind: 'Error' | 'Warning', message: string): string {\n return `<stl:${kind} type=\"BusinessLogic\"><stl:SystemSpecificResults><stl:Message>${escape(message)}</stl:Message><stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText></stl:SystemSpecificResults></stl:${kind}>`;\n}\n\nfunction textLines(lines: readonly string[]): string {\n return lines.map((line) => `<Text>${escape(line)}</Text>`).join('');\n}\n\n/** Lee la clave de una `QueueIdentifier` del request: `Number` (numérica o alfabética) o `Name`. */\nfunction requestedKey(identifier: XmlNode | undefined): string | undefined {\n const number = attr(identifier, 'Number');\n if (number !== undefined) {\n const ref = toQueueRef(number);\n return ref === undefined ? undefined : queueKey(ref);\n }\n const name = attr(identifier, 'Name');\n return name === undefined ? undefined : `${NAME_PREFIX}${name}`;\n}\n\nconst ACTIVITY_COUNTERS: ReadonlyArray<[keyof QueueFakeActivity, string]> = [\n ['ended', 'Ended'],\n ['ignored', 'Ignored'],\n ['moved', 'Moved'],\n ['removed', 'Removed'],\n ['transferred', 'Transferred'],\n ['leftMessageToContact', 'LeftMessageToContact'],\n ['unableToReach', 'UnableToReach'],\n];\n\nfunction toActivity(value: unknown, label: string): QueueFakeActivity {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} debe ser un objeto de contadores`);\n const known = new Set<string>(ACTIVITY_COUNTERS.map(([key]) => key));\n const result: QueueFakeActivity = {};\n for (const [key, count] of Object.entries(value)) {\n if (key === 'numMessages') fail(`${label}.numMessages sale de la cola del fake: no se siembra`);\n if (!known.has(key)) fail(`${label}.${key} no es un contador de queue.activity`);\n if (!Number.isInteger(count) || (count as number) < 0) fail(`${label}.${key} debe ser un entero de 0 en adelante`);\n result[key as keyof QueueFakeActivity] = count as number;\n }\n return result;\n}\n\nfunction toHistory(value: unknown, label: string): QueueFakeHistoryTransaction[] {\n if (!Array.isArray(value)) fail(`${label} debe ser una lista de transacciones`);\n return value.map((transaction: unknown, index) => {\n const at = `${label}[${index}]`;\n if (typeof transaction !== 'object' || transaction === null) fail(`${at} debe ser un objeto`);\n const t = transaction as QueueFakeHistoryTransaction;\n // Sin Action, el SDK no entiende la respuesta: se frena acá, con el lugar exacto.\n for (const [list, name] of [\n [t.flightSegments, 'flightSegments'],\n [t.generalInfo, 'generalInfo'],\n [t.remarks, 'remarks'],\n ] as const) {\n if (list === undefined) continue;\n if (!Array.isArray(list)) fail(`${at}.${name} debe ser una lista`);\n list.forEach((entry: { action?: unknown }, position: number) => {\n if (typeof entry?.action !== 'string' || entry.action.trim() === '') fail(`${at}.${name}[${position}].action debe ser un string no vacío`);\n });\n }\n if (t.accounting !== undefined && !Array.isArray(t.accounting)) fail(`${at}.accounting debe ser una lista`);\n return t;\n });\n}\n\nconst attrs = (pairs: ReadonlyArray<[string, string | number | undefined]>): string =>\n pairs.map(([name, value]) => (value === undefined ? '' : ` ${name}=\"${escape(String(value))}\"`)).join('');\n\n/** Las líneas de un texto del historial, una por `Text`. */\nconst historyText = (text: string): string =>\n text.split('\\n').map((line) => `<Text>${escape(line)}</Text>`).join('');\n\n/** Una transacción como `HistoricalInfo`, en el orden de las respuestas de CERT. */\nfunction historicalInfo(t: QueueFakeHistoryTransaction): string {\n const segments = (t.flightSegments ?? []).map((segment) =>\n [\n `<Item><FlightSegment${attrs([\n ['Action', segment.action],\n ['ArrivalDateTime', segment.arrivalDateTime],\n ['DepartureDateTime', segment.departureDateTime],\n ['FlightNumber', segment.flightNumber],\n ['NumberInParty', segment.numberInParty],\n ['ResBookDesigCode', segment.bookingClass],\n ['Status', segment.status],\n ])}>`,\n segment.destination === undefined ? '' : `<DestinationLocation${attrs([['LocationCode', segment.destination]])}/>`,\n segment.marketingAirline === undefined ? '' : `<MarketingAirline${attrs([['Code', segment.marketingAirline]])}/>`,\n segment.origin === undefined ? '' : `<OriginLocation${attrs([['LocationCode', segment.origin]])}/>`,\n segment.supplierRef === undefined ? '' : `<SupplierRef${attrs([['ID', segment.supplierRef]])}/>`,\n '</FlightSegment></Item>',\n ].join(''),\n );\n return [\n `<HistoricalInfo${attrs([['RPH', t.rph]])}>`,\n ...(t.generalInfo ?? []).map((entry) => `<GeneralInfo${attrs([['Action', entry.action]])}>${historyText(entry.text)}</GeneralInfo>`),\n segments.length === 0 ? '' : `<ItineraryInfo><ReservationItems>${segments.join('')}</ReservationItems></ItineraryInfo>`,\n (t.remarks ?? []).length === 0\n ? ''\n : `<RemarkInfo>${(t.remarks ?? []).map((entry) => `<Remark${attrs([['Action', entry.action]])}>${historyText(entry.text)}</Remark>`).join('')}</RemarkInfo>`,\n ...(t.accounting ?? []).map((entry) => `<AccountingInfo${attrs([['Action', entry.action], ['Type', entry.type], ['LinkCode', entry.linkCode]])}/>`),\n `<ItineraryRef><Source${attrs([\n ['AAA_PseudoCityCode', t.aaaPcc],\n ['CreateDateTime', t.createdAt],\n ['CreationAgent', t.agent],\n ['CreationAgentDutyCode', t.agentDutyCode],\n ['CreationAgentFunctionCode', t.agentFunctionCode],\n ['PseudoCityCode', t.pcc],\n ['ReceivedFrom', t.receivedFrom],\n ])}/></ItineraryRef>`,\n '</HistoricalInfo>',\n ].join('');\n}\n\n/** Lo que Sabre responde al historial de otro PNR con la sesión dentro de una cola (CERT, Q-102). */\nconst NOT_ALLOWED_INSIDE_QUEUE = 'NAK6 -NOT ALLOWED- FINISH OR IGNORE OTHER ACTIVITY';\n\nexport function createQueueFake(options: QueueFakeOptions = {}): QueueFake {\n if (typeof options !== 'object' || options === null) fail('options debe ser un objeto');\n const now = options.now ?? (() => new Date());\n if (typeof now !== 'function') fail('now debe ser una función');\n\n const pnrs = new Map<string, Pnr>();\n const queues = new Map<string, Entry[]>();\n const sessions = new Map<string, Session>();\n const calls: QueueFakeCall[] = [];\n let tokens = 0;\n\n const register = (item: QueueFakeItem, label: string): Pnr & Omit<Entry, 'locator'> => {\n const pnr = toPnr(item, label);\n const known = pnrs.get(pnr.locator);\n if (known !== undefined && JSON.stringify(known.paragraph) !== JSON.stringify(pnr.paragraph)) {\n fail(`${label}: el PNR ${pnr.locator} aparece con dos párrafos distintos`);\n }\n if (known === undefined) {\n pnrs.set(pnr.locator, { locator: pnr.locator, paragraph: pnr.paragraph, primaryPassenger: pnr.primaryPassenger });\n }\n return pnr;\n };\n\n for (const [optionName, items] of Object.entries(options.queues ?? {})) {\n const key = optionKey(optionName);\n validateKey(key);\n if (!Array.isArray(items)) fail(`queues['${key}'] debe ser una lista`);\n if (key === MESSAGE_QUEUE) {\n queues.set(key, items.map((item, index) => ({ locator: '', placedAt: undefined, placedBy: undefined, message: toMessage(item, index) })));\n continue;\n }\n queues.set(\n key,\n items.map((item, index) => {\n const { locator, placedAt, placedBy } = register(item, `queues['${key}'][${index}]`);\n return { locator, placedAt, placedBy };\n }),\n );\n }\n for (const [index, item] of (options.pnrs ?? []).entries()) register(item, `pnrs[${index}]`);\n\n const activity = new Map<string, QueueFakeActivity>();\n for (const [optionName, counters] of Object.entries(options.activity ?? {})) {\n const key = optionKey(optionName);\n validateKey(key);\n activity.set(key, toActivity(counters, `activity['${key}']`));\n }\n const histories = new Map<string, QueueFakeHistoryTransaction[]>();\n for (const [locator, transactions] of Object.entries(options.histories ?? {})) {\n if (!LOCATOR.test(locator)) fail(`histories['${locator}']: la clave debe ser un localizador de 6 caracteres alfanuméricos en mayúscula`);\n histories.set(locator, toHistory(transactions, `histories['${locator}']`));\n }\n\n const queue = (key: string): Entry[] => {\n let entries = queues.get(key);\n if (entries === undefined) {\n entries = [];\n queues.set(key, entries);\n }\n return entries;\n };\n\n // --- Respuestas de sesión ---------------------------------------------------------------\n\n const invalidToken = (conversationId: string, token: string | undefined): Reply => ({\n status: 500,\n body: envelope(\n 'ErrorRS',\n conversationId,\n token,\n `<soap-env:Fault><faultcode>soap-env:Client.InvalidSecurityToken</faultcode><faultstring>Invalid or Expired binary security token: ${escape(token ?? '')}</faultstring><detail><StackTrace>com.sabre.universalservices.base.session.SessionException: errors.session.USG_INVALID_SECURITY_TOKEN</StackTrace></detail></soap-env:Fault>`,\n ),\n });\n\n const reply = (action: string, session: Session, token: string, body: string): Reply => ({\n status: 200,\n body: envelope(action, session.conversationId, token, body),\n });\n\n // --- Colas --------------------------------------------------------------------------\n\n const lineXml = (entry: Entry, extra: { number?: number; passenger?: boolean } = {}): string => {\n const pnr = pnrs.get(entry.locator);\n const source =\n entry.placedBy === undefined\n ? ''\n : `<POS><Source${entry.placedBy.agentSine === undefined ? '' : ` AgentSine=\"${escape(entry.placedBy.agentSine)}\"`}${entry.placedBy.pseudoCityCode === undefined ? '' : ` PseudoCityCode=\"${escape(entry.placedBy.pseudoCityCode)}\"`}/></POS>`;\n return [\n extra.number === undefined ? '<Line>' : `<Line Number=\"${extra.number}\">`,\n entry.placedAt === undefined ? '' : `<DateTime>${escape(entry.placedAt)}</DateTime>`,\n source,\n extra.passenger === true && pnr?.primaryPassenger !== undefined ? `<PassengerName>${escape(pnr.primaryPassenger)}</PassengerName>` : '',\n `<UniqueID ID=\"${escape(entry.locator)}\"/>`,\n '</Line>',\n ].join('');\n };\n\n const accessRS = (inner: string): string =>\n `<QueueAccessRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.1.1\">${inner}</QueueAccessRS>`;\n const placeRS = (inner: string): string =>\n `<QueuePlaceRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.0.4\">${inner}</QueuePlaceRS>`;\n const accessError = (message: string): string => accessRS(results('NotProcessed', hostResult('Error', message)));\n const placeError = (message: string): string => placeRS(results('NotProcessed', hostResult('Error', message)));\n\n /** El paso en el que queda la sesión: el PNR en pantalla o el fin de cola. */\n /**\n * Si un PNR cumple un filtro de `selection`. `undefined` si la función no se simula. `AC` acepta\n * una sola letra (todos los estados que empiezan con ella), como el host.\n */\n const matchesFilter = (entry: Entry, fn: string, criteria: string): boolean | undefined => {\n if (entry.message !== undefined) return false;\n const wanted = criteria.trim().toUpperCase();\n const paragraph = () => parseQueueParagraph(pnrs.get(entry.locator)?.paragraph ?? [], { referenceDate: now() });\n switch (fn.toUpperCase()) {\n case 'QD':\n return placedOn(entry.placedAt, wanted);\n case 'AK':\n return `${entry.placedBy?.pseudoCityCode ?? ''}${entry.placedBy?.agentSine ?? ''}`.toUpperCase() === wanted;\n case 'AL':\n return paragraph().segments.some((segment) => segment.kind === 'air' && segment.airlineCode === wanted);\n case 'AC':\n return paragraph().segments.some((segment) => segment.status.startsWith(wanted));\n case 'PI': {\n const code = Number(wanted);\n if (entry.instructionCode !== undefined) return entry.instructionCode === code;\n return paragraph().messages.some((message) => message.instructionCode === code);\n }\n default:\n return undefined;\n }\n };\n\n /**\n * Los filtros de un request, como predicado. Un código que el fake no simula da el mensaje del\n * error de host, en vez de ignorarlo.\n */\n const selectionOf = (rq: XmlNode, allowed: readonly string[]): { matches?: (entry: Entry) => boolean; error?: string } => {\n const filters = nodes(rq.Selection).map((selection) => ({ fn: (attr(selection, 'Function') ?? '').toUpperCase(), criteria: attr(selection, 'Criteria') ?? '' }));\n if (filters.length === 0) return {};\n const unsupported = filters.find((filter) => !allowed.includes(filter.fn));\n if (unsupported !== undefined) return { error: `sabre-client/testing: selection ${unsupported.fn} no está simulado (simula ${allowed.join(', ')})` };\n return { matches: (entry) => filters.every((filter) => matchesFilter(entry, filter.fn, filter.criteria) === true) };\n };\n\n /** Con `selection`, deja el cursor en el próximo PNR que cumple. */\n const advance = (session: Session): void => {\n const inside = session.inside;\n if (inside?.matches === undefined) return;\n const entries = queue(inside.key);\n while (inside.index < entries.length && !inside.matches(entries[inside.index]!)) inside.index += 1;\n };\n\n const step = (session: Session): string => {\n advance(session);\n const inside = session.inside;\n const entry = inside === undefined ? undefined : queue(inside.key)[inside.index];\n if (entry === undefined) {\n session.inside = undefined;\n return accessRS(`${results('Complete', success)}<Paragraph>${textLines([END_OF_DISPLAY])}</Paragraph>`);\n }\n if (entry.message !== undefined) {\n return accessRS(`${results('Complete', success)}<Paragraph>${textLines(entry.message)}</Paragraph>`);\n }\n const pnr = pnrs.get(entry.locator)!;\n return accessRS(`${results('Complete', success)}${lineXml(entry)}<Paragraph>${textLines(pnr.paragraph)}</Paragraph>`);\n };\n\n /** Cuántos hay en una cola para `count` y `activity`: sin el PNR en pantalla (producción, #96; CERT, #167). */\n const waiting = (session: Session, key: string, entries: readonly Entry[]): number =>\n entries.length - (session.inside?.key === key && entries[session.inside.index] !== undefined ? 1 : 0);\n\n const countRS = (inner: string): string =>\n `<QueueCountRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.2.1\">${inner}</QueueCountRS>`;\n\n /**\n * `count` de todo el PCC, de una cola o de un rango, como en CERT y producción (#213): con una\n * cola, solo esa y sin `Totals`; con un rango, cada cola, las vacías con `Count=\"0\"`, y los\n * `Totals` del rango. Con `selection` y una cola, cuenta los que cumplen y manda un `Totals` sin\n * `Type` con el total de la cola; sin cola o con un rango, da los errores de Sabre.\n */\n const count = (session: Session, rq: XmlNode): string => {\n const identifier = node(node(rq.QueueInfo)?.QueueIdentifier);\n const pcc = attr(identifier, 'PseudoCityCode') ?? '';\n const countError = (message: string) => countRS(results('NotProcessed', hostResult('Error', message)));\n const range = node(identifier?.Range);\n const requested = requestedKey(identifier);\n const { matches, error } = selectionOf(rq, QUEUE_FAKE_SELECTION_FUNCTIONS);\n if (matches !== undefined || error !== undefined) {\n // Sin cola, o con un rango, Sabre rechaza selection (CERT y producción, #213).\n if (range !== undefined) return countError('KEYS NOT ALLOWED');\n if (requested === undefined) return countError('QUEUE SELECTED NOT VALID OR CLOSED');\n if (error !== undefined) return countError(error);\n }\n const info = (identifiers: readonly string[]) =>\n `${results('Complete', success)}<QueueInfo DateTime=\"${shortDate(now())}\" PseudoCityCode=\"${escape(pcc)}\">${identifiers.join('')}</QueueInfo>`;\n const totalsXml = (messages: number, pnrs: number) =>\n `<Totals Count=\"${messages}\" Type=\"MESSAGES\"/><Totals Count=\"0\" Type=\"SPECIALS\"/><Totals Count=\"${pnrs}\" Type=\"PNRS\"/>`;\n // Con un PNR en pantalla, su cola no lo cuenta (producción, #96).\n const waitingIn = (key: string) => waiting(session, key, queues.get(key) ?? []);\n\n if (range !== undefined) {\n const start = Number(attr(range, 'Start'));\n const end = Number(attr(range, 'End'));\n const identifiers: string[] = [];\n let pnrsTotal = 0;\n for (let number = start; number <= end; number++) {\n const total = waitingIn(String(number));\n identifiers.push(`<QueueIdentifier Count=\"${total}\" Number=\"${number}\"/>`);\n pnrsTotal += total;\n }\n return countRS(`${info(identifiers)}${totalsXml(0, pnrsTotal)}`);\n }\n\n if (requested !== undefined) {\n if (matches === undefined) return countRS(info([`<QueueIdentifier Count=\"${waitingIn(requested)}\" ${keyAttribute(requested)}/>`]));\n // Con selection: los que cumplen, y un Totals sin Type con el total de la cola (#213).\n const onScreen = session.inside?.key === requested ? queue(requested)[session.inside.index] : undefined;\n const matching = (queues.get(requested) ?? []).filter((entry) => entry !== onScreen && matches(entry)).length;\n return countRS(`${info([`<QueueIdentifier Count=\"${matching}\" ${keyAttribute(requested)}/>`])}<Totals Count=\"${waitingIn(requested)}\"/>`);\n }\n\n let pnrsTotal = 0;\n let messages = 0;\n const identifiers: string[] = [];\n for (const [queueKey, entries] of queues) {\n const total = waiting(session, queueKey, entries);\n if (total <= 0) continue;\n identifiers.push(`<QueueIdentifier Count=\"${total}\" ${keyAttribute(queueKey)}/>`);\n // Las alfabéticas (la S) son de mensajes; las numéricas y las con nombre, de PNR.\n if (ALPHA_KEY.test(queueKey)) messages += total;\n else pnrsTotal += total;\n }\n return countRS(`${info(identifiers)}${totalsXml(messages, pnrsTotal)}`);\n };\n\n const access = (session: Session, rq: XmlNode): string => {\n const navigation = attr(rq.Navigation, 'Action');\n if (navigation !== undefined) return navigate(session, rq, navigation);\n\n const identifier = node(rq.QueueIdentifier);\n const key = requestedKey(identifier);\n if (key === undefined) return accessError('sabre-client/testing: QueueIdentifier sin Number ni Name');\n const isList = node(identifier?.List) !== undefined;\n calls.push({ command: isList ? 'list' : 'access', queue: refOfKey(key) });\n\n // En la lista, Sabre acepta solo QD o AK, con este mensaje (producción, #155).\n if (isList && nodes(rq.Selection).some((selection) => !LIST_SELECTION_FUNCTIONS.includes((attr(selection, 'Function') ?? '').toUpperCase()))) {\n return accessError('VALID SELECTION CODE FOR QUEUE LIST ARE QD OR AK');\n }\n const { matches, error } = selectionOf(rq, QUEUE_FAKE_SELECTION_FUNCTIONS);\n if (error !== undefined) return accessError(error);\n const entries = queue(key);\n if (entries.length === 0) return accessError(QUEUE_EMPTY);\n\n if (isList) {\n const passenger = attr(identifier?.List, 'PrimaryPassenger') === 'true';\n // Con selection, las Line que cumplen, renumeradas desde 1. Si ninguna cumple, la respuesta\n // va sin Line (supuesto del fake: no se grabó una lista filtrada vacía).\n const listed = matches === undefined ? entries : entries.filter(matches);\n const lines = listed.map((entry, index) => lineXml(entry, { number: index + 1, passenger })).join('');\n return accessRS(`${results('Complete', success)}${lines}`);\n }\n // Con selection, el recorrido salta los PNR que no cumplen y termina en END OF DISPLAY, como en\n // producción (#155). Si ninguno cumple, END OF DISPLAY al entrar: supuesto del fake.\n session.inside = { key, index: 0, ...(matches === undefined ? {} : { matches }) };\n return step(session);\n };\n\n const navigate = (session: Session, rq: XmlNode, action: string): string => {\n const command = NAVIGATION[action];\n if (command === undefined) return accessError(`sabre-client/testing: Navigation ${action} no está simulado`);\n calls.push({ command });\n const inside = session.inside;\n if (action === 'QXI') {\n if (inside === undefined) return accessError(OFF_QUEUE);\n session.inside = undefined;\n return accessRS(results('Complete', success));\n }\n // Fuera de una cola, producción responde `IGD` a `I`. Se supone lo mismo para `QR`.\n if (inside === undefined) return accessError('IGD');\n const current = queue(inside.key)[inside.index];\n if (current === undefined) return step(session);\n\n if (action === 'I') {\n inside.index += 1;\n return step(session);\n }\n const from = nodes(rq.QueueIdentifier).map((identifier) => requestedKey(identifier) ?? '');\n const targets = from.length === 0 ? [inside.key] : from;\n for (const key of targets) {\n const entries = queue(key);\n const position = key === inside.key ? inside.index : entries.findIndex((entry) => entry.locator === current.locator);\n if (position >= 0 && entries[position]?.locator === current.locator) entries.splice(position, 1);\n }\n // Si no salió de la cola en curso, el cursor avanza como con `I`.\n if (!targets.includes(inside.key)) inside.index += 1;\n return step(session);\n };\n\n const place = (session: Session, rq: XmlNode): string => {\n calls.push({ command: 'place' });\n const info = node(rq.QueueInfo);\n const targets = nodes(info?.QueueIdentifier).map((identifier) => ({\n key: requestedKey(identifier) ?? '',\n pcc: attr(identifier, 'PseudoCityCode'),\n instructionCode: attr(identifier, 'PrefatoryInstructionCode'),\n }));\n const locators = nodes(info?.UniqueID).map((id) => attr(id, 'ID') ?? '');\n const inside = session.inside;\n const moving = inside !== undefined && locators.length === 0;\n\n // Producción pide el PIC siempre, aunque el design lo dé como opcional (#97).\n if (targets.some((target) => target.instructionCode === undefined)) {\n return placeError(moving ? 'NEED INSTRUCTION NUMBER' : 'INSTRUCTION NUMBER NOT IN RANGE');\n }\n for (const target of targets) validateKey(target.key);\n if (targets.some((target) => target.key === MESSAGE_QUEUE)) return placeError('sabre-client/testing: place a la cola S no está simulado');\n\n const at = now();\n const add = (locator: string, target: (typeof targets)[number]): void => {\n const entries = queue(target.key);\n if (entries.some((entry) => entry.locator === locator)) return;\n const code = Number(target.instructionCode);\n entries.push({\n locator,\n placedAt: longDate(at),\n placedBy: target.pcc === undefined ? undefined : { pseudoCityCode: target.pcc },\n ...(Number.isInteger(code) ? { instructionCode: code } : {}),\n });\n };\n\n if (moving) {\n const current = queue(inside.key)[inside.index];\n if (current === undefined) return placeError('sabre-client/testing: no hay PNR en pantalla');\n // El PNR se mueve: sale de la cola en curso y queda en las de destino (#97).\n queue(inside.key).splice(inside.index, 1);\n for (const target of targets) add(current.locator, target);\n advance(session);\n const next = queue(inside.key)[inside.index];\n if (next === undefined) {\n session.inside = undefined;\n return placeRS(results('Complete', `${success}${hostResult('Warning', END_OF_DISPLAY)}`));\n }\n return placeRS(`${results('Complete', success)}${textLines(pnrs.get(next.locator)!.paragraph)}`);\n }\n\n // El fake no lleva el AAA fuera de una cola: sin localizadores no hay qué colocar.\n if (locators.length === 0) return placeError('sabre-client/testing: place fuera de una cola necesita locators');\n if (locators.some((locator) => !pnrs.has(locator))) return placeError('BAD PNR LOCATOR');\n const placements: string[] = [];\n for (const locator of locators) {\n for (const target of targets) {\n add(locator, target);\n const identifier = keyAttribute(target.key, true);\n const pcc = target.pcc === undefined ? '' : ` PseudoCityCode=\"${escape(target.pcc)}\"`;\n placements.push(`<QueueInfo DateTime=\"${shortDate(at)}\"><QueueIdentifier ${identifier}${pcc}/><UniqueID ID=\"${escape(locator)}\"/></QueueInfo>`);\n }\n }\n return placeRS(`${results('Complete', success)}${placements.join('')}`);\n };\n\n // --- Get Queue Activity y Get Itinerary History ------------------------------------------\n\n /**\n * `activity` de todo el PCC, de una cola o de un rango, como en producción (#213): sin filtros,\n * las colas con algún contador; con una cola, solo esa y sin `Totals`; con un rango, cada cola,\n * también las que están en cero, y los `Totals` del rango.\n */\n const analyze = (session: Session, rq: XmlNode): string => {\n calls.push({ command: 'activity' });\n const identifier = node(node(rq.QueueInfo)?.QueueIdentifier);\n const pcc = attr(identifier, 'PseudoCityCode') ?? '';\n const countersOf = (key: string): Record<string, number> => {\n const seeded = activity.get(key) ?? {};\n const counters: Record<string, number> = { NumMessages: waiting(session, key, queues.get(key) ?? []) };\n for (const [name, element] of ACTIVITY_COUNTERS) counters[element] = seeded[name] ?? 0;\n return counters;\n };\n const countersXml = (counters: Record<string, number>) =>\n Object.entries(counters).map(([element, value]) => `<${element} Count=\"${value}\"/>`).join('');\n\n let keys: string[];\n let withTotals = true;\n const range = node(identifier?.Range);\n const requested = requestedKey(identifier);\n if (range !== undefined) {\n keys = [];\n for (let number = Number(attr(range, 'Start')); number <= Number(attr(range, 'End')); number++) keys.push(String(number));\n } else if (requested !== undefined) {\n keys = [requested];\n withTotals = false;\n } else {\n // Las colas del fake y las sembradas, una vez cada una. Como Sabre, se listan también colas\n // vacías con contadores, y no las que están en cero.\n keys = [...new Set([...queues.keys(), ...activity.keys()])].filter((key) => Object.values(countersOf(key)).some((value) => value !== 0));\n }\n\n const totals: Record<string, number> = { NumMessages: 0 };\n for (const [, element] of ACTIVITY_COUNTERS) totals[element] = 0;\n const identifiers = keys.map((key) => {\n const counters = countersOf(key);\n for (const [element, value] of Object.entries(counters)) totals[element] = (totals[element] ?? 0) + value;\n return `<QueueIdentifier ${keyAttribute(key)}>${countersXml(counters)}</QueueIdentifier>`;\n });\n const totalsXml = withTotals ? `<Totals>${countersXml(totals)}</Totals>` : '';\n return `<QueueAnalysisRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.0.0\">${results('Complete', success)}<QueueInfo DateTime=\"${shortDate(now())}\" PseudoCityCode=\"${escape(pcc)}\">${identifiers.join('')}</QueueInfo>${totalsXml}</QueueAnalysisRS>`;\n };\n\n const history = (session: Session, rq: XmlNode): string => {\n const locator = attr(rq.UniqueID, 'ID') ?? '';\n calls.push({ command: 'history', locator });\n const historyRS = (inner: string): string =>\n `<TravelItineraryHistoryRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.4.0\">${inner}</TravelItineraryHistoryRS>`;\n const historyError = (message: string): string => historyRS(results('NotProcessed', hostResult('Error', message)));\n\n // Dentro de una cola, Sabre rechaza el historial de otro PNR (CERT, Q-102) y acepta el del PNR\n // en pantalla (CERT, #167).\n const inside = session.inside;\n const current = inside === undefined ? undefined : queue(inside.key)[inside.index];\n if (current !== undefined && current.locator !== locator) return historyError(NOT_ALLOWED_INSIDE_QUEUE);\n\n const seeded = histories.get(locator);\n if (seeded !== undefined) return historyRS(`${results('Complete', success)}${seeded.map(historicalInfo).join('')}`);\n if (!pnrs.has(locator)) return historyError(`sabre-client/testing: el PNR ${locator} no está en el fake (qué responde Sabre no está simulado)`);\n const created: QueueFakeHistoryTransaction = { rph: 1, createdAt: longDate(now()), agent: 'AAA', pcc: 'XXXX', receivedFrom: 'SABRE-CLIENT/TESTING' };\n return historyRS(`${results('Complete', success)}${historicalInfo(created)}`);\n };\n\n // --- Despacho --------------------------------------------------------------------------\n\n const handle = (raw: string): Reply => {\n let document: XmlNode | undefined;\n try {\n document = node(node(parser.parse(raw))?.Envelope);\n } catch {\n document = undefined;\n }\n const header = node(document?.Header);\n const messageHeader = node(header?.MessageHeader);\n const action = text(messageHeader?.Action) ?? '';\n const conversationId = text(messageHeader?.ConversationId) ?? '';\n const token = text(node(header?.Security)?.BinarySecurityToken);\n const body = node(document?.Body);\n const [, payload] = Object.entries(body ?? {}).find(([name]) => !name.startsWith('@')) ?? [];\n const rq = node(payload) ?? {};\n\n if (action === 'SessionCreateRQ') {\n calls.push({ command: 'open' });\n tokens += 1;\n const newToken = `Shared/IDL:IceSess\\\\/SessMgr:1\\\\.0.IDL/Common/!ICESMS\\\\/FAKE!${tokens}!0`;\n sessions.set(newToken, { conversationId, inside: undefined });\n const version = attr(rq, 'Version') === '2.0.0' ? '2.0.0' : '1.0.0';\n return {\n status: 200,\n body: envelope(\n 'SessionCreateRS',\n conversationId,\n newToken,\n `<SessionCreateRS xmlns=\"http://www.opentravel.org/OTA/2002/11\" version=\"${version}\" status=\"Approved\"><ConversationId>${escape(conversationId)}</ConversationId></SessionCreateRS>`,\n ),\n };\n }\n\n const session = token === undefined ? undefined : sessions.get(token);\n if (session === undefined || token === undefined) return invalidToken(conversationId, token);\n\n switch (action) {\n case 'SessionCloseRQ':\n calls.push({ command: 'close' });\n sessions.delete(token);\n return reply('SessionCloseRS', session, token, '<SessionCloseRS xmlns=\"http://www.opentravel.org/OTA/2002/11\" version=\"1\" status=\"Approved\"/>');\n case 'OTA_PingRQ': {\n calls.push({ command: 'ping' });\n const echo = text(rq.EchoData) ?? '';\n return reply(\n 'OTA_PingRS',\n session,\n token,\n `<OTA_PingRS xmlns=\"http://www.opentravel.org/OTA/2003/05\" TimeStamp=\"${now().toISOString().slice(0, 19)}Z\" Version=\"1.0.0\"><Success/><EchoData>${escape(echo)}</EchoData></OTA_PingRS>`,\n );\n }\n case 'QueueCountLLSRQ':\n calls.push({ command: 'count' });\n return reply('QueueCountLLSRS', session, token, count(session, rq));\n case 'QueueAccessLLSRQ':\n return reply('QueueAccessLLSRS', session, token, access(session, rq));\n case 'QueuePlaceLLSRQ':\n return reply('QueuePlaceLLSRS', session, token, place(session, rq));\n case 'QueueAnalysisLLSRQ':\n return reply('QueueAnalysisLLSRS', session, token, analyze(session, rq));\n case 'TravelItineraryHistoryLLSRQ':\n return reply('TravelItineraryHistoryLLSRS', session, token, history(session, rq));\n default:\n return {\n status: 500,\n body: envelope(\n 'ErrorRS',\n conversationId,\n token,\n `<soap-env:Fault><faultcode>soap-env:Client.InvalidAction</faultcode><faultstring>sabre-client/testing: ${escape(action)} no está simulado</faultstring></soap-env:Fault>`,\n ),\n };\n }\n };\n\n const fakeFetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const signal = init?.signal ?? (input instanceof Request ? input.signal : undefined);\n signal?.throwIfAborted();\n const raw = typeof init?.body === 'string' ? init.body : input instanceof Request ? await input.text() : String(init?.body ?? '');\n const { status, body } = handle(raw);\n return new Response(body, { status, headers: { 'Content-Type': 'text/xml;charset=UTF-8' } });\n };\n\n return {\n fetch: fakeFetch as typeof fetch,\n locators: (ref) => (queues.get(queueKey(ref)) ?? []).filter((entry) => entry.message === undefined).map((entry) => entry.locator),\n messages: () => (queues.get(MESSAGE_QUEUE) ?? []).map((entry) => [...(entry.message ?? [])]),\n get calls() {\n return [...calls];\n },\n get openSessions() {\n return sessions.size;\n },\n expireSessions() {\n sessions.clear();\n },\n };\n}\n","// Access Queue (`QueueAccessLLSRQ` 2.1.1): entrar a una cola y navegarla. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (puntos 2, 3 y 4) y\n// wiki/sources/access-queue-v2-1-1-design.md.\nimport { XMLParser } from 'fast-xml-parser';\nimport type { RequestOptions } from '../air/bargain-finder-max.js';\nimport { SabreBusinessError, SabreGatewayError, type SabreWarning } from '../errors/index.js';\nimport { asArray, respondedAtField, type SoapResponse, textOf, xmlEscape } from '../http/soap-transport.js';\nimport type { SessionRequest } from '../session/session.js';\nimport { type QueueRef, queueRefAttribute } from './queue-ref.js';\n\nexport const QUEUE_ACCESS_SERVICE = 'queueAccess';\nconst NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\n\n/** Texto exacto del fin de cola. Es la respuesta normal cuando no queda ningún PNR. */\nexport const END_OF_DISPLAY = 'END OF DISPLAY FOR REQUESTED DATA';\n/**\n * Una cola vacía, como `stl:Error` de `access` y `list` (producción, #96). Las fuentes solo\n * mostraban `END OF DISPLAY`.\n */\nexport const QUEUE_EMPTY = 'QUEUE SELECTED WAS EMPTY';\n/** `QXI` con la sesión fuera de una cola, como `stl:Error` (producción, #96). */\nexport const OFF_QUEUE = 'CANNOT DO THIS IF OFF QUEUE';\n\n/** Por qué terminó la cola: el fin de cola de siempre o una cola vacía al entrar. */\nexport type QueueEndReason = 'end-of-display' | 'empty';\n\n/** Máximo de filtros de `selection` y de colas de `remove({ from })`, según el design 2.1.1. */\nexport const MAX_SELECTIONS = 8;\nexport const MAX_REMOVE_FROM = 3;\n\n/**\n * Un filtro al entrar a una cola: un calificador de host, p. ej. `{ function: 'AL', criteria: 'DL' }`\n * (solo los PNR de esa aerolínea). Las reglas de combinación las valida Sabre.\n */\nexport interface QueueSelection {\n function: string;\n criteria: string;\n}\n\nexport interface QueueAccessRequest {\n queue: QueueRef;\n /** PCC de la cola. Por defecto, el de la sesión. */\n pcc?: string;\n /** Hasta 8 filtros. Con selección, la cola abre solo los PNR que cumplen el criterio. */\n selection?: readonly QueueSelection[];\n}\n\n/** Una cola de la que `remove` saca el PNR actual. */\nexport interface QueueRemoveTarget {\n queue: QueueRef;\n /** Por defecto, el PCC de la sesión. */\n pcc?: string;\n}\n\nexport interface QueueRemoveRequest {\n /** De 1 a 3 colas de las que sacar el PNR actual a la vez. Sin `from`, sale de la cola en curso. */\n from?: readonly QueueRemoveTarget[];\n}\n\nexport type QueueAccessOptions = RequestOptions;\nexport type QueueNavigationOptions = RequestOptions;\n\n/** El PNR en el que quedó parada la cola. */\nexport interface QueueItem {\n /** Localizador: `Line/UniqueID@ID`. */\n locator: string;\n /**\n * `Line/DateTime`, tal cual llegó: con año en las respuestas reales (`\"2024-05-15T13:24\"`), sin\n * año en el design (`\"12-21T07:00\"`). Al entrar a una cola (`access`, `ignore`, `remove`, `place`)\n * es la **última modificación del PNR**, no la colocación en la cola: para un mismo PNR no\n * coincide con el de `list`, que sí es la colocación (producción, #96 y #155). Se devuelve tal cual.\n */\n placedAt?: string;\n /** `Line/POS/Source`: quién colocó el PNR. `agentSine` puede ser `SABRE`. */\n placedBy?: { agentSine?: string; pseudoCityCode?: string };\n /** `Line/PassengerName`. Las respuestas reales de entrar a una cola no lo traen. */\n primaryPassenger?: string;\n /** `Line/Group`. Las respuestas reales de entrar a una cola no lo traen. */\n group?: string;\n /**\n * `Paragraph/Text`: el PNR en formato de host, línea por línea y tal cual, con su sangría. Las\n * líneas vacías llegan como `\"\"`. Se interpreta con `parseQueueParagraph`.\n */\n paragraph: readonly string[];\n}\n\n/**\n * Un mensaje de la cola `S`, la de mensajes del PCC (ADR-028). No es un PNR: no trae localizador\n * ni datos de colocación, solo texto libre.\n */\nexport interface QueueMessage {\n /** `Paragraph/Text`, línea por línea y tal cual, con su sangría. */\n text: string[];\n}\n\n/**\n * Resultado de una operación que avanza en la cola. Lo que queda en pantalla se distingue por\n * `kind`: un PNR (`'pnr'`, en las colas numéricas y con nombre) o un mensaje (`'message'`, en la\n * cola `S`). El fin de cola es un resultado, no un error: `END OF DISPLAY FOR REQUESTED DATA`\n * llega como `{ done: true }`, también al entrar a una cola vacía, y deja la sesión fuera de la\n * cola.\n */\nexport type QueueStep =\n | { done: false; kind: 'pnr'; item: QueueItem; warnings: SabreWarning[]; respondedAt?: string }\n | { done: false; kind: 'message'; message: QueueMessage; warnings: SabreWarning[]; respondedAt?: string }\n | { done: true; reason: QueueEndReason; message: string; warnings: SabreWarning[]; respondedAt?: string };\n\n/** Qué acción de navegación se manda en `Navigation@Action`. */\ntype NavigationAction = 'I' | 'QR' | 'QXI';\n\nconst OPERATIONS: Record<NavigationAction, string> = { I: 'queue.ignore', QR: 'queue.remove', QXI: 'queue.exit' };\n\nfunction root(body: string): string {\n return `<QueueAccessRQ Version=\"2.1.1\" xmlns=\"${NAMESPACE}\">${body}</QueueAccessRQ>`;\n}\n\nfunction identifier(queue: QueueRef, pcc: string): string {\n return `<QueueIdentifier ${queueRefAttribute(queue)} PseudoCityCode=\"${xmlEscape(pcc)}\"/>`;\n}\n\n/** Los `Selection`, hermanos de `QueueIdentifier`. Los usan `access` y `list`. */\nexport function selectionXml(selection: readonly QueueSelection[]): string {\n return selection\n .map((filter) => `<Selection Function=\"${xmlEscape(filter.function)}\" Criteria=\"${xmlEscape(filter.criteria)}\"/>`)\n .join('');\n}\n\n/** `Q/<PCC><cola>`, con los filtros de `Selection` si los hay. */\nexport function queueAccessPayload(queue: QueueRef, pcc: string, selection: readonly QueueSelection[] = []): string {\n return root(`${identifier(queue, pcc)}${selectionXml(selection)}`);\n}\n\n/** `Navigation@Action`. Solo `QR` lleva `QueueIdentifier`: las colas de las que sacar el PNR. */\nexport function queueNavigationPayload(action: NavigationAction, from: ReadonlyArray<{ queue: QueueRef; pcc: string }> = []): string {\n return root(`<Navigation Action=\"${action}\"/>${from.map((target) => identifier(target.queue, target.pcc)).join('')}`);\n}\n\n/**\n * Las operaciones de Access Queue mueven el cursor: no se reintentan ante un fallo de red. El\n * transporte solo las repite ante `USG_*_BUSY` y `PREVIOUS ENTRY ACTIVE`.\n */\nexport function queueAccessRequest(payload: string, operation: string, options: RequestOptions): SessionRequest {\n return { service: QUEUE_ACCESS_SERVICE, action: 'QueueAccessLLSRQ', payload, idempotent: false, operation, ...options };\n}\n\nexport function navigationOperation(action: NavigationAction): string {\n return OPERATIONS[action];\n}\n\n/**\n * Parser aparte para el `Paragraph`: el del transporte recorta los espacios, y el formato de host\n * usa la sangría. Se vuelve a leer el sobre (ya redactado) sin recortar.\n */\nconst paragraphParser = new XMLParser({\n ignoreAttributes: true,\n removeNSPrefix: true,\n parseTagValue: false,\n trimValues: false,\n processEntities: true,\n isArray: (name) => name === 'Text',\n});\n\nexport type XmlNode = Record<string, unknown>;\n\nexport function node(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return node(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nexport function attribute(value: unknown, name: string): string | undefined {\n const text = node(value)?.[`@${name}`];\n return typeof text === 'string' && text.trim() !== '' ? text.trim() : undefined;\n}\n\nfunction element(value: unknown): string | undefined {\n const text = textOf(Array.isArray(value) ? value[0] : value)?.trim();\n return text === undefined || text === '' ? undefined : text;\n}\n\n/**\n * Las líneas `Text` de una respuesta, tal cual: las de `Paragraph` en `QueueAccessRS` y las del\n * primer nivel en `QueuePlaceRS`.\n */\nexport function textLines(raw: string, payloadName: 'QueueAccessRS' | 'QueuePlaceRS'): string[] {\n let parsed: unknown;\n try {\n parsed = paragraphParser.parse(raw);\n } catch {\n return [];\n }\n const payload = node(node(node(node(parsed)?.Envelope)?.Body)?.[payloadName]);\n const container = payloadName === 'QueueAccessRS' ? node(payload?.Paragraph) : payload;\n return asArray(container?.Text).map((line) => (typeof line === 'string' ? line : (textOf(line) ?? '')));\n}\n\n/** Las líneas de `Paragraph/Text` de un `QueueAccessRS`, tal cual. */\nexport function paragraphLines(raw: string): string[] {\n return textLines(raw, 'QueueAccessRS');\n}\n\n/** Si un texto de Sabre es el fin de cola, comparado por el texto exacto. */\nexport function isEndOfDisplay(text: string | undefined): boolean {\n return text?.trim() === END_OF_DISPLAY;\n}\n\n/**\n * Si un `stl:Warning` o `stl:Error` es el fin de cola. El transporte junta los `Message` con\n * `\" / \"` y agrega el `ShortText` entre paréntesis, así que se busca el texto como una de esas\n * partes, entero.\n */\nexport function isEndOfDisplayResult(error: { message: string; service: string }): boolean {\n return resultHasText(error, END_OF_DISPLAY);\n}\n\n/** Si un `stl:Warning` o `stl:Error` trae `text` como una de sus partes, entero. */\nexport function resultHasText(error: { message: string; service: string }, text: string): boolean {\n const prefix = `${error.service}: `;\n const description = error.message.startsWith(prefix) ? error.message.slice(prefix.length) : error.message;\n return description\n .split(/ \\/ | \\(|\\)/)\n .some((part) => part.trim() === text);\n}\n\n/**\n * El fin de cola, si llegó como `stl:Error` de `service`: `END OF DISPLAY` o una cola vacía\n * (`QUEUE SELECTED WAS EMPTY`). Si no, `undefined`.\n */\nexport function queueEndError(error: unknown, service: string): { reason: QueueEndReason; error: SabreBusinessError } | undefined {\n if (!(error instanceof SabreBusinessError) || error.service !== service) return undefined;\n const results = [error, ...error.errors];\n if (results.some((result) => resultHasText(result, QUEUE_EMPTY))) return { reason: 'empty', error };\n if (results.some(isEndOfDisplayResult)) return { reason: 'end-of-display', error };\n return undefined;\n}\n\n/** Si el error es el de `QXI` con la sesión fuera de una cola. */\nexport function isOffQueueError(error: unknown): error is SabreBusinessError {\n return error instanceof SabreBusinessError && [error, ...error.errors].some((result) => resultHasText(result, OFF_QUEUE));\n}\n\n/** El fin de cola. `raw` es el sobre del que sale `respondedAt`: la respuesta o el `stl:Error`. */\nexport function endStep(warnings: SabreWarning[], reason: QueueEndReason = 'end-of-display', raw?: unknown): QueueStep {\n return { done: true, reason, message: reason === 'empty' ? QUEUE_EMPTY : END_OF_DISPLAY, warnings, ...respondedAtField(raw) };\n}\n\n/**\n * Lee el paso de un `QueueAccessRS`. El fin de cola llega como primera línea del `Paragraph`\n * (evidencia de `1.0.8`, y la cola `S` en CERT) o como `stl:Warning`. Con `messages` (la sesión\n * está en la cola `S`), un `Paragraph` sin `Line` es un mensaje (CERT, 2026-11-06). Fuera de la\n * `S`, un `Line` sin localizador es una respuesta que el SDK no entiende: lanza\n * `SabreGatewayError`. En la `S`, un `Line` con localizador también lanza.\n */\nexport function parseQueueStep(response: SoapResponse, { messages = false }: { messages?: boolean } = {}): QueueStep {\n const { warnings } = response;\n const paragraph = paragraphLines(response.raw);\n const firstLine = paragraph.find((line) => line.trim() !== '');\n if (isEndOfDisplay(firstLine) || warnings.some(isEndOfDisplayResult)) return endStep(warnings, 'end-of-display', response.raw);\n\n if (messages && response.payload.Line === undefined && firstLine !== undefined) {\n return { done: false, kind: 'message', message: { text: paragraph }, warnings, ...respondedAtField(response.raw) };\n }\n const fields = messages ? undefined : lineFields(response.payload.Line);\n if (fields === undefined) {\n const expected = messages ? 'sin Paragraph de mensaje ni fin de cola en la cola S' : 'sin Line/UniqueID ni fin de cola';\n throw new SabreGatewayError(`${QUEUE_ACCESS_SERVICE}: respuesta no reconocida (${expected})`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: response.raw,\n });\n }\n const item: QueueItem = { ...fields, paragraph };\n return { done: false, kind: 'pnr', item, warnings, ...respondedAtField(response.raw) };\n}\n\n/** Los campos de un `Line`, o `undefined` si no trae `UniqueID`. */\nexport function lineFields(value: unknown): Omit<QueueItem, 'paragraph'> | undefined {\n const line = node(value);\n const locator = attribute(line?.UniqueID, 'ID');\n if (line === undefined || locator === undefined) return undefined;\n const source = node(node(line.POS)?.Source);\n const agentSine = attribute(source, 'AgentSine');\n const pseudoCityCode = attribute(source, 'PseudoCityCode');\n const placedAt = element(line.DateTime);\n const primaryPassenger = element(line.PassengerName);\n const group = element(line.Group);\n return {\n locator,\n ...(placedAt === undefined ? {} : { placedAt }),\n ...(agentSine === undefined && pseudoCityCode === undefined\n ? {}\n : {\n placedBy: {\n ...(agentSine === undefined ? {} : { agentSine }),\n ...(pseudoCityCode === undefined ? {} : { pseudoCityCode }),\n },\n }),\n ...(primaryPassenger === undefined ? {} : { primaryPassenger }),\n ...(group === undefined ? {} : { group }),\n };\n}\n","// Transporte SOAP de `SabreLegacy`: sobre armado a mano, fetch, parseo y mapeo de errores.\n// Ver sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (puntos 4 y 6),\n// cliente-http-y-libreria-xml.md y respuesta-cruda-soap.md.\nimport { XMLParser } from 'fast-xml-parser';\nimport { definedOnly, type ResolvedConfig } from '../config.js';\nimport { SabreBusinessError, SabreGatewayError, SabreWarning } from '../errors/index.js';\nimport { EventLogger } from '../logging/logger.js';\nimport { REDACTED, redactSoapEnvelope } from '../logging/redact.js';\nimport { type RawRequestCapture, rawRequestHeaders, type SabreRawRequestCallback } from './raw-request.js';\nimport type { SabreRawResponseCallback } from './raw-response.js';\nimport { type RetryOptions, retryDelay, sleep, validateRetryOptions } from './retry.js';\n\n/**\n * Status HTTP transitorios cuando la respuesta no trae un sobre SOAP (proxy, balanceador).\n * Solo se reintentan en operaciones idempotentes.\n */\nconst TRANSIENT_STATUS = new Set([429, 500, 503, 504]);\n\n/**\n * \"Se excedió el máximo de requests concurrentes: esperar ≥ 500 ms y reintentar\". Se asume que\n * Sabre no procesó el request, así que se reintentan también en las operaciones que mueven el\n * cursor. Sin confirmar: se valida en la Fase 4.\n */\nexport const BUSY_CODES: ReadonlySet<string> = new Set(['USG_CONNECTOR_IS_BUSY', 'USG_IS_BUSY', 'USG_SERVICE_IS_BUSY']);\n\n/**\n * Los demás `USG_*` que el catálogo manda a \"esperar ≥ 500 ms y reintentar\". No dicen si el\n * request se procesó, así que solo se reintentan en operaciones idempotentes.\n * `USG_RESOURCE_UNAVAILABLE` (límite de sesiones) no está: no se reintenta.\n */\nconst TRANSIENT_CODES: ReadonlySet<string> = new Set([\n 'USG_SECURITY_ICE_ERROR',\n 'USG_SERVICE_PROVIDER_ERROR',\n 'USG_NO_RESPONSE_FROM_JMSRECEIVER_IN_TIME',\n 'SC_SERVICE_UNAVAILABLE',\n 'USG_COULD_NOT_COMPLETE_REQUEST',\n 'USG_IIOP_OBJECT_NOT_EXIST',\n 'USG_IIOP_TRANSIENT_EXCEPTION',\n 'USG_MOM_SERVICE_PROVIDER_INFRASTRUCTURE_ERROR',\n]);\n\n/** Esquema fijo que documenta Sabre: 3 reintentos con 1 s de intervalo, sin jitter. */\nexport const PREVIOUS_ENTRY_ACTIVE_RETRIES = 3;\nexport const PREVIOUS_ENTRY_ACTIVE_DELAY_MS = 1000;\nconst PREVIOUS_ENTRY_ACTIVE = /PREVIOUS ENTRY ACTIVE/i;\n\ntype RetryReason = 'busy' | 'previous-entry-active' | 'transient';\n\n/** Credencial del header `wsse:Security`. */\nexport type SoapSecurity =\n /** Token de sesión (ATH) o stateless (ATK). */\n | { binarySecurityToken: string }\n /** Credenciales de `SessionCreateRQ`. `clientId` y `clientSecret` solo van en la 2.0.0. */\n | {\n usernameToken: {\n username: string;\n password: string;\n organization: string;\n domain: string;\n clientId?: string;\n clientSecret?: string;\n };\n };\n\nexport interface SoapRequest {\n /** Nombre del servicio para errores y logs, p. ej. `'queueAccess'`. */\n service: string;\n /** `eb:Service` y `eb:Action`, p. ej. `'QueueAccessLLSRQ'`. */\n action: string;\n /** Payload del `soap-env:Body`, ya armado y escapado (ver `xmlEscape`). */\n payload: string;\n /** `eb:CPAId`: el PCC. */\n cpaId: string;\n /** `eb:ConversationId` de la sesión. */\n conversationId: string;\n security: SoapSecurity;\n /**\n * Si la operación se puede repetir sin efectos (`count`, `list`, `ping`). Las que mueven el\n * cursor de una cola van en `false`: nunca se reintentan ante un fallo de red.\n */\n idempotent: boolean;\n retry?: Partial<RetryOptions>;\n /** `true` para devolver el `BinarySecurityToken` de la respuesta (solo `SessionCreateRQ`). */\n readSecurityToken?: boolean;\n signal?: AbortSignal;\n /** Método público sin `legacy.`, p. ej. `'queue.access'`. Lo reciben `onRawResponse` y `onRawRequest`. */\n operation?: string;\n onRawResponse?: SabreRawResponseCallback;\n /**\n * No se llama con `usernameToken` (`SessionCreateRQ`): el sobre lleva `wsse:Password` y el\n * `ClientSecret`, y la regla de auth lo deja fuera (ADR-029).\n */\n onRawRequest?: SabreRawRequestCallback;\n}\n\nexport interface SoapResponse {\n /** Elemento hijo del `Body` (p. ej. `QueueAccessRS`), parseado y sin prefijos de namespace. */\n payload: Record<string, unknown>;\n /** Nombre local de ese elemento, p. ej. `'QueueAccessRS'`. */\n payloadName: string;\n /** Los `stl:Warning` de `stl:ApplicationResults`. */\n warnings: SabreWarning[];\n /** `eb:MessageId` de la respuesta, el dato que pide soporte de Sabre. */\n messageId: string | undefined;\n /** `eb:Timestamp` de la respuesta, en UTC con `Z` (ver `respondedAtOf`). */\n respondedAt: string | undefined;\n /** El sobre redactado, como `raw` de los errores que arme la operación al leer el payload. */\n raw: string;\n /** El `BinarySecurityToken` del header, solo con `readSecurityToken`. */\n securityToken: string | undefined;\n status: number;\n}\n\nexport interface SoapTransportOptions {\n /** Solo para tests: id del `eb:MessageId`. */\n messageId?: () => string;\n /** Solo para tests: reloj del `eb:Timestamp`. */\n now?: () => Date;\n /** Solo para tests: fuente de aleatoriedad del jitter. */\n random?: () => number;\n /** Solo para tests: espera entre reintentos. */\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\n/**\n * Último intento con respuesta HTTP (`last`), para entregarlo una sola vez a `onRawResponse`, y\n * último sobre mandado (`request`), para `onRawRequest`.\n */\ninterface RawCapture {\n attempts: number;\n last?: { status: number; headers: Headers; body: string };\n request?: RawRequestCapture;\n}\n\nconst SOAP_HEADERS = { 'Content-Type': 'text/xml; charset=utf-8', Accept: 'text/xml' } as const;\n\ntype XmlNode = Record<string, unknown>;\n\n/**\n * Atributos con `@`, sin prefijos de namespace y todo como string: `\"011\"` y `\"....261\"`\n * llegan tal cual, para que cada servicio decida cómo leerlos.\n */\nconst PARSER_OPTIONS = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n removeNSPrefix: true,\n parseTagValue: false,\n parseAttributeValue: false,\n processEntities: true,\n} as const;\nconst parser = new XMLParser(PARSER_OPTIONS);\n/** Igual, pero sin recortar los textos: solo para lo que depende de los espacios. */\nconst untrimmedParser = new XMLParser({ ...PARSER_OPTIONS, trimValues: false });\n\nexport class SoapTransport {\n readonly #config: ResolvedConfig;\n readonly #log: EventLogger;\n readonly #messageId: () => string;\n readonly #now: () => Date;\n readonly #random: () => number;\n readonly #sleep: (ms: number, signal?: AbortSignal) => Promise<void>;\n\n constructor(config: ResolvedConfig, options: SoapTransportOptions = {}) {\n this.#config = config;\n this.#log = new EventLogger(config.logger);\n this.#messageId = options.messageId ?? (() => globalThis.crypto.randomUUID());\n this.#now = options.now ?? (() => new Date());\n this.#random = options.random ?? Math.random;\n this.#sleep = options.sleep ?? sleep;\n }\n\n /** @internal Para los eventos de sesión que no son una request. */\n get log(): EventLogger {\n return this.#log;\n }\n\n async request(request: SoapRequest): Promise<SoapResponse> {\n if (request.retry !== undefined) validateRetryOptions(request.retry, 'retry');\n const capture: RawCapture = { attempts: 0 };\n try {\n return await this.#attempts(request, capture);\n } finally {\n // Una sola vez por operación: primero el último sobre que se mandó, aunque no haya tenido\n // respuesta, y después el último intento que tuvo respuesta HTTP.\n if (capture.request !== undefined) this.#deliverRawRequest(request, capture.request, capture.attempts);\n if (capture.last !== undefined) this.#deliverRaw(request, { ...capture.last, attempts: capture.attempts });\n }\n }\n\n /**\n * Dos presupuestos separados: el backoff genérico (`retry.maxRetries`, para `USG_*_BUSY` y\n * los transitorios) y el esquema fijo de `PREVIOUS ENTRY ACTIVE`, que no se ajusta a la config.\n */\n async #attempts(request: SoapRequest, capture: RawCapture): Promise<SoapResponse> {\n const retry = { ...this.#config.retry, ...definedOnly(request.retry ?? {}) };\n let generic = 0;\n let previousEntryActive = 0;\n for (let attempt = 0; ; attempt++) {\n try {\n return await this.#send(request, attempt, capture);\n } catch (error) {\n const reason = retryReason(error, request.idempotent);\n let delayMs: number;\n if (reason === 'previous-entry-active' && previousEntryActive < PREVIOUS_ENTRY_ACTIVE_RETRIES) {\n previousEntryActive++;\n delayMs = PREVIOUS_ENTRY_ACTIVE_DELAY_MS;\n } else if ((reason === 'busy' || reason === 'transient') && generic < retry.maxRetries) {\n delayMs = retryDelay(generic, retry.baseDelayMs, this.#random);\n generic++;\n } else {\n throw error;\n }\n this.#log.emit('warn', 'sabre.request.retry', {\n protocol: 'soap',\n service: request.service,\n action: request.action,\n attempt: attempt + 1,\n reason,\n delayMs,\n error: error as SabreGatewayError,\n });\n await this.#sleep(delayMs, request.signal);\n }\n }\n }\n\n async #send(request: SoapRequest, attempt: number, capture: RawCapture): Promise<SoapResponse> {\n const envelope = this.#envelope(request);\n const logContext = { protocol: 'soap', service: request.service, action: request.action, attempt };\n this.#log.emit('debug', 'sabre.request.start', logContext);\n const startedAt = Date.now();\n\n let response: Response;\n capture.attempts++;\n if (wantsRawRequest(request)) {\n // eb:MessageId y eb:Timestamp se generan en cada intento: se guarda el último sobre.\n capture.request = {\n method: 'POST',\n url: this.#config.soapBaseUrl,\n headers: rawRequestHeaders(SOAP_HEADERS),\n body: redactSoapEnvelope(scrubToken(envelope, request.security)),\n };\n }\n try {\n response = await this.#config.fetch(this.#config.soapBaseUrl, {\n method: 'POST',\n headers: SOAP_HEADERS,\n body: envelope,\n ...(request.signal === undefined ? {} : { signal: request.signal }),\n });\n } catch (cause) {\n if (isAbort(cause, request.signal)) throw cause;\n const error = new SabreGatewayError(`${request.service}: fallo de red (${describe(cause)})`, {\n protocol: 'soap',\n retryable: false,\n cause,\n });\n this.#log.emit('error', 'sabre.request.end', { ...logContext, durationMs: Date.now() - startedAt, error });\n throw error;\n }\n\n const original = await response.text();\n // Todo lo que sale del transporte (raw, errores, logs) se arma desde el texto redactado.\n const text = redactSoapEnvelope(scrubToken(original, request.security));\n capture.last = { status: response.status, headers: response.headers, body: text };\n\n const document = parseEnvelope(text);\n const messageId = stringAt(document?.Header, 'MessageHeader', 'MessageData', 'MessageId');\n const endContext = {\n ...logContext,\n status: response.status,\n durationMs: Date.now() - startedAt,\n ...(messageId === undefined ? {} : { messageId }),\n };\n\n try {\n const result = this.#classify(request, response, document, text);\n this.#log.emit('info', 'sabre.request.end', { ...endContext, warnings: result.warnings.length });\n return {\n ...result,\n messageId,\n respondedAt: respondedAtOf(text),\n raw: text,\n securityToken: request.readSecurityToken === true ? readSecurityToken(original) : undefined,\n status: response.status,\n };\n } catch (error) {\n const level = error instanceof SabreBusinessError ? 'warn' : 'error';\n this.#log.emit(level, 'sabre.request.end', { ...endContext, error });\n throw error;\n }\n }\n\n /** Orden de detección: fault (gateway), luego `stl:Error` (negocio), luego data. */\n #classify(\n request: SoapRequest,\n response: Response,\n document: { Header: unknown; Body: XmlNode } | undefined,\n text: string,\n ): Pick<SoapResponse, 'payload' | 'payloadName' | 'warnings'> {\n const { service } = request;\n if (document === undefined) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}, la respuesta no es un sobre SOAP`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n\n // Paso 1: SOAP fault (errores de `Transport` y `Validation`, y los `USG_*` del gateway).\n const fault = asNode(document.Body.Fault);\n if (fault !== undefined) throw faultError(service, response.status, fault, text);\n\n const [payloadName, payloadValue] = firstElement(document.Body);\n const payload = asNode(payloadValue);\n if (payloadName === undefined || payload === undefined) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}, el sobre SOAP no trae payload`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n if (!response.ok) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n\n // Paso 3: `stl:ApplicationResults`. Los `stl:Warning` no lanzan.\n const results = asNode(payload.ApplicationResults);\n const warnings = asArray(results?.Warning).map((node) => {\n const entry = resultEntry(node);\n return new SabreWarning(`${service}: ${entry.description}`, { service, code: entry.code, raw: text });\n });\n const errors = asArray(results?.Error).map((node) => {\n const entry = resultEntry(node);\n return new SabreBusinessError(`${service}: ${entry.description}`, {\n service,\n code: entry.code,\n raw: text,\n retryable: PREVIOUS_ENTRY_ACTIVE.test(entry.description),\n });\n });\n const [first, ...rest] = errors;\n if (first !== undefined) {\n throw new SabreBusinessError(first.message, {\n service,\n code: first.code,\n raw: text,\n retryable: first.retryable,\n warnings,\n errors: rest,\n });\n }\n\n // Paso 4: data.\n return { payload, payloadName, warnings };\n }\n\n #envelope(request: SoapRequest): string {\n const timestamp = this.#now().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<soap-env:Envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:eb=\"http://www.ebxml.org/namespaces/messageHeader\">',\n '<soap-env:Header>',\n '<eb:MessageHeader soap-env:mustUnderstand=\"1\" eb:version=\"1.0\">',\n '<eb:From><eb:PartyId/></eb:From>',\n '<eb:To><eb:PartyId/></eb:To>',\n `<eb:CPAId>${xmlEscape(request.cpaId)}</eb:CPAId>`,\n `<eb:ConversationId>${xmlEscape(request.conversationId)}</eb:ConversationId>`,\n `<eb:Service>${xmlEscape(request.action)}</eb:Service>`,\n `<eb:Action>${xmlEscape(request.action)}</eb:Action>`,\n '<eb:MessageData>',\n `<eb:MessageId>mid:${xmlEscape(this.#messageId())}</eb:MessageId>`,\n `<eb:Timestamp>${timestamp}</eb:Timestamp>`,\n '</eb:MessageData>',\n '</eb:MessageHeader>',\n securityHeader(request.security),\n '</soap-env:Header>',\n `<soap-env:Body>${request.payload}</soap-env:Body>`,\n '</soap-env:Envelope>',\n ].join('');\n }\n\n /** Un callback que lanza no rompe la operación (mismo criterio que REST). */\n #deliverRawRequest(request: SoapRequest, raw: RawRequestCapture, attempts: number): void {\n const operation = request.operation ?? request.service;\n try {\n request.onRawRequest?.({ operation, protocol: 'soap', ...raw, attempts });\n } catch (error) {\n this.#log.emit('warn', 'sabre.request.rawRequestHookFailed', {\n service: request.service,\n operation,\n errorName: error instanceof Error ? error.name : typeof error,\n });\n }\n }\n\n /** Un callback que lanza no rompe la operación (mismo criterio que REST). */\n #deliverRaw(request: SoapRequest, raw: Required<RawCapture>['last'] & { attempts: number }): void {\n if (request.onRawResponse === undefined) return;\n const operation = request.operation ?? request.service;\n try {\n request.onRawResponse({ operation, protocol: 'soap', ...raw });\n } catch (error) {\n this.#log.emit('warn', 'sabre.request.rawResponseHookFailed', {\n service: request.service,\n operation,\n errorName: error instanceof Error ? error.name : typeof error,\n });\n }\n }\n}\n\n/** Escapa texto para un elemento o un atributo XML. */\n/**\n * `eb:Timestamp` del header de un sobre de respuesta, en ISO 8601 UTC: Sabre lo manda sin zona\n * (`\"2026-11-06T17:34:16\"`) y en UTC (comparado con `stl:Success@timeStamp`, que trae `Z`, en\n * CERT el 2026-11-06), así que se le agrega `Z`. Con una zona explícita queda tal cual. Si no\n * viene o no tiene forma de fecha y hora, `undefined`. Ver ADR-027 (C1).\n */\nexport function respondedAtOf(raw: unknown): string | undefined {\n if (typeof raw !== 'string') return undefined;\n const header = /<(?:[\\w-]+:)?Header\\b[\\s\\S]*?<\\/(?:[\\w-]+:)?Header>/.exec(raw)?.[0];\n const value = header === undefined ? undefined : /<(?:[\\w-]+:)?Timestamp>\\s*([^<\\s]+)\\s*</.exec(header)?.[1];\n const match = value === undefined ? null : /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)(Z|[+-]\\d{2}:\\d{2})?$/.exec(value);\n if (match === null) return undefined;\n return `${match[1]}${match[2] ?? 'Z'}`;\n}\n\n/** `{ respondedAt }` si el sobre lo trae; si no, nada (`exactOptionalPropertyTypes`). */\nexport function respondedAtField(raw: unknown): { respondedAt?: string } {\n const respondedAt = respondedAtOf(raw);\n return respondedAt === undefined ? {} : { respondedAt };\n}\n\nexport function xmlEscape(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\nfunction securityHeader(security: SoapSecurity): string {\n const open = '<wsse:Security xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/12/secext\">';\n if ('binarySecurityToken' in security) {\n return `${open}<wsse:BinarySecurityToken valueType=\"String\" EncodingType=\"wsse:Base64Binary\">${xmlEscape(security.binarySecurityToken)}</wsse:BinarySecurityToken></wsse:Security>`;\n }\n const token = security.usernameToken;\n return [\n open,\n '<wsse:UsernameToken>',\n `<wsse:Username>${xmlEscape(token.username)}</wsse:Username>`,\n `<wsse:Password>${xmlEscape(token.password)}</wsse:Password>`,\n `<Organization>${xmlEscape(token.organization)}</Organization>`,\n `<Domain>${xmlEscape(token.domain)}</Domain>`,\n token.clientId === undefined ? '' : `<ClientId>${xmlEscape(token.clientId)}</ClientId>`,\n token.clientSecret === undefined ? '' : `<ClientSecret>${xmlEscape(token.clientSecret)}</ClientSecret>`,\n '</wsse:UsernameToken>',\n '</wsse:Security>',\n ].join('');\n}\n\n/**\n * Tapa el token que mandó el SDK donde sea que Sabre lo repita (p. ej. dentro de un\n * `faultstring`), en texto plano o escapado. El `BinarySecurityToken` del header lo tapa\n * después `redactSoapEnvelope`.\n */\n/** `onRawRequest` solo con token de sesión: el sobre de `SessionCreateRQ` es la credencial. */\nfunction wantsRawRequest(request: SoapRequest): boolean {\n return request.onRawRequest !== undefined && 'binarySecurityToken' in request.security;\n}\n\nfunction scrubToken(text: string, security: SoapSecurity): string {\n if (!('binarySecurityToken' in security) || security.binarySecurityToken === '') return text;\n const token = security.binarySecurityToken;\n return text.split(token).join(REDACTED).split(xmlEscape(token)).join(REDACTED);\n}\n\nfunction parseEnvelope(text: string, xmlParser = parser): { Header: unknown; Body: XmlNode } | undefined {\n if (text.trim() === '') return undefined;\n let parsed: unknown;\n try {\n parsed = xmlParser.parse(text);\n } catch {\n return undefined;\n }\n const envelope = asNode(asNode(parsed)?.Envelope);\n const body = asNode(envelope?.Body);\n if (envelope === undefined || body === undefined) return undefined;\n return { Header: envelope.Header, Body: body };\n}\n\n/** Lee el token del texto original, antes de redactar. Solo para `SessionCreateRS`. */\nfunction readSecurityToken(original: string): string | undefined {\n const document = parseEnvelope(original);\n const token = stringAt(document?.Header, 'Security', 'BinarySecurityToken');\n return token === undefined || token.trim() === '' ? undefined : token.trim();\n}\n\n/**\n * `USG_*` dentro del fault, best-effort: ninguna fuente dice en qué campo viaja. Se busca en\n * `faultcode`, `faultstring` y `detail`, y si no aparece se usa el `faultcode`. Se confirma\n * con la primera sesión real (#95).\n */\nconst USG_CODE = /\\bUSG_[A-Z0-9_]+\\b/;\n\nfunction faultError(service: string, status: number, fault: XmlNode, text: string): SabreGatewayError {\n const faultcode = textOf(fault.faultcode);\n const faultstring = textOf(fault.faultstring);\n const haystack = [faultcode, faultstring, JSON.stringify(fault.detail ?? '')].join(' ');\n const code = USG_CODE.exec(haystack)?.[0] ?? faultcode;\n const detail = [faultcode, faultstring].filter((part) => part !== undefined && part !== '').join(': ');\n // `retryable: true` solo para `USG_*_BUSY` y `PREVIOUS ENTRY ACTIVE` (decisiones 4 y 5).\n const retryable = (code !== undefined && BUSY_CODES.has(code)) || PREVIOUS_ENTRY_ACTIVE.test(haystack);\n return new SabreGatewayError(`${service}: SOAP fault${detail === '' ? '' : ` ${detail}`}`, {\n protocol: 'soap',\n status,\n retryable,\n raw: text,\n ...(code === undefined || code === '' ? {} : { code }),\n });\n}\n\n/**\n * Un `stl:Error` o `stl:Warning`: `code` es el primer `Message@code`, o el primer `ShortText` si\n * no viene (las respuestas reales traen el `ERR.SWS.*` ahí, #96), o el `type`. La descripción junta\n * los textos de `Message` con el `ShortText`.\n */\nfunction resultEntry(node: unknown): { code: string; description: string } {\n const entry = asNode(node) ?? {};\n const messages: string[] = [];\n const shortTexts: string[] = [];\n let code: string | undefined;\n for (const results of asArray(entry.SystemSpecificResults)) {\n const resultsNode = asNode(results) ?? {};\n for (const message of asArray(resultsNode.Message)) {\n code ??= nonEmpty(asNode(message)?.['@code']);\n const value = textOf(message);\n if (value !== undefined && value !== '') messages.push(value);\n }\n for (const shortText of asArray(resultsNode.ShortText)) {\n const value = textOf(shortText);\n if (value !== undefined && value !== '') shortTexts.push(value);\n }\n }\n const type = nonEmpty(entry['@type']);\n const description = [\n messages.join(' / ') || type || 'sin detalle',\n ...shortTexts.filter((short) => !messages.includes(short)).map((short) => `(${short})`),\n ].join(' ');\n return { code: code ?? shortTexts[0] ?? type ?? 'UNKNOWN', description };\n}\n\n/**\n * Por qué se puede reintentar un error, según la idempotencia de la operación. Ver\n * tier-3-sesion-y-colas-soap.md (punto 5) y politica-de-reintentos-y-backoff.md.\n */\nfunction retryReason(error: unknown, idempotent: boolean): RetryReason | undefined {\n if ((error instanceof SabreBusinessError || error instanceof SabreGatewayError) && PREVIOUS_ENTRY_ACTIVE.test(error.message)) {\n return 'previous-entry-active';\n }\n if (!(error instanceof SabreGatewayError) || error.protocol !== 'soap') return undefined;\n if (error.code !== undefined && BUSY_CODES.has(error.code)) return 'busy';\n // Lo que sigue pudo haber llegado a Sabre: solo se repite si la operación es idempotente.\n if (!idempotent) return undefined;\n if (error.code !== undefined) return TRANSIENT_CODES.has(error.code) ? 'transient' : undefined;\n // Sin código: un fallo de red (sin status) o una respuesta sin sobre SOAP.\n if (error.status === undefined || TRANSIENT_STATUS.has(error.status)) return 'transient';\n return undefined;\n}\n\n/**\n * El payload del `Body` de `raw` con los textos tal cual, sin recortar espacios ni saltos de\n * línea. Para las pantallas de host (`SabreCommandLLSRS`), que van alineadas por columna: el\n * parser compartido recorta y desalinea la primera línea.\n */\nexport function untrimmedPayload(raw: string): Record<string, unknown> | undefined {\n const document = parseEnvelope(raw, untrimmedParser);\n return document === undefined ? undefined : asNode(firstElement(document.Body)[1]);\n}\n\nfunction firstElement(node: XmlNode): [string | undefined, unknown] {\n for (const [key, value] of Object.entries(node)) {\n if (!key.startsWith('@') && key !== '#text') return [key, Array.isArray(value) ? value[0] : value];\n }\n return [undefined, undefined];\n}\n\nfunction asNode(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return asNode(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nexport function asArray(value: unknown): unknown[] {\n if (value === undefined || value === null || value === '') return [];\n return Array.isArray(value) ? value : [value];\n}\n\n/** Texto de un elemento: un string, o el `#text` de un elemento con atributos. */\nexport function textOf(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n const node = asNode(value);\n const text = node?.['#text'];\n return typeof text === 'string' ? text : node === undefined ? undefined : '';\n}\n\nfunction stringAt(root: unknown, ...path: string[]): string | undefined {\n let node: unknown = root;\n for (const key of path) node = asNode(node)?.[key];\n return nonEmpty(textOf(node));\n}\n\nfunction nonEmpty(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nfunction isAbort(error: unknown, signal: AbortSignal | undefined): boolean {\n return signal?.aborted === true || (error instanceof Error && error.name === 'AbortError');\n}\n\nfunction describe(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n","// Referencia a una cola de PNR, la misma en la entrada y en la salida. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 2 y decisiones de la revisión) y\n// wiki/sources/ingresar-a-una-cola.md.\nimport { xmlEscape } from '../http/soap-transport.js';\n\n/**\n * Una cola (ADR-028). Hay tres clases, y viajan por dos atributos distintos de `QueueIdentifier`:\n * - **numérica**, de 0 a 511: `400` → `Number=\"400\"`;\n * - **alfabética**, una o dos letras mayúsculas: `'S'` → `Number=\"S\"`. La `S` es la cola de\n * **mensajes** del PCC (cuenta lo mismo que `Totals Type=\"MESSAGES\"`): no tiene PNR y no se puede\n * listar;\n * - **con nombre** (tablas QN y QNB): `{ name: 'HOTELS' }` → `Name=\"HOTELS\"`.\n *\n * Lo que devuelve `queue.count` se pasa tal cual a las demás operaciones. Las colas 0–49 son del\n * sistema: el SDK no las restringe.\n */\nexport type QueueRef = number | string | { name: string };\n\n/** Primera y última cola numérica de un PCC. */\nexport const MIN_QUEUE_NUMBER = 0;\nexport const MAX_QUEUE_NUMBER = 511;\n\n/** La cola de mensajes del PCC: no tiene PNR y Sabre no la lista (`INVALID ENTRY`). */\nexport const MESSAGE_QUEUE = 'S';\n\n/**\n * Una cola alfabética: una o dos letras mayúsculas. Es una regla laxa a propósito: la documentación\n * solo muestra `S` y `A`, y no se sabe si hay colas de dos letras (ADR-028).\n */\nconst ALPHA_QUEUE = /^[A-Z]{1,2}$/;\n\nfunction fail(message: string): never {\n throw new TypeError(`sabre-client: ${message}`);\n}\n\n/** Valida una `QueueRef` de la entrada, sin red. `label` es el nombre del campo en el mensaje. */\nexport function validateQueueRef(value: unknown, label: string): asserts value is QueueRef {\n if (typeof value === 'number') {\n if (Number.isInteger(value) && value >= MIN_QUEUE_NUMBER && value <= MAX_QUEUE_NUMBER) return;\n fail(`${label} debe ser un número de cola entero de ${MIN_QUEUE_NUMBER} a ${MAX_QUEUE_NUMBER}, una cola alfabética ('S') o { name }`);\n }\n if (typeof value === 'string') {\n if (ALPHA_QUEUE.test(value)) return;\n // Cada cola tiene una sola forma: '12' no se convierte en 12, ni 's' en 'S' (ADR-028).\n if (/^\\d+$/.test(value.trim())) fail(`${label}: una cola numérica va como número (${Number(value)}), no como string`);\n fail(`${label} debe ser una cola alfabética de una o dos letras mayúsculas (p. ej. 'S')`);\n }\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const { name } = value as { name?: unknown };\n if (typeof name !== 'string' || name.trim() === '') fail(`${label}.name debe ser un string no vacío`);\n // Un { name } de una o dos letras es casi seguro una cola alfabética mal armada, p. ej. el\n // { name: 'S' } que devolvía count en la 0.4.x: Sabre lo rechaza con INVALID QUEUE NAME FORMAT.\n // Ninguna fuente confirma que no existan colas con nombre tan cortas: si aparece una, se afloja\n // esta regla, y eso no rompe la compatibilidad (ADR-028, sub-decisión ii).\n if (ALPHA_QUEUE.test(name)) fail(`${label}: '${name}' es una cola alfabética: pasa '${name}', no { name: '${name}' }`);\n return;\n }\n fail(`${label} debe ser un número de cola (0–511), una cola alfabética ('S') o { name }`);\n}\n\n/** Atributo de `QueueIdentifier`: `Number=\"12\"`, `Number=\"S\"` o `Name=\"HOTELS\"`, ya escapado. */\nexport function queueRefAttribute(queue: QueueRef): string {\n if (typeof queue === 'number') return `Number=\"${queue}\"`;\n if (typeof queue === 'string') return `Number=\"${xmlEscape(queue)}\"`;\n return `Name=\"${xmlEscape(queue.name)}\"`;\n}\n\n/**\n * Un rango de colas numéricas, de `start` a `end`, las dos incluidas: `{ start: 1, end: 25 }` es el\n * `QC/<PCC>1-25` del host. Lo usan `count` y `activity`. A diferencia de pedir todo el PCC, Sabre\n * devuelve cada cola del rango, también las vacías, con cuenta `0` (CERT y producción, #213).\n *\n * El design también acepta rangos de colas con nombre (`TEST1-TEST2`), pero ninguna prueba los vio:\n * por ahora solo van números.\n */\nexport interface QueueRange {\n start: number;\n end: number;\n}\n\n/** Valida un `QueueRange` de la entrada, sin red. `label` es el nombre del campo en el mensaje. */\nexport function validateQueueRange(value: unknown, label: string): asserts value is QueueRange {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} debe ser { start, end }`);\n const { start, end } = value as { start?: unknown; end?: unknown };\n for (const [name, bound] of [['start', start], ['end', end]] as const) {\n if (typeof bound !== 'number' || !Number.isInteger(bound) || bound < MIN_QUEUE_NUMBER || bound > MAX_QUEUE_NUMBER) {\n fail(`${label}.${name} debe ser un número de cola entero de ${MIN_QUEUE_NUMBER} a ${MAX_QUEUE_NUMBER}`);\n }\n }\n if ((start as number) >= (end as number)) fail(`${label}.start debe ser menor que ${label}.end (para una sola cola, usa queue)`);\n}\n\n/**\n * `QueueIdentifier` de `QueueCountRQ` y `QueueAnalysisRQ`: todo el PCC, una cola o un rango. `Range`\n * va como hijo y sin `Number` ni `Name`: con los dos, Sabre responde `Client.Validation` (#213).\n */\nexport function queueIdentifierXml(pcc: string, target: { queue?: QueueRef; range?: QueueRange } = {}): string {\n const pccAttribute = `PseudoCityCode=\"${xmlEscape(pcc)}\"`;\n if (target.range !== undefined) {\n return `<QueueIdentifier ${pccAttribute}><Range Start=\"${target.range.start}\" End=\"${target.range.end}\"/></QueueIdentifier>`;\n }\n if (target.queue !== undefined) return `<QueueIdentifier ${queueRefAttribute(target.queue)} ${pccAttribute}/>`;\n return `<QueueIdentifier ${pccAttribute}/>`;\n}\n\n/** Si la cola es la de mensajes (`'S'`). */\nexport function isMessageQueue(queue: QueueRef): boolean {\n return queue === MESSAGE_QUEUE;\n}\n\n/**\n * Lee el `Number` de una respuesta (`QueueCountRS`, `QueuePlaceRS`, `QueueAnalysisRS`): `\"12\"` da\n * `12`, y `\"S\"`, `'S'`. Devuelve `undefined` si viene vacío. Un `Number` que no es ni numérico ni\n * alfabético sale tal cual, como string: es lo que mandó Sabre.\n */\nexport function toQueueRef(value: string | undefined): QueueRef | undefined {\n const text = value?.trim();\n if (text === undefined || text === '') return undefined;\n return /^\\d+$/.test(text) ? Number(text) : text;\n}\n","// Fechas de host sin año → strings ISO, con la regla del año. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 3 y decisiones de la revisión).\n\n/**\n * Cómo se elige el año cuando el texto no lo trae:\n *\n * - `'past'`: la fecha más reciente que no sea posterior a `referenceDate` (el mismo día cuenta).\n * Es la regla de los hechos que ya pasaron: la línea de recibido, `placedAt` y `countedAt`.\n * - `'nearest'`: la fecha más cercana a `referenceDate`, hacia adelante o hacia atrás, dentro de\n * ±6 meses. Es la regla de los segmentos y del plazo de ticketing (`T-`, `TAW`). Con un empate\n * gana la fecha futura.\n */\nexport type HostDateDirection = 'past' | 'nearest';\n\nexport interface ResolveHostDateOptions {\n /** Regla del año. Por defecto `'past'`, la de `placedAt` y `countedAt`. */\n direction?: HostDateDirection;\n}\n\nconst MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];\n\nconst DAY_MS = 86_400_000;\n\n/** Medio año, en días: la distancia más larga de una fecha a la referencia con `'nearest'`. */\nconst HALF_YEAR_DAYS = 184;\n\ninterface HostDate {\n year?: number;\n month: number;\n day: number;\n time?: string;\n}\n\n/**\n * Convierte una fecha de host en un string ISO sin zona horaria: `'YYYY-MM-DD'`, o\n * `'YYYY-MM-DDTHH:mm'` si el texto trae hora.\n *\n * Formatos que reconoce (sin distinguir mayúsculas, sin espacios a los costados):\n *\n * - `06SEP` y `06SEP26`, como en los segmentos, el ticketing y la línea de recibido;\n * - `12-21` y `12-21T07:00`, como el `DateTime` de `QueueCountRS`;\n * - `2024-05-15` y `2024-05-15T13:24`, como el `DateTime` de una línea de cola real.\n *\n * Si el texto trae año, se usa ese (un año de dos dígitos es del 2000 en adelante). Si no, el año\n * se resuelve contra `referenceDate` con la regla de `options.direction`.\n *\n * `referenceDate` es un `'YYYY-MM-DD'` (puede seguir una hora, que no se usa) o un `Date`, del que\n * se toma el día en UTC. Conviene pasar el día en el calendario del PCC: la regla compara días, y\n * con zonas distintas la referencia puede quedar un día corrida.\n *\n * Devuelve `undefined` si el texto no tiene un formato reconocido, si la fecha no existe\n * (`2026-02-29`, `31APR`) o si no hay un año que cumpla la regla (un `29FEB` sin un año bisiesto a\n * menos de 6 meses, con `'nearest'`). Lanza `TypeError` si `referenceDate` no es válida.\n */\nexport function resolveHostDate(\n text: string,\n referenceDate: Date | string,\n options: ResolveHostDateOptions = {},\n): string | undefined {\n const reference = referenceDay(referenceDate);\n const direction = options.direction ?? 'past';\n if (direction !== 'past' && direction !== 'nearest') {\n throw new TypeError(\"sabre-client: direction debe ser 'past' o 'nearest'\");\n }\n if (typeof text !== 'string') return undefined;\n\n const parsed = parseHostDate(text.trim().toUpperCase());\n if (parsed === undefined) return undefined;\n\n const year = parsed.year ?? resolveYear(parsed.month, parsed.day, reference, direction);\n if (year === undefined || !isValidDate(year, parsed.month, parsed.day)) return undefined;\n\n const date = `${pad(year, 4)}-${pad(parsed.month, 2)}-${pad(parsed.day, 2)}`;\n return parsed.time === undefined ? date : `${date}T${parsed.time}`;\n}\n\nfunction parseHostDate(text: string): HostDate | undefined {\n // 06SEP, 06SEP26\n let match = /^(\\d{1,2})([A-Z]{3})(\\d{2})?$/.exec(text);\n if (match !== null) {\n const month = MONTHS.indexOf(match[2]!) + 1;\n if (month === 0) return undefined;\n return {\n ...(match[3] !== undefined && { year: 2000 + Number(match[3]) }),\n month,\n day: Number(match[1]),\n };\n }\n\n // 12-21, 12-21T07:00, 2024-05-15, 2024-05-15T13:24\n match = /^(?:(\\d{4})-)?(\\d{2})-(\\d{2})(?:T(\\d{2}):(\\d{2}))?$/.exec(text);\n if (match === null) return undefined;\n const [, year, month, day, hours, minutes] = match;\n if (hours !== undefined && (Number(hours) > 23 || Number(minutes) > 59)) return undefined;\n return {\n ...(year !== undefined && { year: Number(year) }),\n month: Number(month),\n day: Number(day),\n ...(hours !== undefined && { time: `${hours}:${minutes}` }),\n };\n}\n\n/** Año que cumple la regla, o `undefined` si ninguno de los candidatos la cumple. */\nfunction resolveYear(month: number, day: number, reference: number, direction: HostDateDirection) {\n const year = new Date(reference).getUTCFullYear();\n\n if (direction === 'past') {\n // Hacia atrás no hay ventana: un 29FEB puede caer hasta 8 años antes (con un 2100 en medio).\n for (let candidate = year; candidate >= year - 8; candidate--) {\n if (isValidDate(candidate, month, day) && dayNumber(candidate, month, day) <= reference) return candidate;\n }\n return undefined;\n }\n\n let best: { year: number; distance: number } | undefined;\n for (const candidate of [year + 1, year, year - 1]) {\n if (!isValidDate(candidate, month, day)) continue;\n const distance = Math.abs(dayNumber(candidate, month, day) - reference);\n // Los candidatos van del futuro al pasado: con un empate se queda el futuro.\n if (best === undefined || distance < best.distance) best = { year: candidate, distance };\n }\n return best !== undefined && best.distance <= HALF_YEAR_DAYS * DAY_MS ? best.year : undefined;\n}\n\n/**\n * El día de `referenceDate`, como milisegundos UTC de su medianoche. Lanza `TypeError` si no es\n * válida. Lo usa también el parser del párrafo, para validarla aunque el párrafo no traiga fechas.\n */\nexport function referenceDay(referenceDate: Date | string): number {\n if (referenceDate instanceof Date) {\n const time = referenceDate.getTime();\n if (Number.isNaN(time)) throw new TypeError('sabre-client: referenceDate es un Date inválido');\n return time - (((time % DAY_MS) + DAY_MS) % DAY_MS);\n }\n if (typeof referenceDate === 'string') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T.*)?$/.exec(referenceDate.trim());\n if (match !== null) {\n const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];\n if (isValidDate(year, month, day)) return dayNumber(year, month, day);\n }\n }\n throw new TypeError(\"sabre-client: referenceDate es obligatoria, como 'YYYY-MM-DD' o un Date válido\");\n}\n\nfunction dayNumber(year: number, month: number, day: number): number {\n const date = new Date(0);\n date.setUTCFullYear(year, month - 1, day);\n return date.getTime();\n}\n\nfunction isValidDate(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12 || day < 1) return false;\n const date = new Date(0);\n date.setUTCFullYear(year, month - 1, day);\n return date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nfunction pad(value: number, length: number): string {\n return String(value).padStart(length, '0');\n}\n","// Parser best-effort del párrafo de cola (un PNR en formato de host). Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 3 y decisiones de la revisión).\nimport { referenceDay, resolveHostDate } from './host-date.js';\n\nexport interface QueueParagraphOptions {\n /**\n * Fecha contra la que se resuelve el año de las fechas sin año: un `'YYYY-MM-DD'` o un `Date`\n * (se toma el día en UTC). Es obligatoria. Ver `resolveHostDate`.\n */\n referenceDate: Date | string;\n}\n\n/** Aviso de cola del principio del párrafo: el código PIC y su descripción (`011 SEE REMARKS`). */\nexport interface QueueParagraphMessage {\n instructionCode: number;\n text: string;\n}\n\n/** Un nombre del PNR (`1.1TEST/SWS*FSG`). */\nexport interface QueueParagraphPassenger {\n /** Número de nombre, tal cual: `'1.1'`. */\n nameNumber: string;\n surname: string;\n givenName?: string;\n /** Lo que sigue al `*` del nombre. */\n nameRemark?: string;\n /** El nombre como llegó, sin el número: `'TEST/SWS*FSG'`. */\n text: string;\n}\n\ninterface QueueParagraphSegmentBase {\n /** Número de segmento en el PNR. */\n number: number;\n /** Fecha ISO (`'2026-05-22'`), con el año resuelto con la regla `'nearest'`. */\n date?: string;\n /** Estado del segmento: `HK`, `HX`, `UN`, `GK`… */\n status: string;\n /** Cantidad que acompaña al estado (`HK1` → `1`). */\n quantity: number;\n /** La línea como llegó, sin espacios a los costados. */\n text: string;\n}\n\n/** Un segmento aéreo: ` 1 DL2151E 20MAR 5 MIALGA HK1 0700 1003 /DCDL*HTDHAT /E`. */\nexport interface QueueParagraphAirSegment extends QueueParagraphSegmentBase {\n kind: 'air';\n airlineCode: string;\n flightNumber: number;\n bookingClass: string;\n fromAirportCode: string;\n toAirportCode: string;\n /** Hora local de salida, en 24 horas (`'07:00'`). */\n departureTime?: string;\n /** Hora local de llegada, en 24 horas. Puede ser de otro día: el host no siempre lo marca. */\n arrivalTime?: string;\n}\n\n/** Un segmento no aéreo con fecha: `2 CAR ZE 22APR Q GK1 DFW/24APR/…`. */\nexport interface QueueParagraphOtherSegment extends QueueParagraphSegmentBase {\n kind: 'other';\n /** Tipo de segmento del host: `CAR`, `OTH`… */\n segmentType: string;\n vendorCode: string;\n}\n\nexport type QueueParagraphSegment = QueueParagraphAirSegment | QueueParagraphOtherSegment;\n\n/** Una entrada del campo de ticketing (`TKT/TIME LIMIT`). */\nexport interface QueueParagraphTicketingEntry {\n /** Número de la entrada: `1` en `1.T-13MAY-X6R3*N18`. */\n number: number;\n /** `'T-'`, `'TAW'` (o `TAC`, `TAM`, `TAT`, `TAX`), o `'TE'`/`'TK'` para una línea de boleto. */\n code: string;\n /** Fecha ISO de la entrada, con el año resuelto con la regla `'nearest'`. */\n date?: string;\n pseudoCityCode?: string;\n agentSine?: string;\n /** Número de boleto de una línea `TE` o `TK`. */\n ticketNumber?: string;\n /** La entrada como llegó, sin el número: `'T-13MAY-X6R3*N18'`. */\n text: string;\n}\n\nexport interface QueueParagraphTicketing {\n entries: QueueParagraphTicketingEntry[];\n /** `true` si alguna entrada es una línea de boleto (`TE` o `TK`, con número). */\n issued: boolean;\n}\n\n/**\n * La línea `RECEIVED FROM - …` y la línea de firma del PNR\n * (`<PCC>.<PCC>*<agente> HHMM/DDMMMYY <localizador> H`). La firma es la de la última modificación.\n */\nexport interface QueueParagraphReceivedFrom {\n /** Lo que sigue a `RECEIVED FROM - `. */\n name?: string;\n /** El primer PCC de la firma. */\n pseudoCityCode?: string;\n /** La firma del agente, lo que sigue al `*`. */\n agentSine?: string;\n /** Fecha y hora de la firma, `'YYYY-MM-DDTHH:mm'`. Sin año, se resuelve hacia atrás. */\n receivedAt?: string;\n locator?: string;\n}\n\nexport interface QueueParagraph {\n messages: QueueParagraphMessage[];\n passengers: QueueParagraphPassenger[];\n segments: QueueParagraphSegment[];\n /** El campo de ticketing, si el párrafo trae la sección `TKT/TIME LIMIT`. */\n ticketing?: QueueParagraphTicketing;\n /** La línea de recibido y la firma, si llega alguna de las dos. */\n receivedFrom?: QueueParagraphReceivedFrom;\n /** Las líneas que no se reconocieron, tal cual y en orden. Las líneas vacías no se incluyen. */\n unparsed: string[];\n}\n\nconst MESSAGE = /^\\s*(\\d{3})\\s{2,}(\\S.*?)\\s*$/;\nconst PASSENGER_LINE = /^\\s*\\d+\\.\\d+[A-Z]/;\nconst PASSENGER_SPLIT = /\\s+(?=\\d+\\.\\d+[A-Z])/;\nconst PASSENGER = /^(\\d+\\.\\d+)([^/*]+?)\\s*(?:\\/([^*]*?))?\\s*(?:\\*(.*?))?\\s*$/;\nconst AIR_SEGMENT =\n /^\\s*(\\d{1,2})\\s+([A-Z0-9]{2})\\s*(\\d{1,4})([A-Z])\\s+(\\d{2}[A-Z]{3})\\s+[A-Z0-9]\\s+([A-Z]{3})([A-Z]{3})\\s+([A-Z]{2})(\\d{1,3})(?=\\s|$)(.*)$/;\nconst SEGMENT_TIMES = /^\\s+(\\d{3,4}[APNM]?)\\s+(\\d{3,4}[APNM]?)(?=\\s|$)/;\nconst OTHER_SEGMENT =\n /^\\s*(\\d{1,2})\\s+([A-Z]{3})\\s+([A-Z0-9]{2})\\s+(\\d{2}[A-Z]{3})\\s+[A-Z0-9]\\s+([A-Z]{2})(\\d{1,3})(?=\\s|$)/;\nconst NO_ITINERARY = /^\\s*NO ITIN\\s*$/;\nconst TICKETING_HEADER = /^\\s*TKT\\/TIME LIMIT\\s*$/;\nconst TICKETING_ENTRY = /^\\s*(\\d+)\\.(.*?)\\s*$/;\nconst TICKETED = /^T-(\\d{2}[A-Z]{3})?(?:-([A-Z0-9]{3,4})\\*([A-Z0-9]+))?(?:\\/.*)?$/;\nconst ARRANGEMENT = /^(TA[WCMTX])([A-Z0-9]{3,4})?(\\d{2}[A-Z]{3})?\\d{0,3}\\/.*$/;\nconst TICKET = /^(TE|TK)\\s+(\\d{13})\\b/;\nconst RECEIVED = /^\\s*RECEIVED FROM -\\s?(.*?)\\s*$/;\nconst SIGNATURE = /^\\s*([A-Z0-9]{3,4})\\.(\\S+)\\s+(\\d{2})(\\d{2})\\/(\\d{2}[A-Z]{3}\\d{2})\\s+([A-Z0-9]{6})\\s+H\\s*$/;\n\n/** En qué parte del párrafo va el parser: cada sección solo se reconoce hasta que empieza la siguiente. */\nconst Phase = { Messages: 0, Passengers: 1, Segments: 2, Body: 3 } as const;\ntype Phase = (typeof Phase)[keyof typeof Phase];\n\n/**\n * Lee un párrafo de cola (`QueueItem.paragraph`) y extrae las secciones estándar de un PNR en\n * formato de host: los avisos de cola, los nombres, los segmentos con su estado, el campo de\n * ticketing y la línea de recibido con la firma.\n *\n * **Es best-effort**: el formato de host no tiene contrato. Una línea que no reconoce va a\n * `unparsed` y nunca lanza por el contenido del párrafo. Solo lanza `TypeError` si `lines` no es\n * un array o si `referenceDate` falta o no es válida.\n *\n * **No extrae** los plazos escritos en texto libre por la aerolínea (`ADTK BY`, `BEFORE` en\n * remarks, SSR u OSI): su formato lo pone cada aerolínea. Esas líneas van a `unparsed`.\n *\n * Las fechas salen como strings ISO sin zona horaria. Los segmentos y el ticketing toman la fecha\n * más cercana a `referenceDate` dentro de ±6 meses, y la firma se resuelve hacia atrás.\n *\n * **Versionado**: que una línea pase de `unparsed` a un campo nuevo es un cambio minor. Que cambie\n * la forma de un campo existente es major.\n */\nexport function parseQueueParagraph(lines: readonly string[], options: QueueParagraphOptions): QueueParagraph {\n if (!Array.isArray(lines)) throw new TypeError('sabre-client: lines debe ser un array de strings');\n if (typeof options !== 'object' || options === null) {\n throw new TypeError(\"sabre-client: referenceDate es obligatoria, como 'YYYY-MM-DD' o un Date válido\");\n }\n const { referenceDate } = options;\n referenceDay(referenceDate);\n\n const result: QueueParagraph = { messages: [], passengers: [], segments: [], unparsed: [] };\n const signatureIndex = lastSignatureIndex(lines);\n let phase: Phase = Phase.Messages;\n let inTicketing = false;\n\n lines.forEach((value, index) => {\n const line = typeof value === 'string' ? value : '';\n if (line.trim() === '') return;\n\n if (index === signatureIndex) {\n result.receivedFrom = { ...result.receivedFrom, ...parseSignature(line, referenceDate) };\n return;\n }\n\n if (inTicketing) {\n const entry = TICKETING_ENTRY.exec(line);\n if (entry !== null) {\n const parsed = parseTicketingEntry(Number(entry[1]), entry[2]!, referenceDate);\n if (parsed === undefined) result.unparsed.push(line);\n else result.ticketing!.entries.push(parsed);\n return;\n }\n inTicketing = false;\n }\n\n if (TICKETING_HEADER.test(line)) {\n phase = Phase.Body;\n inTicketing = true;\n result.ticketing ??= { entries: [], issued: false };\n return;\n }\n\n const received = RECEIVED.exec(line);\n if (received !== null) {\n phase = Phase.Body;\n result.receivedFrom = { ...result.receivedFrom, ...(received[1] !== '' && { name: received[1]! }) };\n return;\n }\n\n if (phase === Phase.Messages) {\n const message = MESSAGE.exec(line);\n if (message !== null) {\n result.messages.push({ instructionCode: Number(message[1]), text: message[2]! });\n return;\n }\n }\n\n if (phase <= Phase.Passengers && PASSENGER_LINE.test(line)) {\n const passengers = parsePassengers(line);\n if (passengers !== undefined) {\n phase = Phase.Passengers;\n result.passengers.push(...passengers);\n return;\n }\n }\n\n if (phase <= Phase.Segments) {\n if (NO_ITINERARY.test(line)) {\n phase = Phase.Segments;\n return;\n }\n const segment = parseSegment(line, referenceDate);\n if (segment !== undefined) {\n phase = Phase.Segments;\n result.segments.push(segment);\n return;\n }\n }\n\n result.unparsed.push(line);\n });\n\n if (result.ticketing !== undefined) {\n result.ticketing.issued = result.ticketing.entries.some((entry) => entry.ticketNumber !== undefined);\n }\n return result;\n}\n\nfunction parsePassengers(line: string): QueueParagraphPassenger[] | undefined {\n const passengers: QueueParagraphPassenger[] = [];\n for (const part of line.trim().split(PASSENGER_SPLIT)) {\n const match = PASSENGER.exec(part);\n if (match === null) return undefined;\n const [, nameNumber, surname, givenName, nameRemark] = match;\n passengers.push({\n nameNumber: nameNumber!,\n surname: surname!.trim(),\n ...(givenName !== undefined && givenName !== '' && { givenName }),\n ...(nameRemark !== undefined && nameRemark !== '' && { nameRemark }),\n text: part.slice(nameNumber!.length).trim(),\n });\n }\n return passengers;\n}\n\nfunction parseSegment(line: string, referenceDate: Date | string): QueueParagraphSegment | undefined {\n const air = AIR_SEGMENT.exec(line);\n if (air !== null) {\n const [, number, airlineCode, flightNumber, bookingClass, date, from, to, status, quantity, rest] = air;\n const times = SEGMENT_TIMES.exec(rest!);\n const departureTime = times === null ? undefined : hostTime(times[1]!);\n const arrivalTime = times === null ? undefined : hostTime(times[2]!);\n return {\n kind: 'air',\n number: Number(number),\n ...withDate(date!, referenceDate),\n status: status!,\n quantity: Number(quantity),\n airlineCode: airlineCode!,\n flightNumber: Number(flightNumber),\n bookingClass: bookingClass!,\n fromAirportCode: from!,\n toAirportCode: to!,\n ...(departureTime !== undefined && { departureTime }),\n ...(arrivalTime !== undefined && { arrivalTime }),\n text: line.trim(),\n };\n }\n\n const other = OTHER_SEGMENT.exec(line);\n if (other === null) return undefined;\n const [, number, segmentType, vendorCode, date, status, quantity] = other;\n return {\n kind: 'other',\n number: Number(number),\n ...withDate(date!, referenceDate),\n status: status!,\n quantity: Number(quantity),\n segmentType: segmentType!,\n vendorCode: vendorCode!,\n text: line.trim(),\n };\n}\n\nfunction parseTicketingEntry(\n number: number,\n text: string,\n referenceDate: Date | string,\n): QueueParagraphTicketingEntry | undefined {\n const ticketed = TICKETED.exec(text);\n if (ticketed !== null) {\n const [, date, pseudoCityCode, agentSine] = ticketed;\n return {\n number,\n code: 'T-',\n ...(date !== undefined && withDate(date, referenceDate)),\n ...(pseudoCityCode !== undefined && { pseudoCityCode }),\n ...(agentSine !== undefined && { agentSine }),\n text,\n };\n }\n\n const arrangement = ARRANGEMENT.exec(text);\n if (arrangement !== null) {\n const [, code, pseudoCityCode, date] = arrangement;\n return {\n number,\n code: code!,\n ...(date !== undefined && withDate(date, referenceDate)),\n ...(pseudoCityCode !== undefined && { pseudoCityCode }),\n text,\n };\n }\n\n const ticket = TICKET.exec(text);\n if (ticket !== null) return { number, code: ticket[1]!, ticketNumber: ticket[2]!, text };\n return undefined;\n}\n\n/** La firma, si hay una, es la última línea con ese formato. Las anteriores van a `unparsed`. */\nfunction lastSignatureIndex(lines: readonly string[]): number {\n for (let index = lines.length - 1; index >= 0; index--) {\n const line = lines[index];\n if (typeof line === 'string' && SIGNATURE.test(line)) return index;\n }\n return -1;\n}\n\nfunction parseSignature(line: string, referenceDate: Date | string): QueueParagraphReceivedFrom {\n const [, pseudoCityCode, sign, hours, minutes, date, locator] = SIGNATURE.exec(line)!;\n const agentSine = /\\*([A-Z0-9]+)$/.exec(sign!)?.[1];\n const day = Number(hours) <= 23 && Number(minutes) <= 59 ? resolveHostDate(date!, referenceDate) : undefined;\n return {\n pseudoCityCode: pseudoCityCode!,\n ...(agentSine !== undefined && { agentSine }),\n ...(day !== undefined && { receivedAt: `${day}T${hours}:${minutes}` }),\n locator: locator!,\n };\n}\n\nfunction withDate(text: string, referenceDate: Date | string): { date?: string } {\n const date = resolveHostDate(text, referenceDate, { direction: 'nearest' });\n return date === undefined ? {} : { date };\n}\n\n/**\n * Hora del host en 24 horas: `0700` y `1003` tal cual, y con sufijo `A` (a. m.), `P` (p. m.),\n * `N` (mediodía) o `M` (medianoche): `740P` → `19:40`, `1200N` → `12:00`.\n */\nfunction hostTime(text: string): string | undefined {\n const match = /^(\\d{1,2})(\\d{2})([APNM])?$/.exec(text);\n if (match === null) return undefined;\n let hours = Number(match[1]);\n const minutes = Number(match[2]);\n const suffix = match[3];\n if (minutes > 59) return undefined;\n if (suffix === undefined) {\n if (hours > 23) return undefined;\n } else {\n if (hours < 1 || hours > 12) return undefined;\n if (suffix === 'A' || suffix === 'M') hours %= 12;\n else if (suffix === 'P') hours = (hours % 12) + 12;\n else if (hours !== 12) return undefined;\n }\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n}\n","// Place Queue Message (`QueuePlaceLLSRQ` 2.0.4): colocar PNR en colas. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 2, \"place\"),\n// wiki/sources/place-queue-message-v2-0-4-design.md y wiki/sources/sabre-legacy-client-1-0-8.md.\nimport type { RequestOptions } from '../air/bargain-finder-max.js';\nimport { SabreGatewayError, type SabreWarning } from '../errors/index.js';\nimport { asArray, respondedAtField, type SoapResponse, xmlEscape } from '../http/soap-transport.js';\nimport type { SessionRequest } from '../session/session.js';\nimport {\n attribute,\n endStep,\n isEndOfDisplay,\n isEndOfDisplayResult,\n node,\n type QueueStep,\n textLines,\n} from './queue-access.js';\nimport { type QueueRef, queueRefAttribute, toQueueRef } from './queue-ref.js';\n\nexport const QUEUE_PLACE_SERVICE = 'queuePlace';\nconst NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\n\n/** Límites del design 2.0.4: hasta 10 colas y hasta 6 localizadores. */\nexport const MAX_PLACE_TO = 10;\nexport const MAX_PLACE_LOCATORS = 6;\n\n/** Rangos de PIC válidos (`PrefatoryInstructionCode`), según el artículo de selección de colas. */\nconst INSTRUCTION_CODE_RANGES: ReadonlyArray<readonly [number, number]> = [\n [0, 191],\n [200, 254],\n];\n\n/** Una cola de destino. */\nexport interface QueuePlaceTarget {\n queue: QueueRef;\n /** Por defecto, el PCC de la sesión. */\n pcc?: string;\n /**\n * Código PIC (`PrefatoryInstructionCode`): 0–191 o 200–254. **Obligatorio**, aunque el design\n * 2.0.4 lo da como opcional: sin PIC, producción rechaza el place con `INSTRUCTION NUMBER NOT IN\n * RANGE` fuera de una cola y con `NEED INSTRUCTION NUMBER` dentro (#97). Sin valor por defecto.\n */\n instructionCode: number;\n}\n\nexport interface QueuePlaceRequest {\n /** De 1 a 10 colas de destino. */\n to: readonly QueuePlaceTarget[];\n /**\n * Hasta 6 localizadores a colocar, sin tenerlos en el AAA. Solo fuera de una cola: dentro,\n * `place` coloca el PNR actual.\n */\n locators?: readonly string[];\n}\n\nexport type QueuePlaceOptions = RequestOptions;\n\n/** Una colocación que confirma Sabre (`QueueInfo`). */\nexport interface QueuePlacement {\n queue?: QueueRef;\n pcc?: string;\n locator?: string;\n /** `QueueInfo@DateTime` tal cual, sin año (`\"12-21T12:00\"`). */\n placedAt?: string;\n}\n\n/** Lo que devuelve `place` fuera de una cola: no avanza nada. */\nexport interface QueuePlaceResult {\n /** Las colocaciones de `QueueInfo`, si Sabre las manda. */\n placements: QueuePlacement[];\n /** Las líneas `Text`, tal cual (p. ej. `\"OK 1030 NMIUTF\"`). */\n text: string[];\n warnings: SabreWarning[];\n /**\n * `eb:Timestamp` de la respuesta de Sabre, en ISO 8601 UTC (`\"2026-11-06T17:34:16Z\"`). A\n * diferencia de las fechas del host, trae año y zona. Falta si Sabre no lo manda.\n */\n respondedAt?: string;\n}\n\n/**\n * Lo que devuelve `place`: un `QueueStep` dentro de una cola, y un `QueuePlaceResult` fuera. Se\n * distinguen con `'done' in result`. Con `locators`, el tipo ya es `QueuePlaceResult`.\n */\nexport type QueuePlaceResponse = QueueStep | QueuePlaceResult;\n\n/** Destino ya validado, con el PCC resuelto. */\nexport interface ResolvedPlaceTarget {\n queue: QueueRef;\n pcc: string;\n instructionCode?: number;\n}\n\n/** Si un PIC está en los rangos válidos. */\nexport function isInstructionCode(value: unknown): value is number {\n return (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n INSTRUCTION_CODE_RANGES.some(([min, max]) => value >= min && value <= max)\n );\n}\n\nexport function queuePlacePayload(to: readonly ResolvedPlaceTarget[], locators: readonly string[] = []): string {\n const identifiers = to\n .map((target) => {\n const pic = target.instructionCode === undefined ? '' : ` PrefatoryInstructionCode=\"${target.instructionCode}\"`;\n return `<QueueIdentifier ${queueRefAttribute(target.queue)}${pic} PseudoCityCode=\"${xmlEscape(target.pcc)}\"/>`;\n })\n .join('');\n const ids = locators.map((locator) => `<UniqueID ID=\"${xmlEscape(locator)}\"/>`).join('');\n return `<QueuePlaceRQ Version=\"2.0.4\" xmlns=\"${NAMESPACE}\"><QueueInfo>${identifiers}${ids}</QueueInfo></QueuePlaceRQ>`;\n}\n\n/** Colocar no es idempotente: dentro de una cola mueve el cursor, y fuera repetiría la colocación. */\nexport function queuePlaceRequest(payload: string, options: QueuePlaceOptions): SessionRequest {\n return {\n service: QUEUE_PLACE_SERVICE,\n action: 'QueuePlaceLLSRQ',\n payload,\n idempotent: false,\n operation: 'queue.place',\n ...options,\n };\n}\n\n/**\n * Línea de firma del PNR, al final del texto: `<PCC>.<PCC>*<agente> HHMM/DDMMMYY <localizador> H`,\n * p. ej. `7TZA.7TZA*AW5 0319/06SEP24 NGDEZP H`.\n */\nconst SIGNATURE_LINE = /\\s\\d{4}\\/\\d{2}[A-Z]{3}\\d{2}\\s+([A-Z0-9]{6})\\s+H\\s*$/;\n\n/** El localizador de la última línea de firma del texto, si hay una. */\nexport function signatureLocator(lines: readonly string[]): string | undefined {\n for (let index = lines.length - 1; index >= 0; index--) {\n const match = SIGNATURE_LINE.exec(lines[index] ?? '');\n if (match !== null) return match[1];\n }\n return undefined;\n}\n\n/** El fin de cola de `place`: como `stl:Warning` (evidencia de `1.0.8`) o como primera línea. */\nfunction isEnd(response: SoapResponse, text: readonly string[]): boolean {\n return response.warnings.some(isEndOfDisplayResult) || isEndOfDisplay(text.find((line) => line.trim() !== ''));\n}\n\n/**\n * Dentro de una cola, `QueuePlaceRS` trae el PNR siguiente en `Text` y no trae `Line`: el\n * localizador sale de la línea de firma, y `placedAt` y `placedBy` quedan en `undefined`, porque\n * esa firma es la última modificación del PNR y no su colocación en la cola.\n */\nexport function parsePlaceStep(response: SoapResponse): QueueStep {\n const text = textLines(response.raw, 'QueuePlaceRS');\n if (isEnd(response, text)) return endStep(response.warnings, 'end-of-display', response.raw);\n const locator = signatureLocator(text);\n if (locator === undefined) {\n throw new SabreGatewayError(`${QUEUE_PLACE_SERVICE}: respuesta no reconocida (sin línea de firma del PNR ni fin de cola)`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: response.raw,\n });\n }\n return { done: false, kind: 'pnr', item: { locator, paragraph: text }, warnings: response.warnings, ...respondedAtField(response.raw) };\n}\n\n/**\n * Lo que `place` puede leer con la sesión en `'unknown'`: un fin de cola, un PNR con línea de\n * firma (seguía en la cola) o, si no, un `QueuePlaceResult`.\n */\nexport function parsePlaceUnknown(response: SoapResponse): QueuePlaceResponse {\n const text = textLines(response.raw, 'QueuePlaceRS');\n if (isEnd(response, text) || signatureLocator(text) !== undefined) return parsePlaceStep(response);\n return parsePlaceResult(response);\n}\n\n/** Fuera de una cola: las colocaciones de `QueueInfo` y el texto. */\nexport function parsePlaceResult(response: SoapResponse): QueuePlaceResult {\n const placements = asArray(response.payload.QueueInfo).map((info): QueuePlacement => {\n const identifier = node(node(info)?.QueueIdentifier);\n // `Number` es alfanumérico (\"400\" o \"S\"); `Name` es siempre un nombre.\n const number = attribute(identifier, 'Number');\n const name = attribute(identifier, 'Name');\n const queue: QueueRef | undefined = number !== undefined ? toQueueRef(number) : name !== undefined ? { name } : undefined;\n const pcc = attribute(identifier, 'PseudoCityCode');\n const locator = attribute(node(info)?.UniqueID, 'ID');\n const placedAt = attribute(info, 'DateTime');\n return {\n ...(queue === undefined ? {} : { queue }),\n ...(pcc === undefined ? {} : { pcc }),\n ...(locator === undefined ? {} : { locator }),\n ...(placedAt === undefined ? {} : { placedAt }),\n };\n });\n return {\n placements,\n text: textLines(response.raw, 'QueuePlaceRS'),\n warnings: response.warnings,\n ...respondedAtField(response.raw),\n };\n}\n","// Anonimización de las respuestas de colas grabadas (la regla de #96, ADR-018), la misma que usan\n// los scripts que graban fixtures. Exportada para que los consumidores no la repitan (ADR-027, D1).\n// Solo Web Standard APIs: corre en cualquier runtime.\n\n/** Qué dato real quedó en un texto: lo que devuelve `Anonymizer.leaks`. */\nexport type AnonymizerLeak = 'secreto' | 'localizador' | 'nombre' | 'línea del PNR' | 'token';\n\nexport interface AnonymizerOptions {\n /**\n * Valores que nunca deben quedar: credenciales, usuario, PCC. Cada uno pasa a `XXXX` donde\n * aparezca. Se ignoran los que no son string o tienen menos de 3 caracteres.\n */\n secrets?: ReadonlyArray<string | undefined>;\n}\n\n/**\n * Una anonimización con memoria: el mismo localizador da siempre el mismo alias y el mismo\n * pasajero el mismo nombre falso, en todos los textos que pasen por ella. Una por grabación.\n */\nexport interface Anonymizer {\n /**\n * Un sobre SOAP o cualquier texto con su XML (también un JSON con XML adentro):\n * - cada `UniqueID@ID` pasa a un alias (`AAAAAA`, `AAAAAB`…), y el localizador real se reemplaza\n * por su alias en todo el texto;\n * - `PassengerName` a `PASAJERO/UNO`, `PASAJERO/DOS`…, y `Group` a `GRUPO`;\n * - `AgentSine` a `AAA` (salvo `SABRE`), `PseudoCityCode` a `XXXX` y `LNIATA` a `XXXXXX`;\n * - cada `<Text>` pasa por `maskLine`;\n * - los `secrets`, a `XXXX`.\n */\n anonymize(text: string): string;\n /**\n * Una línea del PNR en formato de host. Las de la lista blanca (`isSafeHostLine`) quedan tal\n * cual; en las demás, letras a `X` y dígitos a `9`. La cabecera `QUEUE LIST FOR <PCC>` solo\n * tapa el PCC, y `RECEIVED FROM - ` conserva el prefijo. La línea de firma\n * (`… HHMM/DDMMMYY <localizador> H`) conserva su forma, y el localizador solo si ya es un alias:\n * de ella sale el localizador del PNR siguiente en `place` dentro de una cola. Llamarla después\n * de dar alias a los localizadores.\n */\n maskLine(line: string): string;\n /** `maskLine` sobre cada línea de un párrafo, p. ej. `QueueItem.paragraph`. */\n maskParagraph(lines: readonly string[]): string[];\n /** El alias de un localizador: lo asigna la primera vez, en orden (`AAAAAA`, `AAAAAB`…). */\n aliasOf(locator: string): string;\n /**\n * Qué datos reales siguen en `text`, sin repetir: un `secret`, un localizador o un nombre que ya\n * tienen alias, una línea del PNR que se enmascaró, o un token de sesión. Vacío si no queda\n * ninguno. Sirve para no escribir una fixture que todavía trae datos reales.\n */\n leaks(text: string): AnonymizerLeak[];\n}\n\nconst NAMES = ['UNO', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE', 'DIEZ'];\n\n/** Líneas de un PNR en formato de host que quedan tal cual: no traen datos del pasajero. */\nconst SAFE_LINES: readonly RegExp[] = [\n /^\\s*$/,\n // Aviso PIC: 011 SEE REMARKS. Sin dígitos después del número: una línea de `list`\n // (`100 ABC123 PLT MAM 01JUN26 1948`) también empieza con 3 dígitos y trae el sine.\n /^\\s*\\d{3}\\s{2,}[A-Z][A-Z ,./-]*$/,\n /^\\s*END OF DISPLAY FOR REQUESTED DATA\\s*$/,\n /^\\s*(TKT\\/TIME LIMIT|PHONES|REMARKS|ADDRESS|INVOICED|GENERAL FACTS|[A-Z0-9]{2} FACTS|NO ITIN)\\s*$/,\n /^\\s*PASSENGER EMAIL DATA EXISTS\\s+\\*PE TO DISPLAY ALL\\s*$/,\n];\n\n/**\n * Si una línea del PNR en formato de host queda tal cual al anonimizar: está en la lista blanca de\n * #96 (líneas vacías, avisos PIC como `011 SEE REMARKS`, títulos de sección como `REMARKS`, el fin\n * de cola).\n */\nexport function isSafeHostLine(line: string): boolean {\n return SAFE_LINES.some((pattern) => pattern.test(line));\n}\n\nconst ENTITIES: Record<string, string> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\" };\nconst decode = (text: string) => text.replace(/&(amp|lt|gt|quot|apos);/g, (_, entity: string) => ENTITIES[entity] ?? '');\nconst encode = (text: string) => text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\nconst masked = (text: string) => text.replace(/\\p{L}/gu, 'X').replace(/\\p{N}/gu, '9');\n\n/** Ver `Anonymizer`. */\nexport function createAnonymizer(options: AnonymizerOptions = {}): Anonymizer {\n const secrets = (options.secrets ?? [])\n .filter((value): value is string => typeof value === 'string' && value.length >= 3)\n .sort((a, b) => b.length - a.length);\n const redactSecrets = (text: string) => secrets.reduce((value, secret) => value.split(secret).join('XXXX'), text);\n const locatorAliases = new Map<string, string>();\n const realNames = new Map<string, string>();\n const maskedLines = new Set<string>();\n\n const aliasOf = (locator: string): string => {\n let alias = locatorAliases.get(locator);\n if (alias === undefined) {\n const n = locatorAliases.size;\n // Base 26 en cuatro letras: `AAAAAA`, `AAAAAB`… y sigue en letras después del 676 (`AAABAA`).\n const letters = [17576, 676, 26, 1].map((size) => String.fromCharCode(65 + (Math.floor(n / size) % 26))).join('');\n alias = `AA${letters}`;\n locatorAliases.set(locator, alias);\n }\n return alias;\n };\n const fakeName = (name: string): string => {\n let fake = realNames.get(name);\n if (fake === undefined) {\n fake = `PASAJERO/${NAMES[realNames.size] ?? realNames.size + 1}`;\n realNames.set(name, fake);\n }\n return fake;\n };\n\n function anonymizeLine(line: string): string {\n if (isSafeHostLine(line)) return line;\n const header = /^(\\s*QUEUE LIST FOR )\\S+(\\s+QUEUE )(\\S+)\\s*$/.exec(line);\n if (header !== null) return `${header[1]}XXXX${header[2]}${header[3]}`;\n const received = /^(\\s*RECEIVED FROM - )(.*)$/.exec(line);\n const signature = /^(.*\\s)(\\d{4}\\/\\d{2}[A-Z]{3}\\d{2})(\\s+)([A-Z0-9]{6})(\\s+H\\s*)$/.exec(line);\n const aliases = new Set(locatorAliases.values());\n let result: string;\n if (received !== null) {\n result = `${received[1]}${masked(received[2] ?? '')}`;\n } else if (signature !== null) {\n const [, before = '', stamp = '', gap = '', locator = '', end = ''] = signature;\n result = `${masked(before)}${masked(stamp)}${gap}${aliases.has(locator) ? locator : masked(locator)}${end}`;\n } else {\n result = masked(line);\n }\n if (line.trim().length >= 4 && result.trim() !== line.trim()) maskedLines.add(line.trim());\n return result;\n }\n\n function anonymize(body: string): string {\n let text = String(body).replace(\n /(<(?:\\w+:)?UniqueID\\b[^>]*\\bID=\")([^\"]+)(\")/g,\n (_, a: string, locator: string, b: string) => `${a}${aliasOf(locator)}${b}`,\n );\n for (const [locator, alias] of locatorAliases) text = text.split(locator).join(alias);\n text = text.replace(\n /(<(?:\\w+:)?PassengerName>)([^<]*)(<\\/)/g,\n (_, a: string, name: string, b: string) => `${a}${fakeName(decode(name))}${b}`,\n );\n text = text.replace(/(<(?:\\w+:)?Group>)([^<]*)(<\\/)/g, (_, a: string, value: string, b: string) =>\n value === '' ? `${a}${b}` : `${a}GRUPO${b}`,\n );\n text = text.replace(/(\\bAgentSine=\")([^\"]*)(\")/g, (_, a: string, sine: string, b: string) =>\n `${a}${sine === 'SABRE' ? sine : 'AAA'}${b}`,\n );\n text = text.replace(/(\\bPseudoCityCode=\")([^\"]*)(\")/g, '$1XXXX$3');\n // La dirección de la terminal (`stl:HostCommand@LNIATA`, en `session.command()`).\n text = text.replace(/(\\bLNIATA=\")([^\"]*)(\")/g, '$1XXXXXX$3');\n text = text.replace(\n /(<(?:\\w+:)?Text\\b[^>/]*>)([\\s\\S]*?)(<\\/(?:\\w+:)?Text>)/g,\n (_, a: string, line: string, b: string) => `${a}${encode(anonymizeLine(decode(line)))}${b}`,\n );\n return redactSecrets(text);\n }\n\n const maskLine = (line: string) => redactSecrets(anonymizeLine(line));\n\n function leaks(text: string): AnonymizerLeak[] {\n const found: AnonymizerLeak[] = [\n ...secrets.filter((secret) => text.includes(secret)).map((): AnonymizerLeak => 'secreto'),\n ...[...locatorAliases.keys()].filter((locator) => text.includes(locator)).map((): AnonymizerLeak => 'localizador'),\n ...[...realNames.keys()]\n .filter((realName) => realName.length >= 3 && text.includes(realName))\n .map((): AnonymizerLeak => 'nombre'),\n ...[...maskedLines].filter((line) => text.includes(line)).map((): AnonymizerLeak => 'línea del PNR'),\n ...(/IceSess|Shared\\/IDL/.test(text) ? (['token'] as const) : []),\n ];\n return [...new Set(found)];\n }\n\n return {\n anonymize,\n maskLine,\n maskParagraph: (lines) => lines.map(maskLine),\n aliasOf,\n leaks,\n };\n}\n","// De una corrida grabada a los PNR del fake de colas (#166, ADR-027 D2): lee las respuestas con el\n// parseo del SDK, así el consumidor no tiene que leer el XML por su cuenta.\nimport { asArray, untrimmedPayload } from '../http/soap-transport.js';\nimport { attribute, isEndOfDisplay, lineFields, textLines } from '../queue/queue-access.js';\nimport { signatureLocator } from '../queue/queue-place.js';\nimport type { RecordedFixture } from './fixtures.js';\nimport type { QueueFakePnr } from './queue-fake.js';\n\n/** Las operaciones cuyas respuestas traen PNR de una cola. */\nconst QUEUE_OPERATION = /^queue\\.(list|access|ignore|remove|place)$/;\n\n/**\n * Los PNR de una corrida grabada, listos para `createQueueFake`: primero los de `queue.list`, en\n * su orden, y después los que aparecen en las demás respuestas de cola (`access`, `ignore`,\n * `remove`, `place`), en el orden en que aparecen. Cada localizador sale una sola vez.\n *\n * - `placedAt`, `placedBy` y `primaryPassenger` salen del `Line` de `list`. Si el PNR no está en la\n * lista, salen del `Line` del primer `access`, `ignore` o `remove` que lo trae (ahí `placedAt` es\n * la última modificación del PNR, no su colocación en la cola).\n * - `primaryPassenger` solo sale si el `Line` trae `PassengerName`, y Sabre solo lo manda en un\n * `list` con `primaryPassenger: true` (`/LN`). Las fixtures de `queueFixtures` se grabaron sin\n * `/LN`, así que sus PNR van sin pasajero. Si el consumidor necesita uno, lo agrega con un\n * `map`; el helper no inventa datos que la grabación no tiene (#193).\n * - `paragraph` es el del primer `access`, `ignore`, `remove` o `place` que muestra el PNR, tal\n * cual. El localizador del párrafo sale del `Line`, o de la línea de firma si no hay `Line`\n * (`place` dentro de una cola).\n * - Un PNR que solo aparece como colocado (`place` fuera de una cola) va sin párrafo, y el fake le\n * agrega una línea de firma.\n *\n * La cola en la que van los decide quien lo usa:\n *\n * ```ts\n * createQueueFake({ queues: { '9': queueFakePnrs(queueFixtures.walk) } })\n * ```\n *\n * Las fixtures de `queueFixtures` usan alias distintos (`walk`: `AAAAAA`–`AAAAAD`, `place`:\n * `AAAAAE`–`AAAAAF`, `placeWithoutInstructionCodeInside`: `AAAAAG`–`AAAAAH`), así que los PNR de\n * varias se pueden juntar en un mismo fake.\n */\nexport function queueFakePnrs(fixture: RecordedFixture): QueueFakePnr[] {\n const pnrs = new Map<string, QueueFakePnr>();\n const add = (locator: string, fields: Omit<QueueFakePnr, 'locator'>) => {\n const current = pnrs.get(locator) ?? { locator };\n // Lo primero que se vio de cada campo se queda: la lista va antes que el resto.\n pnrs.set(locator, { ...fields, ...current });\n };\n\n const responses = fixture.responses.filter((response) => QUEUE_OPERATION.test(response.operation));\n const ordered = [\n ...responses.filter((response) => response.operation === 'queue.list'),\n ...responses.filter((response) => response.operation !== 'queue.list'),\n ];\n for (const response of ordered) {\n const payload = untrimmedPayload(response.body);\n const lines = asArray(payload?.Line)\n .map(lineFields)\n .filter((fields) => fields !== undefined);\n for (const { locator, placedAt, placedBy, primaryPassenger } of lines) {\n add(locator, {\n ...(placedAt === undefined ? {} : { placedAt }),\n ...(placedBy === undefined ? {} : { placedBy }),\n ...(primaryPassenger === undefined ? {} : { primaryPassenger }),\n });\n }\n if (response.operation === 'queue.list') continue;\n // `place` fuera de una cola: cada PNR colocado, en su `QueueInfo`.\n for (const info of asArray(payload?.QueueInfo)) {\n const locator = attribute((info as Record<string, unknown>).UniqueID, 'ID');\n if (locator !== undefined) add(locator, {});\n }\n\n const paragraph = textLines(response.body, /<(?:\\w+:)?QueuePlaceRS\\b/.test(response.body) ? 'QueuePlaceRS' : 'QueueAccessRS');\n if (paragraph.length === 0 || isEndOfDisplay(paragraph.find((line) => line.trim() !== ''))) continue;\n const locator = lines.length === 1 ? lines[0]!.locator : signatureLocator(paragraph);\n if (locator !== undefined) add(locator, { paragraph });\n }\n return [...pnrs.values()];\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"instructionCode\": 11,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": true,\n \"placements\": 2,\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAE\",\n \"warnings\": 0\n },\n {\n \"step\": \"place dentro de la cola a 52\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAF\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 51: remove\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"end-of-display\",\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 1,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAE\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 52: remove\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"end-of-display\",\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 2,\n \"placeInsideReturns\": \"next\",\n \"afterPlaceInside\": {\n \"51\": 0,\n \"52\": 1\n },\n \"finalCounts\": {\n \"51\": 0,\n \"52\": 0\n },\n \"emptyAtEnd\": true,\n \"foreignPnrSeen\": false,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 219,\n \"messageId\": \"1507138129113180520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 270,\n \"messageId\": \"834296129115631360\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1181,\n \"messageId\": \"1507184129117060520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 150,\n \"messageId\": \"1507317129128850520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 337,\n \"messageId\": \"1507398129130331410\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1389,\n \"messageId\": \"834244129133751160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 198,\n \"messageId\": \"834406129147701160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 124,\n \"messageId\": \"1507450129149741430\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 151,\n \"messageId\": \"1507525129150890560\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 268,\n \"messageId\": \"1507586129152441040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 167,\n \"messageId\": \"834439129155152350\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 109,\n \"messageId\": \"1507533129156791720\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 92,\n \"messageId\": \"1507704129157870910\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1507138129113180520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:11</eb:Timestamp><eb:RefToMessageId>mid:1e2b7680-3372-4cd2-8951-37d2933673ee</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>834296129115631360</eb:MessageId><eb:Timestamp>2026-11-02T03:35:11</eb:Timestamp><eb:RefToMessageId>mid:c86d56a7-dcc8-4d32-b47e-55533ba40d72</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:11Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507184129117060520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:12</eb:Timestamp><eb:RefToMessageId>mid:771bfafc-ba56-4f31-8861-c4f3e7e5d645</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:12Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </QueueInfo>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAF\\\"/>\\n </QueueInfo>\\n <Text>XXXXX XXXXXXXXX XXXXXXXXX</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507317129128850520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:12</eb:Timestamp><eb:RefToMessageId>mid:e2a60150-9465-4537-a3bd-d204f09ac8b1</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:12Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507398129130331410</eb:MessageId><eb:Timestamp>2026-11-02T03:35:13</eb:Timestamp><eb:RefToMessageId>mid:810a3899-608b-4bd1-a26f-ce426439654f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:13Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAE H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>834244129133751160</eb:MessageId><eb:Timestamp>2026-11-02T03:35:14</eb:Timestamp><eb:RefToMessageId>mid:60d8dffe-5ad8-4995-a7fe-d1c88507fcfd</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:14Z\\\"/>\\n </stl:ApplicationResults>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXX XXXX/XXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXXX XXXX XXXXXX *X9X XX *X9X XX XXXXXXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX XXX XXXX</Text>\\n <Text>XXXX XXX XXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X X/ XXXX XXX99 9999999999 X 99.99</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX X999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX99XXXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>99.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XXXX9999999999999999 9.9XXXXX XXXX XXXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAF H</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.remove\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>834406129147701160</eb:MessageId><eb:Timestamp>2026-11-02T03:35:14</eb:Timestamp><eb:RefToMessageId>mid:09946a8f-4d1b-4fff-b002-73f365491761</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:14Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507450129149741430</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:0af46a14-6f62-4b29-9f71-ca156d1bc94c</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"52\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6048\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507525129150890560</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:a08aa346-6af9-449d-a014-5526ed0c1615</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:35:15Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507586129152441040</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:80821434-2a4c-463a-a90b-a19d39c995c3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAE H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.remove\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>834439129155152350</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:f0a85208-ee49-4a20-a4bc-5ae2038abd5f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507533129156791720</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:ef241eb0-7cca-4557-8a71-a9273af47c56</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1507704129157870910</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:f4eff23a-501b-403c-8deb-af875cd7441b</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-01: la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica scripts/lib/legacy-recorder.mjs: el alias de cada sobre sale de su Line/UniqueID, y en el place dentro de la cola, del resultado registrado. 2026-11-06: los alias se renombraron (AAAAAA → AAAAAE, AAAAAB → AAAAAF) para no pisar los de las otras fixtures de queueFixtures: cada una usa los suyos (#166).\"\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queuePlace: INSTRUCTION NUMBER NOT IN RANGE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 0,\n \"afterPlaceInside\": {\n \"51\": 0,\n \"52\": 0\n },\n \"finalCounts\": {\n \"51\": 0,\n \"52\": 0\n },\n \"emptyAtEnd\": true,\n \"foreignPnrSeen\": false,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 291,\n \"messageId\": \"696038116489921040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 306,\n \"messageId\": \"1368643116492372030\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1161,\n \"messageId\": \"1368817116494140910\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queuePlace\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queuePlace: INSTRUCTION NUMBER NOT IN RANGE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 164,\n \"messageId\": \"1368897116505762260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 107,\n \"messageId\": \"1368800116507391600\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"696261116508481040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 181,\n \"messageId\": \"1369004116509910910\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 113,\n \"messageId\": \"1368905116511721330\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 216,\n \"messageId\": \"1368862116512881600\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 91,\n \"messageId\": \"1369002116515020820\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>696038116489921040</eb:MessageId><eb:Timestamp>2026-11-02T03:14:09</eb:Timestamp><eb:RefToMessageId>mid:77d06f35-e9b1-4097-a87e-a4c2f94b7d11</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368643116492372030</eb:MessageId><eb:Timestamp>2026-11-02T03:14:09</eb:Timestamp><eb:RefToMessageId>mid:a1d5f941-bde3-4c97-bb10-518525106dae</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:09Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368817116494140910</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:2bd54110-d5cd-48a9-8f56-4fb3efbe50ed</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:10Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>INSTRUCTION NUMBER NOT IN RANGE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368897116505762260</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:21bbcfc1-4915-49dc-a35f-19cf5c06645a</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:10Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368800116507391600</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:672fb639-8d29-4bf8-aa6a-8967f0f8eea7</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:10Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>696261116508481040</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:fd1cd62a-a2f9-4578-9099-81324d05e11f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:10Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1369004116509910910</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:348634ba-1102-4b60-88d7-b22dcde08237</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:11Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368905116511721330</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:4cb87408-be0e-4d2c-a5c0-d6eb90c05604</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:11Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368862116512881600</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:a68247d9-8b80-4be1-a29d-f98fc874cdba</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:11Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1369002116515020820</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:4fbbf8b2-5f08-4e22-a76d-639bb7280ddb</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ]\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"instructionCode\": 11,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": true,\n \"placements\": 2,\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAG\",\n \"warnings\": 0\n },\n {\n \"step\": \"place dentro de la cola a 52\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queuePlace: NEED INSTRUCTION NUMBER (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"limpieza 51: exit\",\n \"ok\": true\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAG\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 51: exit\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 2,\n \"afterPlaceInside\": {\n \"51\": 2,\n \"52\": 0\n },\n \"finalCounts\": {\n \"51\": 2,\n \"52\": 0\n },\n \"emptyAtEnd\": false,\n \"foreignPnrSeen\": true,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 224,\n \"messageId\": \"1447558123641760140\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 248,\n \"messageId\": \"1447616123643931410\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1179,\n \"messageId\": \"1447485123645400970\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"774662123657231160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 332,\n \"messageId\": \"1447690123658680240\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1209,\n \"messageId\": \"1447671123662030850\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queuePlace\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queuePlace: NEED INSTRUCTION NUMBER (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 167,\n \"messageId\": \"1447862123674122260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 153,\n \"messageId\": \"1447868123675771450\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 414,\n \"messageId\": \"1447869123677321200\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 193,\n \"messageId\": \"774917123681491160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 111,\n \"messageId\": \"1448030123683420710\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 105,\n \"messageId\": \"1447953123684520740\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 94,\n \"messageId\": \"1448022123685580350\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1447558123641760140</eb:MessageId><eb:Timestamp>2026-11-02T03:26:04</eb:Timestamp><eb:RefToMessageId>mid:17dec477-8068-457d-a57a-55a61983a08b</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447616123643931410</eb:MessageId><eb:Timestamp>2026-11-02T03:26:04</eb:Timestamp><eb:RefToMessageId>mid:a11cc40c-ef6e-43b1-8aaf-09441713a1d3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:04Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447485123645400970</eb:MessageId><eb:Timestamp>2026-11-02T03:26:05</eb:Timestamp><eb:RefToMessageId>mid:a6b248de-8d0e-4c8a-96e5-9a69e3482cba</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:05Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </QueueInfo>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAH\\\"/>\\n </QueueInfo>\\n <Text>XXXXX XXXXXXXXX XXXXXXXXX</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>774662123657231160</eb:MessageId><eb:Timestamp>2026-11-02T03:26:05</eb:Timestamp><eb:RefToMessageId>mid:1210f083-0edb-4ef3-b242-e2a65b6f5144</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:05Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447690123658680240</eb:MessageId><eb:Timestamp>2026-11-02T03:26:06</eb:Timestamp><eb:RefToMessageId>mid:e0868a8b-5dd7-4840-a597-9d1b9be82ef2</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:06Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAG H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447671123662030850</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:80f280ba-def5-486e-bf59-1415a65d3121</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:26:07Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>NEED INSTRUCTION NUMBER</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.exit\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447862123674122260</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:7a49bd13-2dbe-4d2f-b174-3eafff94cf19</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:07Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>XXX 9XXX XXXXX 999</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447868123675771450</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:6af01817-942c-4805-bc5c-a8e9d65e2a52</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:07Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447869123677321200</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:60b221e6-eac3-4280-b26c-96e4f757abc0</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAG H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.exit\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>774917123681491160</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:79a60043-9468-4904-97f4-5a66b16ebd07</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>XXX 9XXX XXXXX 999</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1448030123683420710</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:c5c20a5c-1574-45ec-9065-5952f4624166</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:26:08Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447953123684520740</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:df42e795-20fe-46f7-87a0-658f78cd2c59</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1448022123685580350</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:fb8eaff8-33f0-4e1b-8f64-7b14a7adf808</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-06 (#166): la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica createAnonymizer: el alias de cada sobre sale de su Line/UniqueID. Firmas corregidas: 2. 2026-11-06: los alias se renombraron (AAAAAA → AAAAAG, AAAAAB → AAAAAH) para no pisar los de las otras fixtures de queueFixtures: cada una usa los suyos (#166).\"\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"scenario\": \"walk\",\n \"queue\": 2,\n \"results\": [\n {\n \"step\": \"count\",\n \"ok\": true,\n \"queues\": 4,\n \"totals\": {\n \"messages\": 6,\n \"specials\": 0,\n \"pnrs\": 4\n }\n },\n {\n \"step\": \"list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.I después de list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"access\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"listedCount\": 0,\n \"visitedCount\": 0,\n \"traversalMatchesList\": true,\n \"endOfDisplay\": false,\n \"listLeavesSessionInside\": false,\n \"qxiOutsideQueue\": {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 222,\n \"messageId\": \"1199952101079831070\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 278,\n \"messageId\": \"1200017101082320910\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 142,\n \"messageId\": \"1200044101083810080\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 100,\n \"messageId\": \"1200044101085261410\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 139,\n \"messageId\": \"1199941101086241390\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 106,\n \"messageId\": \"1200006101087651180\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 140,\n \"messageId\": \"1200044101088681410\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 100,\n \"messageId\": \"1199968101090081330\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1199952101079831070</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:a37973a5-fca2-4e8a-a048-81797f296b6d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>1687197a-1fdf-4399-bb93-aad547384237</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200017101082320910</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:6dfa450a-1d25-49f6-a593-3aef2dcec746</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:48:28Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:48\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"6\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"200\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"300\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"6\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"4\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.list\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101083810080</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:f52dd06a-7db0-410a-b0a0-2c91e6510a7f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.I\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101085261410</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:361814ab-7f11-48f3-91f6-3f395b6518c3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>IGD</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1199941101086241390</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:e35f9c08-1897-4506-bdc9-fc1da04c575d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200006101087651180</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:ed4cb24c-3852-4103-bad1-f8825c22c9e5</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101088681410</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:ef8c789c-b9fb-4562-bbbf-39a4c185d295</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1199968101090081330</eb:MessageId><eb:Timestamp>2026-11-02T02:48:29</eb:Timestamp><eb:RefToMessageId>mid:440999a3-b118-4058-9c6a-21397a50f69d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ]\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"scenario\": \"walk\",\n \"queue\": 2,\n \"results\": [\n {\n \"step\": \"count\",\n \"ok\": true,\n \"queues\": 32,\n \"totals\": {\n \"messages\": 385,\n \"specials\": 0,\n \"pnrs\": 6048\n }\n },\n {\n \"step\": \"list\",\n \"ok\": true,\n \"locators\": [\n \"AAAAAA\",\n \"AAAAAB\",\n \"AAAAAC\",\n \"AAAAAD\"\n ]\n },\n {\n \"step\": \"probe.I después de list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"access\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAA\",\n \"warnings\": 0\n },\n {\n \"step\": \"count dentro de la cola\",\n \"ok\": true,\n \"queues\": 32\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAB\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAC\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAD\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": true,\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"listedCount\": 4,\n \"visitedCount\": 4,\n \"traversalMatchesList\": true,\n \"endOfDisplay\": true,\n \"listLeavesSessionInside\": false,\n \"qxiOutsideQueue\": {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n \"countInsideKeepsCursor\": true,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 266,\n \"messageId\": \"1247125105523991180\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 250,\n \"messageId\": \"1247093105526902030\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 102,\n \"messageId\": \"1247182105528151200\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 222,\n \"messageId\": \"1247183105529190990\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 132,\n \"messageId\": \"1247263105531430560\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 132,\n \"messageId\": \"574577105532791300\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 308,\n \"messageId\": \"1247230105534071340\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"1247236105537161720\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 272,\n \"messageId\": \"1247174105538621600\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 274,\n \"messageId\": \"1247301105541361240\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 325,\n \"messageId\": \"1247355105544140700\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 206,\n \"messageId\": \"1247363105547392260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 92,\n \"messageId\": \"1247386105549450300\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1247125105523991180</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:a1d9fa8c-2e9e-4f4f-bf0d-a76c3b24dba1</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247093105526902030</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:ba6adaca-23b2-44cd-a76e-373035c066c8</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:52Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:55\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1204\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6048\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.list\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247182105528151200</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:979b6cc5-f6ad-445d-a59e-8357ba0e5622</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:52Z\\\"/>\\n </stl:ApplicationResults>\\n <Line Number=\\\"1\\\">\\n <DateTime>2026-08-04T18:08</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAA\\\"/>\\n </Line>\\n <Line Number=\\\"2\\\">\\n <DateTime>2026-09-01T20:15</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAB\\\"/>\\n </Line>\\n <Line Number=\\\"3\\\">\\n <DateTime>2026-09-12T14:37</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAC\\\"/>\\n </Line>\\n <Line Number=\\\"4\\\">\\n <DateTime>2026-10-21T20:33</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAD\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>XXXXX XXXX XXX 9XXX XXXXX 999 XX 99XXX XX 9999</Text>\\n <Text>XXX XXX XXXXXXX XXXXXX XX XXXX XXXX XXXXX</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>XXX XX XXXX</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.I\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247183105529190990</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:32b6804d-3647-4aa6-8721-0c58fe41895c</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>IGD</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247263105531430560</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:2d462e6a-6456-4feb-9844-1d30129cfb44</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>574577105532791300</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:cb937762-47ad-4035-981c-a12c9e3a5d97</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247230105534071340</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:f75d90ce-57e3-4f17-929d-4cbde2c49d14</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:53Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-08-04T17:28</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAA\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXXXXXX XXXXXXXX/XXXX XXXXXXX</Text>\\n <Text>9.9XXXXXX XXXXXXX/XXXXXX XXXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XXXXXXXXX</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99..XX99-XXXXX-999.99-XX XXXXXX</Text>\\n <Text>99..XX99-XXXXX-999.99-XX XXXXXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XX 9.9XXXXXXXXX XXXXXXXX XXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XX 9.9XXXXXX XXXXXXX XXXXXX XXXXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAA H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247236105537161720</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:5d406d05-c3e6-4b21-b593-721d65a5918e</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:53Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:55\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1204\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247174105538621600</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:497d87c0-3e42-4117-988a-ff70bf7e9806</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-09-01T19:49</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAB\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXX/XXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-9XXXX XXX XXXX XX</Text>\\n <Text>XX XXX XXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX XX999</Text>\\n <Text>9.XXX XX XXXX 999999999-</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99..XX99-XXXXXX-999.99-9999</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 999/X999/X99</Text>\\n <Text>9/XXX/XXXX9999999999999999 9.9XXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAB H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247301105541361240</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:31b11fbb-ef60-4a82-b41f-157edc016b8a</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-09-06T11:11</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAC\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXX/XXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX/XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX99XXX9XXX</Text>\\n <Text>XXXXXXXXX XXX</Text>\\n <Text>9.XXX XXXX 9X XXXXX XXXXXXXX XX XXXXXXX XX XXXXX XXXX</Text>\\n <Text>9.XXX XXXX 9X XXX XXXXXXXX XXXXXXXX XXXXXXX XX 99XXX99 9999XX</Text>\\n <Text>X</Text>\\n <Text>9.XXX XXXX 9X 9999999999999 XXXX9 XXX 999 XX 999 XXX9</Text>\\n <Text>9.XXX XXXX 9X XX XXXXXXXX XXX XX XXXXXX XX XXXXXXXXX XXXXXX</Text>\\n <Text>9.XXX XXXX 9X XX XXXXXX XX XXXX XXXX XXX XX XXXX XXX XX XXXXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX99-XXXXX-999.99-9999</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/999/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/999/XXX999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XXXX999999999999999 9.9XXXXX XXXXXX XXXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X99/X9/XXX/XXXX</Text>\\n <Text>999999999999999 9.9XXXXX XXXXXX XXXXXX/9/X/X-99999999999</Text>\\n <Text>99/99</Text>\\n <Text>RECEIVED FROM - XXXXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAC H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247355105544140700</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:44b2358f-b88b-47b5-bcf9-120cd2174325</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-10-09T12:42</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAD\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXXX/XXXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXXX XXXX XXXXXX *X9X XX *X9X XX XXXXXXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>XXXX XXXX XXXXXX - XXXXXX XXX *X9 XX XXXX</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX XXX XXXX</Text>\\n <Text>XXXX XXX XXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X X/ XXXX XXX99 9999999999 X 99.99</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>99.XXX 9X 99999999</Text>\\n <Text>99.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>99.XXX XXXX 9X XXXX XXXXXXXXXXX XX XXXXXXX XXX</Text>\\n <Text>99.XXX XXXX 9X XX XXXXXXXX XXX XX XXXXXX XX XXXXXXXXX XXXXXX</Text>\\n <Text>99.XXX XXXX 9X XX XXXXXX XX XXXX XXXX XXX XX XXXX XXX XX XXXXX</Text>\\n <Text>99.XXX XXXX 9X XXXX XXX XX XXX XXXXXXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX XX999</Text>\\n <Text>9.XXX XX XXXX 999999999-</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99..XX99-XXXXXX-999.99-9999</Text>\\n <Text>99.X-XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99.99/ 9999.99/ 999.99/X999.99/</Text>\\n <Text>X999.99/XXX/XXXX9999999999999999 9.9XXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99.99/ 9999.99/ 9.99/X999.99/</Text>\\n <Text>X999.99/XXX/XXXX9999999999999999 9.9XXXXX XXXXXXX XXXXXXX</Text>\\n <Text>/9/X/X-9999999999999/99</Text>\\n <Text>9. XX‡9999999999/ 9.99/ 999.99/ 9.99/X999.99/X9.9</Text>\\n <Text>9/XXX/XXXX9999999999999999 9.9XXXXX XXXXXXX XXXXXXX/9/X/X</Text>\\n <Text>XX</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAD H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247363105547392260</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:608af838-ced1-4e40-9fe4-d58058352510</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1247386105549450300</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:a8b7ba31-e1bb-4f9c-81c6-b9ff8dcea4c4</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-06 (#166): la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica createAnonymizer: el alias de cada sobre sale de su Line/UniqueID. Firmas corregidas: 4.\"\n}\n","// Respuestas de producción grabadas en la validación del Tier 3 (#96 y #97), anonimizadas: PCC\n// como `XXXX`, firmas como `AAA`, localizadores como alias (`AAAAAA`…), el token como\n// `[REDACTED]` y el párrafo enmascarado (letras a `X`, dígitos a `9`), salvo los avisos PIC,\n// los encabezados fijos y el fin de cola. Ver scripts/lib/legacy-recorder.mjs.\nimport placeJson from '../../test/fixtures/queue.production-place.json';\nimport placeWithoutCodeJson from '../../test/fixtures/queue.production-place-sin-pic.json';\nimport placeWithoutCodeInsideJson from '../../test/fixtures/queue.production-place-sin-pic-adentro.json';\nimport emptyQueueJson from '../../test/fixtures/queue.production-walk-empty-queue.json';\nimport walkJson from '../../test/fixtures/queue.production-walk.json';\n\n/** Una respuesta grabada: la operación del SDK, el HTTP status y el sobre SOAP tal cual llegó. */\nexport interface RecordedResponse {\n /** `operation` de `onRawResponse` (`'openSession'`, `'queue.access'`…) o `probe.*` si el script la mandó crudo. */\n operation: string;\n status: number;\n body: string;\n}\n\n/** Una corrida grabada: sus respuestas en el orden en que llegaron. */\nexport interface RecordedFixture {\n /** Fecha de la corrida, `YYYY-MM-DD` en UTC. */\n recordedAt: string;\n responses: readonly RecordedResponse[];\n}\n\nfunction fixture(json: { recordedAt: string; responses: readonly RecordedResponse[] }): RecordedFixture {\n return Object.freeze({\n recordedAt: json.recordedAt,\n responses: Object.freeze(\n json.responses.map(({ operation, status, body }) => Object.freeze({ operation, status, body })),\n ),\n });\n}\n\n/**\n * Las corridas de producción del Tier 3. Cada una usa sus propios alias de localizador, así que\n * se pueden juntar en un fake con `queueFakePnrs` sin que choquen:\n * - `walk`: `AAAAAA`–`AAAAAD`; `place`: `AAAAAE`–`AAAAAF`;\n * `placeWithoutInstructionCodeInside`: `AAAAAG`–`AAAAAH`.\n *\n * Qué trae cada una:\n * - `walk`: `count`, `list`, `access` y `ignore` sobre una cola de 4 PNR hasta el fin de cola,\n * más `I` y `QXI` fuera de una cola;\n * - `emptyQueue`: `access` y `list` sobre una cola vacía (`QUEUE SELECTED WAS EMPTY`);\n * - `place`: `place` fuera y dentro de una cola, y `remove` hasta el fin de cola;\n * - `placeWithoutInstructionCode` y `placeWithoutInstructionCodeInside`: `place` sin PIC, fuera\n * (`INSTRUCTION NUMBER NOT IN RANGE`) y dentro de una cola (`NEED INSTRUCTION NUMBER`).\n *\n * El `list` de `walk` se grabó sin `primaryPassenger: true` (sin `/LN`), así que ningún `Line`\n * trae `PassengerName` (#193).\n */\nexport const queueFixtures: Readonly<{\n walk: RecordedFixture;\n emptyQueue: RecordedFixture;\n place: RecordedFixture;\n placeWithoutInstructionCode: RecordedFixture;\n placeWithoutInstructionCodeInside: RecordedFixture;\n}> = Object.freeze({\n walk: fixture(walkJson),\n emptyQueue: fixture(emptyQueueJson),\n place: fixture(placeJson),\n placeWithoutInstructionCode: fixture(placeWithoutCodeJson),\n placeWithoutInstructionCodeInside: fixture(placeWithoutCodeInsideJson),\n});\n"],"mappings":"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","names":["XMLParser","XMLParser","text","envelope","node","text","text","XMLParser","text","text","text","month","number","date","status","quantity","text","MONTHS","parser","XMLParser","node","pad","lines","textLines","text","identifiers","messages","pnrs","pnrsTotal","queueKey","element","text","fixture","locator"]}
1
+ {"version":3,"sources":["../src/testing/queue-fake.ts","../src/testing/booking-fake.ts","../src/queue/queue-access.ts","../src/http/soap-transport.ts","../src/queue/queue-ref.ts","../src/queue/host-date.ts","../src/queue/queue-paragraph.ts","../src/queue/queue-place.ts","../src/testing/anonymize.ts","../src/testing/fixture-pnrs.ts","../test/fixtures/queue.production-place.json","../test/fixtures/queue.production-place-sin-pic.json","../test/fixtures/queue.production-place-sin-pic-adentro.json","../test/fixtures/queue.production-walk-empty-queue.json","../test/fixtures/queue.production-walk.json","../src/testing/fixtures.ts"],"sourcesContent":["// Fake de colas para los tests de los consumidores: un `fetch` que responde como Sabre a la sesión\n// SOAP, a Queue Management y a las ventas del día (ADR-030), y en REST a la reserva y la emisión\n// (F3.1, ADR-031; ver booking-fake.ts), sin red. Ver sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md\n// (punto 7 y su decisión). Se publica en `sabre-client/testing`, fuera del bundle principal.\n//\n// Las respuestas imitan lo observado en producción (#95, #96 y #97): la cola vacía como\n// `QUEUE SELECTED WAS EMPTY`, el fin de cola en el `Paragraph`, `place` dentro de una cola que\n// mueve el PNR y devuelve el siguiente, y los errores de host con el código en `ShortText`.\nimport { XMLParser } from 'fast-xml-parser';\nimport { type BookingFakeCommand, createBookingHandler, type QueueFakeBooking, type QueueFakeTicketing } from './booking-fake.js';\nimport { END_OF_DISPLAY, OFF_QUEUE, QUEUE_EMPTY } from '../queue/queue-access.js';\nimport { parseQueueParagraph } from '../queue/queue-paragraph.js';\nimport { signatureLocator } from '../queue/queue-place.js';\nimport type { QueueActivityCounters } from '../queue/queue-activity.js';\nimport { MAX_QUEUE_NUMBER, MESSAGE_QUEUE, MIN_QUEUE_NUMBER, type QueueRef, toQueueRef } from '../queue/queue-ref.js';\nimport type { DailySalesTransaction } from '../reporting/daily-sales-summary.js';\nimport type {\n ReservationHistoryAccounting,\n ReservationHistoryFlightSegment,\n ReservationHistoryText,\n ReservationHistoryTransaction,\n} from '../reservation/reservation-history.js';\n\n/** Un PNR del fake, con los campos que Sabre manda en `Line`. */\nexport interface QueueFakePnr {\n /** Localizador de 6 caracteres alfanuméricos. */\n locator: string;\n /**\n * Las líneas del PNR en formato de host, como el `Paragraph` de Access Queue. Si no termina en\n * una línea de firma (`… HHMM/DDMMMYY <localizador> H`), el fake agrega una: `place` dentro de\n * una cola saca el localizador de ahí, igual que con Sabre. `selection` `AL` y `AC` filtran por\n * los segmentos del párrafo, y `PI` por su aviso de PIC (`011 SEE REMARKS`), como los lee\n * `parseQueueParagraph`.\n */\n paragraph?: readonly string[];\n /** `Line/DateTime`, tal cual. Es la fecha por la que filtra `selection` `QD`. */\n placedAt?: string;\n /** `Line/POS/Source`. `selection` `AK` filtra por el PCC más la firma (`'ABCDAAT'`). */\n placedBy?: { agentSine?: string; pseudoCityCode?: string };\n /** `Line/PassengerName`. Solo llega en `list` con `primaryPassenger: true`. */\n primaryPassenger?: string;\n}\n\n/**\n * Los contadores de `queue.activity` que se siembran para una cola. `numMessages` no va: sale\n * siempre de lo que hay en la cola del fake.\n */\nexport type QueueFakeActivity = Partial<Omit<QueueActivityCounters, 'numMessages'>>;\n\n/**\n * Una transacción del historial de un PNR, como la devuelve `reservation.history`. Las listas que\n * falten van vacías.\n */\nexport type QueueFakeHistoryTransaction = Omit<\n ReservationHistoryTransaction,\n 'flightSegments' | 'generalInfo' | 'remarks' | 'accounting'\n> & {\n flightSegments?: readonly ReservationHistoryFlightSegment[];\n generalInfo?: readonly ReservationHistoryText[];\n remarks?: readonly ReservationHistoryText[];\n accounting?: readonly ReservationHistoryAccounting[];\n};\n\n/**\n * Un día de ventas para `reporting.dailySalesSummary`: las transacciones, y lo que se quiera forzar.\n * Sin `status`, el reporte sale `complete`.\n */\nexport interface QueueFakeDailySalesDay {\n transactions: readonly DailySalesTransaction[];\n /** `incomplete` agrega `Error status=\"Incomplete\"` con `failedDocuments`; `deferred`, `reportId` y `isQueryStillRunning`. */\n status?: 'complete' | 'incomplete' | 'deferred';\n /** Los documentos que fallaron, con `status: 'incomplete'`. */\n failedDocuments?: readonly string[];\n /** Con `status: 'deferred'`. Por defecto, `reportId: 'FAKE-REPORT'` y `queryStillRunning: true`. */\n deferred?: { reportId?: string; chunkNumber?: number; maxChunks?: number; queryStillRunning?: boolean };\n /** Un error forzado, p. ej. `'45100'` (Branch Access) o `'21212'` (versión): el SDK lanza `SabreBusinessError`. */\n errorCode?: string;\n agencyName?: string;\n}\n\n/** Un PNR: sus campos, o solo el párrafo. Con solo el párrafo, el localizador sale de la línea de firma. */\nexport type QueueFakeItem = QueueFakePnr | readonly string[];\n\nexport interface QueueFakeOptions {\n /**\n * El contenido de cada cola, en orden. La clave es el número de cola (`'12'`, de 0 a 511), una\n * cola alfabética (`'S'`, una o dos letras mayúsculas) o una cola con nombre (`'name:HOTELS'`, o\n * `'HOTELS'` sin el prefijo). La alfabética y la con nombre viajan por atributos distintos\n * (`Number` y `Name`, ADR-028). El fake no distingue PCC: las colas son las mismas para cualquier\n * `pcc`.\n *\n * La `'S'` es la cola de mensajes: cada elemento es el texto de un mensaje (`string[]`), no un\n * PNR. `access` lo muestra sin `Line`, como Sabre en CERT, e `ignore` lo deja en la cola. Que\n * `remove` lo saque es un supuesto del fake: no se probó con Sabre.\n */\n queues?: Readonly<Record<string, readonly QueueFakeItem[]>>;\n /** PNR que no están en ninguna cola, para colocarlos con `place({ locators })`. */\n pnrs?: readonly QueueFakeItem[];\n /**\n * Los contadores de `queue.activity` por cola, con las mismas claves que `queues`. `numMessages`\n * sale del estado del fake, como en `count`: sin el PNR en pantalla (CERT, #167). Los demás valen\n * lo que se siembre aquí, o 0. Las acciones del fake (`ignore`, `remove`, `place`, `exit`) **no**\n * los cambian: no se probó qué contador sube Sabre con cada una (Q-097).\n */\n activity?: Readonly<Record<string, QueueFakeActivity>>;\n /**\n * El historial de cada PNR para `reservation.history`, por localizador. Un PNR que el fake\n * conoce y no está aquí devuelve una transacción sintética (la creación). Un localizador que\n * el fake no conoce da un error de host marcado como no simulado.\n */\n histories?: Readonly<Record<string, readonly QueueFakeHistoryTransaction[]>>;\n /**\n * Las ventas de `reporting.dailySalesSummary`, por PCC y fecha (`'YYYY-MM-DD'`): las\n * transacciones del día, o un `QueueFakeDailySalesDay` para forzar `incomplete`, `deferred` o un\n * error. Sin `pcc` en el request vale el PCC de la sesión, y sin `date`, el día de `now()` en\n * `dailySalesTimeZone`. Un PCC o un día sin\n * sembrar da un reporte `complete` vacío, como un PCC que no emite (producción, 2026-11-12).\n * Las transacciones se devuelven en el orden sembrado; el filtro `documentType` se simula\n * (con `RFND` también entran las `RFD`, el código real del reembolso), los demás no. Los\n * `totals` salen vacíos.\n */\n dailySales?: Readonly<Record<string, Readonly<Record<string, readonly DailySalesTransaction[] | QueueFakeDailySalesDay>>>>;\n /**\n * La zona IANA del «día en curso» de `dailySalesSummary` sin `date`, p. ej. `'America/Mexico_City'`.\n * Sabre usa el día local del PCC (producción, 2026-11-12, y Q-106 con `QD`): con México, entre\n * las 18:00 y las 24:00 locales el día UTC ya es el siguiente. Por defecto, `'UTC'`.\n */\n dailySalesTimeZone?: string;\n /**\n * Reservas para el cliente REST (`Sabre`), por localizador, sin pasar por `booking.create`. Las\n * que crea `booking.create` se suman solas, con localizadores `FAKEAA`, `FAKEAB`…\n */\n bookings?: Readonly<Record<string, QueueFakeBooking>>;\n /**\n * Desenlaces forzados de `tickets.fulfill` y de `booking.cancel` con `VOID`, en orden. Sin\n * forzar, Fulfill emite un boleto `TE` (y `BOOKING_FULFILLED` si ya hay uno vigente), y el void\n * lo deja en `TV` y, con `cancelAll`, cancela la reserva.\n */\n ticketing?: QueueFakeTicketing;\n /** Reloj de las fechas de `count` y de `place`. Por defecto, `new Date()`. Las fechas van en UTC. */\n now?: () => Date;\n}\n\n/** Qué le pidió el SDK al fake. */\nexport type QueueFakeCommand =\n | 'open'\n | 'close'\n | 'ping'\n | 'count'\n | 'access'\n | 'list'\n | 'ignore'\n | 'remove'\n | 'exit'\n | 'place'\n | 'activity'\n | 'history'\n | 'dailySalesSummary'\n | BookingFakeCommand;\n\nexport interface QueueFakeCall {\n command: QueueFakeCommand;\n /** La cola de `access` y `list`. */\n queue?: QueueRef;\n /** El localizador de `history` y de las llamadas REST de reserva y emisión. */\n locator?: string;\n /** El PCC y la fecha que pidió `dailySalesSummary`, si los mandó. */\n pcc?: string;\n date?: string;\n}\n\nexport interface QueueFake {\n /** Se pasa como `config.fetch` de `SabreLegacy` y de `Sabre`: el mismo atiende SOAP y REST. */\n readonly fetch: typeof fetch;\n /** Los localizadores de una cola, en orden, con lo que el recorrido haya sacado o colocado. */\n locators(queue: QueueRef): string[];\n /** El texto de los mensajes que siguen en la cola `S`, en orden. */\n messages(): string[][];\n /** Las llamadas recibidas, en orden. */\n readonly calls: readonly QueueFakeCall[];\n /** Cuántas sesiones siguen abiertas: sirve para comprobar que el consumidor las cierra. */\n readonly openSessions: number;\n /**\n * Vence todas las sesiones abiertas. La siguiente llamada de cada una recibe el fault de una\n * sesión vencida (`USG_INVALID_SECURITY_TOKEN`), y el SDK la convierte en `SabreSessionError`\n * con `kind: 'expired'`.\n */\n expireSessions(): void;\n}\n\nconst SWS_NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\nconst STL_NAMESPACE = 'http://services.sabre.com/STL/v01';\nconst SIGNATURE_DATE = '1200/01JAN26';\nconst LOCATOR = /^[A-Z0-9]{6}$/;\nconst NAVIGATION: Readonly<Record<string, QueueFakeCommand>> = { I: 'ignore', QR: 'remove', QXI: 'exit' };\n\ntype XmlNode = Record<string, unknown>;\n\ninterface Pnr {\n locator: string;\n paragraph: readonly string[];\n primaryPassenger: string | undefined;\n}\n\n/** Un PNR dentro de una cola: el PNR y los datos de su colocación. */\ninterface Entry {\n /** Vacío en un mensaje de la `S`. */\n locator: string;\n /** El texto de un mensaje de la `S`. */\n message?: readonly string[];\n placedAt: string | undefined;\n placedBy: { agentSine?: string; pseudoCityCode?: string } | undefined;\n /** El PIC con que se colocó con `place`. Los PNR sembrados lo sacan del aviso de su párrafo. */\n instructionCode?: number;\n}\n\ninterface Session {\n conversationId: string;\n /**\n * La cola en la que está la sesión y la posición del PNR en pantalla. Con `selection`, `matches`\n * dice qué PNR cumplen: el recorrido salta los demás.\n */\n inside: { key: string; index: number; matches?: (entry: Entry) => boolean } | undefined;\n}\n\n/**\n * Las funciones de `selection` que simula el fake (#202). En `list`, Sabre acepta solo `QD` y `AK`\n * (producción, #155); en `access` y `count`, cualquiera (#213), pero el fake simula solo estas.\n * Las demás dan un error de host marcado como no simulado.\n */\nexport const QUEUE_FAKE_SELECTION_FUNCTIONS = ['QD', 'AK', 'AL', 'PI', 'AC'] as const;\nconst LIST_SELECTION_FUNCTIONS = ['QD', 'AK'];\nconst MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];\n\n/** `05NOV` o `5NOV` contra un `placedAt` `2026-11-05T…` (o `11-05T…`, sin año). */\nfunction placedOn(placedAt: string | undefined, criteria: string): boolean {\n const date = /^(\\d{1,2})([A-Z]{3})$/.exec(criteria.toUpperCase());\n const placed = /(\\d{2})-(\\d{2})T/.exec(placedAt ?? '');\n if (date === null || placed === null) return false;\n return Number(placed[1]) === MONTHS.indexOf(date[2]!) + 1 && Number(placed[2]) === Number(date[1]);\n}\n\ninterface Reply {\n status: number;\n body: string;\n}\n\nfunction fail(message: string): never {\n throw new TypeError(`sabre-client/testing: ${message}`);\n}\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n removeNSPrefix: true,\n parseTagValue: false,\n parseAttributeValue: false,\n isArray: (name) => name === 'QueueIdentifier' || name === 'UniqueID' || name === 'Selection',\n});\n\nfunction node(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return node(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nfunction nodes(value: unknown): XmlNode[] {\n if (value === undefined) return [];\n return (Array.isArray(value) ? value : [value]).filter((item): item is XmlNode => node(item) !== undefined);\n}\n\nfunction text(value: unknown): string | undefined {\n if (typeof value === 'string') return value.trim();\n const inner = node(value)?.['#text'];\n return typeof inner === 'string' ? inner.trim() : undefined;\n}\n\nfunction attr(value: unknown, name: string): string | undefined {\n const found = node(value)?.[`@${name}`];\n return typeof found === 'string' ? found : undefined;\n}\n\nfunction escape(value: string): string {\n return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\n/**\n * Clave interna de una cola (ADR-028): `'12'` (numérica), `'S'` (alfabética) o `'name:HOTELS'` (con\n * nombre). Las alfabéticas y las con nombre viajan por atributos distintos, así que no comparten clave.\n */\nfunction queueKey(queue: QueueRef): string {\n if (typeof queue === 'number') return String(queue);\n if (typeof queue === 'string') return queue;\n return `${NAME_PREFIX}${queue.name}`;\n}\n\nconst NAME_PREFIX = 'name:';\nconst ALPHA_KEY = /^[A-Z]{1,2}$/;\n\n/**\n * Clave de `QueueFakeOptions.queues`: un número (`'12'`), una cola alfabética (`'S'`), o una con\n * nombre, como `'name:HOTELS'` o, sin el prefijo, `'HOTELS'`.\n */\nfunction optionKey(key: string): string {\n if (key.startsWith(NAME_PREFIX) || /^\\d+$/.test(key) || ALPHA_KEY.test(key)) return key;\n return `${NAME_PREFIX}${key}`;\n}\n\n/** La `QueueRef` de una clave interna. */\nfunction refOfKey(key: string): QueueRef {\n if (key.startsWith(NAME_PREFIX)) return { name: key.slice(NAME_PREFIX.length) };\n return /^\\d+$/.test(key) ? Number(key) : key;\n}\n\n/** Atributo de `QueueIdentifier` de una clave, como lo manda Sabre en la respuesta. */\nfunction keyAttribute(key: string, pad = false): string {\n if (key.startsWith(NAME_PREFIX)) return `Name=\"${escape(key.slice(NAME_PREFIX.length))}\"`;\n return `Number=\"${escape(pad && /^\\d+$/.test(key) ? key.padStart(4, '0') : key)}\"`;\n}\n\nfunction validateKey(key: string): void {\n if (/^\\d+$/.test(key)) {\n const number = Number(key);\n if (number < MIN_QUEUE_NUMBER || number > MAX_QUEUE_NUMBER) fail(`la cola ${key} está fuera de 0–511`);\n return;\n }\n if (key.startsWith(NAME_PREFIX) ? key.slice(NAME_PREFIX.length).trim() === '' : key.trim() === '') {\n fail('el nombre de una cola no puede estar vacío');\n }\n}\n\n/** `MM-DDTHH:mm`, como el `DateTime` de `QueueCountRS` y `QueuePlaceRS`. */\nfunction shortDate(date: Date): string {\n return date.toISOString().slice(5, 16);\n}\n\n/** `YYYY-MM-DDTHH:mm`, como el `Line/DateTime` real de Access Queue. */\nfunction longDate(date: Date): string {\n return date.toISOString().slice(0, 16);\n}\n\n/** Un mensaje de `queues['S']`: una lista de líneas, con al menos una que no esté vacía. */\nfunction toMessage(item: unknown, index: number): string[] {\n const label = `queues['${MESSAGE_QUEUE}'][${index}]`;\n if (!Array.isArray(item) || item.some((line) => typeof line !== 'string')) {\n fail(`${label}: la S es la cola de mensajes; cada elemento es el texto de un mensaje (string[])`);\n }\n const lines = item as string[];\n if (!lines.some((line) => line.trim() !== '')) fail(`${label}: el mensaje no puede estar vacío`);\n return [...lines];\n}\n\nfunction toPnr(item: QueueFakeItem, label: string): Pnr & Omit<Entry, 'locator'> {\n if (Array.isArray(item)) {\n const lines = item as readonly string[];\n const locator = signatureLocator(lines);\n if (locator === undefined) fail(`${label}: el párrafo no tiene línea de firma; pasa { locator, paragraph }`);\n return { locator, paragraph: [...lines], primaryPassenger: undefined, placedAt: undefined, placedBy: undefined };\n }\n const pnr = item as QueueFakePnr;\n if (typeof pnr !== 'object' || pnr === null || typeof pnr.locator !== 'string' || !LOCATOR.test(pnr.locator)) {\n fail(`${label}: locator debe ser de 6 caracteres alfanuméricos en mayúscula`);\n }\n const lines = [...(pnr.paragraph ?? [])];\n const signed = signatureLocator(lines);\n if (signed !== undefined && signed !== pnr.locator) fail(`${label}: la línea de firma es de ${signed}, no de ${pnr.locator}`);\n if (signed === undefined) lines.push(`XXXX.XXXX*AAA ${SIGNATURE_DATE} ${pnr.locator} H`);\n return {\n locator: pnr.locator,\n paragraph: lines,\n primaryPassenger: pnr.primaryPassenger,\n placedAt: pnr.placedAt,\n placedBy: pnr.placedBy,\n };\n}\n\nfunction envelope(action: string, conversationId: string, token: string | undefined, body: string): string {\n const security =\n token === undefined\n ? ''\n : `<wsse:Security xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/12/secext\"><wsse:BinarySecurityToken valueType=\"String\" EncodingType=\"wsse:Base64Binary\">${escape(token)}</wsse:BinarySecurityToken></wsse:Security>`;\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<soap-env:Envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap-env:Header>',\n '<eb:MessageHeader xmlns:eb=\"http://www.ebxml.org/namespaces/messageHeader\" eb:version=\"1.0\" soap-env:mustUnderstand=\"1\">',\n `<eb:ConversationId>${escape(conversationId)}</eb:ConversationId><eb:Action>${escape(action)}</eb:Action>`,\n '</eb:MessageHeader>',\n security,\n `</soap-env:Header><soap-env:Body>${body}</soap-env:Body></soap-env:Envelope>`,\n ].join('');\n}\n\nfunction results(status: 'Complete' | 'NotProcessed', inner: string): string {\n return `<stl:ApplicationResults status=\"${status}\">${inner}</stl:ApplicationResults>`;\n}\n\nconst success = '<stl:Success/>';\n\n/** Un error de host con la forma real: `Message` sin `@code` y el código en `ShortText`. */\nfunction hostResult(kind: 'Error' | 'Warning', message: string): string {\n return `<stl:${kind} type=\"BusinessLogic\"><stl:SystemSpecificResults><stl:Message>${escape(message)}</stl:Message><stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText></stl:SystemSpecificResults></stl:${kind}>`;\n}\n\nfunction textLines(lines: readonly string[]): string {\n return lines.map((line) => `<Text>${escape(line)}</Text>`).join('');\n}\n\n/** Lee la clave de una `QueueIdentifier` del request: `Number` (numérica o alfabética) o `Name`. */\nfunction requestedKey(identifier: XmlNode | undefined): string | undefined {\n const number = attr(identifier, 'Number');\n if (number !== undefined) {\n const ref = toQueueRef(number);\n return ref === undefined ? undefined : queueKey(ref);\n }\n const name = attr(identifier, 'Name');\n return name === undefined ? undefined : `${NAME_PREFIX}${name}`;\n}\n\nconst ACTIVITY_COUNTERS: ReadonlyArray<[keyof QueueFakeActivity, string]> = [\n ['ended', 'Ended'],\n ['ignored', 'Ignored'],\n ['moved', 'Moved'],\n ['removed', 'Removed'],\n ['transferred', 'Transferred'],\n ['leftMessageToContact', 'LeftMessageToContact'],\n ['unableToReach', 'UnableToReach'],\n];\n\nfunction toActivity(value: unknown, label: string): QueueFakeActivity {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} debe ser un objeto de contadores`);\n const known = new Set<string>(ACTIVITY_COUNTERS.map(([key]) => key));\n const result: QueueFakeActivity = {};\n for (const [key, count] of Object.entries(value)) {\n if (key === 'numMessages') fail(`${label}.numMessages sale de la cola del fake: no se siembra`);\n if (!known.has(key)) fail(`${label}.${key} no es un contador de queue.activity`);\n if (!Number.isInteger(count) || (count as number) < 0) fail(`${label}.${key} debe ser un entero de 0 en adelante`);\n result[key as keyof QueueFakeActivity] = count as number;\n }\n return result;\n}\n\nfunction toHistory(value: unknown, label: string): QueueFakeHistoryTransaction[] {\n if (!Array.isArray(value)) fail(`${label} debe ser una lista de transacciones`);\n return value.map((transaction: unknown, index) => {\n const at = `${label}[${index}]`;\n if (typeof transaction !== 'object' || transaction === null) fail(`${at} debe ser un objeto`);\n const t = transaction as QueueFakeHistoryTransaction;\n // Sin Action, el SDK no entiende la respuesta: se frena acá, con el lugar exacto.\n for (const [list, name] of [\n [t.flightSegments, 'flightSegments'],\n [t.generalInfo, 'generalInfo'],\n [t.remarks, 'remarks'],\n ] as const) {\n if (list === undefined) continue;\n if (!Array.isArray(list)) fail(`${at}.${name} debe ser una lista`);\n list.forEach((entry: { action?: unknown }, position: number) => {\n if (typeof entry?.action !== 'string' || entry.action.trim() === '') fail(`${at}.${name}[${position}].action debe ser un string no vacío`);\n });\n }\n if (t.accounting !== undefined && !Array.isArray(t.accounting)) fail(`${at}.accounting debe ser una lista`);\n return t;\n });\n}\n\nconst attrs = (pairs: ReadonlyArray<[string, string | number | undefined]>): string =>\n pairs.map(([name, value]) => (value === undefined ? '' : ` ${name}=\"${escape(String(value))}\"`)).join('');\n\n/** Las líneas de un texto del historial, una por `Text`. */\nconst historyText = (text: string): string =>\n text.split('\\n').map((line) => `<Text>${escape(line)}</Text>`).join('');\n\n/** Una transacción como `HistoricalInfo`, en el orden de las respuestas de CERT. */\nfunction historicalInfo(t: QueueFakeHistoryTransaction): string {\n const segments = (t.flightSegments ?? []).map((segment) =>\n [\n `<Item><FlightSegment${attrs([\n ['Action', segment.action],\n ['ArrivalDateTime', segment.arrivalDateTime],\n ['DepartureDateTime', segment.departureDateTime],\n ['FlightNumber', segment.flightNumber],\n ['NumberInParty', segment.numberInParty],\n ['ResBookDesigCode', segment.bookingClass],\n ['Status', segment.status],\n ])}>`,\n segment.destination === undefined ? '' : `<DestinationLocation${attrs([['LocationCode', segment.destination]])}/>`,\n segment.marketingAirline === undefined ? '' : `<MarketingAirline${attrs([['Code', segment.marketingAirline]])}/>`,\n segment.origin === undefined ? '' : `<OriginLocation${attrs([['LocationCode', segment.origin]])}/>`,\n segment.supplierRef === undefined ? '' : `<SupplierRef${attrs([['ID', segment.supplierRef]])}/>`,\n '</FlightSegment></Item>',\n ].join(''),\n );\n return [\n `<HistoricalInfo${attrs([['RPH', t.rph]])}>`,\n ...(t.generalInfo ?? []).map((entry) => `<GeneralInfo${attrs([['Action', entry.action]])}>${historyText(entry.text)}</GeneralInfo>`),\n segments.length === 0 ? '' : `<ItineraryInfo><ReservationItems>${segments.join('')}</ReservationItems></ItineraryInfo>`,\n (t.remarks ?? []).length === 0\n ? ''\n : `<RemarkInfo>${(t.remarks ?? []).map((entry) => `<Remark${attrs([['Action', entry.action]])}>${historyText(entry.text)}</Remark>`).join('')}</RemarkInfo>`,\n ...(t.accounting ?? []).map((entry) => `<AccountingInfo${attrs([['Action', entry.action], ['Type', entry.type], ['LinkCode', entry.linkCode]])}/>`),\n `<ItineraryRef><Source${attrs([\n ['AAA_PseudoCityCode', t.aaaPcc],\n ['CreateDateTime', t.createdAt],\n ['CreationAgent', t.agent],\n ['CreationAgentDutyCode', t.agentDutyCode],\n ['CreationAgentFunctionCode', t.agentFunctionCode],\n ['PseudoCityCode', t.pcc],\n ['ReceivedFrom', t.receivedFrom],\n ])}/></ItineraryRef>`,\n '</HistoricalInfo>',\n ].join('');\n}\n\nconst DAILY_SALES_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nfunction toDailySalesDay(value: unknown, label: string): QueueFakeDailySalesDay {\n const day = (Array.isArray(value) ? { transactions: value } : value) as QueueFakeDailySalesDay;\n if (typeof day !== 'object' || day === null || !Array.isArray(day.transactions)) fail(`${label} debe ser una lista de transacciones o { transactions }`);\n if (day.status !== undefined && !['complete', 'incomplete', 'deferred'].includes(day.status)) fail(`${label}.status debe ser complete, incomplete o deferred`);\n for (const [index, t] of day.transactions.entries()) {\n const at = `${label}.transactions[${index}]`;\n if (typeof t !== 'object' || t === null) fail(`${at} debe ser un objeto`);\n for (const field of ['documentType', 'transactionCode', 'settlementType', 'documentNumber', 'agentSine', 'transactionDateTime'] as const) {\n if (typeof t[field] !== 'string') fail(`${at}.${field} debe ser un string`);\n }\n if (typeof t.airline?.code !== 'string') fail(`${at}.airline.code debe ser un string`);\n }\n return day;\n}\n\n/** Una `Transaction` de `DailySalesSummaryRS`, como la lee el SDK. */\nfunction transactionXml(t: DailySalesTransaction): string {\n const el = (name: string, value: string | undefined): string => (value === undefined ? '' : `<asr:${name}>${escape(value)}</asr:${name}>`);\n const payments =\n t.payments === undefined\n ? ''\n : `<asr:Payments>${el('CurrencyCode', t.payments.currencyCode)}<asr:DocumentPayment>${el('PaymentTotal', t.payments.total)}${t.payments.details\n .map((d) => `<asr:PaymentDetail${attrs([['fop', d.fop], ['category', d.category], ['cardType', d.cardType]])}>${el('PaymentAmount', d.amount)}</asr:PaymentDetail>`)\n .join('')}</asr:DocumentPayment></asr:Payments>`;\n const flags = attrs([\n ['nonInteractive', t.nonInteractive === undefined ? undefined : String(t.nonInteractive)],\n ['electronicDocument', t.electronicDocument === undefined ? undefined : String(t.electronicDocument)],\n ['itineraryType', t.itineraryType],\n ['automatedRefund', t.automatedRefund === undefined ? undefined : String(t.automatedRefund)],\n ]);\n return [\n `<asr:Transaction${flags}>`,\n el('DocumentType', t.documentType),\n el('SettlementType', t.settlementType),\n el('PnrLocator', t.pnrLocator),\n el('PassengerName', t.passengerName),\n '<asr:DocumentDetails>',\n el('DocumentNumber', t.documentNumber),\n el('LastConjunctiveDocumentNumber', t.lastConjunctiveDocumentNumber),\n el('StockType', t.stockType),\n el('DocumentStatusCode', t.documentStatusCode),\n el('TransactionCode', t.transactionCode),\n '</asr:DocumentDetails>',\n `<asr:AirlineCode${attrs([['AirlineNumber', t.airline.number]])}>${escape(t.airline.code)}</asr:AirlineCode>`,\n t.commission === undefined ? '' : `<asr:Commission>${el('Amount', t.commission.amount)}${el('Percent', t.commission.percent)}</asr:Commission>`,\n payments,\n el('AgentSine', t.agentSine),\n el('AgentPseudoCity', t.agentPseudoCity),\n el('TransactionDateTime', t.transactionDateTime),\n '</asr:Transaction>',\n ].join('');\n}\n\n/** Lo que Sabre responde al historial de otro PNR con la sesión dentro de una cola (CERT, Q-102). */\nconst NOT_ALLOWED_INSIDE_QUEUE = 'NAK6 -NOT ALLOWED- FINISH OR IGNORE OTHER ACTIVITY';\n\nexport function createQueueFake(options: QueueFakeOptions = {}): QueueFake {\n if (typeof options !== 'object' || options === null) fail('options debe ser un objeto');\n const now = options.now ?? (() => new Date());\n if (typeof now !== 'function') fail('now debe ser una función');\n\n const pnrs = new Map<string, Pnr>();\n const queues = new Map<string, Entry[]>();\n const sessions = new Map<string, Session>();\n const calls: QueueFakeCall[] = [];\n let tokens = 0;\n\n const register = (item: QueueFakeItem, label: string): Pnr & Omit<Entry, 'locator'> => {\n const pnr = toPnr(item, label);\n const known = pnrs.get(pnr.locator);\n if (known !== undefined && JSON.stringify(known.paragraph) !== JSON.stringify(pnr.paragraph)) {\n fail(`${label}: el PNR ${pnr.locator} aparece con dos párrafos distintos`);\n }\n if (known === undefined) {\n pnrs.set(pnr.locator, { locator: pnr.locator, paragraph: pnr.paragraph, primaryPassenger: pnr.primaryPassenger });\n }\n return pnr;\n };\n\n for (const [optionName, items] of Object.entries(options.queues ?? {})) {\n const key = optionKey(optionName);\n validateKey(key);\n if (!Array.isArray(items)) fail(`queues['${key}'] debe ser una lista`);\n if (key === MESSAGE_QUEUE) {\n queues.set(key, items.map((item, index) => ({ locator: '', placedAt: undefined, placedBy: undefined, message: toMessage(item, index) })));\n continue;\n }\n queues.set(\n key,\n items.map((item, index) => {\n const { locator, placedAt, placedBy } = register(item, `queues['${key}'][${index}]`);\n return { locator, placedAt, placedBy };\n }),\n );\n }\n for (const [index, item] of (options.pnrs ?? []).entries()) register(item, `pnrs[${index}]`);\n\n const activity = new Map<string, QueueFakeActivity>();\n for (const [optionName, counters] of Object.entries(options.activity ?? {})) {\n const key = optionKey(optionName);\n validateKey(key);\n activity.set(key, toActivity(counters, `activity['${key}']`));\n }\n const dailySalesTimeZone = options.dailySalesTimeZone ?? 'UTC';\n let dailySalesDay: Intl.DateTimeFormat;\n try {\n // `en-CA` da la fecha como `YYYY-MM-DD`.\n dailySalesDay = new Intl.DateTimeFormat('en-CA', { timeZone: dailySalesTimeZone, year: 'numeric', month: '2-digit', day: '2-digit' });\n } catch {\n fail(`dailySalesTimeZone: '${dailySalesTimeZone}' no es una zona IANA válida`);\n }\n const dailySales = new Map<string, QueueFakeDailySalesDay>();\n for (const [pccKey, days] of Object.entries(options.dailySales ?? {})) {\n if (!/^[A-Z0-9]{3,4}$/.test(pccKey)) fail(`dailySales['${pccKey}']: la clave debe ser un PCC de 3 o 4 letras mayúsculas o dígitos`);\n if (typeof days !== 'object' || days === null) fail(`dailySales['${pccKey}'] debe ser un objeto con las fechas`);\n for (const [date, day] of Object.entries(days)) {\n if (!DAILY_SALES_DATE.test(date)) fail(`dailySales['${pccKey}']['${date}']: la fecha debe tener la forma 'YYYY-MM-DD'`);\n dailySales.set(`${pccKey} ${date}`, toDailySalesDay(day, `dailySales['${pccKey}']['${date}']`));\n }\n }\n const histories = new Map<string, QueueFakeHistoryTransaction[]>();\n for (const [locator, transactions] of Object.entries(options.histories ?? {})) {\n if (!LOCATOR.test(locator)) fail(`histories['${locator}']: la clave debe ser un localizador de 6 caracteres alfanuméricos en mayúscula`);\n histories.set(locator, toHistory(transactions, `histories['${locator}']`));\n }\n\n const queue = (key: string): Entry[] => {\n let entries = queues.get(key);\n if (entries === undefined) {\n entries = [];\n queues.set(key, entries);\n }\n return entries;\n };\n\n // --- Respuestas de sesión ---------------------------------------------------------------\n\n const invalidToken = (conversationId: string, token: string | undefined): Reply => ({\n status: 500,\n body: envelope(\n 'ErrorRS',\n conversationId,\n token,\n `<soap-env:Fault><faultcode>soap-env:Client.InvalidSecurityToken</faultcode><faultstring>Invalid or Expired binary security token: ${escape(token ?? '')}</faultstring><detail><StackTrace>com.sabre.universalservices.base.session.SessionException: errors.session.USG_INVALID_SECURITY_TOKEN</StackTrace></detail></soap-env:Fault>`,\n ),\n });\n\n const reply = (action: string, session: Session, token: string, body: string): Reply => ({\n status: 200,\n body: envelope(action, session.conversationId, token, body),\n });\n\n // --- Colas --------------------------------------------------------------------------\n\n const lineXml = (entry: Entry, extra: { number?: number; passenger?: boolean } = {}): string => {\n const pnr = pnrs.get(entry.locator);\n const source =\n entry.placedBy === undefined\n ? ''\n : `<POS><Source${entry.placedBy.agentSine === undefined ? '' : ` AgentSine=\"${escape(entry.placedBy.agentSine)}\"`}${entry.placedBy.pseudoCityCode === undefined ? '' : ` PseudoCityCode=\"${escape(entry.placedBy.pseudoCityCode)}\"`}/></POS>`;\n return [\n extra.number === undefined ? '<Line>' : `<Line Number=\"${extra.number}\">`,\n entry.placedAt === undefined ? '' : `<DateTime>${escape(entry.placedAt)}</DateTime>`,\n source,\n extra.passenger === true && pnr?.primaryPassenger !== undefined ? `<PassengerName>${escape(pnr.primaryPassenger)}</PassengerName>` : '',\n `<UniqueID ID=\"${escape(entry.locator)}\"/>`,\n '</Line>',\n ].join('');\n };\n\n const accessRS = (inner: string): string =>\n `<QueueAccessRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.1.1\">${inner}</QueueAccessRS>`;\n const placeRS = (inner: string): string =>\n `<QueuePlaceRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.0.4\">${inner}</QueuePlaceRS>`;\n const accessError = (message: string): string => accessRS(results('NotProcessed', hostResult('Error', message)));\n const placeError = (message: string): string => placeRS(results('NotProcessed', hostResult('Error', message)));\n\n /** El paso en el que queda la sesión: el PNR en pantalla o el fin de cola. */\n /**\n * Si un PNR cumple un filtro de `selection`. `undefined` si la función no se simula. `AC` acepta\n * una sola letra (todos los estados que empiezan con ella), como el host.\n */\n const matchesFilter = (entry: Entry, fn: string, criteria: string): boolean | undefined => {\n if (entry.message !== undefined) return false;\n const wanted = criteria.trim().toUpperCase();\n const paragraph = () => parseQueueParagraph(pnrs.get(entry.locator)?.paragraph ?? [], { referenceDate: now() });\n switch (fn.toUpperCase()) {\n case 'QD':\n return placedOn(entry.placedAt, wanted);\n case 'AK':\n return `${entry.placedBy?.pseudoCityCode ?? ''}${entry.placedBy?.agentSine ?? ''}`.toUpperCase() === wanted;\n case 'AL':\n return paragraph().segments.some((segment) => segment.kind === 'air' && segment.airlineCode === wanted);\n case 'AC':\n return paragraph().segments.some((segment) => segment.status.startsWith(wanted));\n case 'PI': {\n const code = Number(wanted);\n if (entry.instructionCode !== undefined) return entry.instructionCode === code;\n return paragraph().messages.some((message) => message.instructionCode === code);\n }\n default:\n return undefined;\n }\n };\n\n /**\n * Los filtros de un request, como predicado. Un código que el fake no simula da el mensaje del\n * error de host, en vez de ignorarlo.\n */\n const selectionOf = (rq: XmlNode, allowed: readonly string[]): { matches?: (entry: Entry) => boolean; error?: string } => {\n const filters = nodes(rq.Selection).map((selection) => ({ fn: (attr(selection, 'Function') ?? '').toUpperCase(), criteria: attr(selection, 'Criteria') ?? '' }));\n if (filters.length === 0) return {};\n const unsupported = filters.find((filter) => !allowed.includes(filter.fn));\n if (unsupported !== undefined) return { error: `sabre-client/testing: selection ${unsupported.fn} no está simulado (simula ${allowed.join(', ')})` };\n return { matches: (entry) => filters.every((filter) => matchesFilter(entry, filter.fn, filter.criteria) === true) };\n };\n\n /** Con `selection`, deja el cursor en el próximo PNR que cumple. */\n const advance = (session: Session): void => {\n const inside = session.inside;\n if (inside?.matches === undefined) return;\n const entries = queue(inside.key);\n while (inside.index < entries.length && !inside.matches(entries[inside.index]!)) inside.index += 1;\n };\n\n const step = (session: Session): string => {\n advance(session);\n const inside = session.inside;\n const entry = inside === undefined ? undefined : queue(inside.key)[inside.index];\n if (entry === undefined) {\n session.inside = undefined;\n return accessRS(`${results('Complete', success)}<Paragraph>${textLines([END_OF_DISPLAY])}</Paragraph>`);\n }\n if (entry.message !== undefined) {\n return accessRS(`${results('Complete', success)}<Paragraph>${textLines(entry.message)}</Paragraph>`);\n }\n const pnr = pnrs.get(entry.locator)!;\n return accessRS(`${results('Complete', success)}${lineXml(entry)}<Paragraph>${textLines(pnr.paragraph)}</Paragraph>`);\n };\n\n /** Cuántos hay en una cola para `count` y `activity`: sin el PNR en pantalla (producción, #96; CERT, #167). */\n const waiting = (session: Session, key: string, entries: readonly Entry[]): number =>\n entries.length - (session.inside?.key === key && entries[session.inside.index] !== undefined ? 1 : 0);\n\n const countRS = (inner: string): string =>\n `<QueueCountRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.2.1\">${inner}</QueueCountRS>`;\n\n /**\n * `count` de todo el PCC, de una cola o de un rango, como en CERT y producción (#213): con una\n * cola, solo esa y sin `Totals`; con un rango, cada cola, las vacías con `Count=\"0\"`, y los\n * `Totals` del rango. Con `selection` y una cola, cuenta los que cumplen y manda un `Totals` sin\n * `Type` con el total de la cola; sin cola o con un rango, da los errores de Sabre.\n */\n const count = (session: Session, rq: XmlNode): string => {\n const identifier = node(node(rq.QueueInfo)?.QueueIdentifier);\n const pcc = attr(identifier, 'PseudoCityCode') ?? '';\n const countError = (message: string) => countRS(results('NotProcessed', hostResult('Error', message)));\n const range = node(identifier?.Range);\n const requested = requestedKey(identifier);\n const { matches, error } = selectionOf(rq, QUEUE_FAKE_SELECTION_FUNCTIONS);\n if (matches !== undefined || error !== undefined) {\n // Sin cola, o con un rango, Sabre rechaza selection (CERT y producción, #213).\n if (range !== undefined) return countError('KEYS NOT ALLOWED');\n if (requested === undefined) return countError('QUEUE SELECTED NOT VALID OR CLOSED');\n if (error !== undefined) return countError(error);\n }\n const info = (identifiers: readonly string[]) =>\n `${results('Complete', success)}<QueueInfo DateTime=\"${shortDate(now())}\" PseudoCityCode=\"${escape(pcc)}\">${identifiers.join('')}</QueueInfo>`;\n const totalsXml = (messages: number, pnrs: number) =>\n `<Totals Count=\"${messages}\" Type=\"MESSAGES\"/><Totals Count=\"0\" Type=\"SPECIALS\"/><Totals Count=\"${pnrs}\" Type=\"PNRS\"/>`;\n // Con un PNR en pantalla, su cola no lo cuenta (producción, #96).\n const waitingIn = (key: string) => waiting(session, key, queues.get(key) ?? []);\n\n if (range !== undefined) {\n const start = Number(attr(range, 'Start'));\n const end = Number(attr(range, 'End'));\n const identifiers: string[] = [];\n let pnrsTotal = 0;\n for (let number = start; number <= end; number++) {\n const total = waitingIn(String(number));\n identifiers.push(`<QueueIdentifier Count=\"${total}\" Number=\"${number}\"/>`);\n pnrsTotal += total;\n }\n return countRS(`${info(identifiers)}${totalsXml(0, pnrsTotal)}`);\n }\n\n if (requested !== undefined) {\n if (matches === undefined) return countRS(info([`<QueueIdentifier Count=\"${waitingIn(requested)}\" ${keyAttribute(requested)}/>`]));\n // Con selection: los que cumplen, y un Totals sin Type con el total de la cola (#213).\n const onScreen = session.inside?.key === requested ? queue(requested)[session.inside.index] : undefined;\n const matching = (queues.get(requested) ?? []).filter((entry) => entry !== onScreen && matches(entry)).length;\n return countRS(`${info([`<QueueIdentifier Count=\"${matching}\" ${keyAttribute(requested)}/>`])}<Totals Count=\"${waitingIn(requested)}\"/>`);\n }\n\n let pnrsTotal = 0;\n let messages = 0;\n const identifiers: string[] = [];\n for (const [queueKey, entries] of queues) {\n const total = waiting(session, queueKey, entries);\n if (total <= 0) continue;\n identifiers.push(`<QueueIdentifier Count=\"${total}\" ${keyAttribute(queueKey)}/>`);\n // Las alfabéticas (la S) son de mensajes; las numéricas y las con nombre, de PNR.\n if (ALPHA_KEY.test(queueKey)) messages += total;\n else pnrsTotal += total;\n }\n return countRS(`${info(identifiers)}${totalsXml(messages, pnrsTotal)}`);\n };\n\n const access = (session: Session, rq: XmlNode): string => {\n const navigation = attr(rq.Navigation, 'Action');\n if (navigation !== undefined) return navigate(session, rq, navigation);\n\n const identifier = node(rq.QueueIdentifier);\n const key = requestedKey(identifier);\n if (key === undefined) return accessError('sabre-client/testing: QueueIdentifier sin Number ni Name');\n const isList = node(identifier?.List) !== undefined;\n calls.push({ command: isList ? 'list' : 'access', queue: refOfKey(key) });\n\n // En la lista, Sabre acepta solo QD o AK, con este mensaje (producción, #155).\n if (isList && nodes(rq.Selection).some((selection) => !LIST_SELECTION_FUNCTIONS.includes((attr(selection, 'Function') ?? '').toUpperCase()))) {\n return accessError('VALID SELECTION CODE FOR QUEUE LIST ARE QD OR AK');\n }\n const { matches, error } = selectionOf(rq, QUEUE_FAKE_SELECTION_FUNCTIONS);\n if (error !== undefined) return accessError(error);\n const entries = queue(key);\n if (entries.length === 0) return accessError(QUEUE_EMPTY);\n\n if (isList) {\n const passenger = attr(identifier?.List, 'PrimaryPassenger') === 'true';\n // Con selection, las Line que cumplen, renumeradas desde 1. Si ninguna cumple, la respuesta\n // va sin Line (supuesto del fake: no se grabó una lista filtrada vacía).\n const listed = matches === undefined ? entries : entries.filter(matches);\n const lines = listed.map((entry, index) => lineXml(entry, { number: index + 1, passenger })).join('');\n return accessRS(`${results('Complete', success)}${lines}`);\n }\n // Con selection, el recorrido salta los PNR que no cumplen y termina en END OF DISPLAY, como en\n // producción (#155). Si ninguno cumple, END OF DISPLAY al entrar: supuesto del fake.\n session.inside = { key, index: 0, ...(matches === undefined ? {} : { matches }) };\n return step(session);\n };\n\n const navigate = (session: Session, rq: XmlNode, action: string): string => {\n const command = NAVIGATION[action];\n if (command === undefined) return accessError(`sabre-client/testing: Navigation ${action} no está simulado`);\n calls.push({ command });\n const inside = session.inside;\n if (action === 'QXI') {\n if (inside === undefined) return accessError(OFF_QUEUE);\n session.inside = undefined;\n return accessRS(results('Complete', success));\n }\n // Fuera de una cola, producción responde `IGD` a `I`. Se supone lo mismo para `QR`.\n if (inside === undefined) return accessError('IGD');\n const current = queue(inside.key)[inside.index];\n if (current === undefined) return step(session);\n\n if (action === 'I') {\n inside.index += 1;\n return step(session);\n }\n const from = nodes(rq.QueueIdentifier).map((identifier) => requestedKey(identifier) ?? '');\n const targets = from.length === 0 ? [inside.key] : from;\n for (const key of targets) {\n const entries = queue(key);\n const position = key === inside.key ? inside.index : entries.findIndex((entry) => entry.locator === current.locator);\n if (position >= 0 && entries[position]?.locator === current.locator) entries.splice(position, 1);\n }\n // Si no salió de la cola en curso, el cursor avanza como con `I`.\n if (!targets.includes(inside.key)) inside.index += 1;\n return step(session);\n };\n\n const place = (session: Session, rq: XmlNode): string => {\n calls.push({ command: 'place' });\n const info = node(rq.QueueInfo);\n const targets = nodes(info?.QueueIdentifier).map((identifier) => ({\n key: requestedKey(identifier) ?? '',\n pcc: attr(identifier, 'PseudoCityCode'),\n instructionCode: attr(identifier, 'PrefatoryInstructionCode'),\n }));\n const locators = nodes(info?.UniqueID).map((id) => attr(id, 'ID') ?? '');\n const inside = session.inside;\n const moving = inside !== undefined && locators.length === 0;\n\n // Producción pide el PIC siempre, aunque el design lo dé como opcional (#97).\n if (targets.some((target) => target.instructionCode === undefined)) {\n return placeError(moving ? 'NEED INSTRUCTION NUMBER' : 'INSTRUCTION NUMBER NOT IN RANGE');\n }\n for (const target of targets) validateKey(target.key);\n if (targets.some((target) => target.key === MESSAGE_QUEUE)) return placeError('sabre-client/testing: place a la cola S no está simulado');\n\n const at = now();\n const add = (locator: string, target: (typeof targets)[number]): void => {\n const entries = queue(target.key);\n if (entries.some((entry) => entry.locator === locator)) return;\n const code = Number(target.instructionCode);\n entries.push({\n locator,\n placedAt: longDate(at),\n placedBy: target.pcc === undefined ? undefined : { pseudoCityCode: target.pcc },\n ...(Number.isInteger(code) ? { instructionCode: code } : {}),\n });\n };\n\n if (moving) {\n const current = queue(inside.key)[inside.index];\n if (current === undefined) return placeError('sabre-client/testing: no hay PNR en pantalla');\n // El PNR se mueve: sale de la cola en curso y queda en las de destino (#97).\n queue(inside.key).splice(inside.index, 1);\n for (const target of targets) add(current.locator, target);\n advance(session);\n const next = queue(inside.key)[inside.index];\n if (next === undefined) {\n session.inside = undefined;\n return placeRS(results('Complete', `${success}${hostResult('Warning', END_OF_DISPLAY)}`));\n }\n return placeRS(`${results('Complete', success)}${textLines(pnrs.get(next.locator)!.paragraph)}`);\n }\n\n // El fake no lleva el AAA fuera de una cola: sin localizadores no hay qué colocar.\n if (locators.length === 0) return placeError('sabre-client/testing: place fuera de una cola necesita locators');\n if (locators.some((locator) => !pnrs.has(locator))) return placeError('BAD PNR LOCATOR');\n const placements: string[] = [];\n for (const locator of locators) {\n for (const target of targets) {\n add(locator, target);\n const identifier = keyAttribute(target.key, true);\n const pcc = target.pcc === undefined ? '' : ` PseudoCityCode=\"${escape(target.pcc)}\"`;\n placements.push(`<QueueInfo DateTime=\"${shortDate(at)}\"><QueueIdentifier ${identifier}${pcc}/><UniqueID ID=\"${escape(locator)}\"/></QueueInfo>`);\n }\n }\n return placeRS(`${results('Complete', success)}${placements.join('')}`);\n };\n\n // --- Get Queue Activity y Get Itinerary History ------------------------------------------\n\n /**\n * `activity` de todo el PCC, de una cola o de un rango, como en producción (#213): sin filtros,\n * las colas con algún contador; con una cola, solo esa y sin `Totals`; con un rango, cada cola,\n * también las que están en cero, y los `Totals` del rango.\n */\n const analyze = (session: Session, rq: XmlNode): string => {\n calls.push({ command: 'activity' });\n const identifier = node(node(rq.QueueInfo)?.QueueIdentifier);\n const pcc = attr(identifier, 'PseudoCityCode') ?? '';\n const countersOf = (key: string): Record<string, number> => {\n const seeded = activity.get(key) ?? {};\n const counters: Record<string, number> = { NumMessages: waiting(session, key, queues.get(key) ?? []) };\n for (const [name, element] of ACTIVITY_COUNTERS) counters[element] = seeded[name] ?? 0;\n return counters;\n };\n const countersXml = (counters: Record<string, number>) =>\n Object.entries(counters).map(([element, value]) => `<${element} Count=\"${value}\"/>`).join('');\n\n let keys: string[];\n let withTotals = true;\n const range = node(identifier?.Range);\n const requested = requestedKey(identifier);\n if (range !== undefined) {\n keys = [];\n for (let number = Number(attr(range, 'Start')); number <= Number(attr(range, 'End')); number++) keys.push(String(number));\n } else if (requested !== undefined) {\n keys = [requested];\n withTotals = false;\n } else {\n // Las colas del fake y las sembradas, una vez cada una. Como Sabre, se listan también colas\n // vacías con contadores, y no las que están en cero.\n keys = [...new Set([...queues.keys(), ...activity.keys()])].filter((key) => Object.values(countersOf(key)).some((value) => value !== 0));\n }\n\n const totals: Record<string, number> = { NumMessages: 0 };\n for (const [, element] of ACTIVITY_COUNTERS) totals[element] = 0;\n const identifiers = keys.map((key) => {\n const counters = countersOf(key);\n for (const [element, value] of Object.entries(counters)) totals[element] = (totals[element] ?? 0) + value;\n return `<QueueIdentifier ${keyAttribute(key)}>${countersXml(counters)}</QueueIdentifier>`;\n });\n const totalsXml = withTotals ? `<Totals>${countersXml(totals)}</Totals>` : '';\n return `<QueueAnalysisRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.0.0\">${results('Complete', success)}<QueueInfo DateTime=\"${shortDate(now())}\" PseudoCityCode=\"${escape(pcc)}\">${identifiers.join('')}</QueueInfo>${totalsXml}</QueueAnalysisRS>`;\n };\n\n const history = (session: Session, rq: XmlNode): string => {\n const locator = attr(rq.UniqueID, 'ID') ?? '';\n calls.push({ command: 'history', locator });\n const historyRS = (inner: string): string =>\n `<TravelItineraryHistoryRS xmlns=\"${SWS_NAMESPACE}\" xmlns:stl=\"${STL_NAMESPACE}\" Version=\"2.4.0\">${inner}</TravelItineraryHistoryRS>`;\n const historyError = (message: string): string => historyRS(results('NotProcessed', hostResult('Error', message)));\n\n // Dentro de una cola, Sabre rechaza el historial de otro PNR (CERT, Q-102) y acepta el del PNR\n // en pantalla (CERT, #167).\n const inside = session.inside;\n const current = inside === undefined ? undefined : queue(inside.key)[inside.index];\n if (current !== undefined && current.locator !== locator) return historyError(NOT_ALLOWED_INSIDE_QUEUE);\n\n const seeded = histories.get(locator);\n if (seeded !== undefined) return historyRS(`${results('Complete', success)}${seeded.map(historicalInfo).join('')}`);\n if (!pnrs.has(locator)) return historyError(`sabre-client/testing: el PNR ${locator} no está en el fake (qué responde Sabre no está simulado)`);\n const created: QueueFakeHistoryTransaction = { rph: 1, createdAt: longDate(now()), agent: 'AAA', pcc: 'XXXX', receivedFrom: 'SABRE-CLIENT/TESTING' };\n return historyRS(`${results('Complete', success)}${historicalInfo(created)}`);\n };\n\n // --- Ventas del día ---------------------------------------------------------------------\n\n /**\n * `DailySalesSummaryRS`. Los errores forzados van en `Header/Results/Error` con `ErrorCode` y\n * `Message`: es la forma que lee el SDK, armada desde el STL. Ningún error real se grabó todavía.\n */\n const dailySalesSummary = (rq: XmlNode, sessionPcc: string): string => {\n const criteria = node(rq.SelectionCriteria) ?? {};\n const requestedPcc = text(criteria.PseudoCityCode);\n const requestedDate = text(criteria.ReportDate);\n calls.push({ command: 'dailySalesSummary', ...(requestedPcc === undefined ? {} : { pcc: requestedPcc }), ...(requestedDate === undefined ? {} : { date: requestedDate }) });\n const pcc = requestedPcc ?? sessionPcc;\n const date = requestedDate ?? dailySalesDay.format(now());\n const day = dailySales.get(`${pcc} ${date}`) ?? { transactions: [] };\n const namespaces = 'xmlns:asr=\"http://www.sabre.com/ns/Ticketing/AsrServices/1.0\" xmlns:stl=\"http://services.sabre.com/STL/v01\"';\n const resultsXml = (inner: string) => `<asr:Header><stl:Results>${inner}</stl:Results></asr:Header>`;\n const errorXml = (status: string, code: string, message: string) =>\n `<stl:Error type=\"BusinessLogic\" status=\"${escape(status)}\"><stl:System>SABRE-CLIENT-TESTING</stl:System><stl:ErrorCode>${escape(code)}</stl:ErrorCode><stl:Message>${escape(message)}</stl:Message></stl:Error>`;\n if (day.errorCode !== undefined) {\n return `<asr:DailySalesSummaryRS ${namespaces} version=\"1.2.2\">${resultsXml(errorXml('NotProcessed', day.errorCode, `sabre-client/testing: error ${day.errorCode} forzado`))}</asr:DailySalesSummaryRS>`;\n }\n const wanted = text(criteria.DocumentType);\n const transactions = day.transactions.filter(\n (t) => wanted === undefined || t.documentType === wanted || (wanted === 'RFND' && t.documentType === 'RFD'),\n );\n const deferred = day.status === 'deferred' ? { reportId: 'FAKE-REPORT', queryStillRunning: true, ...day.deferred } : undefined;\n const rootAttrs = attrs([\n ['isQueryStillRunning', String(deferred?.queryStillRunning ?? false)],\n ['reportId', deferred?.reportId],\n ['chunkNumber', deferred?.chunkNumber],\n ['maxChunks', deferred?.maxChunks],\n ]);\n const incomplete =\n day.status === 'incomplete' ? errorXml('Incomplete', '0', `The following are the failed transactions : [${(day.failedDocuments ?? []).join(', ')}]`) : '';\n return [\n `<asr:DailySalesSummaryRS ${namespaces} version=\"1.2.2\"${rootAttrs}>`,\n resultsXml(`<stl:Success><stl:System>SABRE-CLIENT-TESTING</stl:System></stl:Success>${incomplete}`),\n `<asr:DSHeader><asr:PseudoCityCode>${escape(pcc)}</asr:PseudoCityCode>${day.agencyName === undefined ? '' : `<asr:AgencyName>${escape(day.agencyName)}</asr:AgencyName>`}</asr:DSHeader>`,\n `<asr:DailySalesReport><asr:ReportDate>${escape(date)}</asr:ReportDate>${transactions.map(transactionXml).join('')}</asr:DailySalesReport>`,\n '</asr:DailySalesSummaryRS>',\n ].join('');\n };\n\n // --- Despacho --------------------------------------------------------------------------\n\n const handle = (raw: string): Reply => {\n let document: XmlNode | undefined;\n try {\n document = node(node(parser.parse(raw))?.Envelope);\n } catch {\n document = undefined;\n }\n const header = node(document?.Header);\n const messageHeader = node(header?.MessageHeader);\n const action = text(messageHeader?.Action) ?? '';\n const conversationId = text(messageHeader?.ConversationId) ?? '';\n const token = text(node(header?.Security)?.BinarySecurityToken);\n const body = node(document?.Body);\n const [, payload] = Object.entries(body ?? {}).find(([name]) => !name.startsWith('@')) ?? [];\n const rq = node(payload) ?? {};\n\n if (action === 'SessionCreateRQ') {\n calls.push({ command: 'open' });\n tokens += 1;\n const newToken = `Shared/IDL:IceSess\\\\/SessMgr:1\\\\.0.IDL/Common/!ICESMS\\\\/FAKE!${tokens}!0`;\n sessions.set(newToken, { conversationId, inside: undefined });\n const version = attr(rq, 'Version') === '2.0.0' ? '2.0.0' : '1.0.0';\n return {\n status: 200,\n body: envelope(\n 'SessionCreateRS',\n conversationId,\n newToken,\n `<SessionCreateRS xmlns=\"http://www.opentravel.org/OTA/2002/11\" version=\"${version}\" status=\"Approved\"><ConversationId>${escape(conversationId)}</ConversationId></SessionCreateRS>`,\n ),\n };\n }\n\n const session = token === undefined ? undefined : sessions.get(token);\n if (session === undefined || token === undefined) return invalidToken(conversationId, token);\n\n switch (action) {\n case 'SessionCloseRQ':\n calls.push({ command: 'close' });\n sessions.delete(token);\n return reply('SessionCloseRS', session, token, '<SessionCloseRS xmlns=\"http://www.opentravel.org/OTA/2002/11\" version=\"1\" status=\"Approved\"/>');\n case 'OTA_PingRQ': {\n calls.push({ command: 'ping' });\n const echo = text(rq.EchoData) ?? '';\n return reply(\n 'OTA_PingRS',\n session,\n token,\n `<OTA_PingRS xmlns=\"http://www.opentravel.org/OTA/2003/05\" TimeStamp=\"${now().toISOString().slice(0, 19)}Z\" Version=\"1.0.0\"><Success/><EchoData>${escape(echo)}</EchoData></OTA_PingRS>`,\n );\n }\n case 'QueueCountLLSRQ':\n calls.push({ command: 'count' });\n return reply('QueueCountLLSRS', session, token, count(session, rq));\n case 'QueueAccessLLSRQ':\n return reply('QueueAccessLLSRS', session, token, access(session, rq));\n case 'QueuePlaceLLSRQ':\n return reply('QueuePlaceLLSRS', session, token, place(session, rq));\n case 'QueueAnalysisLLSRQ':\n return reply('QueueAnalysisLLSRS', session, token, analyze(session, rq));\n case 'TravelItineraryHistoryLLSRQ':\n return reply('TravelItineraryHistoryLLSRS', session, token, history(session, rq));\n case 'TKT_TravelAgencyReportsRQ':\n return reply('TKT_TravelAgencyReportsRS', session, token, dailySalesSummary(rq, text(messageHeader?.CPAId) ?? ''));\n default:\n return {\n status: 500,\n body: envelope(\n 'ErrorRS',\n conversationId,\n token,\n `<soap-env:Fault><faultcode>soap-env:Client.InvalidAction</faultcode><faultstring>sabre-client/testing: ${escape(action)} no está simulado</faultstring></soap-env:Fault>`,\n ),\n };\n }\n };\n\n const rest = createBookingHandler(\n { ...(options.bookings === undefined ? {} : { bookings: options.bookings }), ...(options.ticketing === undefined ? {} : { ticketing: options.ticketing }) },\n now,\n (command, locator) => calls.push({ command, ...(locator === undefined ? {} : { locator }) }),\n );\n\n const fakeFetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const signal = init?.signal ?? (input instanceof Request ? input.signal : undefined);\n signal?.throwIfAborted();\n const raw = typeof init?.body === 'string' ? init.body : input instanceof Request ? await input.text() : String(init?.body ?? '');\n const url = input instanceof Request ? input.url : String(input);\n const restReply = rest(url, raw);\n if (restReply === 'transport') throw new TypeError('fetch failed (sabre-client/testing: fallo de red forzado)');\n if (restReply === 'abort') throw new DOMException('The operation was aborted. (sabre-client/testing: abort forzado)', 'AbortError');\n if (restReply !== undefined) return restReply;\n const { status, body } = handle(raw);\n return new Response(body, { status, headers: { 'Content-Type': 'text/xml;charset=UTF-8' } });\n };\n\n return {\n fetch: fakeFetch as typeof fetch,\n locators: (ref) => (queues.get(queueKey(ref)) ?? []).filter((entry) => entry.message === undefined).map((entry) => entry.locator),\n messages: () => (queues.get(MESSAGE_QUEUE) ?? []).map((entry) => [...(entry.message ?? [])]),\n get calls() {\n return [...calls];\n },\n get openSessions() {\n return sessions.size;\n },\n expireSessions() {\n sessions.clear();\n },\n };\n}\n","// La parte REST del fake de `sabre-client/testing` (F3.1, #242): token, Create, Get y Cancel\n// Booking y Fulfill Flight Tickets, con los desenlaces de ADR-031. Lo usa `createQueueFake`: el\n// mismo `fetch` atiende SOAP y REST, y comparte el reloj y el registro de llamadas.\nimport type { SabreUncertainOutcomeReason } from '../errors/index.js';\n\n/** Un boleto sembrado o emitido por el fake. */\nexport interface QueueFakeTicket {\n number: string;\n /** `TE` vigente (por defecto) o `TV` anulado. */\n ticketStatusCode?: 'TE' | 'TV';\n /** `YYYY-MM-DD`; por defecto, el día de `now()`. */\n date?: string;\n}\n\n/** Una reserva sembrada para Get, Cancel y Fulfill sin pasar por Create. */\nexport interface QueueFakeBooking {\n /** Cuántos vuelos tiene; 1 por defecto. */\n flights?: number;\n tickets?: readonly QueueFakeTicket[];\n}\n\n/** Los rechazos de configuración del PCC vistos en CERT (2026-11-12), como `DOWNLINE_SERVICE_ERROR`. */\nexport type QueueFakeDownlineCause = 'INVALID_TICKET_STOCK' | 'COMMISSION_REQUIRED' | 'HARDCOPY_PRINTER' | 'SECURE_FLIGHT';\n\n/**\n * El desenlace del siguiente `tickets.fulfill`. Sin forzar, emite un boleto `TE` por pasajero\n * (uno por reserva en el fake), o responde `BOOKING_FULFILLED` si la reserva ya tiene boletos\n * vigentes.\n */\nexport type QueueFakeFulfillOutcome =\n | 'issued'\n /** Emite y avisa `PARTIAL_FULFILLMENT`. */\n | 'partial'\n /**\n * Fuerza un incierto. `issued` dice si la reserva queda emitida de verdad, para probar la\n * verificación. Por defecto: sí con `UNABLE_TO_RETRIEVE_TICKETS`, `INTERNAL_SERVER_TIMEOUT`,\n * `NOT_COMMITTED` (el boleto existe pero no aparece en el PNR), `TRANSPORT`, `GATEWAY_5XX`,\n * `UNPARSEABLE` y `ABORTED`; no con `FULFILLMENT_NOT_CONFIRMED`, `DOWNLINE_SERVICE_ERROR` y\n * `PAYMENT_CARD_ISSUE`.\n */\n | { uncertain: Exclude<SabreUncertainOutcomeReason, 'END_TRANSACTION_PROBLEM'>; issued?: boolean }\n /** Un `DOWNLINE_SERVICE_ERROR` de CERT, con su texto real. No emite. */\n | { downline: QueueFakeDownlineCause }\n /** Un error del catálogo de Fulfill que no emite (p. ej. `PRICE_MISMATCH`). */\n | { error: string; description?: string };\n\n/** El desenlace del siguiente `booking.cancel` con `VOID`. */\nexport type QueueFakeVoidOutcome =\n | 'voided'\n /** Fuerza un incierto. `voided` dice si el void se hizo de verdad; por defecto, sí. */\n | { uncertain: 'END_TRANSACTION_PROBLEM' | 'TRANSPORT' | 'GATEWAY_5XX' | 'UNPARSEABLE' | 'ABORTED'; voided?: boolean };\n\n/** Desenlaces forzados, en orden: cada llamada consume el primero que quede. */\nexport interface QueueFakeTicketing {\n fulfill?: readonly QueueFakeFulfillOutcome[];\n void?: readonly QueueFakeVoidOutcome[];\n}\n\n/** Lo que la parte REST registra en `calls`. */\nexport type BookingFakeCommand = 'token' | 'createBooking' | 'getBooking' | 'cancelBooking' | 'fulfill';\n\ninterface Ticket {\n number: string;\n ticketStatusCode: 'TE' | 'TV';\n date: string;\n /** `false`: emitido pero sin guardar en el PNR (*ghost ticket*); Get Booking no lo muestra. */\n committed: boolean;\n}\n\ninterface Booking {\n flights: number;\n tickets: Ticket[];\n}\n\nconst LOCATOR = /^[A-Z0-9]{6}$/;\nconst FULFILL_REASONS = new Set<string>([\n 'UNABLE_TO_RETRIEVE_TICKETS',\n 'FULFILLMENT_NOT_CONFIRMED',\n 'INTERNAL_SERVER_TIMEOUT',\n 'DOWNLINE_SERVICE_ERROR',\n 'PAYMENT_CARD_ISSUE',\n 'NOT_COMMITTED',\n 'TRANSPORT',\n 'GATEWAY_5XX',\n 'UNPARSEABLE',\n 'ABORTED',\n]);\nconst ISSUES_BY_DEFAULT = new Set(['UNABLE_TO_RETRIEVE_TICKETS', 'INTERNAL_SERVER_TIMEOUT', 'NOT_COMMITTED', 'TRANSPORT', 'GATEWAY_5XX', 'UNPARSEABLE', 'ABORTED']);\nconst VOID_REASONS = new Set<string>(['END_TRANSACTION_PROBLEM', 'TRANSPORT', 'GATEWAY_5XX', 'UNPARSEABLE', 'ABORTED']);\nconst DOWNLINE_TEXT: Readonly<Record<QueueFakeDownlineCause, string>> = {\n INVALID_TICKET_STOCK: 'The AirTicketRQ service returned an error: (DesignatePrinterLLSRQ: INVALID TICKET STOCK-0096).',\n COMMISSION_REQUIRED:\n 'The AirTicketRQ service returned an error: (AirTicketLLS failed for /Ticketing[1] with Cause: AirTicketLLSRQ: COMMISSION REQUIRED-0260, TicketingDocumentServicesRQ: No new tickets have been issued).',\n HARDCOPY_PRINTER:\n 'The AirTicketRQ service returned an error: (AirTicketLLS failed for /Ticketing[1] with Cause: AirTicketLLSRQ: ASSIGN HARDCOPY PRINTER FOR ETR DOCUMENTS-USE PTR/-0052, TicketingDocumentServicesRQ: No new tickets have been issued).',\n SECURE_FLIGHT:\n 'The AirTicketRQ service returned an error: (AirTicketLLS failed for /Ticketing[1] with Cause: AirTicketLLSRQ: PASSENGER SECURITY DATA REQUIRED PLEASE UPDATE AND RETRY-1829, TicketingDocumentServicesRQ: No new tickets have been issued).',\n};\nconst UNCERTAIN_TEXT: Readonly<Record<string, [category: string, description: string]>> = {\n UNABLE_TO_RETRIEVE_TICKETS: ['APPLICATION_ERROR', 'Tickets might have been issued successfully but application could not retrieve them. Verify booking details and/or audit trail reports (DQB).'],\n FULFILLMENT_NOT_CONFIRMED: ['WARNING', 'The fulfillment operation cannot be confirmed. No new tickets were found in the booking.'],\n INTERNAL_SERVER_TIMEOUT: ['APPLICATION_ERROR', 'The downline ticketing service exceeded its processing time and the request timed out. Please retry the fulfillment attempt.'],\n DOWNLINE_SERVICE_ERROR: ['APPLICATION_ERROR', 'The AirTicketRQ service returned an error: (AirTicketLLSRQ: UNABLE TO PROCESS).'],\n PAYMENT_CARD_ISSUE: ['APPLICATION_ERROR', 'At least one fulfillment operation was not processed correctly. The transaction was declined due to an invalid card number.'],\n};\n\nfunction fail(message: string): never {\n throw new TypeError(`sabre-client/testing: ${message}`);\n}\n\nconst json = (status: number, body: unknown): Response => new Response(JSON.stringify(body), { status, headers: { 'Content-Type': 'application/json' } });\nconst appError = (type: string, description: string, category = 'APPLICATION_ERROR') => ({ category, type, description });\n\nfunction toTicket(value: unknown, label: string, today: string): Ticket {\n if (typeof value !== 'object' || value === null) fail(`${label} debe ser un objeto`);\n const ticket = value as QueueFakeTicket;\n if (typeof ticket.number !== 'string' || !/^[0-9A-Z]{13}$/.test(ticket.number)) fail(`${label}.number debe ser un número de boleto de 13 caracteres`);\n if (ticket.ticketStatusCode !== undefined && ticket.ticketStatusCode !== 'TE' && ticket.ticketStatusCode !== 'TV') fail(`${label}.ticketStatusCode debe ser TE o TV`);\n return { number: ticket.number, ticketStatusCode: ticket.ticketStatusCode ?? 'TE', date: ticket.date ?? today, committed: true };\n}\n\nfunction validateFulfillOutcome(value: unknown, label: string): QueueFakeFulfillOutcome {\n if (value === 'issued' || value === 'partial') return value;\n if (typeof value !== 'object' || value === null) fail(`${label} debe ser 'issued', 'partial' o un objeto`);\n const outcome = value as Record<string, unknown>;\n if ('uncertain' in outcome) {\n if (!FULFILL_REASONS.has(String(outcome.uncertain))) fail(`${label}.uncertain no es una reason de tickets.fulfill`);\n } else if ('downline' in outcome) {\n if (!(String(outcome.downline) in DOWNLINE_TEXT)) fail(`${label}.downline debe ser ${Object.keys(DOWNLINE_TEXT).join(', ')}`);\n } else if (typeof outcome.error !== 'string' || outcome.error === '') {\n fail(`${label} debe tener uncertain, downline o error`);\n }\n return value as QueueFakeFulfillOutcome;\n}\n\nfunction validateVoidOutcome(value: unknown, label: string): QueueFakeVoidOutcome {\n if (value === 'voided') return value;\n if (typeof value !== 'object' || value === null || !VOID_REASONS.has(String((value as { uncertain?: unknown }).uncertain))) {\n fail(`${label} debe ser 'voided' o { uncertain: ${[...VOID_REASONS].join(' | ')} }`);\n }\n return value as QueueFakeVoidOutcome;\n}\n\n/** El despachador REST del fake. Devuelve `undefined` si la URL no es REST. */\nexport function createBookingHandler(\n options: { bookings?: Readonly<Record<string, QueueFakeBooking>>; ticketing?: QueueFakeTicketing },\n now: () => Date,\n record: (command: BookingFakeCommand, locator?: string) => void,\n): (url: string, body: string) => Response | 'transport' | 'abort' | undefined {\n const today = () => now().toISOString().slice(0, 10);\n const bookings = new Map<string, Booking>();\n for (const [locator, seed] of Object.entries(options.bookings ?? {})) {\n if (!LOCATOR.test(locator)) fail(`bookings['${locator}']: la clave debe ser un localizador de 6 caracteres alfanuméricos en mayúscula`);\n if (typeof seed !== 'object' || seed === null) fail(`bookings['${locator}'] debe ser un objeto`);\n if (seed.flights !== undefined && (!Number.isInteger(seed.flights) || seed.flights < 0)) fail(`bookings['${locator}'].flights debe ser un entero >= 0`);\n if (seed.tickets !== undefined && !Array.isArray(seed.tickets)) fail(`bookings['${locator}'].tickets debe ser una lista`);\n bookings.set(locator, {\n flights: seed.flights ?? 1,\n tickets: (seed.tickets ?? []).map((ticket, index) => toTicket(ticket, `bookings['${locator}'].tickets[${index}]`, today())),\n });\n }\n const ticketing = options.ticketing ?? {};\n if (typeof ticketing !== 'object' || ticketing === null) fail('ticketing debe ser un objeto');\n if (ticketing.fulfill !== undefined && !Array.isArray(ticketing.fulfill)) fail('ticketing.fulfill debe ser una lista');\n if (ticketing.void !== undefined && !Array.isArray(ticketing.void)) fail('ticketing.void debe ser una lista');\n const fulfillQueue = (ticketing.fulfill ?? []).map((outcome, index) => validateFulfillOutcome(outcome, `ticketing.fulfill[${index}]`));\n const voidQueue = (ticketing.void ?? []).map((outcome, index) => validateVoidOutcome(outcome, `ticketing.void[${index}]`));\n\n let created = 0;\n let issuedCount = 0;\n const nextLocator = () => {\n let locator: string;\n do {\n created += 1;\n locator = `FAKE${String.fromCharCode(64 + Math.ceil(created / 26))}${String.fromCharCode(64 + (((created - 1) % 26) + 1))}`;\n } while (bookings.has(locator));\n return locator;\n };\n const nextTicket = (): Ticket => {\n issuedCount += 1;\n return { number: `999${String(issuedCount).padStart(10, '0')}`, ticketStatusCode: 'TE', date: today(), committed: true };\n };\n const ticketJson = (ticket: Ticket) => ({\n number: ticket.number,\n date: ticket.date,\n airlineCode: 'XX',\n travelerIndex: 1,\n flightCoupons: [],\n payment: { total: '100.00', currencyCode: 'USD' },\n ticketStatusName: ticket.ticketStatusCode === 'TE' ? 'Issued' : 'Voided',\n ticketStatusCode: ticket.ticketStatusCode,\n });\n const bookingJson = (locator: string, booking: Booking) => ({\n bookingId: locator,\n startDate: today(),\n isTicketed: booking.tickets.some((ticket) => ticket.committed),\n flights: Array.from({ length: booking.flights }, (_, index) => ({ itemId: String(index + 1), flightNumber: 100 + index, airlineCode: 'XX' })),\n travelers: [{ givenName: 'TEST', surname: 'PASSENGER' }],\n flightTickets: booking.tickets.filter((ticket) => ticket.committed).map(ticketJson),\n });\n const notFound = () => json(200, { errors: [appError('BOOKING_NOT_FOUND', 'Booking cannot be found.', 'RESOURCE_NOT_FOUND')] });\n const parse = (body: string): Record<string, unknown> => {\n try {\n const value: unknown = JSON.parse(body);\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : {};\n } catch {\n return {};\n }\n };\n\n const fulfill = (request: Record<string, unknown>): Response | 'transport' | 'abort' => {\n const locator = String(request.confirmationId ?? '');\n record('fulfill', locator);\n const booking = bookings.get(locator);\n if (booking === undefined) return notFound();\n const outcome = fulfillQueue.shift() ?? 'issued';\n const echo = { ...request };\n const issue = (committed = true): Ticket[] => {\n const ticket = { ...nextTicket(), committed };\n booking.tickets.push(ticket);\n return [ticket];\n };\n const ticketsOut = (tickets: Ticket[]) =>\n tickets.map((ticket) => ({ ...ticketJson(ticket), isCommitted: ticket.committed, travelerGivenName: 'TEST', travelerSurname: 'PASSENGER' }));\n\n if (typeof outcome === 'object' && 'error' in outcome) {\n return json(200, { request: echo, errors: [appError(outcome.error, outcome.description ?? `No new tickets have been issued (${outcome.error}).`)] });\n }\n if (typeof outcome === 'object' && 'downline' in outcome) {\n return json(200, { request: echo, errors: [appError('DOWNLINE_SERVICE_ERROR', DOWNLINE_TEXT[outcome.downline])] });\n }\n if (outcome === 'issued' || outcome === 'partial') {\n if (booking.tickets.some((ticket) => ticket.ticketStatusCode === 'TE')) {\n return json(200, { request: echo, errors: [appError('BOOKING_FULFILLED', 'The fulfillment operation cannot be processed. The booking is already fulfilled.')] });\n }\n const tickets = issue();\n return json(200, {\n timestamp: now().toISOString().slice(0, 19),\n tickets: ticketsOut(tickets),\n request: echo,\n ...(outcome === 'partial'\n ? { warnings: [appError('PARTIAL_FULFILLMENT', 'At least one fulfillment operation was not processed correctly. Ticket issuance was unsuccessful due to a missing form of identification (FOID).', 'WARNING')] }\n : {}),\n });\n }\n const { uncertain: reason } = outcome;\n const issues = outcome.issued ?? ISSUES_BY_DEFAULT.has(reason);\n const tickets = issues ? issue(reason !== 'NOT_COMMITTED') : [];\n switch (reason) {\n case 'TRANSPORT':\n return 'transport';\n case 'ABORTED':\n return 'abort';\n case 'GATEWAY_5XX':\n return json(503, { errorCode: 'ERR.2SG.PROVIDER.ERROR', message: 'sabre-client/testing: 503 forzado' });\n case 'UNPARSEABLE':\n return new Response('<html>sabre-client/testing: cuerpo ilegible forzado</html>', { status: 200 });\n case 'NOT_COMMITTED':\n return json(200, { timestamp: now().toISOString().slice(0, 19), tickets: ticketsOut(tickets), request: echo });\n default: {\n const [category, description] = UNCERTAIN_TEXT[reason]!;\n const item = appError(reason, description, category);\n return json(200, { request: echo, ...(tickets.length > 0 ? { tickets: ticketsOut(tickets) } : {}), ...(category === 'WARNING' ? { warnings: [item] } : { errors: [item] }) });\n }\n }\n };\n\n const cancel = (request: Record<string, unknown>): Response | 'transport' | 'abort' => {\n const locator = String(request.confirmationId ?? '');\n record('cancelBooking', locator);\n const booking = bookings.get(locator);\n if (booking === undefined) return notFound();\n const echo = { errorHandlingPolicy: 'HALT_ON_ERROR', ...request };\n const live = booking.tickets.filter((ticket) => ticket.ticketStatusCode === 'TE');\n if (request.flightTicketOperation === 'VOID') {\n if (live.length === 0) {\n return json(200, {\n request: echo,\n errors: [\n appError('NO_ITEMS_CANCELLED', 'Nothing was cancelled - cancellation was interrupted due to errors', 'WARNING'),\n appError('UNABLE_TO_VOID_TICKET', 'Unable to void ticket.', 'CANCELLATION_ERROR'),\n ],\n });\n }\n const outcome = voidQueue.shift() ?? 'voided';\n const voids = outcome === 'voided' || outcome.voided !== false;\n if (voids) {\n for (const ticket of live) ticket.ticketStatusCode = 'TV';\n if (request.cancelAll === true) booking.flights = 0;\n }\n const voidedTickets = voids ? live.map((ticket) => ticket.number) : [];\n if (outcome !== 'voided') {\n switch (outcome.uncertain) {\n case 'TRANSPORT':\n return 'transport';\n case 'ABORTED':\n return 'abort';\n case 'GATEWAY_5XX':\n return json(503, { errorCode: 'ERR.2SG.PROVIDER.ERROR', message: 'sabre-client/testing: 503 forzado' });\n case 'UNPARSEABLE':\n return new Response('<html>sabre-client/testing: cuerpo ilegible forzado</html>', { status: 200 });\n case 'END_TRANSACTION_PROBLEM':\n return json(200, { request: echo, voidedTickets, errors: [appError('END_TRANSACTION_PROBLEM', 'Confirmation is pending. Redisplay the booking', 'WARNING')] });\n }\n }\n return json(200, {\n timestamp: now().toISOString().slice(0, 19),\n request: echo,\n voidedTickets,\n ...(request.retrieveBooking === true ? { booking: bookingJson(locator, booking) } : {}),\n });\n }\n if (request.cancelAll === true) booking.flights = 0;\n return json(200, { timestamp: now().toISOString().slice(0, 19), request: echo, ...(request.retrieveBooking === true ? { booking: bookingJson(locator, booking) } : {}) });\n };\n\n return (url, body) => {\n const path = new URL(url, 'https://fake.invalid').pathname;\n if (path.endsWith('/auth/token')) {\n record('token');\n return json(200, { access_token: 'FAKE-TOKEN', token_type: 'bearer', expires_in: 604800 });\n }\n if (!path.startsWith('/v1/trip/orders/')) return undefined;\n const request = parse(body);\n switch (path.slice('/v1/trip/orders/'.length)) {\n case 'createBooking': {\n const locator = nextLocator();\n record('createBooking', locator);\n const flights = ((request.flightDetails as { flights?: unknown[] } | undefined)?.flights ?? []).length;\n bookings.set(locator, { flights: flights > 0 ? flights : 1, tickets: [] });\n return json(200, { timestamp: now().toISOString().slice(0, 19), confirmationId: locator, request });\n }\n case 'getBooking': {\n const locator = String(request.confirmationId ?? '');\n record('getBooking', locator);\n const booking = bookings.get(locator);\n return booking === undefined ? notFound() : json(200, bookingJson(locator, booking));\n }\n case 'cancelBooking':\n return cancel(request);\n case 'fulfillFlightTickets':\n return fulfill(request);\n default:\n return json(404, { errorCode: 'ERR.2SG.NOT_FOUND', message: `sabre-client/testing: ${path} no está simulado` });\n }\n };\n}\n","// Access Queue (`QueueAccessLLSRQ` 2.1.1): entrar a una cola y navegarla. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (puntos 2, 3 y 4) y\n// wiki/sources/access-queue-v2-1-1-design.md.\nimport { XMLParser } from 'fast-xml-parser';\nimport type { RequestOptions } from '../air/bargain-finder-max.js';\nimport { SabreBusinessError, SabreGatewayError, type SabreWarning } from '../errors/index.js';\nimport { asArray, respondedAtField, type SoapResponse, textOf, xmlEscape } from '../http/soap-transport.js';\nimport type { SessionRequest } from '../session/session.js';\nimport { type QueueRef, queueRefAttribute } from './queue-ref.js';\n\nexport const QUEUE_ACCESS_SERVICE = 'queueAccess';\nconst NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\n\n/** Texto exacto del fin de cola. Es la respuesta normal cuando no queda ningún PNR. */\nexport const END_OF_DISPLAY = 'END OF DISPLAY FOR REQUESTED DATA';\n/**\n * Una cola vacía, como `stl:Error` de `access` y `list` (producción, #96). Las fuentes solo\n * mostraban `END OF DISPLAY`.\n */\nexport const QUEUE_EMPTY = 'QUEUE SELECTED WAS EMPTY';\n/** `QXI` con la sesión fuera de una cola, como `stl:Error` (producción, #96). */\nexport const OFF_QUEUE = 'CANNOT DO THIS IF OFF QUEUE';\n\n/** Por qué terminó la cola: el fin de cola de siempre o una cola vacía al entrar. */\nexport type QueueEndReason = 'end-of-display' | 'empty';\n\n/** Máximo de filtros de `selection` y de colas de `remove({ from })`, según el design 2.1.1. */\nexport const MAX_SELECTIONS = 8;\nexport const MAX_REMOVE_FROM = 3;\n\n/**\n * Un filtro al entrar a una cola: un calificador de host, p. ej. `{ function: 'AL', criteria: 'DL' }`\n * (solo los PNR de esa aerolínea). Las reglas de combinación las valida Sabre.\n */\nexport interface QueueSelection {\n function: string;\n criteria: string;\n}\n\nexport interface QueueAccessRequest {\n queue: QueueRef;\n /** PCC de la cola. Por defecto, el de la sesión. */\n pcc?: string;\n /** Hasta 8 filtros. Con selección, la cola abre solo los PNR que cumplen el criterio. */\n selection?: readonly QueueSelection[];\n}\n\n/** Una cola de la que `remove` saca el PNR actual. */\nexport interface QueueRemoveTarget {\n queue: QueueRef;\n /** Por defecto, el PCC de la sesión. */\n pcc?: string;\n}\n\nexport interface QueueRemoveRequest {\n /** De 1 a 3 colas de las que sacar el PNR actual a la vez. Sin `from`, sale de la cola en curso. */\n from?: readonly QueueRemoveTarget[];\n}\n\nexport type QueueAccessOptions = RequestOptions;\nexport type QueueNavigationOptions = RequestOptions;\n\n/** El PNR en el que quedó parada la cola. */\nexport interface QueueItem {\n /** Localizador: `Line/UniqueID@ID`. */\n locator: string;\n /**\n * `Line/DateTime`, tal cual llegó: con año en las respuestas reales (`\"2024-05-15T13:24\"`), sin\n * año en el design (`\"12-21T07:00\"`). Al entrar a una cola (`access`, `ignore`, `remove`, `place`)\n * es la **última modificación del PNR**, no la colocación en la cola: para un mismo PNR no\n * coincide con el de `list`, que sí es la colocación (producción, #96 y #155). Se devuelve tal cual.\n */\n placedAt?: string;\n /** `Line/POS/Source`: quién colocó el PNR. `agentSine` puede ser `SABRE`. */\n placedBy?: { agentSine?: string; pseudoCityCode?: string };\n /** `Line/PassengerName`. Las respuestas reales de entrar a una cola no lo traen. */\n primaryPassenger?: string;\n /** `Line/Group`. Las respuestas reales de entrar a una cola no lo traen. */\n group?: string;\n /**\n * `Paragraph/Text`: el PNR en formato de host, línea por línea y tal cual, con su sangría. Las\n * líneas vacías llegan como `\"\"`. Se interpreta con `parseQueueParagraph`.\n */\n paragraph: readonly string[];\n}\n\n/**\n * Un mensaje de la cola `S`, la de mensajes del PCC (ADR-028). No es un PNR: no trae localizador\n * ni datos de colocación, solo texto libre.\n */\nexport interface QueueMessage {\n /** `Paragraph/Text`, línea por línea y tal cual, con su sangría. */\n text: string[];\n}\n\n/**\n * Resultado de una operación que avanza en la cola. Lo que queda en pantalla se distingue por\n * `kind`: un PNR (`'pnr'`, en las colas numéricas y con nombre) o un mensaje (`'message'`, en la\n * cola `S`). El fin de cola es un resultado, no un error: `END OF DISPLAY FOR REQUESTED DATA`\n * llega como `{ done: true }`, también al entrar a una cola vacía, y deja la sesión fuera de la\n * cola.\n */\nexport type QueueStep =\n | { done: false; kind: 'pnr'; item: QueueItem; warnings: SabreWarning[]; respondedAt?: string }\n | { done: false; kind: 'message'; message: QueueMessage; warnings: SabreWarning[]; respondedAt?: string }\n | { done: true; reason: QueueEndReason; message: string; warnings: SabreWarning[]; respondedAt?: string };\n\n/** Qué acción de navegación se manda en `Navigation@Action`. */\ntype NavigationAction = 'I' | 'QR' | 'QXI';\n\nconst OPERATIONS: Record<NavigationAction, string> = { I: 'queue.ignore', QR: 'queue.remove', QXI: 'queue.exit' };\n\nfunction root(body: string): string {\n return `<QueueAccessRQ Version=\"2.1.1\" xmlns=\"${NAMESPACE}\">${body}</QueueAccessRQ>`;\n}\n\nfunction identifier(queue: QueueRef, pcc: string): string {\n return `<QueueIdentifier ${queueRefAttribute(queue)} PseudoCityCode=\"${xmlEscape(pcc)}\"/>`;\n}\n\n/** Los `Selection`, hermanos de `QueueIdentifier`. Los usan `access` y `list`. */\nexport function selectionXml(selection: readonly QueueSelection[]): string {\n return selection\n .map((filter) => `<Selection Function=\"${xmlEscape(filter.function)}\" Criteria=\"${xmlEscape(filter.criteria)}\"/>`)\n .join('');\n}\n\n/** `Q/<PCC><cola>`, con los filtros de `Selection` si los hay. */\nexport function queueAccessPayload(queue: QueueRef, pcc: string, selection: readonly QueueSelection[] = []): string {\n return root(`${identifier(queue, pcc)}${selectionXml(selection)}`);\n}\n\n/** `Navigation@Action`. Solo `QR` lleva `QueueIdentifier`: las colas de las que sacar el PNR. */\nexport function queueNavigationPayload(action: NavigationAction, from: ReadonlyArray<{ queue: QueueRef; pcc: string }> = []): string {\n return root(`<Navigation Action=\"${action}\"/>${from.map((target) => identifier(target.queue, target.pcc)).join('')}`);\n}\n\n/**\n * Las operaciones de Access Queue mueven el cursor: no se reintentan ante un fallo de red. El\n * transporte solo las repite ante `USG_*_BUSY` y `PREVIOUS ENTRY ACTIVE`.\n */\nexport function queueAccessRequest(payload: string, operation: string, options: RequestOptions): SessionRequest {\n return { service: QUEUE_ACCESS_SERVICE, action: 'QueueAccessLLSRQ', payload, idempotent: false, operation, ...options };\n}\n\nexport function navigationOperation(action: NavigationAction): string {\n return OPERATIONS[action];\n}\n\n/**\n * Parser aparte para el `Paragraph`: el del transporte recorta los espacios, y el formato de host\n * usa la sangría. Se vuelve a leer el sobre (ya redactado) sin recortar.\n */\nconst paragraphParser = new XMLParser({\n ignoreAttributes: true,\n removeNSPrefix: true,\n parseTagValue: false,\n trimValues: false,\n processEntities: true,\n isArray: (name) => name === 'Text',\n});\n\nexport type XmlNode = Record<string, unknown>;\n\nexport function node(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return node(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nexport function attribute(value: unknown, name: string): string | undefined {\n const text = node(value)?.[`@${name}`];\n return typeof text === 'string' && text.trim() !== '' ? text.trim() : undefined;\n}\n\nfunction element(value: unknown): string | undefined {\n const text = textOf(Array.isArray(value) ? value[0] : value)?.trim();\n return text === undefined || text === '' ? undefined : text;\n}\n\n/**\n * Las líneas `Text` de una respuesta, tal cual: las de `Paragraph` en `QueueAccessRS` y las del\n * primer nivel en `QueuePlaceRS`.\n */\nexport function textLines(raw: string, payloadName: 'QueueAccessRS' | 'QueuePlaceRS'): string[] {\n let parsed: unknown;\n try {\n parsed = paragraphParser.parse(raw);\n } catch {\n return [];\n }\n const payload = node(node(node(node(parsed)?.Envelope)?.Body)?.[payloadName]);\n const container = payloadName === 'QueueAccessRS' ? node(payload?.Paragraph) : payload;\n return asArray(container?.Text).map((line) => (typeof line === 'string' ? line : (textOf(line) ?? '')));\n}\n\n/** Las líneas de `Paragraph/Text` de un `QueueAccessRS`, tal cual. */\nexport function paragraphLines(raw: string): string[] {\n return textLines(raw, 'QueueAccessRS');\n}\n\n/** Si un texto de Sabre es el fin de cola, comparado por el texto exacto. */\nexport function isEndOfDisplay(text: string | undefined): boolean {\n return text?.trim() === END_OF_DISPLAY;\n}\n\n/**\n * Si un `stl:Warning` o `stl:Error` es el fin de cola. El transporte junta los `Message` con\n * `\" / \"` y agrega el `ShortText` entre paréntesis, así que se busca el texto como una de esas\n * partes, entero.\n */\nexport function isEndOfDisplayResult(error: { message: string; service: string }): boolean {\n return resultHasText(error, END_OF_DISPLAY);\n}\n\n/** Si un `stl:Warning` o `stl:Error` trae `text` como una de sus partes, entero. */\nexport function resultHasText(error: { message: string; service: string }, text: string): boolean {\n const prefix = `${error.service}: `;\n const description = error.message.startsWith(prefix) ? error.message.slice(prefix.length) : error.message;\n return description\n .split(/ \\/ | \\(|\\)/)\n .some((part) => part.trim() === text);\n}\n\n/**\n * El fin de cola, si llegó como `stl:Error` de `service`: `END OF DISPLAY` o una cola vacía\n * (`QUEUE SELECTED WAS EMPTY`). Si no, `undefined`.\n */\nexport function queueEndError(error: unknown, service: string): { reason: QueueEndReason; error: SabreBusinessError } | undefined {\n if (!(error instanceof SabreBusinessError) || error.service !== service) return undefined;\n const results = [error, ...error.errors];\n if (results.some((result) => resultHasText(result, QUEUE_EMPTY))) return { reason: 'empty', error };\n if (results.some(isEndOfDisplayResult)) return { reason: 'end-of-display', error };\n return undefined;\n}\n\n/** Si el error es el de `QXI` con la sesión fuera de una cola. */\nexport function isOffQueueError(error: unknown): error is SabreBusinessError {\n return error instanceof SabreBusinessError && [error, ...error.errors].some((result) => resultHasText(result, OFF_QUEUE));\n}\n\n/** El fin de cola. `raw` es el sobre del que sale `respondedAt`: la respuesta o el `stl:Error`. */\nexport function endStep(warnings: SabreWarning[], reason: QueueEndReason = 'end-of-display', raw?: unknown): QueueStep {\n return { done: true, reason, message: reason === 'empty' ? QUEUE_EMPTY : END_OF_DISPLAY, warnings, ...respondedAtField(raw) };\n}\n\n/**\n * Lee el paso de un `QueueAccessRS`. El fin de cola llega como primera línea del `Paragraph`\n * (evidencia de `1.0.8`, y la cola `S` en CERT) o como `stl:Warning`. Con `messages` (la sesión\n * está en la cola `S`), un `Paragraph` sin `Line` es un mensaje (CERT, 2026-11-06). Fuera de la\n * `S`, un `Line` sin localizador es una respuesta que el SDK no entiende: lanza\n * `SabreGatewayError`. En la `S`, un `Line` con localizador también lanza.\n */\nexport function parseQueueStep(response: SoapResponse, { messages = false }: { messages?: boolean } = {}): QueueStep {\n const { warnings } = response;\n const paragraph = paragraphLines(response.raw);\n const firstLine = paragraph.find((line) => line.trim() !== '');\n if (isEndOfDisplay(firstLine) || warnings.some(isEndOfDisplayResult)) return endStep(warnings, 'end-of-display', response.raw);\n\n if (messages && response.payload.Line === undefined && firstLine !== undefined) {\n return { done: false, kind: 'message', message: { text: paragraph }, warnings, ...respondedAtField(response.raw) };\n }\n const fields = messages ? undefined : lineFields(response.payload.Line);\n if (fields === undefined) {\n const expected = messages ? 'sin Paragraph de mensaje ni fin de cola en la cola S' : 'sin Line/UniqueID ni fin de cola';\n throw new SabreGatewayError(`${QUEUE_ACCESS_SERVICE}: respuesta no reconocida (${expected})`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: response.raw,\n });\n }\n const item: QueueItem = { ...fields, paragraph };\n return { done: false, kind: 'pnr', item, warnings, ...respondedAtField(response.raw) };\n}\n\n/** Los campos de un `Line`, o `undefined` si no trae `UniqueID`. */\nexport function lineFields(value: unknown): Omit<QueueItem, 'paragraph'> | undefined {\n const line = node(value);\n const locator = attribute(line?.UniqueID, 'ID');\n if (line === undefined || locator === undefined) return undefined;\n const source = node(node(line.POS)?.Source);\n const agentSine = attribute(source, 'AgentSine');\n const pseudoCityCode = attribute(source, 'PseudoCityCode');\n const placedAt = element(line.DateTime);\n const primaryPassenger = element(line.PassengerName);\n const group = element(line.Group);\n return {\n locator,\n ...(placedAt === undefined ? {} : { placedAt }),\n ...(agentSine === undefined && pseudoCityCode === undefined\n ? {}\n : {\n placedBy: {\n ...(agentSine === undefined ? {} : { agentSine }),\n ...(pseudoCityCode === undefined ? {} : { pseudoCityCode }),\n },\n }),\n ...(primaryPassenger === undefined ? {} : { primaryPassenger }),\n ...(group === undefined ? {} : { group }),\n };\n}\n","// Transporte SOAP de `SabreLegacy`: sobre armado a mano, fetch, parseo y mapeo de errores.\n// Ver sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (puntos 4 y 6),\n// cliente-http-y-libreria-xml.md y respuesta-cruda-soap.md.\nimport { XMLParser } from 'fast-xml-parser';\nimport { definedOnly, type ResolvedConfig } from '../config.js';\nimport { SabreBusinessError, SabreGatewayError, SabreWarning } from '../errors/index.js';\nimport { EventLogger } from '../logging/logger.js';\nimport { REDACTED, redactSoapEnvelope } from '../logging/redact.js';\nimport { type RawRequestCapture, rawRequestHeaders, type SabreRawRequestCallback } from './raw-request.js';\nimport type { SabreRawResponseCallback } from './raw-response.js';\nimport { type RetryOptions, retryDelay, sleep, validateRetryOptions } from './retry.js';\n\n/**\n * Status HTTP transitorios cuando la respuesta no trae un sobre SOAP (proxy, balanceador).\n * Solo se reintentan en operaciones idempotentes.\n */\nconst TRANSIENT_STATUS = new Set([429, 500, 503, 504]);\n\n/**\n * \"Se excedió el máximo de requests concurrentes: esperar ≥ 500 ms y reintentar\". Se asume que\n * Sabre no procesó el request, así que se reintentan también en las operaciones que mueven el\n * cursor. Sin confirmar: se valida en la Fase 4.\n */\nexport const BUSY_CODES: ReadonlySet<string> = new Set(['USG_CONNECTOR_IS_BUSY', 'USG_IS_BUSY', 'USG_SERVICE_IS_BUSY']);\n\n/**\n * Los demás `USG_*` que el catálogo manda a \"esperar ≥ 500 ms y reintentar\". No dicen si el\n * request se procesó, así que solo se reintentan en operaciones idempotentes.\n * `USG_RESOURCE_UNAVAILABLE` (límite de sesiones) no está: no se reintenta.\n */\nconst TRANSIENT_CODES: ReadonlySet<string> = new Set([\n 'USG_SECURITY_ICE_ERROR',\n 'USG_SERVICE_PROVIDER_ERROR',\n 'USG_NO_RESPONSE_FROM_JMSRECEIVER_IN_TIME',\n 'SC_SERVICE_UNAVAILABLE',\n 'USG_COULD_NOT_COMPLETE_REQUEST',\n 'USG_IIOP_OBJECT_NOT_EXIST',\n 'USG_IIOP_TRANSIENT_EXCEPTION',\n 'USG_MOM_SERVICE_PROVIDER_INFRASTRUCTURE_ERROR',\n]);\n\n/** Esquema fijo que documenta Sabre: 3 reintentos con 1 s de intervalo, sin jitter. */\nexport const PREVIOUS_ENTRY_ACTIVE_RETRIES = 3;\nexport const PREVIOUS_ENTRY_ACTIVE_DELAY_MS = 1000;\nconst PREVIOUS_ENTRY_ACTIVE = /PREVIOUS ENTRY ACTIVE/i;\n\ntype RetryReason = 'busy' | 'previous-entry-active' | 'transient';\n\n/** Credencial del header `wsse:Security`. */\nexport type SoapSecurity =\n /** Token de sesión (ATH) o stateless (ATK). */\n | { binarySecurityToken: string }\n /** Credenciales de `SessionCreateRQ`. `clientId` y `clientSecret` solo van en la 2.0.0. */\n | {\n usernameToken: {\n username: string;\n password: string;\n organization: string;\n domain: string;\n clientId?: string;\n clientSecret?: string;\n };\n };\n\nexport interface SoapRequest {\n /** Nombre del servicio para errores y logs, p. ej. `'queueAccess'`. */\n service: string;\n /** `eb:Service` y `eb:Action`, p. ej. `'QueueAccessLLSRQ'`. */\n action: string;\n /** Payload del `soap-env:Body`, ya armado y escapado (ver `xmlEscape`). */\n payload: string;\n /** `eb:CPAId`: el PCC. */\n cpaId: string;\n /** `eb:ConversationId` de la sesión. */\n conversationId: string;\n security: SoapSecurity;\n /**\n * Si la operación se puede repetir sin efectos (`count`, `list`, `ping`). Las que mueven el\n * cursor de una cola van en `false`: nunca se reintentan ante un fallo de red.\n */\n idempotent: boolean;\n retry?: Partial<RetryOptions>;\n /** `true` para devolver el `BinarySecurityToken` de la respuesta (solo `SessionCreateRQ`). */\n readSecurityToken?: boolean;\n signal?: AbortSignal;\n /** Método público sin `legacy.`, p. ej. `'queue.access'`. Lo reciben `onRawResponse` y `onRawRequest`. */\n operation?: string;\n onRawResponse?: SabreRawResponseCallback;\n /**\n * No se llama con `usernameToken` (`SessionCreateRQ`): el sobre lleva `wsse:Password` y el\n * `ClientSecret`, y la regla de auth lo deja fuera (ADR-029).\n */\n onRawRequest?: SabreRawRequestCallback;\n}\n\nexport interface SoapResponse {\n /** Elemento hijo del `Body` (p. ej. `QueueAccessRS`), parseado y sin prefijos de namespace. */\n payload: Record<string, unknown>;\n /** Nombre local de ese elemento, p. ej. `'QueueAccessRS'`. */\n payloadName: string;\n /** Los `stl:Warning` de `stl:ApplicationResults`. */\n warnings: SabreWarning[];\n /** `eb:MessageId` de la respuesta, el dato que pide soporte de Sabre. */\n messageId: string | undefined;\n /** `eb:Timestamp` de la respuesta, en UTC con `Z` (ver `respondedAtOf`). */\n respondedAt: string | undefined;\n /** El sobre redactado, como `raw` de los errores que arme la operación al leer el payload. */\n raw: string;\n /** El `BinarySecurityToken` del header, solo con `readSecurityToken`. */\n securityToken: string | undefined;\n status: number;\n}\n\nexport interface SoapTransportOptions {\n /** Solo para tests: id del `eb:MessageId`. */\n messageId?: () => string;\n /** Solo para tests: reloj del `eb:Timestamp`. */\n now?: () => Date;\n /** Solo para tests: fuente de aleatoriedad del jitter. */\n random?: () => number;\n /** Solo para tests: espera entre reintentos. */\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\n/**\n * Último intento con respuesta HTTP (`last`), para entregarlo una sola vez a `onRawResponse`, y\n * último sobre mandado (`request`), para `onRawRequest`.\n */\ninterface RawCapture {\n attempts: number;\n last?: { status: number; headers: Headers; body: string };\n request?: RawRequestCapture;\n}\n\nconst SOAP_HEADERS = { 'Content-Type': 'text/xml; charset=utf-8', Accept: 'text/xml' } as const;\n\ntype XmlNode = Record<string, unknown>;\n\n/**\n * Atributos con `@`, sin prefijos de namespace y todo como string: `\"011\"` y `\"....261\"`\n * llegan tal cual, para que cada servicio decida cómo leerlos.\n */\nconst PARSER_OPTIONS = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n removeNSPrefix: true,\n parseTagValue: false,\n parseAttributeValue: false,\n processEntities: true,\n} as const;\nconst parser = new XMLParser(PARSER_OPTIONS);\n/** Igual, pero sin recortar los textos: solo para lo que depende de los espacios. */\nconst untrimmedParser = new XMLParser({ ...PARSER_OPTIONS, trimValues: false });\n\nexport class SoapTransport {\n readonly #config: ResolvedConfig;\n readonly #log: EventLogger;\n readonly #messageId: () => string;\n readonly #now: () => Date;\n readonly #random: () => number;\n readonly #sleep: (ms: number, signal?: AbortSignal) => Promise<void>;\n\n constructor(config: ResolvedConfig, options: SoapTransportOptions = {}) {\n this.#config = config;\n this.#log = new EventLogger(config.logger);\n this.#messageId = options.messageId ?? (() => globalThis.crypto.randomUUID());\n this.#now = options.now ?? (() => new Date());\n this.#random = options.random ?? Math.random;\n this.#sleep = options.sleep ?? sleep;\n }\n\n /** @internal Para los eventos de sesión que no son una request. */\n get log(): EventLogger {\n return this.#log;\n }\n\n async request(request: SoapRequest): Promise<SoapResponse> {\n if (request.retry !== undefined) validateRetryOptions(request.retry, 'retry');\n const capture: RawCapture = { attempts: 0 };\n try {\n return await this.#attempts(request, capture);\n } finally {\n // Una sola vez por operación: primero el último sobre que se mandó, aunque no haya tenido\n // respuesta, y después el último intento que tuvo respuesta HTTP.\n if (capture.request !== undefined) this.#deliverRawRequest(request, capture.request, capture.attempts);\n if (capture.last !== undefined) this.#deliverRaw(request, { ...capture.last, attempts: capture.attempts });\n }\n }\n\n /**\n * Dos presupuestos separados: el backoff genérico (`retry.maxRetries`, para `USG_*_BUSY` y\n * los transitorios) y el esquema fijo de `PREVIOUS ENTRY ACTIVE`, que no se ajusta a la config.\n */\n async #attempts(request: SoapRequest, capture: RawCapture): Promise<SoapResponse> {\n const retry = { ...this.#config.retry, ...definedOnly(request.retry ?? {}) };\n let generic = 0;\n let previousEntryActive = 0;\n for (let attempt = 0; ; attempt++) {\n try {\n return await this.#send(request, attempt, capture);\n } catch (error) {\n const reason = retryReason(error, request.idempotent);\n let delayMs: number;\n if (reason === 'previous-entry-active' && previousEntryActive < PREVIOUS_ENTRY_ACTIVE_RETRIES) {\n previousEntryActive++;\n delayMs = PREVIOUS_ENTRY_ACTIVE_DELAY_MS;\n } else if ((reason === 'busy' || reason === 'transient') && generic < retry.maxRetries) {\n delayMs = retryDelay(generic, retry.baseDelayMs, this.#random);\n generic++;\n } else {\n throw error;\n }\n this.#log.emit('warn', 'sabre.request.retry', {\n protocol: 'soap',\n service: request.service,\n action: request.action,\n attempt: attempt + 1,\n reason,\n delayMs,\n error: error as SabreGatewayError,\n });\n await this.#sleep(delayMs, request.signal);\n }\n }\n }\n\n async #send(request: SoapRequest, attempt: number, capture: RawCapture): Promise<SoapResponse> {\n const envelope = this.#envelope(request);\n const logContext = { protocol: 'soap', service: request.service, action: request.action, attempt };\n this.#log.emit('debug', 'sabre.request.start', logContext);\n const startedAt = Date.now();\n\n let response: Response;\n capture.attempts++;\n if (wantsRawRequest(request)) {\n // eb:MessageId y eb:Timestamp se generan en cada intento: se guarda el último sobre.\n capture.request = {\n method: 'POST',\n url: this.#config.soapBaseUrl,\n headers: rawRequestHeaders(SOAP_HEADERS),\n body: redactSoapEnvelope(scrubToken(envelope, request.security)),\n };\n }\n try {\n response = await this.#config.fetch(this.#config.soapBaseUrl, {\n method: 'POST',\n headers: SOAP_HEADERS,\n body: envelope,\n ...(request.signal === undefined ? {} : { signal: request.signal }),\n });\n } catch (cause) {\n if (isAbort(cause, request.signal)) throw cause;\n const error = new SabreGatewayError(`${request.service}: fallo de red (${describe(cause)})`, {\n protocol: 'soap',\n retryable: false,\n cause,\n });\n this.#log.emit('error', 'sabre.request.end', { ...logContext, durationMs: Date.now() - startedAt, error });\n throw error;\n }\n\n const original = await response.text();\n // Todo lo que sale del transporte (raw, errores, logs) se arma desde el texto redactado.\n const text = redactSoapEnvelope(scrubToken(original, request.security));\n capture.last = { status: response.status, headers: response.headers, body: text };\n\n const document = parseEnvelope(text);\n const messageId = stringAt(document?.Header, 'MessageHeader', 'MessageData', 'MessageId');\n const endContext = {\n ...logContext,\n status: response.status,\n durationMs: Date.now() - startedAt,\n ...(messageId === undefined ? {} : { messageId }),\n };\n\n try {\n const result = this.#classify(request, response, document, text);\n this.#log.emit('info', 'sabre.request.end', { ...endContext, warnings: result.warnings.length });\n return {\n ...result,\n messageId,\n respondedAt: respondedAtOf(text),\n raw: text,\n securityToken: request.readSecurityToken === true ? readSecurityToken(original) : undefined,\n status: response.status,\n };\n } catch (error) {\n const level = error instanceof SabreBusinessError ? 'warn' : 'error';\n this.#log.emit(level, 'sabre.request.end', { ...endContext, error });\n throw error;\n }\n }\n\n /** Orden de detección: fault (gateway), luego `stl:Error` (negocio), luego data. */\n #classify(\n request: SoapRequest,\n response: Response,\n document: { Header: unknown; Body: XmlNode } | undefined,\n text: string,\n ): Pick<SoapResponse, 'payload' | 'payloadName' | 'warnings'> {\n const { service } = request;\n if (document === undefined) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}, la respuesta no es un sobre SOAP`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n\n // Paso 1: SOAP fault (errores de `Transport` y `Validation`, y los `USG_*` del gateway).\n const fault = asNode(document.Body.Fault);\n if (fault !== undefined) throw faultError(service, response.status, fault, text);\n\n const [payloadName, payloadValue] = firstElement(document.Body);\n const payload = asNode(payloadValue);\n if (payloadName === undefined || payload === undefined) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}, el sobre SOAP no trae payload`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n if (!response.ok) {\n throw new SabreGatewayError(`${service}: HTTP ${response.status}`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: text,\n });\n }\n\n // Paso 3: `stl:ApplicationResults`. Los `stl:Warning` no lanzan.\n const results = asNode(payload.ApplicationResults);\n const warnings = asArray(results?.Warning).map((node) => {\n const entry = resultEntry(node);\n return new SabreWarning(`${service}: ${entry.description}`, { service, code: entry.code, raw: text });\n });\n const errors = asArray(results?.Error).map((node) => {\n const entry = resultEntry(node);\n return new SabreBusinessError(`${service}: ${entry.description}`, {\n service,\n code: entry.code,\n raw: text,\n retryable: PREVIOUS_ENTRY_ACTIVE.test(entry.description),\n });\n });\n const [first, ...rest] = errors;\n if (first !== undefined) {\n throw new SabreBusinessError(first.message, {\n service,\n code: first.code,\n raw: text,\n retryable: first.retryable,\n warnings,\n errors: rest,\n });\n }\n\n // Paso 4: data.\n return { payload, payloadName, warnings };\n }\n\n #envelope(request: SoapRequest): string {\n const timestamp = this.#now().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<soap-env:Envelope xmlns:soap-env=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:eb=\"http://www.ebxml.org/namespaces/messageHeader\">',\n '<soap-env:Header>',\n '<eb:MessageHeader soap-env:mustUnderstand=\"1\" eb:version=\"1.0\">',\n '<eb:From><eb:PartyId/></eb:From>',\n '<eb:To><eb:PartyId/></eb:To>',\n `<eb:CPAId>${xmlEscape(request.cpaId)}</eb:CPAId>`,\n `<eb:ConversationId>${xmlEscape(request.conversationId)}</eb:ConversationId>`,\n `<eb:Service>${xmlEscape(request.action)}</eb:Service>`,\n `<eb:Action>${xmlEscape(request.action)}</eb:Action>`,\n '<eb:MessageData>',\n `<eb:MessageId>mid:${xmlEscape(this.#messageId())}</eb:MessageId>`,\n `<eb:Timestamp>${timestamp}</eb:Timestamp>`,\n '</eb:MessageData>',\n '</eb:MessageHeader>',\n securityHeader(request.security),\n '</soap-env:Header>',\n `<soap-env:Body>${request.payload}</soap-env:Body>`,\n '</soap-env:Envelope>',\n ].join('');\n }\n\n /** Un callback que lanza no rompe la operación (mismo criterio que REST). */\n #deliverRawRequest(request: SoapRequest, raw: RawRequestCapture, attempts: number): void {\n const operation = request.operation ?? request.service;\n try {\n request.onRawRequest?.({ operation, protocol: 'soap', ...raw, attempts });\n } catch (error) {\n this.#log.emit('warn', 'sabre.request.rawRequestHookFailed', {\n service: request.service,\n operation,\n errorName: error instanceof Error ? error.name : typeof error,\n });\n }\n }\n\n /** Un callback que lanza no rompe la operación (mismo criterio que REST). */\n #deliverRaw(request: SoapRequest, raw: Required<RawCapture>['last'] & { attempts: number }): void {\n if (request.onRawResponse === undefined) return;\n const operation = request.operation ?? request.service;\n try {\n request.onRawResponse({ operation, protocol: 'soap', ...raw });\n } catch (error) {\n this.#log.emit('warn', 'sabre.request.rawResponseHookFailed', {\n service: request.service,\n operation,\n errorName: error instanceof Error ? error.name : typeof error,\n });\n }\n }\n}\n\n/** Escapa texto para un elemento o un atributo XML. */\n/**\n * `eb:Timestamp` del header de un sobre de respuesta, en ISO 8601 UTC: Sabre lo manda sin zona\n * (`\"2026-11-06T17:34:16\"`) y en UTC (comparado con `stl:Success@timeStamp`, que trae `Z`, en\n * CERT el 2026-11-06), así que se le agrega `Z`. Con una zona explícita queda tal cual. Si no\n * viene o no tiene forma de fecha y hora, `undefined`. Ver ADR-027 (C1).\n */\nexport function respondedAtOf(raw: unknown): string | undefined {\n if (typeof raw !== 'string') return undefined;\n const header = /<(?:[\\w-]+:)?Header\\b[\\s\\S]*?<\\/(?:[\\w-]+:)?Header>/.exec(raw)?.[0];\n const value = header === undefined ? undefined : /<(?:[\\w-]+:)?Timestamp>\\s*([^<\\s]+)\\s*</.exec(header)?.[1];\n const match = value === undefined ? null : /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)(Z|[+-]\\d{2}:\\d{2})?$/.exec(value);\n if (match === null) return undefined;\n return `${match[1]}${match[2] ?? 'Z'}`;\n}\n\n/** `{ respondedAt }` si el sobre lo trae; si no, nada (`exactOptionalPropertyTypes`). */\nexport function respondedAtField(raw: unknown): { respondedAt?: string } {\n const respondedAt = respondedAtOf(raw);\n return respondedAt === undefined ? {} : { respondedAt };\n}\n\nexport function xmlEscape(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\nfunction securityHeader(security: SoapSecurity): string {\n const open = '<wsse:Security xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/12/secext\">';\n if ('binarySecurityToken' in security) {\n return `${open}<wsse:BinarySecurityToken valueType=\"String\" EncodingType=\"wsse:Base64Binary\">${xmlEscape(security.binarySecurityToken)}</wsse:BinarySecurityToken></wsse:Security>`;\n }\n const token = security.usernameToken;\n return [\n open,\n '<wsse:UsernameToken>',\n `<wsse:Username>${xmlEscape(token.username)}</wsse:Username>`,\n `<wsse:Password>${xmlEscape(token.password)}</wsse:Password>`,\n `<Organization>${xmlEscape(token.organization)}</Organization>`,\n `<Domain>${xmlEscape(token.domain)}</Domain>`,\n token.clientId === undefined ? '' : `<ClientId>${xmlEscape(token.clientId)}</ClientId>`,\n token.clientSecret === undefined ? '' : `<ClientSecret>${xmlEscape(token.clientSecret)}</ClientSecret>`,\n '</wsse:UsernameToken>',\n '</wsse:Security>',\n ].join('');\n}\n\n/**\n * Tapa el token que mandó el SDK donde sea que Sabre lo repita (p. ej. dentro de un\n * `faultstring`), en texto plano o escapado. El `BinarySecurityToken` del header lo tapa\n * después `redactSoapEnvelope`.\n */\n/** `onRawRequest` solo con token de sesión: el sobre de `SessionCreateRQ` es la credencial. */\nfunction wantsRawRequest(request: SoapRequest): boolean {\n return request.onRawRequest !== undefined && 'binarySecurityToken' in request.security;\n}\n\nfunction scrubToken(text: string, security: SoapSecurity): string {\n if (!('binarySecurityToken' in security) || security.binarySecurityToken === '') return text;\n const token = security.binarySecurityToken;\n return text.split(token).join(REDACTED).split(xmlEscape(token)).join(REDACTED);\n}\n\nfunction parseEnvelope(text: string, xmlParser = parser): { Header: unknown; Body: XmlNode } | undefined {\n if (text.trim() === '') return undefined;\n let parsed: unknown;\n try {\n parsed = xmlParser.parse(text);\n } catch {\n return undefined;\n }\n const envelope = asNode(asNode(parsed)?.Envelope);\n const body = asNode(envelope?.Body);\n if (envelope === undefined || body === undefined) return undefined;\n return { Header: envelope.Header, Body: body };\n}\n\n/** Lee el token del texto original, antes de redactar. Solo para `SessionCreateRS`. */\nfunction readSecurityToken(original: string): string | undefined {\n const document = parseEnvelope(original);\n const token = stringAt(document?.Header, 'Security', 'BinarySecurityToken');\n return token === undefined || token.trim() === '' ? undefined : token.trim();\n}\n\n/**\n * `USG_*` dentro del fault, best-effort: ninguna fuente dice en qué campo viaja. Se busca en\n * `faultcode`, `faultstring` y `detail`, y si no aparece se usa el `faultcode`. Se confirma\n * con la primera sesión real (#95).\n */\nconst USG_CODE = /\\bUSG_[A-Z0-9_]+\\b/;\n\nfunction faultError(service: string, status: number, fault: XmlNode, text: string): SabreGatewayError {\n const faultcode = textOf(fault.faultcode);\n const faultstring = textOf(fault.faultstring);\n const haystack = [faultcode, faultstring, JSON.stringify(fault.detail ?? '')].join(' ');\n const code = USG_CODE.exec(haystack)?.[0] ?? faultcode;\n const detail = [faultcode, faultstring].filter((part) => part !== undefined && part !== '').join(': ');\n // `retryable: true` solo para `USG_*_BUSY` y `PREVIOUS ENTRY ACTIVE` (decisiones 4 y 5).\n const retryable = (code !== undefined && BUSY_CODES.has(code)) || PREVIOUS_ENTRY_ACTIVE.test(haystack);\n return new SabreGatewayError(`${service}: SOAP fault${detail === '' ? '' : ` ${detail}`}`, {\n protocol: 'soap',\n status,\n retryable,\n raw: text,\n ...(code === undefined || code === '' ? {} : { code }),\n });\n}\n\n/**\n * Un `stl:Error` o `stl:Warning`: `code` es el primer `Message@code`, o el primer `ShortText` si\n * no viene (las respuestas reales traen el `ERR.SWS.*` ahí, #96), o el `type`. La descripción junta\n * los textos de `Message` con el `ShortText`.\n */\nfunction resultEntry(node: unknown): { code: string; description: string } {\n const entry = asNode(node) ?? {};\n const messages: string[] = [];\n const shortTexts: string[] = [];\n let code: string | undefined;\n for (const results of asArray(entry.SystemSpecificResults)) {\n const resultsNode = asNode(results) ?? {};\n for (const message of asArray(resultsNode.Message)) {\n code ??= nonEmpty(asNode(message)?.['@code']);\n const value = textOf(message);\n if (value !== undefined && value !== '') messages.push(value);\n }\n for (const shortText of asArray(resultsNode.ShortText)) {\n const value = textOf(shortText);\n if (value !== undefined && value !== '') shortTexts.push(value);\n }\n }\n const type = nonEmpty(entry['@type']);\n const description = [\n messages.join(' / ') || type || 'sin detalle',\n ...shortTexts.filter((short) => !messages.includes(short)).map((short) => `(${short})`),\n ].join(' ');\n return { code: code ?? shortTexts[0] ?? type ?? 'UNKNOWN', description };\n}\n\n/**\n * Por qué se puede reintentar un error, según la idempotencia de la operación. Ver\n * tier-3-sesion-y-colas-soap.md (punto 5) y politica-de-reintentos-y-backoff.md.\n */\nfunction retryReason(error: unknown, idempotent: boolean): RetryReason | undefined {\n if ((error instanceof SabreBusinessError || error instanceof SabreGatewayError) && PREVIOUS_ENTRY_ACTIVE.test(error.message)) {\n return 'previous-entry-active';\n }\n if (!(error instanceof SabreGatewayError) || error.protocol !== 'soap') return undefined;\n if (error.code !== undefined && BUSY_CODES.has(error.code)) return 'busy';\n // Lo que sigue pudo haber llegado a Sabre: solo se repite si la operación es idempotente.\n if (!idempotent) return undefined;\n if (error.code !== undefined) return TRANSIENT_CODES.has(error.code) ? 'transient' : undefined;\n // Sin código: un fallo de red (sin status) o una respuesta sin sobre SOAP.\n if (error.status === undefined || TRANSIENT_STATUS.has(error.status)) return 'transient';\n return undefined;\n}\n\n/**\n * El payload del `Body` de `raw` con los textos tal cual, sin recortar espacios ni saltos de\n * línea. Para las pantallas de host (`SabreCommandLLSRS`), que van alineadas por columna: el\n * parser compartido recorta y desalinea la primera línea.\n */\nexport function untrimmedPayload(raw: string): Record<string, unknown> | undefined {\n const document = parseEnvelope(raw, untrimmedParser);\n return document === undefined ? undefined : asNode(firstElement(document.Body)[1]);\n}\n\nfunction firstElement(node: XmlNode): [string | undefined, unknown] {\n for (const [key, value] of Object.entries(node)) {\n if (!key.startsWith('@') && key !== '#text') return [key, Array.isArray(value) ? value[0] : value];\n }\n return [undefined, undefined];\n}\n\nfunction asNode(value: unknown): XmlNode | undefined {\n if (Array.isArray(value)) return asNode(value[0]);\n return typeof value === 'object' && value !== null ? (value as XmlNode) : undefined;\n}\n\nexport function asArray(value: unknown): unknown[] {\n if (value === undefined || value === null || value === '') return [];\n return Array.isArray(value) ? value : [value];\n}\n\n/** Texto de un elemento: un string, o el `#text` de un elemento con atributos. */\nexport function textOf(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n const node = asNode(value);\n const text = node?.['#text'];\n return typeof text === 'string' ? text : node === undefined ? undefined : '';\n}\n\nfunction stringAt(root: unknown, ...path: string[]): string | undefined {\n let node: unknown = root;\n for (const key of path) node = asNode(node)?.[key];\n return nonEmpty(textOf(node));\n}\n\nfunction nonEmpty(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nfunction isAbort(error: unknown, signal: AbortSignal | undefined): boolean {\n return signal?.aborted === true || (error instanceof Error && error.name === 'AbortError');\n}\n\nfunction describe(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n","// Referencia a una cola de PNR, la misma en la entrada y en la salida. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 2 y decisiones de la revisión) y\n// wiki/sources/ingresar-a-una-cola.md.\nimport { xmlEscape } from '../http/soap-transport.js';\n\n/**\n * Una cola (ADR-028). Hay tres clases, y viajan por dos atributos distintos de `QueueIdentifier`:\n * - **numérica**, de 0 a 511: `400` → `Number=\"400\"`;\n * - **alfabética**, una o dos letras mayúsculas: `'S'` → `Number=\"S\"`. La `S` es la cola de\n * **mensajes** del PCC (cuenta lo mismo que `Totals Type=\"MESSAGES\"`): no tiene PNR y no se puede\n * listar;\n * - **con nombre** (tablas QN y QNB): `{ name: 'HOTELS' }` → `Name=\"HOTELS\"`.\n *\n * Lo que devuelve `queue.count` se pasa tal cual a las demás operaciones. Las colas 0–49 son del\n * sistema: el SDK no las restringe.\n */\nexport type QueueRef = number | string | { name: string };\n\n/** Primera y última cola numérica de un PCC. */\nexport const MIN_QUEUE_NUMBER = 0;\nexport const MAX_QUEUE_NUMBER = 511;\n\n/** La cola de mensajes del PCC: no tiene PNR y Sabre no la lista (`INVALID ENTRY`). */\nexport const MESSAGE_QUEUE = 'S';\n\n/**\n * Una cola alfabética: una o dos letras mayúsculas. Es una regla laxa a propósito: la documentación\n * solo muestra `S` y `A`, y no se sabe si hay colas de dos letras (ADR-028).\n */\nconst ALPHA_QUEUE = /^[A-Z]{1,2}$/;\n\nfunction fail(message: string): never {\n throw new TypeError(`sabre-client: ${message}`);\n}\n\n/** Valida una `QueueRef` de la entrada, sin red. `label` es el nombre del campo en el mensaje. */\nexport function validateQueueRef(value: unknown, label: string): asserts value is QueueRef {\n if (typeof value === 'number') {\n if (Number.isInteger(value) && value >= MIN_QUEUE_NUMBER && value <= MAX_QUEUE_NUMBER) return;\n fail(`${label} debe ser un número de cola entero de ${MIN_QUEUE_NUMBER} a ${MAX_QUEUE_NUMBER}, una cola alfabética ('S') o { name }`);\n }\n if (typeof value === 'string') {\n if (ALPHA_QUEUE.test(value)) return;\n // Cada cola tiene una sola forma: '12' no se convierte en 12, ni 's' en 'S' (ADR-028).\n if (/^\\d+$/.test(value.trim())) fail(`${label}: una cola numérica va como número (${Number(value)}), no como string`);\n fail(`${label} debe ser una cola alfabética de una o dos letras mayúsculas (p. ej. 'S')`);\n }\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const { name } = value as { name?: unknown };\n if (typeof name !== 'string' || name.trim() === '') fail(`${label}.name debe ser un string no vacío`);\n // Un { name } de una o dos letras es casi seguro una cola alfabética mal armada, p. ej. el\n // { name: 'S' } que devolvía count en la 0.4.x: Sabre lo rechaza con INVALID QUEUE NAME FORMAT.\n // Ninguna fuente confirma que no existan colas con nombre tan cortas: si aparece una, se afloja\n // esta regla, y eso no rompe la compatibilidad (ADR-028, sub-decisión ii).\n if (ALPHA_QUEUE.test(name)) fail(`${label}: '${name}' es una cola alfabética: pasa '${name}', no { name: '${name}' }`);\n return;\n }\n fail(`${label} debe ser un número de cola (0–511), una cola alfabética ('S') o { name }`);\n}\n\n/** Atributo de `QueueIdentifier`: `Number=\"12\"`, `Number=\"S\"` o `Name=\"HOTELS\"`, ya escapado. */\nexport function queueRefAttribute(queue: QueueRef): string {\n if (typeof queue === 'number') return `Number=\"${queue}\"`;\n if (typeof queue === 'string') return `Number=\"${xmlEscape(queue)}\"`;\n return `Name=\"${xmlEscape(queue.name)}\"`;\n}\n\n/**\n * Un rango de colas numéricas, de `start` a `end`, las dos incluidas: `{ start: 1, end: 25 }` es el\n * `QC/<PCC>1-25` del host. Lo usan `count` y `activity`. A diferencia de pedir todo el PCC, Sabre\n * devuelve cada cola del rango, también las vacías, con cuenta `0` (CERT y producción, #213).\n *\n * El design también acepta rangos de colas con nombre (`TEST1-TEST2`), pero ninguna prueba los vio:\n * por ahora solo van números.\n */\nexport interface QueueRange {\n start: number;\n end: number;\n}\n\n/** Valida un `QueueRange` de la entrada, sin red. `label` es el nombre del campo en el mensaje. */\nexport function validateQueueRange(value: unknown, label: string): asserts value is QueueRange {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) fail(`${label} debe ser { start, end }`);\n const { start, end } = value as { start?: unknown; end?: unknown };\n for (const [name, bound] of [['start', start], ['end', end]] as const) {\n if (typeof bound !== 'number' || !Number.isInteger(bound) || bound < MIN_QUEUE_NUMBER || bound > MAX_QUEUE_NUMBER) {\n fail(`${label}.${name} debe ser un número de cola entero de ${MIN_QUEUE_NUMBER} a ${MAX_QUEUE_NUMBER}`);\n }\n }\n if ((start as number) >= (end as number)) fail(`${label}.start debe ser menor que ${label}.end (para una sola cola, usa queue)`);\n}\n\n/**\n * `QueueIdentifier` de `QueueCountRQ` y `QueueAnalysisRQ`: todo el PCC, una cola o un rango. `Range`\n * va como hijo y sin `Number` ni `Name`: con los dos, Sabre responde `Client.Validation` (#213).\n */\nexport function queueIdentifierXml(pcc: string, target: { queue?: QueueRef; range?: QueueRange } = {}): string {\n const pccAttribute = `PseudoCityCode=\"${xmlEscape(pcc)}\"`;\n if (target.range !== undefined) {\n return `<QueueIdentifier ${pccAttribute}><Range Start=\"${target.range.start}\" End=\"${target.range.end}\"/></QueueIdentifier>`;\n }\n if (target.queue !== undefined) return `<QueueIdentifier ${queueRefAttribute(target.queue)} ${pccAttribute}/>`;\n return `<QueueIdentifier ${pccAttribute}/>`;\n}\n\n/** Si la cola es la de mensajes (`'S'`). */\nexport function isMessageQueue(queue: QueueRef): boolean {\n return queue === MESSAGE_QUEUE;\n}\n\n/**\n * Lee el `Number` de una respuesta (`QueueCountRS`, `QueuePlaceRS`, `QueueAnalysisRS`): `\"12\"` da\n * `12`, y `\"S\"`, `'S'`. Devuelve `undefined` si viene vacío. Un `Number` que no es ni numérico ni\n * alfabético sale tal cual, como string: es lo que mandó Sabre.\n */\nexport function toQueueRef(value: string | undefined): QueueRef | undefined {\n const text = value?.trim();\n if (text === undefined || text === '') return undefined;\n return /^\\d+$/.test(text) ? Number(text) : text;\n}\n","// Fechas de host sin año → strings ISO, con la regla del año. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 3 y decisiones de la revisión).\n\n/**\n * Cómo se elige el año cuando el texto no lo trae:\n *\n * - `'past'`: la fecha más reciente que no sea posterior a `referenceDate` (el mismo día cuenta).\n * Es la regla de los hechos que ya pasaron: la línea de recibido, `placedAt` y `countedAt`.\n * - `'nearest'`: la fecha más cercana a `referenceDate`, hacia adelante o hacia atrás, dentro de\n * ±6 meses. Es la regla de los segmentos y del plazo de ticketing (`T-`, `TAW`). Con un empate\n * gana la fecha futura.\n */\nexport type HostDateDirection = 'past' | 'nearest';\n\nexport interface ResolveHostDateOptions {\n /** Regla del año. Por defecto `'past'`, la de `placedAt` y `countedAt`. */\n direction?: HostDateDirection;\n}\n\nconst MONTHS = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];\n\nconst DAY_MS = 86_400_000;\n\n/** Medio año, en días: la distancia más larga de una fecha a la referencia con `'nearest'`. */\nconst HALF_YEAR_DAYS = 184;\n\ninterface HostDate {\n year?: number;\n month: number;\n day: number;\n time?: string;\n}\n\n/**\n * Convierte una fecha de host en un string ISO sin zona horaria: `'YYYY-MM-DD'`, o\n * `'YYYY-MM-DDTHH:mm'` si el texto trae hora.\n *\n * Formatos que reconoce (sin distinguir mayúsculas, sin espacios a los costados):\n *\n * - `06SEP` y `06SEP26`, como en los segmentos, el ticketing y la línea de recibido;\n * - `12-21` y `12-21T07:00`, como el `DateTime` de `QueueCountRS`;\n * - `2024-05-15` y `2024-05-15T13:24`, como el `DateTime` de una línea de cola real.\n *\n * Si el texto trae año, se usa ese (un año de dos dígitos es del 2000 en adelante). Si no, el año\n * se resuelve contra `referenceDate` con la regla de `options.direction`.\n *\n * `referenceDate` es un `'YYYY-MM-DD'` (puede seguir una hora, que no se usa) o un `Date`, del que\n * se toma el día en UTC. Conviene pasar el día en el calendario del PCC: la regla compara días, y\n * con zonas distintas la referencia puede quedar un día corrida.\n *\n * Devuelve `undefined` si el texto no tiene un formato reconocido, si la fecha no existe\n * (`2026-02-29`, `31APR`) o si no hay un año que cumpla la regla (un `29FEB` sin un año bisiesto a\n * menos de 6 meses, con `'nearest'`). Lanza `TypeError` si `referenceDate` no es válida.\n */\nexport function resolveHostDate(\n text: string,\n referenceDate: Date | string,\n options: ResolveHostDateOptions = {},\n): string | undefined {\n const reference = referenceDay(referenceDate);\n const direction = options.direction ?? 'past';\n if (direction !== 'past' && direction !== 'nearest') {\n throw new TypeError(\"sabre-client: direction debe ser 'past' o 'nearest'\");\n }\n if (typeof text !== 'string') return undefined;\n\n const parsed = parseHostDate(text.trim().toUpperCase());\n if (parsed === undefined) return undefined;\n\n const year = parsed.year ?? resolveYear(parsed.month, parsed.day, reference, direction);\n if (year === undefined || !isValidDate(year, parsed.month, parsed.day)) return undefined;\n\n const date = `${pad(year, 4)}-${pad(parsed.month, 2)}-${pad(parsed.day, 2)}`;\n return parsed.time === undefined ? date : `${date}T${parsed.time}`;\n}\n\nfunction parseHostDate(text: string): HostDate | undefined {\n // 06SEP, 06SEP26\n let match = /^(\\d{1,2})([A-Z]{3})(\\d{2})?$/.exec(text);\n if (match !== null) {\n const month = MONTHS.indexOf(match[2]!) + 1;\n if (month === 0) return undefined;\n return {\n ...(match[3] !== undefined && { year: 2000 + Number(match[3]) }),\n month,\n day: Number(match[1]),\n };\n }\n\n // 12-21, 12-21T07:00, 2024-05-15, 2024-05-15T13:24\n match = /^(?:(\\d{4})-)?(\\d{2})-(\\d{2})(?:T(\\d{2}):(\\d{2}))?$/.exec(text);\n if (match === null) return undefined;\n const [, year, month, day, hours, minutes] = match;\n if (hours !== undefined && (Number(hours) > 23 || Number(minutes) > 59)) return undefined;\n return {\n ...(year !== undefined && { year: Number(year) }),\n month: Number(month),\n day: Number(day),\n ...(hours !== undefined && { time: `${hours}:${minutes}` }),\n };\n}\n\n/** Año que cumple la regla, o `undefined` si ninguno de los candidatos la cumple. */\nfunction resolveYear(month: number, day: number, reference: number, direction: HostDateDirection) {\n const year = new Date(reference).getUTCFullYear();\n\n if (direction === 'past') {\n // Hacia atrás no hay ventana: un 29FEB puede caer hasta 8 años antes (con un 2100 en medio).\n for (let candidate = year; candidate >= year - 8; candidate--) {\n if (isValidDate(candidate, month, day) && dayNumber(candidate, month, day) <= reference) return candidate;\n }\n return undefined;\n }\n\n let best: { year: number; distance: number } | undefined;\n for (const candidate of [year + 1, year, year - 1]) {\n if (!isValidDate(candidate, month, day)) continue;\n const distance = Math.abs(dayNumber(candidate, month, day) - reference);\n // Los candidatos van del futuro al pasado: con un empate se queda el futuro.\n if (best === undefined || distance < best.distance) best = { year: candidate, distance };\n }\n return best !== undefined && best.distance <= HALF_YEAR_DAYS * DAY_MS ? best.year : undefined;\n}\n\n/**\n * El día de `referenceDate`, como milisegundos UTC de su medianoche. Lanza `TypeError` si no es\n * válida. Lo usa también el parser del párrafo, para validarla aunque el párrafo no traiga fechas.\n */\nexport function referenceDay(referenceDate: Date | string): number {\n if (referenceDate instanceof Date) {\n const time = referenceDate.getTime();\n if (Number.isNaN(time)) throw new TypeError('sabre-client: referenceDate es un Date inválido');\n return time - (((time % DAY_MS) + DAY_MS) % DAY_MS);\n }\n if (typeof referenceDate === 'string') {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T.*)?$/.exec(referenceDate.trim());\n if (match !== null) {\n const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];\n if (isValidDate(year, month, day)) return dayNumber(year, month, day);\n }\n }\n throw new TypeError(\"sabre-client: referenceDate es obligatoria, como 'YYYY-MM-DD' o un Date válido\");\n}\n\nfunction dayNumber(year: number, month: number, day: number): number {\n const date = new Date(0);\n date.setUTCFullYear(year, month - 1, day);\n return date.getTime();\n}\n\nfunction isValidDate(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12 || day < 1) return false;\n const date = new Date(0);\n date.setUTCFullYear(year, month - 1, day);\n return date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nfunction pad(value: number, length: number): string {\n return String(value).padStart(length, '0');\n}\n","// Parser best-effort del párrafo de cola (un PNR en formato de host). Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 3 y decisiones de la revisión).\nimport { referenceDay, resolveHostDate } from './host-date.js';\n\nexport interface QueueParagraphOptions {\n /**\n * Fecha contra la que se resuelve el año de las fechas sin año: un `'YYYY-MM-DD'` o un `Date`\n * (se toma el día en UTC). Es obligatoria. Ver `resolveHostDate`.\n */\n referenceDate: Date | string;\n}\n\n/** Aviso de cola del principio del párrafo: el código PIC y su descripción (`011 SEE REMARKS`). */\nexport interface QueueParagraphMessage {\n instructionCode: number;\n text: string;\n}\n\n/** Un nombre del PNR (`1.1TEST/SWS*FSG`). */\nexport interface QueueParagraphPassenger {\n /** Número de nombre, tal cual: `'1.1'`. */\n nameNumber: string;\n surname: string;\n givenName?: string;\n /** Lo que sigue al `*` del nombre. */\n nameRemark?: string;\n /** El nombre como llegó, sin el número: `'TEST/SWS*FSG'`. */\n text: string;\n}\n\ninterface QueueParagraphSegmentBase {\n /** Número de segmento en el PNR. */\n number: number;\n /** Fecha ISO (`'2026-05-22'`), con el año resuelto con la regla `'nearest'`. */\n date?: string;\n /** Estado del segmento: `HK`, `HX`, `UN`, `GK`… */\n status: string;\n /** Cantidad que acompaña al estado (`HK1` → `1`). */\n quantity: number;\n /** La línea como llegó, sin espacios a los costados. */\n text: string;\n}\n\n/** Un segmento aéreo: ` 1 DL2151E 20MAR 5 MIALGA HK1 0700 1003 /DCDL*HTDHAT /E`. */\nexport interface QueueParagraphAirSegment extends QueueParagraphSegmentBase {\n kind: 'air';\n airlineCode: string;\n flightNumber: number;\n bookingClass: string;\n fromAirportCode: string;\n toAirportCode: string;\n /** Hora local de salida, en 24 horas (`'07:00'`). */\n departureTime?: string;\n /** Hora local de llegada, en 24 horas. Puede ser de otro día: el host no siempre lo marca. */\n arrivalTime?: string;\n}\n\n/** Un segmento no aéreo con fecha: `2 CAR ZE 22APR Q GK1 DFW/24APR/…`. */\nexport interface QueueParagraphOtherSegment extends QueueParagraphSegmentBase {\n kind: 'other';\n /** Tipo de segmento del host: `CAR`, `OTH`… */\n segmentType: string;\n vendorCode: string;\n}\n\nexport type QueueParagraphSegment = QueueParagraphAirSegment | QueueParagraphOtherSegment;\n\n/** Una entrada del campo de ticketing (`TKT/TIME LIMIT`). */\nexport interface QueueParagraphTicketingEntry {\n /** Número de la entrada: `1` en `1.T-13MAY-X6R3*N18`. */\n number: number;\n /** `'T-'`, `'TAW'` (o `TAC`, `TAM`, `TAT`, `TAX`), o `'TE'`/`'TK'` para una línea de boleto. */\n code: string;\n /** Fecha ISO de la entrada, con el año resuelto con la regla `'nearest'`. */\n date?: string;\n pseudoCityCode?: string;\n agentSine?: string;\n /** Número de boleto de una línea `TE` o `TK`. */\n ticketNumber?: string;\n /** La entrada como llegó, sin el número: `'T-13MAY-X6R3*N18'`. */\n text: string;\n}\n\nexport interface QueueParagraphTicketing {\n entries: QueueParagraphTicketingEntry[];\n /** `true` si alguna entrada es una línea de boleto (`TE` o `TK`, con número). */\n issued: boolean;\n}\n\n/**\n * La línea `RECEIVED FROM - …` y la línea de firma del PNR\n * (`<PCC>.<PCC>*<agente> HHMM/DDMMMYY <localizador> H`). La firma es la de la última modificación.\n */\nexport interface QueueParagraphReceivedFrom {\n /** Lo que sigue a `RECEIVED FROM - `. */\n name?: string;\n /** El primer PCC de la firma. */\n pseudoCityCode?: string;\n /** La firma del agente, lo que sigue al `*`. */\n agentSine?: string;\n /** Fecha y hora de la firma, `'YYYY-MM-DDTHH:mm'`. Sin año, se resuelve hacia atrás. */\n receivedAt?: string;\n locator?: string;\n}\n\nexport interface QueueParagraph {\n messages: QueueParagraphMessage[];\n passengers: QueueParagraphPassenger[];\n segments: QueueParagraphSegment[];\n /** El campo de ticketing, si el párrafo trae la sección `TKT/TIME LIMIT`. */\n ticketing?: QueueParagraphTicketing;\n /** La línea de recibido y la firma, si llega alguna de las dos. */\n receivedFrom?: QueueParagraphReceivedFrom;\n /** Las líneas que no se reconocieron, tal cual y en orden. Las líneas vacías no se incluyen. */\n unparsed: string[];\n}\n\nconst MESSAGE = /^\\s*(\\d{3})\\s{2,}(\\S.*?)\\s*$/;\nconst PASSENGER_LINE = /^\\s*\\d+\\.\\d+[A-Z]/;\nconst PASSENGER_SPLIT = /\\s+(?=\\d+\\.\\d+[A-Z])/;\nconst PASSENGER = /^(\\d+\\.\\d+)([^/*]+?)\\s*(?:\\/([^*]*?))?\\s*(?:\\*(.*?))?\\s*$/;\nconst AIR_SEGMENT =\n /^\\s*(\\d{1,2})\\s+([A-Z0-9]{2})\\s*(\\d{1,4})([A-Z])\\s+(\\d{2}[A-Z]{3})\\s+[A-Z0-9]\\s+([A-Z]{3})([A-Z]{3})\\s+([A-Z]{2})(\\d{1,3})(?=\\s|$)(.*)$/;\nconst SEGMENT_TIMES = /^\\s+(\\d{3,4}[APNM]?)\\s+(\\d{3,4}[APNM]?)(?=\\s|$)/;\nconst OTHER_SEGMENT =\n /^\\s*(\\d{1,2})\\s+([A-Z]{3})\\s+([A-Z0-9]{2})\\s+(\\d{2}[A-Z]{3})\\s+[A-Z0-9]\\s+([A-Z]{2})(\\d{1,3})(?=\\s|$)/;\nconst NO_ITINERARY = /^\\s*NO ITIN\\s*$/;\nconst TICKETING_HEADER = /^\\s*TKT\\/TIME LIMIT\\s*$/;\nconst TICKETING_ENTRY = /^\\s*(\\d+)\\.(.*?)\\s*$/;\nconst TICKETED = /^T-(\\d{2}[A-Z]{3})?(?:-([A-Z0-9]{3,4})\\*([A-Z0-9]+))?(?:\\/.*)?$/;\nconst ARRANGEMENT = /^(TA[WCMTX])([A-Z0-9]{3,4})?(\\d{2}[A-Z]{3})?\\d{0,3}\\/.*$/;\nconst TICKET = /^(TE|TK)\\s+(\\d{13})\\b/;\nconst RECEIVED = /^\\s*RECEIVED FROM -\\s?(.*?)\\s*$/;\nconst SIGNATURE = /^\\s*([A-Z0-9]{3,4})\\.(\\S+)\\s+(\\d{2})(\\d{2})\\/(\\d{2}[A-Z]{3}\\d{2})\\s+([A-Z0-9]{6})\\s+H\\s*$/;\n\n/** En qué parte del párrafo va el parser: cada sección solo se reconoce hasta que empieza la siguiente. */\nconst Phase = { Messages: 0, Passengers: 1, Segments: 2, Body: 3 } as const;\ntype Phase = (typeof Phase)[keyof typeof Phase];\n\n/**\n * Lee un párrafo de cola (`QueueItem.paragraph`) y extrae las secciones estándar de un PNR en\n * formato de host: los avisos de cola, los nombres, los segmentos con su estado, el campo de\n * ticketing y la línea de recibido con la firma.\n *\n * **Es best-effort**: el formato de host no tiene contrato. Una línea que no reconoce va a\n * `unparsed` y nunca lanza por el contenido del párrafo. Solo lanza `TypeError` si `lines` no es\n * un array o si `referenceDate` falta o no es válida.\n *\n * **No extrae** los plazos escritos en texto libre por la aerolínea (`ADTK BY`, `BEFORE` en\n * remarks, SSR u OSI): su formato lo pone cada aerolínea. Esas líneas van a `unparsed`.\n *\n * Las fechas salen como strings ISO sin zona horaria. Los segmentos y el ticketing toman la fecha\n * más cercana a `referenceDate` dentro de ±6 meses, y la firma se resuelve hacia atrás.\n *\n * **Versionado**: que una línea pase de `unparsed` a un campo nuevo es un cambio minor. Que cambie\n * la forma de un campo existente es major.\n */\nexport function parseQueueParagraph(lines: readonly string[], options: QueueParagraphOptions): QueueParagraph {\n if (!Array.isArray(lines)) throw new TypeError('sabre-client: lines debe ser un array de strings');\n if (typeof options !== 'object' || options === null) {\n throw new TypeError(\"sabre-client: referenceDate es obligatoria, como 'YYYY-MM-DD' o un Date válido\");\n }\n const { referenceDate } = options;\n referenceDay(referenceDate);\n\n const result: QueueParagraph = { messages: [], passengers: [], segments: [], unparsed: [] };\n const signatureIndex = lastSignatureIndex(lines);\n let phase: Phase = Phase.Messages;\n let inTicketing = false;\n\n lines.forEach((value, index) => {\n const line = typeof value === 'string' ? value : '';\n if (line.trim() === '') return;\n\n if (index === signatureIndex) {\n result.receivedFrom = { ...result.receivedFrom, ...parseSignature(line, referenceDate) };\n return;\n }\n\n if (inTicketing) {\n const entry = TICKETING_ENTRY.exec(line);\n if (entry !== null) {\n const parsed = parseTicketingEntry(Number(entry[1]), entry[2]!, referenceDate);\n if (parsed === undefined) result.unparsed.push(line);\n else result.ticketing!.entries.push(parsed);\n return;\n }\n inTicketing = false;\n }\n\n if (TICKETING_HEADER.test(line)) {\n phase = Phase.Body;\n inTicketing = true;\n result.ticketing ??= { entries: [], issued: false };\n return;\n }\n\n const received = RECEIVED.exec(line);\n if (received !== null) {\n phase = Phase.Body;\n result.receivedFrom = { ...result.receivedFrom, ...(received[1] !== '' && { name: received[1]! }) };\n return;\n }\n\n if (phase === Phase.Messages) {\n const message = MESSAGE.exec(line);\n if (message !== null) {\n result.messages.push({ instructionCode: Number(message[1]), text: message[2]! });\n return;\n }\n }\n\n if (phase <= Phase.Passengers && PASSENGER_LINE.test(line)) {\n const passengers = parsePassengers(line);\n if (passengers !== undefined) {\n phase = Phase.Passengers;\n result.passengers.push(...passengers);\n return;\n }\n }\n\n if (phase <= Phase.Segments) {\n if (NO_ITINERARY.test(line)) {\n phase = Phase.Segments;\n return;\n }\n const segment = parseSegment(line, referenceDate);\n if (segment !== undefined) {\n phase = Phase.Segments;\n result.segments.push(segment);\n return;\n }\n }\n\n result.unparsed.push(line);\n });\n\n if (result.ticketing !== undefined) {\n result.ticketing.issued = result.ticketing.entries.some((entry) => entry.ticketNumber !== undefined);\n }\n return result;\n}\n\nfunction parsePassengers(line: string): QueueParagraphPassenger[] | undefined {\n const passengers: QueueParagraphPassenger[] = [];\n for (const part of line.trim().split(PASSENGER_SPLIT)) {\n const match = PASSENGER.exec(part);\n if (match === null) return undefined;\n const [, nameNumber, surname, givenName, nameRemark] = match;\n passengers.push({\n nameNumber: nameNumber!,\n surname: surname!.trim(),\n ...(givenName !== undefined && givenName !== '' && { givenName }),\n ...(nameRemark !== undefined && nameRemark !== '' && { nameRemark }),\n text: part.slice(nameNumber!.length).trim(),\n });\n }\n return passengers;\n}\n\nfunction parseSegment(line: string, referenceDate: Date | string): QueueParagraphSegment | undefined {\n const air = AIR_SEGMENT.exec(line);\n if (air !== null) {\n const [, number, airlineCode, flightNumber, bookingClass, date, from, to, status, quantity, rest] = air;\n const times = SEGMENT_TIMES.exec(rest!);\n const departureTime = times === null ? undefined : hostTime(times[1]!);\n const arrivalTime = times === null ? undefined : hostTime(times[2]!);\n return {\n kind: 'air',\n number: Number(number),\n ...withDate(date!, referenceDate),\n status: status!,\n quantity: Number(quantity),\n airlineCode: airlineCode!,\n flightNumber: Number(flightNumber),\n bookingClass: bookingClass!,\n fromAirportCode: from!,\n toAirportCode: to!,\n ...(departureTime !== undefined && { departureTime }),\n ...(arrivalTime !== undefined && { arrivalTime }),\n text: line.trim(),\n };\n }\n\n const other = OTHER_SEGMENT.exec(line);\n if (other === null) return undefined;\n const [, number, segmentType, vendorCode, date, status, quantity] = other;\n return {\n kind: 'other',\n number: Number(number),\n ...withDate(date!, referenceDate),\n status: status!,\n quantity: Number(quantity),\n segmentType: segmentType!,\n vendorCode: vendorCode!,\n text: line.trim(),\n };\n}\n\nfunction parseTicketingEntry(\n number: number,\n text: string,\n referenceDate: Date | string,\n): QueueParagraphTicketingEntry | undefined {\n const ticketed = TICKETED.exec(text);\n if (ticketed !== null) {\n const [, date, pseudoCityCode, agentSine] = ticketed;\n return {\n number,\n code: 'T-',\n ...(date !== undefined && withDate(date, referenceDate)),\n ...(pseudoCityCode !== undefined && { pseudoCityCode }),\n ...(agentSine !== undefined && { agentSine }),\n text,\n };\n }\n\n const arrangement = ARRANGEMENT.exec(text);\n if (arrangement !== null) {\n const [, code, pseudoCityCode, date] = arrangement;\n return {\n number,\n code: code!,\n ...(date !== undefined && withDate(date, referenceDate)),\n ...(pseudoCityCode !== undefined && { pseudoCityCode }),\n text,\n };\n }\n\n const ticket = TICKET.exec(text);\n if (ticket !== null) return { number, code: ticket[1]!, ticketNumber: ticket[2]!, text };\n return undefined;\n}\n\n/** La firma, si hay una, es la última línea con ese formato. Las anteriores van a `unparsed`. */\nfunction lastSignatureIndex(lines: readonly string[]): number {\n for (let index = lines.length - 1; index >= 0; index--) {\n const line = lines[index];\n if (typeof line === 'string' && SIGNATURE.test(line)) return index;\n }\n return -1;\n}\n\nfunction parseSignature(line: string, referenceDate: Date | string): QueueParagraphReceivedFrom {\n const [, pseudoCityCode, sign, hours, minutes, date, locator] = SIGNATURE.exec(line)!;\n const agentSine = /\\*([A-Z0-9]+)$/.exec(sign!)?.[1];\n const day = Number(hours) <= 23 && Number(minutes) <= 59 ? resolveHostDate(date!, referenceDate) : undefined;\n return {\n pseudoCityCode: pseudoCityCode!,\n ...(agentSine !== undefined && { agentSine }),\n ...(day !== undefined && { receivedAt: `${day}T${hours}:${minutes}` }),\n locator: locator!,\n };\n}\n\nfunction withDate(text: string, referenceDate: Date | string): { date?: string } {\n const date = resolveHostDate(text, referenceDate, { direction: 'nearest' });\n return date === undefined ? {} : { date };\n}\n\n/**\n * Hora del host en 24 horas: `0700` y `1003` tal cual, y con sufijo `A` (a. m.), `P` (p. m.),\n * `N` (mediodía) o `M` (medianoche): `740P` → `19:40`, `1200N` → `12:00`.\n */\nfunction hostTime(text: string): string | undefined {\n const match = /^(\\d{1,2})(\\d{2})([APNM])?$/.exec(text);\n if (match === null) return undefined;\n let hours = Number(match[1]);\n const minutes = Number(match[2]);\n const suffix = match[3];\n if (minutes > 59) return undefined;\n if (suffix === undefined) {\n if (hours > 23) return undefined;\n } else {\n if (hours < 1 || hours > 12) return undefined;\n if (suffix === 'A' || suffix === 'M') hours %= 12;\n else if (suffix === 'P') hours = (hours % 12) + 12;\n else if (hours !== 12) return undefined;\n }\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n}\n","// Place Queue Message (`QueuePlaceLLSRQ` 2.0.4): colocar PNR en colas. Ver\n// sabre-wiki/wiki/sdk/tier-3-sesion-y-colas-soap.md (punto 2, \"place\"),\n// wiki/sources/place-queue-message-v2-0-4-design.md y wiki/sources/sabre-legacy-client-1-0-8.md.\nimport type { RequestOptions } from '../air/bargain-finder-max.js';\nimport { SabreGatewayError, type SabreWarning } from '../errors/index.js';\nimport { asArray, respondedAtField, type SoapResponse, xmlEscape } from '../http/soap-transport.js';\nimport type { SessionRequest } from '../session/session.js';\nimport {\n attribute,\n endStep,\n isEndOfDisplay,\n isEndOfDisplayResult,\n node,\n type QueueStep,\n textLines,\n} from './queue-access.js';\nimport { type QueueRef, queueRefAttribute, toQueueRef } from './queue-ref.js';\n\nexport const QUEUE_PLACE_SERVICE = 'queuePlace';\nconst NAMESPACE = 'http://webservices.sabre.com/sabreXML/2011/10';\n\n/** Límites del design 2.0.4: hasta 10 colas y hasta 6 localizadores. */\nexport const MAX_PLACE_TO = 10;\nexport const MAX_PLACE_LOCATORS = 6;\n\n/** Rangos de PIC válidos (`PrefatoryInstructionCode`), según el artículo de selección de colas. */\nconst INSTRUCTION_CODE_RANGES: ReadonlyArray<readonly [number, number]> = [\n [0, 191],\n [200, 254],\n];\n\n/** Una cola de destino. */\nexport interface QueuePlaceTarget {\n queue: QueueRef;\n /** Por defecto, el PCC de la sesión. */\n pcc?: string;\n /**\n * Código PIC (`PrefatoryInstructionCode`): 0–191 o 200–254. **Obligatorio**, aunque el design\n * 2.0.4 lo da como opcional: sin PIC, producción rechaza el place con `INSTRUCTION NUMBER NOT IN\n * RANGE` fuera de una cola y con `NEED INSTRUCTION NUMBER` dentro (#97). Sin valor por defecto.\n */\n instructionCode: number;\n}\n\nexport interface QueuePlaceRequest {\n /** De 1 a 10 colas de destino. */\n to: readonly QueuePlaceTarget[];\n /**\n * Hasta 6 localizadores a colocar, sin tenerlos en el AAA. Solo fuera de una cola: dentro,\n * `place` coloca el PNR actual.\n */\n locators?: readonly string[];\n}\n\nexport type QueuePlaceOptions = RequestOptions;\n\n/** Una colocación que confirma Sabre (`QueueInfo`). */\nexport interface QueuePlacement {\n queue?: QueueRef;\n pcc?: string;\n locator?: string;\n /** `QueueInfo@DateTime` tal cual, sin año (`\"12-21T12:00\"`). */\n placedAt?: string;\n}\n\n/** Lo que devuelve `place` fuera de una cola: no avanza nada. */\nexport interface QueuePlaceResult {\n /** Las colocaciones de `QueueInfo`, si Sabre las manda. */\n placements: QueuePlacement[];\n /** Las líneas `Text`, tal cual (p. ej. `\"OK 1030 NMIUTF\"`). */\n text: string[];\n warnings: SabreWarning[];\n /**\n * `eb:Timestamp` de la respuesta de Sabre, en ISO 8601 UTC (`\"2026-11-06T17:34:16Z\"`). A\n * diferencia de las fechas del host, trae año y zona. Falta si Sabre no lo manda.\n */\n respondedAt?: string;\n}\n\n/**\n * Lo que devuelve `place`: un `QueueStep` dentro de una cola, y un `QueuePlaceResult` fuera. Se\n * distinguen con `'done' in result`. Con `locators`, el tipo ya es `QueuePlaceResult`.\n */\nexport type QueuePlaceResponse = QueueStep | QueuePlaceResult;\n\n/** Destino ya validado, con el PCC resuelto. */\nexport interface ResolvedPlaceTarget {\n queue: QueueRef;\n pcc: string;\n instructionCode?: number;\n}\n\n/** Si un PIC está en los rangos válidos. */\nexport function isInstructionCode(value: unknown): value is number {\n return (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n INSTRUCTION_CODE_RANGES.some(([min, max]) => value >= min && value <= max)\n );\n}\n\nexport function queuePlacePayload(to: readonly ResolvedPlaceTarget[], locators: readonly string[] = []): string {\n const identifiers = to\n .map((target) => {\n const pic = target.instructionCode === undefined ? '' : ` PrefatoryInstructionCode=\"${target.instructionCode}\"`;\n return `<QueueIdentifier ${queueRefAttribute(target.queue)}${pic} PseudoCityCode=\"${xmlEscape(target.pcc)}\"/>`;\n })\n .join('');\n const ids = locators.map((locator) => `<UniqueID ID=\"${xmlEscape(locator)}\"/>`).join('');\n return `<QueuePlaceRQ Version=\"2.0.4\" xmlns=\"${NAMESPACE}\"><QueueInfo>${identifiers}${ids}</QueueInfo></QueuePlaceRQ>`;\n}\n\n/** Colocar no es idempotente: dentro de una cola mueve el cursor, y fuera repetiría la colocación. */\nexport function queuePlaceRequest(payload: string, options: QueuePlaceOptions): SessionRequest {\n return {\n service: QUEUE_PLACE_SERVICE,\n action: 'QueuePlaceLLSRQ',\n payload,\n idempotent: false,\n operation: 'queue.place',\n ...options,\n };\n}\n\n/**\n * Línea de firma del PNR, al final del texto: `<PCC>.<PCC>*<agente> HHMM/DDMMMYY <localizador> H`,\n * p. ej. `7TZA.7TZA*AW5 0319/06SEP24 NGDEZP H`.\n */\nconst SIGNATURE_LINE = /\\s\\d{4}\\/\\d{2}[A-Z]{3}\\d{2}\\s+([A-Z0-9]{6})\\s+H\\s*$/;\n\n/** El localizador de la última línea de firma del texto, si hay una. */\nexport function signatureLocator(lines: readonly string[]): string | undefined {\n for (let index = lines.length - 1; index >= 0; index--) {\n const match = SIGNATURE_LINE.exec(lines[index] ?? '');\n if (match !== null) return match[1];\n }\n return undefined;\n}\n\n/** El fin de cola de `place`: como `stl:Warning` (evidencia de `1.0.8`) o como primera línea. */\nfunction isEnd(response: SoapResponse, text: readonly string[]): boolean {\n return response.warnings.some(isEndOfDisplayResult) || isEndOfDisplay(text.find((line) => line.trim() !== ''));\n}\n\n/**\n * Dentro de una cola, `QueuePlaceRS` trae el PNR siguiente en `Text` y no trae `Line`: el\n * localizador sale de la línea de firma, y `placedAt` y `placedBy` quedan en `undefined`, porque\n * esa firma es la última modificación del PNR y no su colocación en la cola.\n */\nexport function parsePlaceStep(response: SoapResponse): QueueStep {\n const text = textLines(response.raw, 'QueuePlaceRS');\n if (isEnd(response, text)) return endStep(response.warnings, 'end-of-display', response.raw);\n const locator = signatureLocator(text);\n if (locator === undefined) {\n throw new SabreGatewayError(`${QUEUE_PLACE_SERVICE}: respuesta no reconocida (sin línea de firma del PNR ni fin de cola)`, {\n protocol: 'soap',\n status: response.status,\n retryable: false,\n raw: response.raw,\n });\n }\n return { done: false, kind: 'pnr', item: { locator, paragraph: text }, warnings: response.warnings, ...respondedAtField(response.raw) };\n}\n\n/**\n * Lo que `place` puede leer con la sesión en `'unknown'`: un fin de cola, un PNR con línea de\n * firma (seguía en la cola) o, si no, un `QueuePlaceResult`.\n */\nexport function parsePlaceUnknown(response: SoapResponse): QueuePlaceResponse {\n const text = textLines(response.raw, 'QueuePlaceRS');\n if (isEnd(response, text) || signatureLocator(text) !== undefined) return parsePlaceStep(response);\n return parsePlaceResult(response);\n}\n\n/** Fuera de una cola: las colocaciones de `QueueInfo` y el texto. */\nexport function parsePlaceResult(response: SoapResponse): QueuePlaceResult {\n const placements = asArray(response.payload.QueueInfo).map((info): QueuePlacement => {\n const identifier = node(node(info)?.QueueIdentifier);\n // `Number` es alfanumérico (\"400\" o \"S\"); `Name` es siempre un nombre.\n const number = attribute(identifier, 'Number');\n const name = attribute(identifier, 'Name');\n const queue: QueueRef | undefined = number !== undefined ? toQueueRef(number) : name !== undefined ? { name } : undefined;\n const pcc = attribute(identifier, 'PseudoCityCode');\n const locator = attribute(node(info)?.UniqueID, 'ID');\n const placedAt = attribute(info, 'DateTime');\n return {\n ...(queue === undefined ? {} : { queue }),\n ...(pcc === undefined ? {} : { pcc }),\n ...(locator === undefined ? {} : { locator }),\n ...(placedAt === undefined ? {} : { placedAt }),\n };\n });\n return {\n placements,\n text: textLines(response.raw, 'QueuePlaceRS'),\n warnings: response.warnings,\n ...respondedAtField(response.raw),\n };\n}\n","// Anonimización de las respuestas de colas grabadas (la regla de #96, ADR-018), la misma que usan\n// los scripts que graban fixtures. Exportada para que los consumidores no la repitan (ADR-027, D1).\n// Solo Web Standard APIs: corre en cualquier runtime.\n\n/** Qué dato real quedó en un texto: lo que devuelve `Anonymizer.leaks`. */\nexport type AnonymizerLeak = 'secreto' | 'localizador' | 'nombre' | 'línea del PNR' | 'token';\n\nexport interface AnonymizerOptions {\n /**\n * Valores que nunca deben quedar: credenciales, usuario, PCC. Cada uno pasa a `XXXX` donde\n * aparezca. Se ignoran los que no son string o tienen menos de 3 caracteres.\n */\n secrets?: ReadonlyArray<string | undefined>;\n}\n\n/**\n * Una anonimización con memoria: el mismo localizador da siempre el mismo alias y el mismo\n * pasajero el mismo nombre falso, en todos los textos que pasen por ella. Una por grabación.\n */\nexport interface Anonymizer {\n /**\n * Un sobre SOAP o cualquier texto con su XML (también un JSON con XML adentro):\n * - cada `UniqueID@ID` pasa a un alias (`AAAAAA`, `AAAAAB`…), y el localizador real se reemplaza\n * por su alias en todo el texto;\n * - `PassengerName` a `PASAJERO/UNO`, `PASAJERO/DOS`…, y `Group` a `GRUPO`;\n * - `AgentSine` a `AAA` (salvo `SABRE`), `PseudoCityCode` a `XXXX` y `LNIATA` a `XXXXXX`;\n * - cada `<Text>` pasa por `maskLine`;\n * - los `secrets`, a `XXXX`.\n */\n anonymize(text: string): string;\n /**\n * Una línea del PNR en formato de host. Las de la lista blanca (`isSafeHostLine`) quedan tal\n * cual; en las demás, letras a `X` y dígitos a `9`. La cabecera `QUEUE LIST FOR <PCC>` solo\n * tapa el PCC, y `RECEIVED FROM - ` conserva el prefijo. La línea de firma\n * (`… HHMM/DDMMMYY <localizador> H`) conserva su forma, y el localizador solo si ya es un alias:\n * de ella sale el localizador del PNR siguiente en `place` dentro de una cola. Llamarla después\n * de dar alias a los localizadores.\n */\n maskLine(line: string): string;\n /** `maskLine` sobre cada línea de un párrafo, p. ej. `QueueItem.paragraph`. */\n maskParagraph(lines: readonly string[]): string[];\n /** El alias de un localizador: lo asigna la primera vez, en orden (`AAAAAA`, `AAAAAB`…). */\n aliasOf(locator: string): string;\n /**\n * Qué datos reales siguen en `text`, sin repetir: un `secret`, un localizador o un nombre que ya\n * tienen alias, una línea del PNR que se enmascaró, o un token de sesión. Vacío si no queda\n * ninguno. Sirve para no escribir una fixture que todavía trae datos reales.\n */\n leaks(text: string): AnonymizerLeak[];\n}\n\nconst NAMES = ['UNO', 'DOS', 'TRES', 'CUATRO', 'CINCO', 'SEIS', 'SIETE', 'OCHO', 'NUEVE', 'DIEZ'];\n\n/** Líneas de un PNR en formato de host que quedan tal cual: no traen datos del pasajero. */\nconst SAFE_LINES: readonly RegExp[] = [\n /^\\s*$/,\n // Aviso PIC: 011 SEE REMARKS. Sin dígitos después del número: una línea de `list`\n // (`100 ABC123 PLT MAM 01JUN26 1948`) también empieza con 3 dígitos y trae el sine.\n /^\\s*\\d{3}\\s{2,}[A-Z][A-Z ,./-]*$/,\n /^\\s*END OF DISPLAY FOR REQUESTED DATA\\s*$/,\n /^\\s*(TKT\\/TIME LIMIT|PHONES|REMARKS|ADDRESS|INVOICED|GENERAL FACTS|[A-Z0-9]{2} FACTS|NO ITIN)\\s*$/,\n /^\\s*PASSENGER EMAIL DATA EXISTS\\s+\\*PE TO DISPLAY ALL\\s*$/,\n];\n\n/**\n * Si una línea del PNR en formato de host queda tal cual al anonimizar: está en la lista blanca de\n * #96 (líneas vacías, avisos PIC como `011 SEE REMARKS`, títulos de sección como `REMARKS`, el fin\n * de cola).\n */\nexport function isSafeHostLine(line: string): boolean {\n return SAFE_LINES.some((pattern) => pattern.test(line));\n}\n\nconst ENTITIES: Record<string, string> = { amp: '&', lt: '<', gt: '>', quot: '\"', apos: \"'\" };\nconst decode = (text: string) => text.replace(/&(amp|lt|gt|quot|apos);/g, (_, entity: string) => ENTITIES[entity] ?? '');\nconst encode = (text: string) => text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\nconst masked = (text: string) => text.replace(/\\p{L}/gu, 'X').replace(/\\p{N}/gu, '9');\n\n/** Ver `Anonymizer`. */\nexport function createAnonymizer(options: AnonymizerOptions = {}): Anonymizer {\n const secrets = (options.secrets ?? [])\n .filter((value): value is string => typeof value === 'string' && value.length >= 3)\n .sort((a, b) => b.length - a.length);\n const redactSecrets = (text: string) => secrets.reduce((value, secret) => value.split(secret).join('XXXX'), text);\n const locatorAliases = new Map<string, string>();\n const realNames = new Map<string, string>();\n const maskedLines = new Set<string>();\n\n const aliasOf = (locator: string): string => {\n let alias = locatorAliases.get(locator);\n if (alias === undefined) {\n const n = locatorAliases.size;\n // Base 26 en cuatro letras: `AAAAAA`, `AAAAAB`… y sigue en letras después del 676 (`AAABAA`).\n const letters = [17576, 676, 26, 1].map((size) => String.fromCharCode(65 + (Math.floor(n / size) % 26))).join('');\n alias = `AA${letters}`;\n locatorAliases.set(locator, alias);\n }\n return alias;\n };\n const fakeName = (name: string): string => {\n let fake = realNames.get(name);\n if (fake === undefined) {\n fake = `PASAJERO/${NAMES[realNames.size] ?? realNames.size + 1}`;\n realNames.set(name, fake);\n }\n return fake;\n };\n\n function anonymizeLine(line: string): string {\n if (isSafeHostLine(line)) return line;\n const header = /^(\\s*QUEUE LIST FOR )\\S+(\\s+QUEUE )(\\S+)\\s*$/.exec(line);\n if (header !== null) return `${header[1]}XXXX${header[2]}${header[3]}`;\n const received = /^(\\s*RECEIVED FROM - )(.*)$/.exec(line);\n const signature = /^(.*\\s)(\\d{4}\\/\\d{2}[A-Z]{3}\\d{2})(\\s+)([A-Z0-9]{6})(\\s+H\\s*)$/.exec(line);\n const aliases = new Set(locatorAliases.values());\n let result: string;\n if (received !== null) {\n result = `${received[1]}${masked(received[2] ?? '')}`;\n } else if (signature !== null) {\n const [, before = '', stamp = '', gap = '', locator = '', end = ''] = signature;\n result = `${masked(before)}${masked(stamp)}${gap}${aliases.has(locator) ? locator : masked(locator)}${end}`;\n } else {\n result = masked(line);\n }\n if (line.trim().length >= 4 && result.trim() !== line.trim()) maskedLines.add(line.trim());\n return result;\n }\n\n function anonymize(body: string): string {\n let text = String(body).replace(\n /(<(?:\\w+:)?UniqueID\\b[^>]*\\bID=\")([^\"]+)(\")/g,\n (_, a: string, locator: string, b: string) => `${a}${aliasOf(locator)}${b}`,\n );\n for (const [locator, alias] of locatorAliases) text = text.split(locator).join(alias);\n text = text.replace(\n /(<(?:\\w+:)?PassengerName>)([^<]*)(<\\/)/g,\n (_, a: string, name: string, b: string) => `${a}${fakeName(decode(name))}${b}`,\n );\n text = text.replace(/(<(?:\\w+:)?Group>)([^<]*)(<\\/)/g, (_, a: string, value: string, b: string) =>\n value === '' ? `${a}${b}` : `${a}GRUPO${b}`,\n );\n text = text.replace(/(\\bAgentSine=\")([^\"]*)(\")/g, (_, a: string, sine: string, b: string) =>\n `${a}${sine === 'SABRE' ? sine : 'AAA'}${b}`,\n );\n text = text.replace(/(\\bPseudoCityCode=\")([^\"]*)(\")/g, '$1XXXX$3');\n // La dirección de la terminal (`stl:HostCommand@LNIATA`, en `session.command()`).\n text = text.replace(/(\\bLNIATA=\")([^\"]*)(\")/g, '$1XXXXXX$3');\n text = text.replace(\n /(<(?:\\w+:)?Text\\b[^>/]*>)([\\s\\S]*?)(<\\/(?:\\w+:)?Text>)/g,\n (_, a: string, line: string, b: string) => `${a}${encode(anonymizeLine(decode(line)))}${b}`,\n );\n return redactSecrets(text);\n }\n\n const maskLine = (line: string) => redactSecrets(anonymizeLine(line));\n\n function leaks(text: string): AnonymizerLeak[] {\n const found: AnonymizerLeak[] = [\n ...secrets.filter((secret) => text.includes(secret)).map((): AnonymizerLeak => 'secreto'),\n ...[...locatorAliases.keys()].filter((locator) => text.includes(locator)).map((): AnonymizerLeak => 'localizador'),\n ...[...realNames.keys()]\n .filter((realName) => realName.length >= 3 && text.includes(realName))\n .map((): AnonymizerLeak => 'nombre'),\n ...[...maskedLines].filter((line) => text.includes(line)).map((): AnonymizerLeak => 'línea del PNR'),\n ...(/IceSess|Shared\\/IDL/.test(text) ? (['token'] as const) : []),\n ];\n return [...new Set(found)];\n }\n\n return {\n anonymize,\n maskLine,\n maskParagraph: (lines) => lines.map(maskLine),\n aliasOf,\n leaks,\n };\n}\n","// De una corrida grabada a los PNR del fake de colas (#166, ADR-027 D2): lee las respuestas con el\n// parseo del SDK, así el consumidor no tiene que leer el XML por su cuenta.\nimport { asArray, untrimmedPayload } from '../http/soap-transport.js';\nimport { attribute, isEndOfDisplay, lineFields, textLines } from '../queue/queue-access.js';\nimport { signatureLocator } from '../queue/queue-place.js';\nimport type { RecordedFixture } from './fixtures.js';\nimport type { QueueFakePnr } from './queue-fake.js';\n\n/** Las operaciones cuyas respuestas traen PNR de una cola. */\nconst QUEUE_OPERATION = /^queue\\.(list|access|ignore|remove|place)$/;\n\n/**\n * Los PNR de una corrida grabada, listos para `createQueueFake`: primero los de `queue.list`, en\n * su orden, y después los que aparecen en las demás respuestas de cola (`access`, `ignore`,\n * `remove`, `place`), en el orden en que aparecen. Cada localizador sale una sola vez.\n *\n * - `placedAt`, `placedBy` y `primaryPassenger` salen del `Line` de `list`. Si el PNR no está en la\n * lista, salen del `Line` del primer `access`, `ignore` o `remove` que lo trae (ahí `placedAt` es\n * la última modificación del PNR, no su colocación en la cola).\n * - `primaryPassenger` solo sale si el `Line` trae `PassengerName`, y Sabre solo lo manda en un\n * `list` con `primaryPassenger: true` (`/LN`). Las fixtures de `queueFixtures` se grabaron sin\n * `/LN`, así que sus PNR van sin pasajero. Si el consumidor necesita uno, lo agrega con un\n * `map`; el helper no inventa datos que la grabación no tiene (#193).\n * - `paragraph` es el del primer `access`, `ignore`, `remove` o `place` que muestra el PNR, tal\n * cual. El localizador del párrafo sale del `Line`, o de la línea de firma si no hay `Line`\n * (`place` dentro de una cola).\n * - Un PNR que solo aparece como colocado (`place` fuera de una cola) va sin párrafo, y el fake le\n * agrega una línea de firma.\n *\n * La cola en la que van los decide quien lo usa:\n *\n * ```ts\n * createQueueFake({ queues: { '9': queueFakePnrs(queueFixtures.walk) } })\n * ```\n *\n * Las fixtures de `queueFixtures` usan alias distintos (`walk`: `AAAAAA`–`AAAAAD`, `place`:\n * `AAAAAE`–`AAAAAF`, `placeWithoutInstructionCodeInside`: `AAAAAG`–`AAAAAH`), así que los PNR de\n * varias se pueden juntar en un mismo fake.\n */\nexport function queueFakePnrs(fixture: RecordedFixture): QueueFakePnr[] {\n const pnrs = new Map<string, QueueFakePnr>();\n const add = (locator: string, fields: Omit<QueueFakePnr, 'locator'>) => {\n const current = pnrs.get(locator) ?? { locator };\n // Lo primero que se vio de cada campo se queda: la lista va antes que el resto.\n pnrs.set(locator, { ...fields, ...current });\n };\n\n const responses = fixture.responses.filter((response) => QUEUE_OPERATION.test(response.operation));\n const ordered = [\n ...responses.filter((response) => response.operation === 'queue.list'),\n ...responses.filter((response) => response.operation !== 'queue.list'),\n ];\n for (const response of ordered) {\n const payload = untrimmedPayload(response.body);\n const lines = asArray(payload?.Line)\n .map(lineFields)\n .filter((fields) => fields !== undefined);\n for (const { locator, placedAt, placedBy, primaryPassenger } of lines) {\n add(locator, {\n ...(placedAt === undefined ? {} : { placedAt }),\n ...(placedBy === undefined ? {} : { placedBy }),\n ...(primaryPassenger === undefined ? {} : { primaryPassenger }),\n });\n }\n if (response.operation === 'queue.list') continue;\n // `place` fuera de una cola: cada PNR colocado, en su `QueueInfo`.\n for (const info of asArray(payload?.QueueInfo)) {\n const locator = attribute((info as Record<string, unknown>).UniqueID, 'ID');\n if (locator !== undefined) add(locator, {});\n }\n\n const paragraph = textLines(response.body, /<(?:\\w+:)?QueuePlaceRS\\b/.test(response.body) ? 'QueuePlaceRS' : 'QueueAccessRS');\n if (paragraph.length === 0 || isEndOfDisplay(paragraph.find((line) => line.trim() !== ''))) continue;\n const locator = lines.length === 1 ? lines[0]!.locator : signatureLocator(paragraph);\n if (locator !== undefined) add(locator, { paragraph });\n }\n return [...pnrs.values()];\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"instructionCode\": 11,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": true,\n \"placements\": 2,\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAE\",\n \"warnings\": 0\n },\n {\n \"step\": \"place dentro de la cola a 52\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAF\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 51: remove\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"end-of-display\",\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 1,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAE\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 52: remove\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"end-of-display\",\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 2,\n \"placeInsideReturns\": \"next\",\n \"afterPlaceInside\": {\n \"51\": 0,\n \"52\": 1\n },\n \"finalCounts\": {\n \"51\": 0,\n \"52\": 0\n },\n \"emptyAtEnd\": true,\n \"foreignPnrSeen\": false,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 219,\n \"messageId\": \"1507138129113180520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 270,\n \"messageId\": \"834296129115631360\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1181,\n \"messageId\": \"1507184129117060520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 150,\n \"messageId\": \"1507317129128850520\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 337,\n \"messageId\": \"1507398129130331410\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1389,\n \"messageId\": \"834244129133751160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 198,\n \"messageId\": \"834406129147701160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 124,\n \"messageId\": \"1507450129149741430\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 151,\n \"messageId\": \"1507525129150890560\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 268,\n \"messageId\": \"1507586129152441040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 167,\n \"messageId\": \"834439129155152350\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 109,\n \"messageId\": \"1507533129156791720\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 92,\n \"messageId\": \"1507704129157870910\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1507138129113180520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:11</eb:Timestamp><eb:RefToMessageId>mid:1e2b7680-3372-4cd2-8951-37d2933673ee</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>834296129115631360</eb:MessageId><eb:Timestamp>2026-11-02T03:35:11</eb:Timestamp><eb:RefToMessageId>mid:c86d56a7-dcc8-4d32-b47e-55533ba40d72</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:11Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507184129117060520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:12</eb:Timestamp><eb:RefToMessageId>mid:771bfafc-ba56-4f31-8861-c4f3e7e5d645</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:12Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </QueueInfo>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAF\\\"/>\\n </QueueInfo>\\n <Text>XXXXX XXXXXXXXX XXXXXXXXX</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507317129128850520</eb:MessageId><eb:Timestamp>2026-11-02T03:35:12</eb:Timestamp><eb:RefToMessageId>mid:e2a60150-9465-4537-a3bd-d204f09ac8b1</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:12Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507398129130331410</eb:MessageId><eb:Timestamp>2026-11-02T03:35:13</eb:Timestamp><eb:RefToMessageId>mid:810a3899-608b-4bd1-a26f-ce426439654f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:13Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAE H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>834244129133751160</eb:MessageId><eb:Timestamp>2026-11-02T03:35:14</eb:Timestamp><eb:RefToMessageId>mid:60d8dffe-5ad8-4995-a7fe-d1c88507fcfd</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:14Z\\\"/>\\n </stl:ApplicationResults>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXX XXXX/XXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXXX XXXX XXXXXX *X9X XX *X9X XX XXXXXXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX XXX XXXX</Text>\\n <Text>XXXX XXX XXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X X/ XXXX XXX99 9999999999 X 99.99</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX X999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX99XXXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>99.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XXXX9999999999999999 9.9XXXXX XXXX XXXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAF H</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.remove\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>834406129147701160</eb:MessageId><eb:Timestamp>2026-11-02T03:35:14</eb:Timestamp><eb:RefToMessageId>mid:09946a8f-4d1b-4fff-b002-73f365491761</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:14Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507450129149741430</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:0af46a14-6f62-4b29-9f71-ca156d1bc94c</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"52\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6048\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507525129150890560</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:a08aa346-6af9-449d-a014-5526ed0c1615</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:35:15Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507586129152441040</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:80821434-2a4c-463a-a90b-a19d39c995c3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAE\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAE H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.remove\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>834439129155152350</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:f0a85208-ee49-4a20-a4bc-5ae2038abd5f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1507533129156791720</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:ef241eb0-7cca-4557-8a71-a9273af47c56</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:35:15Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:35\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>ed11808f-94f9-42ce-ac49-402112b56868</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1507704129157870910</eb:MessageId><eb:Timestamp>2026-11-02T03:35:15</eb:Timestamp><eb:RefToMessageId>mid:f4eff23a-501b-403c-8deb-af875cd7441b</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-01: la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica scripts/lib/legacy-recorder.mjs: el alias de cada sobre sale de su Line/UniqueID, y en el place dentro de la cola, del resultado registrado. 2026-11-06: los alias se renombraron (AAAAAA → AAAAAE, AAAAAB → AAAAAF) para no pisar los de las otras fixtures de queueFixtures: cada una usa los suyos (#166).\"\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queuePlace: INSTRUCTION NUMBER NOT IN RANGE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 0,\n \"afterPlaceInside\": {\n \"51\": 0,\n \"52\": 0\n },\n \"finalCounts\": {\n \"51\": 0,\n \"52\": 0\n },\n \"emptyAtEnd\": true,\n \"foreignPnrSeen\": false,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 291,\n \"messageId\": \"696038116489921040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 306,\n \"messageId\": \"1368643116492372030\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1161,\n \"messageId\": \"1368817116494140910\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queuePlace\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queuePlace: INSTRUCTION NUMBER NOT IN RANGE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 164,\n \"messageId\": \"1368897116505762260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 107,\n \"messageId\": \"1368800116507391600\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"696261116508481040\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 181,\n \"messageId\": \"1369004116509910910\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 113,\n \"messageId\": \"1368905116511721330\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 216,\n \"messageId\": \"1368862116512881600\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 91,\n \"messageId\": \"1369002116515020820\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>696038116489921040</eb:MessageId><eb:Timestamp>2026-11-02T03:14:09</eb:Timestamp><eb:RefToMessageId>mid:77d06f35-e9b1-4097-a87e-a4c2f94b7d11</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368643116492372030</eb:MessageId><eb:Timestamp>2026-11-02T03:14:09</eb:Timestamp><eb:RefToMessageId>mid:a1d5f941-bde3-4c97-bb10-518525106dae</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:09Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368817116494140910</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:2bd54110-d5cd-48a9-8f56-4fb3efbe50ed</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:10Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>INSTRUCTION NUMBER NOT IN RANGE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368897116505762260</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:21bbcfc1-4915-49dc-a35f-19cf5c06645a</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:10Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368800116507391600</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:672fb639-8d29-4bf8-aa6a-8967f0f8eea7</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:10Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>696261116508481040</eb:MessageId><eb:Timestamp>2026-11-02T03:14:10</eb:Timestamp><eb:RefToMessageId>mid:fd1cd62a-a2f9-4578-9099-81324d05e11f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:10Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1369004116509910910</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:348634ba-1102-4b60-88d7-b22dcde08237</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:11Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368905116511721330</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:4cb87408-be0e-4d2c-a5c0-d6eb90c05604</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:14:11Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1368862116512881600</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:a68247d9-8b80-4be1-a29d-f98fc874cdba</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:14:11Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:14\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>3792aacf-e3c3-4363-9000-15f67b73a5dc</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1369002116515020820</eb:MessageId><eb:Timestamp>2026-11-02T03:14:11</eb:Timestamp><eb:RefToMessageId>mid:4fbbf8b2-5f08-4e22-a76d-639bb7280ddb</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ]\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"designated\": 2,\n \"instructionCode\": 11,\n \"results\": [\n {\n \"51\": 0,\n \"52\": 0,\n \"step\": \"count inicial\",\n \"ok\": true\n },\n {\n \"step\": \"place fuera de una cola\",\n \"ok\": true,\n \"placements\": 2,\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place\",\n \"ok\": true\n },\n {\n \"step\": \"access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAG\",\n \"warnings\": 0\n },\n {\n \"step\": \"place dentro de la cola a 52\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queuePlace: NEED INSTRUCTION NUMBER (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"limpieza 51: exit\",\n \"ok\": true\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count después de place dentro de la cola\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 51\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAG\",\n \"warnings\": 0\n },\n {\n \"step\": \"limpieza 51: exit\",\n \"ok\": true\n },\n {\n \"step\": \"limpieza: access 52\",\n \"ok\": true,\n \"done\": true,\n \"reason\": \"empty\",\n \"message\": \"QUEUE SELECTED WAS EMPTY\",\n \"warnings\": 0\n },\n {\n \"51\": 2,\n \"52\": 0,\n \"step\": \"count final\",\n \"ok\": true\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"started\": true,\n \"placedCount\": 2,\n \"afterPlaceInside\": {\n \"51\": 2,\n \"52\": 0\n },\n \"finalCounts\": {\n \"51\": 2,\n \"52\": 0\n },\n \"emptyAtEnd\": false,\n \"foreignPnrSeen\": true,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 224,\n \"messageId\": \"1447558123641760140\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 248,\n \"messageId\": \"1447616123643931410\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1179,\n \"messageId\": \"1447485123645400970\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"774662123657231160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 332,\n \"messageId\": \"1447690123658680240\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queuePlace\",\n \"action\": \"QueuePlaceLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 1209,\n \"messageId\": \"1447671123662030850\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queuePlace\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queuePlace: NEED INSTRUCTION NUMBER (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 167,\n \"messageId\": \"1447862123674122260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 153,\n \"messageId\": \"1447868123675771450\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 414,\n \"messageId\": \"1447869123677321200\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 193,\n \"messageId\": \"774917123681491160\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 111,\n \"messageId\": \"1448030123683420710\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 105,\n \"messageId\": \"1447953123684520740\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 94,\n \"messageId\": \"1448022123685580350\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1447558123641760140</eb:MessageId><eb:Timestamp>2026-11-02T03:26:04</eb:Timestamp><eb:RefToMessageId>mid:17dec477-8068-457d-a57a-55a61983a08b</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447616123643931410</eb:MessageId><eb:Timestamp>2026-11-02T03:26:04</eb:Timestamp><eb:RefToMessageId>mid:a11cc40c-ef6e-43b1-8aaf-09441713a1d3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:04Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447485123645400970</eb:MessageId><eb:Timestamp>2026-11-02T03:26:05</eb:Timestamp><eb:RefToMessageId>mid:a6b248de-8d0e-4c8a-96e5-9a69e3482cba</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:05Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </QueueInfo>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\">\\n <QueueIdentifier Number=\\\"0051\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n <UniqueID ID=\\\"AAAAAH\\\"/>\\n </QueueInfo>\\n <Text>XXXXX XXXXXXXXX XXXXXXXXX</Text>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>774662123657231160</eb:MessageId><eb:Timestamp>2026-11-02T03:26:05</eb:Timestamp><eb:RefToMessageId>mid:1210f083-0edb-4ef3-b242-e2a65b6f5144</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:05Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447690123658680240</eb:MessageId><eb:Timestamp>2026-11-02T03:26:06</eb:Timestamp><eb:RefToMessageId>mid:e0868a8b-5dd7-4840-a597-9d1b9be82ef2</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:06Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAG H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.place\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueuePlaceLLSRQ</eb:Service><eb:Action>QueuePlaceLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447671123662030850</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:80f280ba-def5-486e-bf59-1415a65d3121</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueuePlaceRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.0.4\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:26:07Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>NEED INSTRUCTION NUMBER</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueuePlaceRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.exit\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447862123674122260</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:7a49bd13-2dbe-4d2f-b174-3eafff94cf19</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:07Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>XXX 9XXX XXXXX 999</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447868123675771450</eb:MessageId><eb:Timestamp>2026-11-02T03:26:07</eb:Timestamp><eb:RefToMessageId>mid:6af01817-942c-4805-bc5c-a8e9d65e2a52</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:07Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447869123677321200</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:60b221e6-eac3-4280-b26c-96e4f757abc0</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-01-26T10:32</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAG\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>011 SEE REMARKS</Text>\\n <Text>9.9XXXXXX XXXXXXXXX/XXXXXX XXXXX XX</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 9999X 9999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X /XXXX*XXXXXX /X</Text>\\n <Text>9 XX 999X 99XXX X XXXXXX XX9 999X 999X XXX /XXXX*XXXXXX /X</Text>\\n <Text>XXXXXXXX XX XXXXXXXXXXX XXX XXXXXXXXXX XXXXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX 999999999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX 999</Text>\\n <Text>XXXXXXX XXXX</Text>\\n <Text>XXXXXX</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXX/XXXXXXXX XXXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 99X X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>9 XX 999X 99XXX XXXXXX XX 9X X 9.9 XXXXXX XXXXXXXXX/XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX9999X 99XXX XXXXXX 999X 999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 9999X</Text>\\n <Text>9.XXX 9X *** XXXX XXXX XXX XX 999X 99XXX XXXXXX 9999X 999X</Text>\\n <Text>REMARKS</Text>\\n <Text>9..XX-XXX</Text>\\n <Text>9..XXXXX-X99</Text>\\n <Text>9..XXXXXXXXX-999</Text>\\n <Text>9..XX99-XXXXXX XXXXXXXXXX X XX XXXXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXX XXXX/XXXX</Text>\\n <Text>9.XXXXXXX/9XXX*XXX 9999/99XXX99 XXXXXX</Text>\\n <Text>9.X-XXXXX XX/999999/99XXX99 XXXXXX 99/99 99/99 XXXXXX XXXXXXX</Text>\\n <Text>9.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X999/X99</Text>\\n <Text>99/XXX/XX 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 9/X999/X9/XXX/XXX</Text>\\n <Text>X9999999999999999 9.9XXXXXX XXXXXXXXX X/9/X/X-9999999999</Text>\\n <Text>999/9999</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X999/X9/XXX/</Text>\\n <Text>XXXX9999999999999999 9.9XXXXXX XXXXXXXXX XXXXXX XXXXX XX/</Text>\\n <Text>9/X/XXX</Text>\\n <Text>RECEIVED FROM - XX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAG H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.exit\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>774917123681491160</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:79a60043-9468-4904-97f4-5a66b16ebd07</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>XXX 9XXX XXXXX 999</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1448030123683420710</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:c5c20a5c-1574-45ec-9065-5952f4624166</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T03:26:08Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1447953123684520740</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:df42e795-20fe-46f7-87a0-658f78cd2c59</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T03:26:08Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T21:26\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1203\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"51\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6049\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>2ef4246e-a5b8-4112-b447-afff44cd9453</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1448022123685580350</eb:MessageId><eb:Timestamp>2026-11-02T03:26:08</eb:Timestamp><eb:RefToMessageId>mid:fb8eaff8-33f0-4e1b-8f64-7b14a7adf808</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-06 (#166): la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica createAnonymizer: el alias de cada sobre sale de su Line/UniqueID. Firmas corregidas: 2. 2026-11-06: los alias se renombraron (AAAAAA → AAAAAG, AAAAAB → AAAAAH) para no pisar los de las otras fixtures de queueFixtures: cada una usa los suyos (#166).\"\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"scenario\": \"walk\",\n \"queue\": 2,\n \"results\": [\n {\n \"step\": \"count\",\n \"ok\": true,\n \"queues\": 4,\n \"totals\": {\n \"messages\": 6,\n \"specials\": 0,\n \"pnrs\": 4\n }\n },\n {\n \"step\": \"list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.I después de list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"access\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"listedCount\": 0,\n \"visitedCount\": 0,\n \"traversalMatchesList\": true,\n \"endOfDisplay\": false,\n \"listLeavesSessionInside\": false,\n \"qxiOutsideQueue\": {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"BusinessLogic\",\n \"retryable\": false\n }\n },\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 222,\n \"messageId\": \"1199952101079831070\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 278,\n \"messageId\": \"1200017101082320910\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 142,\n \"messageId\": \"1200044101083810080\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 100,\n \"messageId\": \"1200044101085261410\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 139,\n \"messageId\": \"1199941101086241390\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 106,\n \"messageId\": \"1200006101087651180\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 140,\n \"messageId\": \"1200044101088681410\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"BusinessLogic\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: QUEUE SELECTED WAS EMPTY (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 100,\n \"messageId\": \"1199968101090081330\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1199952101079831070</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:a37973a5-fca2-4e8a-a048-81797f296b6d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>1687197a-1fdf-4399-bb93-aad547384237</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200017101082320910</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:6dfa450a-1d25-49f6-a593-3aef2dcec746</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:48:28Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:48\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"6\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"200\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"300\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"6\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"4\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.list\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101083810080</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:f52dd06a-7db0-410a-b0a0-2c91e6510a7f</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.I\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101085261410</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:361814ab-7f11-48f3-91f6-3f395b6518c3</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>IGD</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1199941101086241390</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:e35f9c08-1897-4506-bdc9-fc1da04c575d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200006101087651180</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:ed4cb24c-3852-4103-bad1-f8825c22c9e5</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1200044101088681410</eb:MessageId><eb:Timestamp>2026-11-02T02:48:28</eb:Timestamp><eb:RefToMessageId>mid:ef8c789c-b9fb-4562-bbbf-39a4c185d295</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:48:28Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>QUEUE SELECTED WAS EMPTY</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>1687197a-1fdf-4399-bb93-aad547384237</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1199968101090081330</eb:MessageId><eb:Timestamp>2026-11-02T02:48:29</eb:Timestamp><eb:RefToMessageId>mid:440999a3-b118-4058-9c6a-21397a50f69d</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ]\n}\n","{\n \"recordedAt\": \"2026-11-02\",\n \"environment\": \"production\",\n \"scenario\": \"walk\",\n \"queue\": 2,\n \"results\": [\n {\n \"step\": \"count\",\n \"ok\": true,\n \"queues\": 32,\n \"totals\": {\n \"messages\": 385,\n \"specials\": 0,\n \"pnrs\": 6048\n }\n },\n {\n \"step\": \"list\",\n \"ok\": true,\n \"locators\": [\n \"AAAAAA\",\n \"AAAAAB\",\n \"AAAAAC\",\n \"AAAAAD\"\n ]\n },\n {\n \"step\": \"probe.I después de list\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n {\n \"step\": \"access\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAA\",\n \"warnings\": 0\n },\n {\n \"step\": \"count dentro de la cola\",\n \"ok\": true,\n \"queues\": 32\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAB\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAC\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": false,\n \"locator\": \"AAAAAD\",\n \"warnings\": 0\n },\n {\n \"step\": \"ignore\",\n \"ok\": true,\n \"done\": true,\n \"message\": \"END OF DISPLAY FOR REQUESTED DATA\",\n \"warnings\": 0\n },\n {\n \"step\": \"close\",\n \"ok\": true\n }\n ],\n \"findings\": {\n \"listedCount\": 4,\n \"visitedCount\": 4,\n \"traversalMatchesList\": true,\n \"endOfDisplay\": true,\n \"listLeavesSessionInside\": false,\n \"qxiOutsideQueue\": {\n \"step\": \"probe.QXI fuera de una cola\",\n \"ok\": false,\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"retryable\": false\n }\n },\n \"countInsideKeepsCursor\": true,\n \"finalState\": \"outside\"\n },\n \"events\": [\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionCreate\",\n \"action\": \"SessionCreateRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 266,\n \"messageId\": \"1247125105523991180\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.open\",\n \"context\": {\n \"version\": \"2.0.0\",\n \"pseudoCityCode\": \"XXXX\"\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 250,\n \"messageId\": \"1247093105526902030\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 102,\n \"messageId\": \"1247182105528151200\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 222,\n \"messageId\": \"1247183105529190990\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: IGD (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 132,\n \"messageId\": \"1247263105531430560\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"warn\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 132,\n \"messageId\": \"574577105532791300\",\n \"error\": {\n \"name\": \"SabreBusinessError\",\n \"retryable\": false,\n \"service\": \"queueAccess\",\n \"code\": \"ERR.SWS.HOST.ERROR_IN_RESPONSE\",\n \"warnings\": [],\n \"errors\": [],\n \"message\": \"queueAccess: CANNOT DO THIS IF OFF QUEUE (ERR.SWS.HOST.ERROR_IN_RESPONSE)\"\n }\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 308,\n \"messageId\": \"1247230105534071340\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueCount\",\n \"action\": \"QueueCountLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 144,\n \"messageId\": \"1247236105537161720\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 272,\n \"messageId\": \"1247174105538621600\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 274,\n \"messageId\": \"1247301105541361240\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 325,\n \"messageId\": \"1247355105544140700\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"queueAccess\",\n \"action\": \"QueueAccessLLSRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 206,\n \"messageId\": \"1247363105547392260\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"debug\",\n \"message\": \"sabre.request.start\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.request.end\",\n \"context\": {\n \"protocol\": \"soap\",\n \"service\": \"sessionClose\",\n \"action\": \"SessionCloseRQ\",\n \"attempt\": 0,\n \"status\": 200,\n \"durationMs\": 92,\n \"messageId\": \"1247386105549450300\",\n \"warnings\": 0\n }\n },\n {\n \"level\": \"info\",\n \"message\": \"sabre.session.close\",\n \"context\": {\n \"pseudoCityCode\": \"XXXX\"\n }\n }\n ],\n \"responses\": [\n {\n \"operation\": \"openSession\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCreateRS</eb:Action><eb:MessageData><eb:MessageId>1247125105523991180</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:a1d9fa8c-2e9e-4f4f-bf0d-a76c3b24dba1</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCreateRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"2.0.0\\\" status=\\\"Approved\\\">\\t<ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</ConversationId></SessionCreateRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247093105526902030</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:ba6adaca-23b2-44cd-a76e-373035c066c8</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:52Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:55\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1204\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"4\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6048\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.list\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247182105528151200</eb:MessageId><eb:Timestamp>2026-11-02T02:55:52</eb:Timestamp><eb:RefToMessageId>mid:979b6cc5-f6ad-445d-a59e-8357ba0e5622</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:52Z\\\"/>\\n </stl:ApplicationResults>\\n <Line Number=\\\"1\\\">\\n <DateTime>2026-08-04T18:08</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAA\\\"/>\\n </Line>\\n <Line Number=\\\"2\\\">\\n <DateTime>2026-09-01T20:15</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAB\\\"/>\\n </Line>\\n <Line Number=\\\"3\\\">\\n <DateTime>2026-09-12T14:37</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAC\\\"/>\\n </Line>\\n <Line Number=\\\"4\\\">\\n <DateTime>2026-10-21T20:33</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAD\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>XXXXX XXXX XXX 9XXX XXXXX 999 XX 99XXX XX 9999</Text>\\n <Text>XXX XXX XXXXXXX XXXXXX XX XXXX XXXX XXXXX</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>9 XXXXXX XXX XXX 99XXX99 9999</Text>\\n <Text>XXX XX XXXX</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.I\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247183105529190990</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:32b6804d-3647-4aa6-8721-0c58fe41895c</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>IGD</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247263105531430560</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:2d462e6a-6456-4feb-9844-1d30129cfb44</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"probe.QXI\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>574577105532791300</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:cb937762-47ad-4035-981c-a12c9e3a5d97</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"NotProcessed\\\">\\n <stl:Error type=\\\"BusinessLogic\\\" timeStamp=\\\"2026-11-02T02:55:53Z\\\">\\n <stl:SystemSpecificResults>\\n <stl:Message>CANNOT DO THIS IF OFF QUEUE</stl:Message>\\n <stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>\\n </stl:SystemSpecificResults>\\n </stl:Error>\\n </stl:ApplicationResults>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.access\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247230105534071340</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:f75d90ce-57e3-4f17-929d-4cbde2c49d14</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:53Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-08-04T17:28</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAA\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXXXXXX XXXXXXXX/XXXX XXXXXXX</Text>\\n <Text>9.9XXXXXX XXXXXXX/XXXXXX XXXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXX99XXX9XXX X</Text>\\n <Text>XXXXXXXX XXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XXXXXXXXX</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99..XX99-XXXXX-999.99-XX XXXXXX</Text>\\n <Text>99..XX99-XXXXX-999.99-XX XXXXXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XX 9.9XXXXXXXXX XXXXXXXX XXXX XXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XX 9.9XXXXXX XXXXXXX XXXXXX XXXXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAA H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.count\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueCountLLSRQ</eb:Service><eb:Action>QueueCountLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247236105537161720</eb:MessageId><eb:Timestamp>2026-11-02T02:55:53</eb:Timestamp><eb:RefToMessageId>mid:5d406d05-c3e6-4b21-b593-721d65a5918e</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueCountRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.2.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:53Z\\\"/>\\n </stl:ApplicationResults>\\n <QueueInfo DateTime=\\\"11-01T20:55\\\" PseudoCityCode=\\\"XXXX\\\">\\n <QueueIdentifier Count=\\\"385\\\" Number=\\\"S\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"28\\\"/>\\n <QueueIdentifier Count=\\\"707\\\" Number=\\\"0\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"42\\\"/>\\n <QueueIdentifier Count=\\\"1204\\\" Number=\\\"1\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"45\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"2\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"50\\\"/>\\n <QueueIdentifier Count=\\\"11\\\" Number=\\\"5\\\"/>\\n <QueueIdentifier Count=\\\"303\\\" Number=\\\"100\\\"/>\\n <QueueIdentifier Count=\\\"95\\\" Number=\\\"6\\\"/>\\n <QueueIdentifier Count=\\\"373\\\" Number=\\\"101\\\"/>\\n <QueueIdentifier Count=\\\"230\\\" Number=\\\"7\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"102\\\"/>\\n <QueueIdentifier Count=\\\"772\\\" Number=\\\"9\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"103\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"11\\\"/>\\n <QueueIdentifier Count=\\\"114\\\" Number=\\\"108\\\"/>\\n <QueueIdentifier Count=\\\"5\\\" Number=\\\"12\\\"/>\\n <QueueIdentifier Count=\\\"3\\\" Number=\\\"110\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"16\\\"/>\\n <QueueIdentifier Count=\\\"807\\\" Number=\\\"115\\\"/>\\n <QueueIdentifier Count=\\\"1\\\" Number=\\\"18\\\"/>\\n <QueueIdentifier Count=\\\"109\\\" Number=\\\"116\\\"/>\\n <QueueIdentifier Count=\\\"76\\\" Number=\\\"20\\\"/>\\n <QueueIdentifier Count=\\\"206\\\" Number=\\\"118\\\"/>\\n <QueueIdentifier Count=\\\"2\\\" Number=\\\"21\\\"/>\\n <QueueIdentifier Count=\\\"795\\\" Number=\\\"120\\\"/>\\n <QueueIdentifier Count=\\\"9\\\" Number=\\\"22\\\"/>\\n <QueueIdentifier Count=\\\"72\\\" Number=\\\"195\\\"/>\\n <QueueIdentifier Count=\\\"12\\\" Number=\\\"24\\\"/>\\n <QueueIdentifier Count=\\\"105\\\" Number=\\\"25\\\"/>\\n </QueueInfo>\\n <Totals Count=\\\"385\\\" Type=\\\"MESSAGES\\\"/>\\n <Totals Count=\\\"0\\\" Type=\\\"SPECIALS\\\"/>\\n <Totals Count=\\\"6047\\\" Type=\\\"PNRS\\\"/>\\n</QueueCountRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247174105538621600</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:497d87c0-3e42-4117-988a-ff70bf7e9806</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-09-01T19:49</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAB\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXX/XXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-9XXXX XXX XXXX XX</Text>\\n <Text>XX XXX XXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX XX999</Text>\\n <Text>9.XXX XX XXXX 999999999-</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99..XX99-XXXXXX-999.99-9999</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 999/X999/X99</Text>\\n <Text>9/XXX/XXXX9999999999999999 9.9XXXXX XXXXXX XXXXX/9/X/X</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAB H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247301105541361240</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:31b11fbb-ef60-4a82-b41f-157edc016b8a</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-09-06T11:11</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAC\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXX/XXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX/XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX99XXX9XXX</Text>\\n <Text>XXXXXXXXX XXX</Text>\\n <Text>9.XXX XXXX 9X XXXXX XXXXXXXX XX XXXXXXX XX XXXXX XXXX</Text>\\n <Text>9.XXX XXXX 9X XXX XXXXXXXX XXXXXXXX XXXXXXX XX 99XXX99 9999XX</Text>\\n <Text>X</Text>\\n <Text>9.XXX XXXX 9X 9999999999999 XXXX9 XXX 999 XX 999 XXX9</Text>\\n <Text>9.XXX XXXX 9X XX XXXXXXXX XXX XX XXXXXX XX XXXXXXXXX XXXXXX</Text>\\n <Text>9.XXX XXXX 9X XX XXXXXX XX XXXX XXXX XXX XX XXXX XXX XX XXXXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX99-XXXXX-999.99-9999</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/999/XXX9999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/999/XXX999</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99/ 9999/ 99/X9999/X9</Text>\\n <Text>999/XXX/XXXX999999999999999 9.9XXXXX XXXXXX XXXXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 9/ 999/ 9/X99/X9/XXX/XXXX</Text>\\n <Text>999999999999999 9.9XXXXX XXXXXX XXXXXX/9/X/X-99999999999</Text>\\n <Text>99/99</Text>\\n <Text>RECEIVED FROM - XXXXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAC H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247355105544140700</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:44b2358f-b88b-47b5-bcf9-120cd2174325</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Line>\\n <DateTime>2026-10-09T12:42</DateTime>\\n <POS>\\n <Source AgentSine=\\\"AAA\\\" PseudoCityCode=\\\"XXXX\\\"/>\\n </POS>\\n <UniqueID ID=\\\"AAAAAD\\\"/>\\n </Line>\\n <Paragraph>\\n <Text>084 RATE/CONFIRMATION NUMBER RTND</Text>\\n <Text>9.9XXXXX XXXXXXX/XXXXXXX</Text>\\n <Text>9 XXX XX 99XXX X XX9 XXX/XXXX XXXXX</Text>\\n <Text>TKT/TIME LIMIT</Text>\\n <Text>9.X-99XXX-9XXX*XXX</Text>\\n <Text>PHONES</Text>\\n <Text>9.XXX999 9999999-X</Text>\\n <Text>XXXXXXXXX XXXXXX *XX XX XXXXXXX</Text>\\n <Text>PASSENGER EMAIL DATA EXISTS *PE TO DISPLAY ALL</Text>\\n <Text>XXXXXXXX XXXXXX - 999999</Text>\\n <Text>INVOICED</Text>\\n <Text>ADDRESS</Text>\\n <Text>XXXXXXXXXXX XXXXX XX XX XX</Text>\\n <Text>XXXXXXX XXXXXXXXXXXX XXXXX 99</Text>\\n <Text>XXX. XXX XXXXXXX</Text>\\n <Text>XXXXXXX, XXX X.X. 99999</Text>\\n <Text>XXXXX XXXXX XXXXXX XXXXXX - XXXXXX</Text>\\n <Text>XXXXXX XXXXXX -</Text>\\n <Text>¤ XXXXXX XXXXXX</Text>\\n <Text>XXXXXXXX XXXXXXXX XXXX XXXXXX *XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXX,XXXXXX,XXX/XX XXXXXXXXXX XXXXX XXXX XXXXX</Text>\\n <Text>*XX XX XXXXXXX XXX</Text>\\n <Text>XXXXXXXX XXXX XXXXXX *X9X XX *X9X XX XXXXXXX</Text>\\n <Text>AA FACTS</Text>\\n <Text>XXXX XXXX XXXXXX - XXXXXX XXX *X9 XX XXXX</Text>\\n <Text>9.XXX XXXX XX XX/XX9999999999999</Text>\\n <Text>9.XXX 9X XXX XXXXXXXXX XXXXXXXX</Text>\\n <Text>9.XXX XXXX 9X XXXX XX 99XXX99 9999XXX XXX 9-999XXXX XXX XXXX</Text>\\n <Text>XXXX XXX XXX</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X 99999999</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>9.XXX 9X X/ XXXX XXX99 9999999999 X 99.99</Text>\\n <Text>9.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>99.XXX 9X 99999999</Text>\\n <Text>99.XXX 9X XXXXXX XX XXXXXXXXX XXXXXXXX 9999999999999 XXXXXX 99</Text>\\n <Text>X</Text>\\n <Text>99.XXX XXXX 9X XXXX XXXXXXXXXXX XX XXXXXXX XXX</Text>\\n <Text>99.XXX XXXX 9X XX XXXXXXXX XXX XX XXXXXX XX XXXXXXXXX XXXXXX</Text>\\n <Text>99.XXX XXXX 9X XX XXXXXX XX XXXX XXXX XXX XX XXXX XXX XX XXXXX</Text>\\n <Text>99.XXX XXXX 9X XXXX XXX XX XXX XXXXXXX</Text>\\n <Text>GENERAL FACTS</Text>\\n <Text>9.XXX XX XXXX 99999999 XXXXXXXXXXX XXXXX XXX 9XXX</Text>\\n <Text>9.XXX XX XXXX XX999</Text>\\n <Text>9.XXX XX XXXX 999999999-</Text>\\n <Text>REMARKS</Text>\\n <Text>9.‡XX XXXXXX XXXXXXX XXX XXXXXXXXXX XXXXX XX XX XXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXX XXXXX XXX XXXXXXX XX XXX XX XXXXX</Text>\\n <Text>9.‡9 XXXXX XXXXXXXXXXX X XX XXXXX XX XXXXXXX</Text>\\n <Text>9.‡XX XXXX XX XXX XX XXXX X XXXXXX, XX XX XXXXX XXXXXXXX</Text>\\n <Text>9.‡XX XXXXXXXXX XXXXXXXX X XX XXXXXXXXX XXXX XX XXXXXX</Text>\\n <Text>9.‡XX XXXXX XX XX XXXXXX</Text>\\n <Text>9.‡**XX XXXXXXXXX XXXXX XXXXX XX 99 XXX XXXXX XX XX XXXXXX**</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX XXXXX</Text>\\n <Text>9.‡XX XXXXXX XXXXXXXXXXXXXXX XXXXX XX XXXXXXXXXXX 9 XXX</Text>\\n <Text>99.‡XXXXX, XXXXXXXXXXX XXX XXXXXXXXXXXXXX XXXXXXX</Text>\\n <Text>99.‡XX XXXXXXXXXXX XXXXX XXXXXXXXXXX XX XXXXXXXXXXX</Text>\\n <Text>99.‡XXXXXXX</Text>\\n <Text>99..XX99XXXXXXX XXXXXX</Text>\\n <Text>99..XX-99</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.XXXXX/</Text>\\n <Text>99..XX-XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX9999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X-XXXX/9999999999999/9XXX*XXX/9XXX*XXX</Text>\\n <Text>99.X-XXXX-XXXX/XX9999/99XXX/99999999999999999999</Text>\\n <Text>99.X- XXXX-XXX/999999/99/XXX999.99</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99.X- XXXX-XXX XXX XXXXXXXX/</Text>\\n <Text>99..XX99-XXXXXX-999.99-9999</Text>\\n <Text>99.X-XXX</Text>\\n <Text>XXXXXXXXXX XXXX</Text>\\n <Text>9. XX‡9999999999/ 99.99/ 9999.99/ 999.99/X999.99/</Text>\\n <Text>X999.99/XXX/XXXX9999999999999999 9.9XXXX/9/X/X</Text>\\n <Text>9. XX‡9999999999/ 99.99/ 9999.99/ 9.99/X999.99/</Text>\\n <Text>X999.99/XXX/XXXX9999999999999999 9.9XXXXX XXXXXXX XXXXXXX</Text>\\n <Text>/9/X/X-9999999999999/99</Text>\\n <Text>9. XX‡9999999999/ 9.99/ 999.99/ 9.99/X999.99/X9.9</Text>\\n <Text>9/XXX/XXXX9999999999999999 9.9XXXXX XXXXXXX XXXXXXX/9/X/X</Text>\\n <Text>XX</Text>\\n <Text>RECEIVED FROM - XXXXXXX XXXXXX</Text>\\n <Text>9XXX.9XXX*XXX 9999/99XXX99 AAAAAD H</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"queue.ignore\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service>QueueAccessLLSRQ</eb:Service><eb:Action>QueueAccessLLSRS</eb:Action><eb:MessageData><eb:MessageId>1247363105547392260</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:608af838-ced1-4e40-9fe4-d58058352510</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><QueueAccessRS xmlns=\\\"http://webservices.sabre.com/sabreXML/2011/10\\\" xmlns:xs=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:stl=\\\"http://services.sabre.com/STL/v01\\\" Version=\\\"2.1.1\\\">\\n <stl:ApplicationResults status=\\\"Complete\\\">\\n <stl:Success timeStamp=\\\"2026-11-02T02:55:54Z\\\"/>\\n </stl:ApplicationResults>\\n <Paragraph>\\n <Text>END OF DISPLAY FOR REQUESTED DATA</Text>\\n </Paragraph>\\n</QueueAccessRS></soap-env:Body></soap-env:Envelope>\"\n },\n {\n \"operation\": \"close\",\n \"status\": 200,\n \"attempts\": 1,\n \"body\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<soap-env:Envelope xmlns:soap-env=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\"><soap-env:Header><eb:MessageHeader xmlns:eb=\\\"http://www.ebxml.org/namespaces/messageHeader\\\" eb:version=\\\"1.0\\\" soap-env:mustUnderstand=\\\"1\\\"><eb:From><eb:PartyId eb:type=\\\"URI\\\"/></eb:From><eb:To><eb:PartyId eb:type=\\\"URI\\\"/></eb:To><eb:CPAId>XXXX</eb:CPAId><eb:ConversationId>f72193ed-73f9-4fe8-9ed8-bdbec43a7259</eb:ConversationId><eb:Service eb:type=\\\"sabreXML\\\">Session</eb:Service><eb:Action>SessionCloseRS</eb:Action><eb:MessageData><eb:MessageId>1247386105549450300</eb:MessageId><eb:Timestamp>2026-11-02T02:55:54</eb:Timestamp><eb:RefToMessageId>mid:a8b7ba31-e1bb-4f9c-81c6-b9ff8dcea4c4</eb:RefToMessageId></eb:MessageData></eb:MessageHeader><wsse:Security xmlns:wsse=\\\"http://schemas.xmlsoap.org/ws/2002/12/secext\\\"><wsse:BinarySecurityToken valueType=\\\"String\\\" EncodingType=\\\"wsse:Base64Binary\\\">[REDACTED]</wsse:BinarySecurityToken></wsse:Security></soap-env:Header><soap-env:Body><SessionCloseRS xmlns=\\\"http://www.opentravel.org/OTA/2002/11\\\" version=\\\"1\\\" status=\\\"Approved\\\"/></soap-env:Body></soap-env:Envelope>\"\n }\n ],\n \"postprocessed\": \"2026-11-06 (#166): la anonimización de esta corrida enmascaró la línea de firma entera. Se le devolvió la forma (alias del localizador y la H final) con la regla que hoy aplica createAnonymizer: el alias de cada sobre sale de su Line/UniqueID. Firmas corregidas: 4.\"\n}\n","// Respuestas de producción grabadas en la validación del Tier 3 (#96 y #97), anonimizadas: PCC\n// como `XXXX`, firmas como `AAA`, localizadores como alias (`AAAAAA`…), el token como\n// `[REDACTED]` y el párrafo enmascarado (letras a `X`, dígitos a `9`), salvo los avisos PIC,\n// los encabezados fijos y el fin de cola. Ver scripts/lib/legacy-recorder.mjs.\nimport placeJson from '../../test/fixtures/queue.production-place.json';\nimport placeWithoutCodeJson from '../../test/fixtures/queue.production-place-sin-pic.json';\nimport placeWithoutCodeInsideJson from '../../test/fixtures/queue.production-place-sin-pic-adentro.json';\nimport emptyQueueJson from '../../test/fixtures/queue.production-walk-empty-queue.json';\nimport walkJson from '../../test/fixtures/queue.production-walk.json';\n\n/** Una respuesta grabada: la operación del SDK, el HTTP status y el sobre SOAP tal cual llegó. */\nexport interface RecordedResponse {\n /** `operation` de `onRawResponse` (`'openSession'`, `'queue.access'`…) o `probe.*` si el script la mandó crudo. */\n operation: string;\n status: number;\n body: string;\n}\n\n/** Una corrida grabada: sus respuestas en el orden en que llegaron. */\nexport interface RecordedFixture {\n /** Fecha de la corrida, `YYYY-MM-DD` en UTC. */\n recordedAt: string;\n responses: readonly RecordedResponse[];\n}\n\nfunction fixture(json: { recordedAt: string; responses: readonly RecordedResponse[] }): RecordedFixture {\n return Object.freeze({\n recordedAt: json.recordedAt,\n responses: Object.freeze(\n json.responses.map(({ operation, status, body }) => Object.freeze({ operation, status, body })),\n ),\n });\n}\n\n/**\n * Las corridas de producción del Tier 3. Cada una usa sus propios alias de localizador, así que\n * se pueden juntar en un fake con `queueFakePnrs` sin que choquen:\n * - `walk`: `AAAAAA`–`AAAAAD`; `place`: `AAAAAE`–`AAAAAF`;\n * `placeWithoutInstructionCodeInside`: `AAAAAG`–`AAAAAH`.\n *\n * Qué trae cada una:\n * - `walk`: `count`, `list`, `access` y `ignore` sobre una cola de 4 PNR hasta el fin de cola,\n * más `I` y `QXI` fuera de una cola;\n * - `emptyQueue`: `access` y `list` sobre una cola vacía (`QUEUE SELECTED WAS EMPTY`);\n * - `place`: `place` fuera y dentro de una cola, y `remove` hasta el fin de cola;\n * - `placeWithoutInstructionCode` y `placeWithoutInstructionCodeInside`: `place` sin PIC, fuera\n * (`INSTRUCTION NUMBER NOT IN RANGE`) y dentro de una cola (`NEED INSTRUCTION NUMBER`).\n *\n * El `list` de `walk` se grabó sin `primaryPassenger: true` (sin `/LN`), así que ningún `Line`\n * trae `PassengerName` (#193).\n */\nexport const queueFixtures: Readonly<{\n walk: RecordedFixture;\n emptyQueue: RecordedFixture;\n place: RecordedFixture;\n placeWithoutInstructionCode: RecordedFixture;\n placeWithoutInstructionCodeInside: RecordedFixture;\n}> = Object.freeze({\n walk: fixture(walkJson),\n emptyQueue: fixture(emptyQueueJson),\n place: fixture(placeJson),\n placeWithoutInstructionCode: fixture(placeWithoutCodeJson),\n placeWithoutInstructionCodeInside: fixture(placeWithoutCodeInsideJson),\n});\n"],"mappings":"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","names":["XMLParser","tickets","XMLParser","text","envelope","node","text","text","XMLParser","text","text","text","month","number","date","status","quantity","text","LOCATOR","MONTHS","fail","parser","XMLParser","node","pad","lines","textLines","text","identifiers","messages","pnrs","pnrsTotal","queueKey","element","text","fixture","locator","json"]}