Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: Naka в Jun 17, 2015, 16:25



Титла: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: Naka в Jun 17, 2015, 16:25
При западните/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.


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: stealth01 в Jun 17, 2015, 18:02
Преди време ДДС номерът беше различен от БУЛСТАТ-а.
След това направиха нови ДДС номера, които съвпрадат с БУЛСТАТ номера + BG отпред. На практика си имаме два номера в момента, които по стечение на обстоятелствата са почти еднакви.

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


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: NorthBridge в Jun 17, 2015, 18:47
В повечето случаи това е VAT number, но за всяка държава е различно, и в крайна сметка е един голям мармалад. https://en.wikipedia.org/wiki/VAT_identification_number ($2)

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


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: romeo_ninov в Jun 18, 2015, 12:43
Ето нещо от сайта на ЕО: http://ec.europa.eu/taxation_customs/taxation/tax_cooperation/mutual_assistance/tin/index_en.htm


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: Naka в Jun 18, 2015, 13:44
Ето нещо от сайта на ЕО: http://ec.europa.eu/taxation_customs/taxation/tax_cooperation/mutual_assistance/tin/index_en.htm

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


а пък тука
http://ec.europa.eu/taxation_customs/vies/ минават бултатите но само на регистрираните по ДДС фирми а другите булстати на нерегистрираните ги изхвърля.


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: romeo_ninov в Jun 18, 2015, 13:51
това TIN явно е за физическите лица. в страницата има линк за проверка online check module ($2)  и там нашите ЕГН-та минават но не и булстатите.


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


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: Naka в Jun 18, 2015, 17:45
засега единственото решение което виждам за да го напрявя по-универсално е:
да преименувам полето 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.linux-bg.org/forum/index.php?topic=36320.msg184403 и работи правилно. А за западните номера явно трябва да си затварям очите и да ги приемам на доверие.

тук открих нещо много ценно 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



Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: romeo_ninov в Jun 19, 2015, 09:20
....
обаче все още се чудя как да ги записвам номерата - с префикса отпред BG123456789 DE123456789 или да ги сложа като суфикс  123456789BG 123456789DE

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


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: NorthBridge в Jun 19, 2015, 23:49
Хм, мисля че е по-добре да пазиш чистия company number в една колона и държавата в друга, и накрая UNIQUE индекс на company_number (ако ползваш MySQL, иначе ако е Postgre което не дава да слагаш UNIQUE на колона с NULL, там може да е на (company_number, id), за да можеш да ползваш лявата част като търсиш определен номер). Иначе ако си решил да е BG% или %BG, няма голяма разлика, стига да нямаш SELECT...LIKE '%нещо си'.


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: Naka в Jun 20, 2015, 13:19
направих го така:
Код:
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, а едновременно пък се запазва уникалността на тези дето са зададени.


Титла: Re: Аналог на БУЛСТАТ / уникален номер на фирма при западните EU фирми
Публикувано от: romeo_ninov в Jun 22, 2015, 09:22
....

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