Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.33 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement