Ledger Nano X - The secure hardware wallet
SHARE
TWEET

Untitled

a guest Apr 7th, 2020 152 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def get_order_type(order_data: Dict) -> ORDER_TYPES:  # noqa: mccabe=MC0001
  2.     """
  3.    Логика такая: ищем ЮЛ (единственный жесткий критерий),
  4.    далее для всех непомеченных:
  5.    ищем и метим "Платежный агент с самофискализацией",
  6.    далее ищем "Самоинкасацию",
  7.    далее "Эквайринг",
  8.    далее "Реестр",
  9.    далее "ФЛ",
  10.    далее "ЮЛ+ФЛ".
  11.    Все, что после этого не помечено - ЮЛ. - еще раз
  12.    (c) Екатерина Кирова
  13.    """
  14.     individual_inns = list(Recipient.objects.values_list('inn', flat=True))
  15.  
  16.     # секция исключений
  17.     for exception in exception_section:
  18.         payer_inn, payment_target, order_type = exception
  19.         if (order_data.get('ПлательщикИНН', '') == payer_inn or not payer_inn)\
  20.                 and payment_target.lower() in get_from_many(
  21.                 'НазначениеПлатежа', order_data).lower():
  22.             return order_type
  23.  
  24.     # юрлицо
  25.     if 'Счет по сбору платежей за ЖКУ' \
  26.             in get_from_many('Плательщик', order_data)\
  27.             and order_data.get('ПлательщикИНН', '').startswith('770207')\
  28.             and order_data.get('ПлательщикБИК', '') == '044525411'\
  29.             and order_data.get('ПлательщикСчет', '').startswith('409118')\
  30.             and get_from_many('НазначениеПлатежа', order_data) == \
  31.             'Перечисление платежей за коммунальные услуги':
  32.         return ENTITY
  33.  
  34.     # платёжный агент с фискализацией
  35.     if order_data.get('ПлательщикИНН', '') in payment_agent_white_rule:
  36.         return PAYMENT_AGENT
  37.  
  38.     # самоинкассация
  39.     if order_data.get('ПолучательСчет', '') in [
  40.             '40821810438000000440', '40821810051300000003'] and (
  41.             contains(
  42.                 get_from_many('НазначениеПлатежа', order_data),
  43.                 ['платежей физических лиц через терминал', 'ЖКХ ИНКАС СУМКА'])
  44.     ):
  45.         return SELF_ENCASHMENT
  46.  
  47.     # эквайринг
  48.     acquiring_pairs_match = False
  49.     for acquiring_pair in acquiring_pairs:
  50.         payer_inn, payment_target = acquiring_pair
  51.         acquiring_pairs_match = \
  52.             order_data.get('ПлательщикИНН', '') == payer_inn \
  53.             and payment_target.lower() in get_from_many(
  54.                 'НазначениеПлатежа', order_data).lower()
  55.         if acquiring_pairs_match:
  56.             break
  57.  
  58.     if order_data.get('СекцияДокумент', '') in \
  59.             ['Платежное поручение', 'Банковский ордер'] \
  60.             and ((order_data.get('ПлательщикИНН', '') == '7702070139'
  61.                  and get_from_many('НазначениеПлатежа', order_data).lower()
  62.                  .startswith(
  63.                  'ВОЗМЕЩЕНИЕ СР-В ПО ОПЕРАЦИЯМ ЭКВАЙРИНГА'.lower()))
  64.                  or (order_data.get('ПлательщикИНН', '') == '7707083893'
  65.                      and 'Мерчант No850000035812' in
  66.                          get_from_many('НазначениеПлатежа', order_data))
  67.                  or acquiring_pairs_match):
  68.         return ACQUIRING
  69.  
  70.     # реестр
  71.     pairs_match,  and_pairs_match = False, False
  72.     for pair in pairs:
  73.         payer_inn, payment_target = pair
  74.         pairs_match = order_data.get('ПлательщикИНН', '') == payer_inn \
  75.             and payment_target.lower() in get_from_many(
  76.             'НазначениеПлатежа', order_data).lower()
  77.         if pairs_match:
  78.             break
  79.  
  80.     for pair in and_pairs:
  81.         payer_inn, *payment_targets = pair
  82.         and_pairs_match = order_data.get('ПлательщикИНН', '') == payer_inn \
  83.             and and_contains(
  84.             get_from_many('НазначениеПлатежа', order_data), payment_targets)
  85.         if and_pairs_match:
  86.             break
  87.  
  88.     vtb_triple_condition = \
  89.         order_data.get('ПлательщикИНН', '') == '7702070139' \
  90.         and startswith(
  91.             get_from_many('НазначениеПлатежа', order_data),
  92.             ['ПЕРЕЧИСЛЕНИЕ ПЛАТЕЖЕЙ']) \
  93.         and order_data.get('ПлательщикСчет', '') == '40911810100180000510'
  94.  
  95.     if ((order_data.get('ПлательщикБИК', '') in ['044525416', '044525283']
  96.             and contains(
  97.                 get_from_many('НазначениеПлатежа', order_data), ['реестр'])) or
  98.             (pairs_match or and_pairs_match or vtb_triple_condition
  99.                 or and_contains(
  100.                     get_from_many('НазначениеПлатежа', order_data),
  101.                     ['реестр', 'ООО "Регистратор"'])))\
  102.             and not contains(
  103.             get_from_many('НазначениеПлатежа', order_data),
  104.             ['зарплат', 'зар  плат', 'заработ']):
  105.         return REGISTRY
  106.  
  107.     # физлица
  108.     if (order_data.get('СекцияДокумент', '') in [
  109.         'Платежное поручение', 'Банковский ордер']
  110.         or (order_data.get('СекцияДокумент', '') == 'Инкассовое поручение' and
  111.             contains(
  112.                 get_from_many('НазначениеПлатежа', order_data),
  113.                 ['зыскание по ИД', 'ЗЫСК ПО ИД']))) \
  114.             and contains(order_data.get('ПолучательИНН', ''), individual_inns)\
  115.             and ('//' in get_from_many('Плательщик', order_data)
  116.                  or contains(order_data.get('ПлательщикБИК', ''),
  117.                              pbik_contains)
  118.                  or (startswith(order_data.get('ПлательщикСчет', ''),
  119.                                 pacc_startswith)
  120.                      and contains(
  121.                          get_from_many('НазначениеПлатежа', order_data),
  122.                          i_purpose_contains)
  123.                      and not contains(
  124.                          get_from_many('НазначениеПлатежа', order_data),
  125.                          i_purpose_not_contains))):
  126.         return INDIVIDUAL
  127.  
  128.     # физлица и юрлица
  129.     if order_data.get('СекцияДокумент', '') in [
  130.         'Платежное поручение', 'Банковский ордер']\
  131.             and contains(order_data.get('ПолучательИНН', ''), individual_inns)\
  132.             and not startswith(
  133.                 order_data.get('ПлательщикРасчСчет=', ''),
  134.                 ie_accs_not_startswith)\
  135.             and contains(
  136.                 get_from_many('НазначениеПлатежа', order_data),
  137.                 ie_purpose_contains)\
  138.             and not contains(
  139.                 get_from_many('НазначениеПлатежа', order_data),
  140.                 ie_purpose_not_contains):
  141.         return INDIVIDUAL_AND_ENTITY
  142.  
  143.     return ENTITY
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top