Автор Тема: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми  (Прочетена 5733 пъти)

Naka

  • Участник
  • *****
  • Публикации: 2630
    • Профил
При западните/EU фирми има ли нещо което да е аналогично на нашият БУЛСТАТ номер. Трябва ми номер който да идентифицира уникално която и да е фирма, даже и ако тя не българска.

засега е така:
Код:
mysql> describe firms;
+---------+-----------------------+------+-----+---------+----------------+
| Field   | Type                  | Null | Key | Default | Extra          |
+---------+-----------------------+------+-----+---------+----------------+
| firm_id | mediumint(8) unsigned | NO   | PRI | NULL    | auto_increment |
| bulstat | char(13)              | NO   | UNI | NULL    |                |
| logo_id | int(10) unsigned      | YES  | MUL | NULL    |                |
+---------+-----------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Обаче съм го набил твърдо на bulstat(13)(като колоната bulstat има уникален индекс, така че да не позволява повторения) и се чудя как да си оставя вратичка така, че за в бъдеще да може да примема не само регистрации на БГ фирми но и на всякакви такива EU фирми.

-----
чета нещо за VAT number validation http://ec.europa.eu/taxation_customs/vies/
обаче дали VAT номера е уникалният номер, ами ако западната фирма не е регистрирана по ДДС.
-----
В UK например имало две понятия CRN(Company Registration Number) и UTR(Unique Taxpayer Reference) https://www.1stformations.co.uk/blog/is-my-company-number-my-tax-number/ като въпросното CRN най много прилича на нашенското Bulstat.
« Последна редакция: Юни 17, 2015, 16:37 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

stealth01

  • Участник
  • *****
  • Публикации: 654
  • Distribution: Debian testing
  • Window Manager: KDE
    • Профил
Преди време ДДС номерът беше различен от БУЛСТАТ-а.
След това направиха нови ДДС номера, които съвпрадат с БУЛСТАТ номера + BG отпред. На практика си имаме два номера в момента, които по стечение на обстоятелствата са почти еднакви.

Как е по чужбината - не знам. Почти съм сигурен, че повечето държави си имат по няколко различни номера и единствената що годе унификация са ДДС номерата.
Активен

NorthBridge

  • Участник
  • *****
  • Публикации: 177
  • Distribution: Slackware-current
  • Window Manager: Enlightenment E17
  • Mad Tinkerer
    • Профил
В повечето случаи това е VAT number, но за всяка държава е различно, и в крайна сметка е един голям мармалад. https://en.wikipedia.org/wiki/VAT_identification_number

Дръж си ги като нормален varchar и няма да имаш проблеми.
Активен

I did a 'zcat vmlinuz > /dev/audio' and I think I heard God...

romeo_ninov

  • Участник
  • *****
  • Публикации: 2155
    • Профил
Активен

0x2B|~0x2B

Naka

  • Участник
  • *****
  • Публикации: 2630
    • Профил
Ето нещо от сайта на ЕО: http://ec.europa.eu/taxation_customs/taxation/tax_cooperation/mutual_assistance/tin/index_en.htm

това TIN явно е за физическите лица. в страницата има линк за проверка online check module  и там нашите ЕГН-та минават но не и булстатите.


а пък тука
http://ec.europa.eu/taxation_customs/vies/ минават бултатите но само на регистрираните по ДДС фирми а другите булстати на нерегистрираните ги изхвърля.
« Последна редакция: Юни 18, 2015, 13:47 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

romeo_ninov

  • Участник
  • *****
  • Публикации: 2155
    • Профил
това TIN явно е за физическите лица. в страницата има линк за проверка online check module  и там нашите ЕГН-та минават но не и булстатите.


а пък тука
http://ec.europa.eu/taxation_customs/vies/ минават бултатите но само на регистрираните по ДДС фирми а другите булстати на нерегистрираните ги изхвърля.
Не само регистрираните по ДДС. Трябва да са регистрирани и по ВИЕС (по спомени имаше такава особеност)
Активен

0x2B|~0x2B

Naka

  • Участник
  • *****
  • Публикации: 2630
    • Профил
