Задать вопрос
  • В каком банке отрыть рассчетный счет?

    @skozlovf
    Мне кажется, любой из перечисленных банков подойдет.

    Но как-то странно все отвечают: "Я пользуюсь X, все ок.". Нет конкретики, тем более, что ТС хочет "минимизировать комиссии банка и максимизировать сумму, которую можно отправить на счет в другом банке.".

    Предлагаю расписать базовые затраты. Сам я пользуюсь модулем.

    * У модуля есть банк-посредник (как я понимаю, это райфайзен). При переводе валюты себе на счет он берет процент. С ~2000 USD было примерно 15-17 USD.
    * Счет в банке - 490р (тариф "оптимальный")
    * Валютный контроль 300р (до 500к руб) или 1000р (если 500k - 2M руб).
    * Перевод себе в другой банк 19р - потому что здесь нет счетов для физ. лиц.

    Расходы за квартал: $17 + 3 * 490р + 300р + 19р = $17 + 1789.
    Если переводить от клиента помесячно: ($17 + 300р + 490р) * 3 + 19р

    Расходы или их часть можно сократить процентами, начисляемыми на остаток на счете, либо открывать у них депозит под 7% (раньше процент был выше). Например, можно полностью компенсировать содержание счета (490р), или вообще все расходы, если есть некоторая свободная сумма.
    Так же не забываем, что с процентов банка надо платить налог.

    Вроде все.
    Ответ написан
    3 комментария
  • Как разбить на части распараллеливание списка?

    @skozlovf
    Реализаций можно написать много.

    Вариант 1: google "python split list into chunks"

    Вариант 2: если в проекте используется numpy:

    import numpy as np
    
    def split(seq, num_chunks):
        lst = np.array_split(np.array(seq), num_chunks)
        return [x.tolist() for x in lst if len(x)]


    Вариант 3 (только сейчас придумал, для py 2):

    from __future__ import division
    import math
    
    def split(seq, num_chunks):
        assert num_chunks
        pos = 0
        sz = len(seq)
        result = []
        while pos < sz:
            num_items = int(math.ceil((sz - pos) / num_chunks))
            result.append(seq[pos:pos + num_items])
            pos = pos + num_items
            num_chunks -= 1
        return result


    split([1, 2, 3, 4, 5, 6, 7, 8, 9], X)
    
    # X
    # 1   [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
    # 2   [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
    # 3   [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    # 4   [[1, 2, 3], [4, 5], [6, 7], [8, 9]]
    # 5   [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
    # 6   [[1, 2], [3, 4], [5, 6], [7], [8], [9]]
    # 7   [[1, 2], [3, 4], [5], [6], [7], [8], [9]]
    # 8   [[1, 2], [3], [4], [5], [6], [7], [8], [9]]
    # 9   [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
    # 10  [[1], [2], [3], [4], [5], [6], [7], [8], [9]]


    Вариант 4 - вариация варианта 3. Теперь split это генератор и всегда возвращает указанное кол-во частей/отрезков
    def split(seq, num_chunks):
        assert num_chunks
        pos = 0
        sz = len(seq)
        while pos < sz:
            num_items = int(math.ceil((sz - pos) / num_chunks))
            yield seq[pos:pos + num_items]
            pos = pos + num_items
            num_chunks -= 1
    
        for _ in range(num_chunks):
            yield []
    
    list(split([1, 2, 3, 4, 5, 6, 7, 8, 9], X))
    
    # X
    # ...
    # 9   [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
    # 10  [[1], [2], [3], [4], [5], [6], [7], [8], [9], []]
    # 11  [[1], [2], [3], [4], [5], [6], [7], [8], [9], [], []]


    и т. д.
    Ответ написан
    Комментировать
  • Как пройтись построчно в Pandas?

    @skozlovf
    В Вашем случае лямбда-функции не особо нужны, есть варианты короче и быстрее:

    df['col3'] = df.min(axis=1)
    # или
    import numpy as np
    df['col3'] = np.minimum(df.col1, df.col2)
    Ответ написан
    Комментировать
  • Как правильно в pandas разбирать CSV файл, содержащий много наборов данных формата TimeStamp0; Value0; Timestamp1;Value1;?

    @skozlovf
    Можно просто разделить таблицу на несколько независимых датафреймов. Читать CSV несколько раз нет необходимости.

    Например, так:

    import pandas as pd
    import numpy as np
    
    
    def get_df(filename, parse_dates=None):
        """Build :class:`DataFrame` list from CSV file.
    
        Expected CSV file format::
    
            Timestamp0; Value0 ; Timestamp1; Value1; ...TimestampN; ValueN;
    
        Args:
            filename: CSV filename.
            parse_dates: List of columns with dates.
    
        Returns:
            List of DataFrames with 'Timestamp' as index and 'Value' as value
            column.
    
        Notes:
            :attr:`DataFrame._name` contains name extracted
            from 'TimestampX' column.
        """
    
        df_all = pd.read_csv(filename, sep=';', decimal=',',
                             parse_dates=parse_dates, header=0)
    
        assert len(df_all.columns) % 2 == 0
    
        lst = []
        columns = ['time', 'value']
    
        # Create lsit of 2-items chunks.
        col_list = np.split(df_all.columns, len(df_all.columns) / 2)
    
        for cols in col_list:
            df = df_all[cols]                   # split 2-column DataFrame.
            df._name = cols[0].split(',')[0]    # attach name to data frame.
            df.columns = columns                # change columns names.
            df = df.set_index('time')           # set index to timestamps.
            lst.append(df)
    
        return lst
    
    
    df_list = get_df('GAS.csv', parse_dates=[0, 2, 4])
    df = df_list[0]
    print(df.index)
    print(df._name)
    
    ...
    Ответ написан
  • Как автоматически деплоить приложение из гита на VPS, после внесения правок?

    @skozlovf
    Я использую git-deliver. Он создает удаленный репозиторий на сервере и атомарно меняет дерево исходников. Можно запускать свои скрипты в разные этапы деплоя. Минус - надо потратить время, чтобы все настроить.
    Работает примерно так:
    * Делаешь git deliver.
    * Изменения заливаются в удаленный репозиторий на сервере.
    * Выполняются скрипты остановки сервера.
    * Меняются исходники на актуальные.
    * Выполняются скрипты для запуска сервера.
    Ответ написан
    1 комментарий
  • Upwork (Апворк): как вывести средства, полученные как физлицо (до регистрации ИП)?

    @skozlovf
    2. Какую дату акцепта ставить в оферте Upwork

    дату = даты регистрации ИП.

    3. Нужно ли указывать платежные реквизиты (транзитный р/с) ИП в оферте и в Confirmation of Services?


    Думаю, зависит от ВК банка. Меня не просили, ставил только подпись.

    Можно ли как-то прекратить действие оферты c тем, чтобы принять ее вновь или как-то переакцептировать без закрытия аккаунта? При возможности переакцепта получается новый договор, соответственно, всегда можно избежать оформления паспорта сделки в будущем.


    Мне кажется, тут тоже стоит спросить свой банк. Вообще народ вроде как "перезаключает" оферту при публикации новых изменений. Мне тут самому немного не ясно, т. к. оферта считается принятой с момента регистрации на сайте.

    Да и нужно ли избегать паспорта сделки?

    5. Если принять оферту еще будучи физлицом, а далее работать по ней как ИП - есть ли юридическое противоречие


    Тут получается, что ранее мы работали как физлицо, а потом стали ИП и приняли оферту от лица ИП (поэтому и дата акцепта = дате регистрации ИП). Нет противоречий.

    1. Если на Upwork висит пара к$ и часть из них получена еще до регистрации ИП (т.е. будучи в статусе физлица), то как их все приземлить на р/с свежезарегистрированного ИП на УСН 6%/патенте?


    Просто перечислить на р/с, как и остальные деньги. Дальнейшее развитие событий зависит от того, каким образом решено вести учет доходов. Если с момента поступления на транзитный счет и налоговая не просит первичных документов или каким-то образом получается ограничится CoS и офертой, то никаких проблем не будет, т. к. реальная дата получения той части из $2k не видна. Если вести с момента разблокировки на аккаунте апворка или если налоговая как-то узнает реальную дату, то скорее всего попросят доплатить какие-нить налоги и пени. В общих чертах примерно так.

    Если придерживаться мнения, что средства, висящие на Upwork - это фантики,

    Так мы это и не выяснили)
    Ответ написан
  • Как платить НДС при работе с Upwork?

    @skozlovf
    Тоже занимаюсь этим вопросом, спрашивал у Эльбы и в налоговой. Вот ответы эксперта Эльбы:


    Upwork - иностранная организация, не состоящая на учете в РФ.
    Таким образом, вы - принципал для организации, не состоящей на учете в РФ (посреднические услуги в электронной форме), поэтому
    - в день перечисления агентом (Upwork) денег клиентов (за вычетом комиссии), необходимо заплатить НДС (18% от суммы услуг агента);
    - в течение 5 дней с момента перевода денег составить счет-фактуру в разделе Документы, где
    - тип операции "Оплата услуг иностранных фирм, не состоящих на учете в России";
    - сумма : комиссия Upwork + 18% (это налоговая база);
    - НДС: НДС включен = 18/118*(комиссия + 18%) (это сумма НДС к уплате);
    - по итогам квартала до 25 числа сдать декларацию НДС, в Эльбе появится задача по формированию декларации.


    *в течение 5 дней с момента перевода денег* - тут наверное имеется ввиду перевод денег апворком тебе на аккаунт.


    Перечислять НДС налоговый агент (вы) обязан в момент произведения расчетов с нерезидентом (upwork), но поскольку в Эльбе пока нет возможности сформировать платежное поручение по НДС вне задачи, которая открывается только по итогам квартала. То такое платежное поручение необходимо формировать в интернет-банке, либо его можно подготовить на сайте налоговой https://service.nalog.ru/payment/payment.html


    Сейчас жду ответа от upwork по поводу, какую дату считать датой поступления выручки. От этого будет зависеть курс для перевода НДС в рубли (и, кстати, расчеты по УСН).

    UDP, Upwork ответил:

    To address your concern, your funds availability date is listed on the 1st column of your transactions history.


    По УСН важный момент, что надо создавать поступления самому:


    УСН учитываем полную сумму оплат клиентов, без вычета комиссии. Доход нужно учитывать по отчёту (реестру) агента, то есть учитывать его нужно именно на дату оплаты клиента, пока деньги ещё даже находятся на виртуальном счете. В Эльбе в момент поступления денежных средств на виртуальный счёт нужно создавать Поступления "по прочему" и учитывать эту сумму в налогах. При выводе денежных средств на расчетный счет повторно данную сумму в налогах УСН учитывать не нужно.


    Короче, получается, надо составлять счет-фактуруы всякий раз, когда снимается комиссия апворка (по сути каждую неделю, если почасовой контракт). По ним потом будет задача по отчетности в налоговую, но платить придется самому чз интернет банк или еще как.
    Ответ написан