Многие знают (читали мои опусы), но я на всякий случай напомню, я довольно много лет работал со SWIFT и непосредственно в SWIFT как инженер поддержки, аналитик, консультант, тренер, разработчик, в общем, занимался многими вещами.
Нынче я работаю аналитиком в конторе, которая пишет программное обеспечение для центробанков, расчётных платёжных систем, систем мгновенных платежей, и, в числе прочих активностей мы разрабатываем стандарты и форматы для обеспечения работы всех этих систем и бизнес процедур для различных стран (наши продукты работают более чем в 50 странах мира). В том числе мы много и плотно общаемся со SWIFT по вопросам совместимости форматов и стандартов сообщений, выработки новых стандартов и прочим подобным вопросам.
Небольшое введение про то, как вообще платёжные системы работают и причём тут форматы сообщений. Принципиально есть две схемы,
(1) цепочка, когда деньги переправляются от дебитора кредитору через участников по очереди и
(2) работа через центральных клиринговый узел, когда участники отправляют свои сообщения в центральную систему, а она уже сама раскладывает платежи и учитывает позиции участников.
Первая схема универсальна, и она работает в принципе всегда, были бы только взаимные счета у участников в цепочке, чтобы деньги переложить.
Вторая схема требует выполнения некоторых предварительных приседаний, самым главным из которых которых является условие "подключиться к центральной системе" (как подключиться, напрямую или через участника расчётов не важно, главное, что все участники должны иметь доступ к центральной системе).
Очевидно, что любые взаимодействия между большим количеством участников требуют неких единых стандартов оформления бизнес-процедур, а также единых форматов сообщений.
Таким образом, для каждой такой центральной системы (далее я буду использовать термин Market Infrastructure -- MI), используются свои стандарты и форматы, свои обозначения и правила для номеров счетов и идентификации как участников, так и конечных бенефициаров расчётов. Всё это определяет регулятор MI, обычно это платёжная система страны (или объединения нескольких стран в регионе, тогда правила устанавливают центробанки этих стран совместно).
Первый способ, передача сообщений по цепочке также требует неких единых стандартов форматов, полей, принципов именований, кодовых страниц, с тем, чтобы все участники в цепочке могли без принципиальных преобразований передавать информацию далее.
Очевидно, что задачи выработки форматов и стандартов, а также общих принципов бизнес-процедур для трансграничных обменов сообщениями должны неким образом координироваться между всеми участниками во всём мире. И действительно, SWIFT, созданный в 1972 году, должен был решить эту задачу, выработав единые форматы и стандарты. Именно тогда и появились стандарты FIN MT.
С течением времени их стало не хватать (активности изменялись и расширялись) и была сделана попытка преобразовать FIN MT в стандарт ISO15022. К сожалению, этот стандарт разрабатывали совсем другие люди, которые уже не помнили (а то и вовсе не понимали) того, что было раньше, кроме того, хотели сохранить совместимость с предыдущими форматами, и в результате получилось, мягко говоря, не очень.
Простейший пример: именование платежа. Именований платежа есть два, между двумя ближайшими точками в рамках цепочки (point-to-point) и между началом и концом в цепочке (end-to-end).
Для point-to-point было предусмотрено поле 20 -- Transaction Reference Number из 16 символов в 4-ом блоке сообщения (это блок непосредственно финансовой информации), но потом оказалось, что транзакций в одном сообщении может быть несколько, а для end-to-end предложили использовать поле Message User Reference (MUR) в 3-м блоке (пользовательские служебные параметры сообщения).
И дальше началось...
МТ103: клиентский одинарный платёж, поле 20 называется "Референс отправителя"
МТ102: клиентский множественный платеж, когда в одном сообщении может быть несколько транзакций, поле 20 называется "Референс файла", т.е. общий референс на всю пачку, но при этом на каждой транзакции в пачке есть поле 21, которое и называется "Референс транзакции".
МТ200: банковский перевод, поле 20 так и осталось "Референс транзакции".
МТ202: банковский перевод для подкрепления счёта клиента, поле 20 опять называется "Референс транзакции", но при этом появляется поле 21, которое называется "Связанный референс", в нём пишется референс (поле 20) соответствующего МТ103.
В ISO15022 была сделана попытка всю эту непотребщину хотя бы немного причесать, приведя к каким-то одинаковостям, но как мы видим, попытка кончилась ничем. А поле MUR в третьем блоке, которое должно использоваться для end-to-end референса, используют как попало, более того, поскольку третий блок не входит в финансовую информацию, его и вовсе игнорируют при дальнейшей пересылке.
Потом появились стандарты ISO20022, и в них стало ещё хуже. С одной стороны в каждом сообщении появился User Header Block с кучей полей, куда можно было бы затолкать референсы транзакций, с другой стороны в блоке финансовой информации тоже появились какие-то поля для референсов, и всё это непонятно как коррелирует с предыдущим FIN. Про ISO20022 и его приколы также можно написать отдельную юмористическую статью, но, боюсь, она будет сильно специфической и неинтересной большинству читателей.
Надо сделать одно важное замечание. С самого начала SWIFT разрабатывался как система передачи трансграничных платежей (сообщений) и никак не вписывался в локальные платёжные системы, каждый раз, когда требовалась некоторая совместимость, либо делались ужасающие извращения (вроде нашего RUR6), либо SWIFT специально дорабатывал (за очень большие деньги) свои системы для обработки таких локальных стандартов.
Время шло, и к началу 21 века практически все локальные платёжные системы внедрили свои форматы, основанные на ISO20022, который и стал промышленным стандартом передачи финансовой информации во всём мире.
Во всём мире, кроме SWIFT. Трансграничные платежи так и остались в форматах FIN. И тут начали возникать проблемы, связанные с конвертацией сообщений из XML в MT и обратно. XML стандарты ISO20022 гораздо шире, включают множество полей, которых нет в FIN MT, а те, которые есть, расширены, например тот же референс транзакции стал не 16 символов, а 35.
SWIFT последние лет 25 рассказывает о том, что вот вот буквально завтра наступит светлое будущее с XML, но при этом все эти 25 лет всё это колыхалось ни шатко ни валко. Как я уже сказал, все MI перешли на ISO20022 со своими доработками и мучались с преобразованиями в трансграничные обмены SWIFT.
Надо сказать, что стандарты ISO20022 настолько широки, что туда можно затолкать практически всё, что угодно, вплоть до собственных расширений. Чем все и пользовались.
Но SWIFT это SWIFT, у них всё вертится в головах не вокруг того, чего хотят банки, а вокруг того, чего хочет сам SWIFT (точнее вокруг того, чего хотят топ-50 мировых банков, которые и хотят определять развитие финансовых коммуникаций).
И вот SWIFT выкатил FINplus, который был призван заменить FIN, новая технология поддерживающая до некоторой степени обратную конвертацию в FIN, с тем, чтобы миграция по замене пошла гладко и безошибочно. Описывать FINplus я сейчас не буду (это тема отдельной статьи, если интересно, напишите в комментариях), но на одном моменте остановлюсь. Как и FIN, FINplus принципиально заточен под платёжные цепочки трансграничных сообщений и не работает с центральными клиринговыми системами, в нём принципиально нет соответствующих полей и кодовых слов. Да, путём разных извращений, можно одно в другое затолкать, но это, мягко говоря, требует очень значительных накладных расходов и не всегда получается корректно, в смысле дальней поддержки, расширения и масштабируемости.
Кроме того, SWIFT выкатил технологию, которую он назвал "My standards". На основе стандартов ISO20022 можно разрабатывать свои ограничения на типы сообщений, загружать их в центральный движок SWIFT и в рамках своей MI получать работающую локальную инфраструктуру обмена сообщениями, используя SWIFT как транспортную систему и третью независимую сторону с контролем синтаксиса и семантики сообщений, а также аудита, аутентификации , ограничения доступа и прочих кошерных вещей, которыми славен SWIFT. Нужно зарегистрировать свою закрытую группу, в ней отдельный сервис, раздать правда доступа, определить параметры, зарегистрировать участников... Разумеется, всё это стоит денег, и немаленьких денег. Ну и у этих "Моих стандартов" есть кучка неприятных ограничений, но в прицнипе с ними жить можно.
Затем SWIFT решил подмять под себя и локальные рынки. С этого момента начинается самое интересное.
Итак, SWIFT разработал подмножество ISO20022, которое он обозвал ISO Acceleration Pack (в девичестве High Value Payments plus -- HVPS+). Этот набор сообщений с одной стороны был предназначен для работы в локальных MI, а с другом стороны был максимально совместим с FINplus. Чтобы можно было бесшовно стыковать трансграничные платежи с внутренними.
И теперь SWIFT пытается нагнуть все центробанки и MI с тем, чтобы они у себя заменили свои собственные уже готовые и работающие форматы/стандарты на SWIFT-овый IAP, и за это заплатили в SWIFT денег. Потому что SWIFT им готов всё это доработать и выдать указания рекомендации, как у них всё должно быть. Ну и заодно SWIFT даст небольшую скидку на использование "My standards", ведь без него это всё не зафурычит.
Центробанки от таких радостных перспектив обомлели и с оторопью взирают на этот праздник идиотизма, густо приправленный жаждой наживы. Проблема тут не только в том, чтобы в центральной системе поменять обработку форматов, проблема в том, что все участники должны в своих системах также поменять обработку форматов. А это задача, которую решают долго, трудно, очень дорого, и самое главное, в ней нет никакого смысла, так как уже всё много лет назад сделано и работает.
Чем всё это закончится, я не знаю, скорее всего ничем, просто потому что в каждой стране есть свой регулятор, который и регулирует правила и порядки, а также вытекающие из них форматы и стандарты. Наверное лет 20 назад, на волне всеобщей глобализации, это начинание бы прокатило, но не сейчас, когда идёт обратный процесс с максимальным разграничением внутренних платёжных систем и внешних.
У SWIFT есть ещё парочка таких же оголтелых инициатив, но про них я напишу как-нибудь в другой раз.
Комментарии
+1. Так о том и речь! Аффтары и продаваны XML его заталкивают манагерам как универсальный формат данных! А он вообще таковым не является. Это форматер данных. Без кучи спецификаций он вообще никому не упал. И его тащат для галочки в прайс-листе - у нас пафосный XML, с вас + 100 денег. 8-D Но кодеры уже насовывают xml. Когда без него даже s-expression лучше. А народ уже набигает на созданный бренд. Слава богу, что json успел кто-то большой продавить. А то бы наелись. И как мы без xml жили не ясно. ini и тот лучше.
В данном случае это не так.
Говно то он может быть и говно, но всегда будут области где лучше выбирать XML из-за наличия уже готовых стандартов, реализованных во всех основных языках программирования. Для yaml нет общепризнанных ISO стандартов для описания схем или цифровых подписей, при разработке API в области в которой общепризнанные стандарты важны, yaml не сможет заменить XML.
Для всего есть реализация. А есть те, кто хотят навариваться на "самых современных", "новейших", "прорывных" и оттого дорогих, но никому не нужных решениях. Ведь у вас всё на yaml, а ВЕСЬ МИР ДАВНО НА XML!!!. 8-D слава богу hal сдох! Хотя и был на xml. И продавливается не через технические, а через административные уровни. Ибо пафосно и эффективно (и тебе занесём). А какие там презентации! Ваша текущая система плоха, потому что вы ретрограды, а у нас xml. на вопрос а что ещё следует загадочное молчание. Ну или яркая перезентация с фуршетом для администрации. ;-)
S-expression пятьдесят лет уже. YAML поменьше. json раньше или одновременно с xml появился. Но надо же как-то отличиться, верно? Больше скобочек богу скобочек! Нет стандартной реализации. 8-D Да уж.
Смайлики — это lisp.
К сожалению есть уже такие области где всё им загажено. Но вот на примере hal-а надеюсь что все они сдохнут. ;-)
Ух ты, какие интересные костыли автор описывает
.
XML парсить потруднее будет, чем plain text.
Наоборот.
Даже тупо регулярками XML парсить проще.
Я уже не говорю про высокие технологии в виде грамматик и конечных автоматов. )))
> тупо регулярками XML парсить проще
О. А можно пример простой регулярки для парсинга эксемеля? Чисто фор
лулзэкзампл?;-)
Ну можно и простых примеров. Но так-то есть XSLT и регулярки в него встроены.
https://xsltdev.ru/recipes/ispolzovanie-regularnyh-vyrazheniy/
А вот и лулзы подкатили.
Дык, как заказывали.
Мне надо было сделать генератор отчётов для нахождения несоответствий при генерации коллекций данных в xsd-схемах ISO20022.
Обошёлся регулярками, оно конечно топорно, но просто и понятно. Я уже давно не программист, поэтому если чего и пишу, то делаю это как можно проще, чтобы через полгода почитать и понять, что я там наговнокодил.
:-) если пошла речь про "регулярки" для "парсинга" xml тут же всё понятно. Тут очень многие наелись интерпрайза с самым "стандартным в мире форматом". Не надо. Рад что вам за этот геморрой замечательно платят. Ростовщики вообще люди с одной стороны серъёзные, с другой как дети малые. Вообще говорить про xml как таковой, как про протокол это полная ересь. xml это форматер. Всё. Без соглашений по всем полям он ничего не значит, а с соглашениями сам xml будет занимать следовое количество логики. yaml, например вообще "парсить" не надо. Читай по "строкам" и все дела. Проще не бывает. И вообще надо присматриваться внимательно. Если форматтер протокола реализует рекуррентную модель, то он скорее всего вообще не нужен. Тот про с xml сделал свой "стандартный протокол" 8-D и смог "это" продать клиенту, тот то же самое сделает без xml в два раза быстрее и в три раза дешевле.
YAML не только парсить не надо, его не надо использовать.
https://habr.com/ru/articles/710414/
Спасибо! Прочитал первую расшифровку, волосы встали дыбом. Последний раз так дыбом вставали, когда для сборки какого-то проекта понадобился питон именно версии 3.7, ни в плюс ни в минус какой-то открытый софт не собирался.
8-D оборжался. json продавашка продаёт. Уверен что xml он продаст ещё лучше - там пироги жирнее. 8-D. Одно хорошо. json лучше xml. Но где "ад S-expression"? Без этого не усну. 8-D
А как вы этот ямл документ, например, валидируете на соответствие схеме данных? Как вообще схема данных в нем расшаривается между заинтересованными лицами?
Обычно используется OpenAPI
Особенно весело становится парсить регулярками XML на десяток-другой гигабайт...
Хотя мне попадался и torrent файлик на несколько десятков гигабайт (скрапинг популярного torrent-трекер сайта).
Пришлось писать свой "поточный" парсер bencoded чтобы это переварить перлом. bdecode \*FILE почему-то слегка притормаживало на машине с 1 гигом оперативки...
Регулярки это как скальпель. Если вам требуется вагон скальпелей, что-то явно идёт не так.
Plain text это не формат обмена данными. Строго говоря xml/json/yaml и т.д. это как раз и результат того, что в plain text решили задачу обмена данными. Парсить xml несомненно удобнее, проще (библиотеке под это дело выше крыши) и главное - безопаснее и надёжнее. При этом xml кроме преимуществ имеет и недостатки.
Ну вот например вот такое есть https://github.com/nin-jin/tree.d
тема крайне узкоспециализирована, но очень интересные проф. нюансы :)
интересно будет почитать продолжение!
Прямо все как в меме:
- у нас есть 10 разных стандартов, которые надо поддерживать, давайте объединим все их функции в один!
- у нас теперь есть 11 разных стандартов.
Нда.
Очень напоминает ситуацию, когда на волне энтузиазма стал собирать станок на шине CAN.
После полугода танцев с бубнами поставил прототип в музей "поле чудес" и вернулся на аналоговое управление. Чему безмерно рад - дешево, сердито и главное надежно.
Дифференциальные уравнения (движение, поверхности и пр..) удобнее и быстрее решать на аналоговых машинах.
А шина CAN вообще задумывалась как интерфейс для управления электрооборудованием транспортных средств.
ага, вот недавно росиянский абап продвинулся. Физическое лицо - PP, или все же FL?
Хорошо же в армии. Херово но однообразно.
<занудство ON>
Есть незначительная, но существенная разница между Physical Person и Foreign Person
<занудство OFF>
судя по описанию ничего ужасного нет, рабочие моменты. где вы вообще видели систему глобального уровня, в которой форматы/стандарты не менялись десятилетиями и тем не менее она бы идеально справлялась со всеми современными запросами?
зато налоговая рф чудит: молодежь и подростки.
sql
ага-ага, тогда зачем у микрософта T-SQL, у оракла - PL-SQL, у потсгресса - PL/pgSQL и т.д.?
Для реализации платформо-зафисимых фишек, очевидно же.
не только платформенны, но в первую очередь языковых фишек (язык без носителя(платформы и конкретной реализации) - мертвый язык). суть в том, что единого формата/стандарта на века принципиально невозможно придумать, всегда что-то новое потребуется или чьи-то хотелки надо будет реализовать, а чьи-то, наоборот, поумерить.
даже правила футбола, казалось бы, суперконсервативной игры, и то меняются.
А языковые фишки конкретной платформы это уже не платформо-зависимые фишки? А так, простые sql-запросы работают везде, более сложные не обходятся без учёта особенностей реализации конкретной платформы и потому то, что там в синтаксисе могут быть различия, уже не важно, всё равно при переносе запроса на другую платформу его придётся переделывать, иногда прям очень сильно, так что не вижу траблов с несовместимостью.
ну переделывать и в SWIFT предлагают. ну это как если бы microsoft, oracle и postgresql gdg объединились и выработали бы свой единый стандарт и заставили бы каждое локальное поделие конвертироваться в него
> microsoft, oracle и postgresql gdg объединились и выработали бы свой единый стандарт и заставили бы каждое локальное поделие конвертироваться в него
И получилось бы как в том эксемеле. Стандарт-то вроде один, но без файла описаний у тебя не данные а мусор. Сейчас проще. Есть платформа, у неё есть свои конкурентные фишки, для их реализации доделан/переделан общий стандарт. Нужны преимущества конкретной платформы? Изучай её отклонения от стандарта. Нужно чтобы всё по
феншуюстандарту? Нивапрос, стандартный селект астериск фром тейблнаме вере филд1 равно семь работает на любой платформе. Мне нра.Ну да, ну да. Тут вот к продукту всю жизнь работавшему с ораклей прикрутили поддержку постгре. Правда далеко не везде поменяли тексты запросов. Теперь сидим, возимся, выявляем косяки. А в теории вообще должно работать без разницы, оракл или постгре, лишь переключением одного параметра.
Ну дык запросы наверняка не из описываемых демонстрационно-тестовых (select * from tablename where field =…), а скорее что-то реальное («…ещё один sql-запрос на 90 строк, и я попрошу зарплату кокаином»)?..
> в теории вообще должно работать без разницы
Я от такого оптимизма излечился во времена оны когда программа, написанная в борланд спп, не скомпилилась в мелкософт спп.
Однако реализация необходимых с точки зрения логики решения задачи, но не описанных в стандарте процедурных расширений (оригинальных в первую очередь в силу отсутствия регламентирующего стандарта) — это не совсем «платформенно-зависимые фичи».
Вы ничего не поняли из написанного. Штош... бывает...
ну так объясните. зачем, например, в условиях зерновой сделки стоит обязательное подключение Россельхозбанка к SWIFT, если там ужас-ужас, он всех своими стандартами нагибает?
Я совершенно не понимаю вопроса.
это интернет, вечно тут друг друга не понимают)
Перспективный чат детектед! Сим повелеваю - внести запись в реестр самых обсуждаемых за последние 4 часа.
ничего себя я холивар развязал...
И треснул мир напополам,
Дымит разлооом!
На иксэмэль идёт братва
В руке с колоооом!
Страницы