• Закон 244-ФЗ, налог на Google, Xsolla, должен ли ИП платить НДС с браузерной игры?

    @vshvydky
    очень странная позиция честно говоря. Находясь на УСН6 вы не являетесь плательщиком НДС, вопрос в том, кем является по факту Xsolla. Они совершают продажи от своего лица или являются для вас агентом по продаже и продажу фактически осуществляете вы. Если они "перекупают" у вас услугу и реализуют ее с НДС, то они этот НДС либо обязаны уплатить, либо возместить.
    Если я прав про "перекуп" , то вам удобнее возложить обязанность по уплате НДС на своего продавца, так как если вы будете получать деньги на ИП с НДС вам нужно будет вести налоговый учет, выставлять счета фактуры, подавать декларацию по НДС (кстати ее можно подавать только в электронном виде, как следствие вам потребуется приобрести ключи для сдачи электронной отчетности. Есть соответствующие сервисы, например сбис, контур фокус и тп и естественно на вас ляжет обязанность этот НДС уплатить. Конечно есть пути решения этого вопроса, но думаю у вас не те обороты, чтобы об этом задумываться.
    Если же я не прав на счет "перекупа" и xsolla является лишь агентом по продаже, то никакого НДС от ваших услуг они начислять не имеют права, так как вы предоставляете услуги без НДС и имеете на это законное основание.
    Но этот вариант мне кажется маловероятным. Как я понимаю перед вами стоит задача принимать платежи по всему миру и не платить налоги, которые вы не обязаны. возможно вам стоит присмотреться к аналогичным сервисам или организовать сбор средств напрямую. Как вариант для сбора средств по всему миру можно посмотреть на payoneer, у них вроде все для этого есть.
    up:
    и еще, 244ФЗ вообще-то касается азартных игр, при чем тут программное обеспечение и компьютерные игры вообще?
    up2: но не смотря на некорректность ссылки на закон, изменеия в НК все же будут ,вот противная статья об этом
    www.klerk.ru/buh/articles/451070
    Судя по всему хочешь не хочешь, любая продажа товара через глобальные маркеты будет генерировать входящий НДС 15,25%. (обычный кстати 18%). Тут, если вы с большими оборотами есть очень даже хороший смысл искать себе налоговую гавань в другой стране, ну а если нет, платить или перекладывать оплату на конечного покупателя.
    up3: налоговая гавань не спасет, по факту обложили НДСом российского покупателя, то есть считается, если деньги улетели из РФ, продавец автоматом попадает под налог и обязан его уплатить.
    Но с другой стороны, если вы продаете услуги не в РФ , а по всему миру, то доля РФ в вашем портфеле может быть не столь велика и вы просто не заметите эти изменения. Но мой вам совет, идите на консультацию к бухгалтеру, который специализируется на ведении учета по электронынм услугам, тут много вопросов и камней.
    Ответ написан
  • Как сделать простой php маршрутизатор (роутер)?

    devg
    @devg
    I am Yenior software developer
    Очень простой роутер, не без недостатков, но довольно быстрый и легко использовать, дописывать под себя.

    <?php
    /**
     * Простой роутер
     * @devg
     */
    final class RouterLite {
    
      public static $routes = array();
      private static $params = array();
      public static $requestedUrl = '';
    
      /**
       * Добавить маршрут
       */
      public static function addRoute($route, $destination=null) {
        if ($destination != null && !is_array($route)) {
          $route = array($route => $destination);
        }
        self::$routes = array_merge(self::$routes, $route);
      }
    
      /**
       * Разделить переданный URL на компоненты
       */
      public static function splitUrl($url) {
        return preg_split('/\//', $url, -1, PREG_SPLIT_NO_EMPTY);
      }
      
      /**
       * Текущий обработанный URL
       */    
      public static function getCurrentUrl() {
        return (self::$requestedUrl?:'/');
      }
    
      /**
       * Обработка переданного URL
       */
      public static function dispatch($requestedUrl = null) {
    
          // Если URL не передан, берем его из REQUEST_URI
          if ($requestedUrl === null) {
            $uri = reset(explode('?', $_SERVER["REQUEST_URI"]));
            $requestedUrl = urldecode(rtrim($uri, '/'));
          }
    
          self::$requestedUrl = $requestedUrl;
    
          // если URL и маршрут полностью совпадают
          if (isset(self::$routes[$requestedUrl])) {
            self::$params = self::splitUrl(self::$routes[$requestedUrl]);
            return self::executeAction();
          }
    
          foreach (self::$routes as $route => $uri) {
            // Заменяем wildcards на рег. выражения
            if (strpos($route, ':') !== false) {
              $route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route));
            }
    
            if (preg_match('#^'.$route.'$#', $requestedUrl)) {
              if (strpos($uri, '$') !== false && strpos($route, '(') !== false) {
                $uri = preg_replace('#^'.$route.'$#', $uri, $requestedUrl);
              }
              self::$params = self::splitUrl($uri);
                
              break; // URL обработан!
            }
          } 
          return self::executeAction();
      } 
    
     /**
       * Запуск соответствующего действия/экшена/метода контроллера
       */
      public static function executeAction() {
        $controller = isset(self::$params[0]) ? self::$params[0]: 'DefaultController';
        $action = isset(self::$params[1]) ? self::$params[1]: 'default_method';
        $params = array_slice(self::$params, 2);
    
        return call_user_func_array(array($controller, $action), $params);
      }
    
    }
    ?>


    Пример использования:
    <?php
    // маршруты (можно хранить в конфиге приложения)
    // можно использовать wildcards (подстановки):
    // :any - любое цифробуквенное сочетание
    // :num - только цифры
    // в результирующее выражение записываются как $1, $2 и т.д. по порядку
    
    $routes = array(
      // 'url' => 'контроллер/действие/параметр1/параметр2/параметр3'
      '/' => 'MainController/index', // главная страница
      '/contacts' => 'MainController/contacts', // страница контактов
      '/blog' => 'BlogController/index', // список постов блога
      '/blog/:num' => 'BlogController/viewPost/$1' // просмотр отдельного поста, например, /blog/123
      '/blog/:any/:num' => 'BlogController/$1/$2' // действия над постом, например, /blog/edit/123 или /blog/dеlete/123
      '/:any' => 'MainController/anyAction' // все остальные запросы обрабатываются здесь
    ));
    
    // добавляем все маршруты за раз
    RouterLite::addRoute($routes);
    
    // а можно добавлять по одному
    RouterLite::addRoute('/about', 'MainController/about');
    
    // непосредственно запуск обработки
    RouterLite::dispatch();
    ?>


    UPDATE (07.08.2017):
    Дальнейшее развитие данного роутера см. в проекте Litero (https://github.com/bit55/litero)
    Ответ написан
    1 комментарий