засега единственото решение което виждам за да го напрявя по-универсално е:
да преименувам полето bulstat на company_number
да му сложа индекс (UNIQUE KEY) и да го записвам номера заедно с префикса (а не чистият булстат номер както беше досега) например: BG123456789 DE123456789 ...
така ако се записва заедно с префикса няма да има колизии в номера между бг и западна фирма и номера ще е винаги уникален
да го направя да приема NULL стойности  в случай че не е известен номера на 'западната' фирма
и да го дигна полето на CHAR(18)..... Хич не обичам varchar.

Код:
company_number CHAR(18) NULL UNIQUE KEY,

обаче все още се чудя как да ги записвам номерата - с префикса отпред BG123456789 DE123456789 или да ги сложа като суфикс  123456789BG 123456789DE

щото ако е отпред индекса ще е страшно неефективен. ще имам 99% BG123456789 и само тук таме някой западен номер.

-----------------
но въпроса с валидацията на номера остава. за БГ няма проблеми. Ползвам това Преверка валидност ЕИК (Булстат) и работи правилно. А за западните номера явно трябва да си затварям очите и да ги приемам на доверие.

тук открих нещо много ценно http://www.braemoor.co.uk/software/vat.shtml само че е на JS :'( вътре има проверка с контролни суми за всяка страна индивидуално :o, според специфичният алгоритъм за страната. И нашият булстат е вътре и ЕГН-тата.

тук също има хубаво описани алгоритмите за отделните държави: http://zylla.wipos.p.lodz.pl/ut/translation.html
http://www.pruefziffernberechnung.de/U/USt-IdNr.shtml

« Последна редакция: Юни 27, 2015, 15:42 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

romeo_ninov

  • Участник
  • *****
  • Публикации: 2155
    • Профил
....
обаче все още се чудя как да ги записвам номерата - с префикса отпред BG123456789 DE123456789 или да ги сложа като суфикс  123456789BG 123456789DE

щото ако е отпред индекса ще е страшно неефективен. ще имам 99% BG123456789 и само тук таме някой западен номер.
....
Ами аз лично бих заложил на BG123.... защото това е формата на VIES. Не че нещо проблем при нужда да се генерира, но щом така и така ще трябва да имаш колона за страна и друга за номер вместо да ползваш композитен индекс да си ползваш обикновен (ако имаш нужда от индексиране де)
Активен

0x2B|~0x2B

NorthBridge

  • Участник
  • *****
  • Публикации: 177
  • Distribution: Slackware-current
  • Window Manager: Enlightenment E17
  • Mad Tinkerer
    • Профил
Хм, мисля че е по-добре да пазиш чистия company number в една колона и държавата в друга, и накрая UNIQUE индекс на company_number (ако ползваш MySQL, иначе ако е Postgre което не дава да слагаш UNIQUE на колона с NULL, там може да е на (company_number, id), за да можеш да ползваш лявата част като търсиш определен номер). Иначе ако си решил да е BG% или %BG, няма голяма разлика, стига да нямаш SELECT...LIKE '%нещо си'.
Активен

I did a 'zcat vmlinuz > /dev/audio' and I think I heard God...

Naka

  • Участник
  • *****
  • Публикации: 2630
    • Профил
направих го така:
Код:
CREATE TABLE firms (
firm_id MEDIUMINT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
country CHAR(2) NOT NULL,
company_number CHAR(16) NULL,
logo_id INT UNSIGNED default NULL,

UNIQUE KEY company_number (company_number, country),
KEY logo_id (logo_id)
);

с композитен индех едновременно върху VAT-а и country code-то. Така винги ще има уникалност. Много хубаво става с това че mysql позволява дублирани NULL стойности при уникален индекс. Така ако някой номер не се знае задава се NULL, а едновременно пък се запазва уникалността на тези дето са зададени.
Активен

Perl - the only language that looks the same before and after encryption.

romeo_ninov

  • Участник
  • *****
  • Публикации: 2155
    • Профил
....

с композитен индех едновременно върху VAT-а и country code-то. Така винги ще има уникалност. Много хубаво става с това че mysql позволява дублирани NULL стойности при уникален индекс. Така ако някой номер не се знае задава се NULL, а едновременно пък се запазва уникалността на тези дето са зададени.
Композитните индекси са много хубаво нещо, само трябва да видиш колко често имаш нужда от уникалния код и колко често от ИД на фирма (без да се интересуваш от държава). Така можеш да прецениш от гледна точка на производителност кое ще е по-евтино
Активен

0x2B|~0x2B