class HouseInt(Common): """ Интервалы домов """ class Meta: app_label = 'fias' verbose_name = 'Интервал домов' verbose_name_plural = 'Интервалы домов' houseintid = UUIDField('Идентификатор записи интервала домов') intguid = UUIDField('Глобальный уникальный идентификатор интервала домов', primary_key=True) aoguid = models.ForeignKey( AddrObj, verbose_name='Идентификатор объекта родительского объекта', help_text='(улица, город, населенный пункт и т.п.)', on_delete=models.CASCADE) intstart = models.PositiveIntegerField('Значение начала интервала') intend = models.PositiveIntegerField('Значение окончания интервала') intstatus = models.ForeignKey(IntvStat, verbose_name='Статус интервала', default=0, on_delete=models.CASCADE) counter = models.PositiveIntegerField('Счетчик записей домов для КЛАДР 4')
class LandMark(Common): """ Описание мест расположения имущественных объектов """ class Meta: app_label = 'fias' verbose_name = 'Место расположения имущественного объекта' verbose_name_plural = 'Места расположения имущественных объектов' landid = UUIDField('Уникальный идентификатор записи ориентира', unique=True) landguid = UUIDField('Глобальный уникальный идентификатор ориентира', primary_key=True) aoguid = models.ForeignKey( AddrObj, verbose_name='Идентификатор записи родительского объекта', help_text='(улица, город, населенный пункт и т.п.)', on_delete=models.CASCADE) location = models.TextField('Месторасположение ориентира') cadnum = models.CharField('Кадастровый номер', max_length=100, blank=True, null=True)
class House(June2016Update): """ Сведения по номерам домов улиц городов и населенных пунктов """ class Meta: app_label = 'fias' verbose_name = 'Номер дома' verbose_name_plural = 'Номера домов' aoguid = models.ForeignKey(AddrObj, verbose_name='Идентификатор записи родительского объекта', help_text='(улица, город, населенный пункт и т.п.)') houseguid = UUIDField('Глобальный уникальный идентификатор дома', primary_key=True) houseid = UUIDField('Уникальный идентификатор записи дома', unique=True) housenum = models.CharField('Номер дома', max_length=20, blank=True, null=True) eststatus = models.ForeignKey(EstStat, verbose_name='Признак владения', default=0) buildnum = models.CharField('Номер корпуса', max_length=10, blank=True, null=True) strucnum = models.CharField('Номер строения', max_length=10, blank=True, null=True) strstatus = models.ForeignKey(StrStat, verbose_name='Признак строения', default=0) statstatus = models.PositiveSmallIntegerField('Состояние дома') regioncode = models.CharField('Код региона', max_length=2, blank=True, null=True) counter = models.IntegerField('Счетчик записей домов для КЛАДР 4')
class LandMark(Common): class Meta: app_label = 'fias' landid = UUIDField() landguid = UUIDField(primary_key=True) aoguid = models.ForeignKey(AddrObj) location = models.TextField()
class House(June2016Update): """ Сведения по номерам домов улиц городов и населенных пунктов """ class Meta: app_label = 'fias' verbose_name = 'Номер дома' verbose_name_plural = 'Номера домов' aoguid = models.ForeignKey( AddrObj, verbose_name='Идентификатор записи родительского объекта', help_text='(улица, город, населенный пункт и т.п.)', on_delete=models.CASCADE) houseguid = UUIDField('Глобальный уникальный идентификатор дома', primary_key=True) houseid = UUIDField('Уникальный идентификатор записи дома', unique=True) housenum = models.CharField('Номер дома', max_length=20, blank=True, null=True) eststatus = models.ForeignKey(EstStat, verbose_name='Признак владения', default=0, on_delete=models.CASCADE) buildnum = models.CharField('Номер корпуса', max_length=20, blank=True, null=True) strucnum = models.CharField('Номер строения', max_length=20, blank=True, null=True) strstatus = models.ForeignKey(StrStat, verbose_name='Признак строения', default=0, on_delete=models.CASCADE) statstatus = models.PositiveSmallIntegerField('Состояние дома') regioncode = models.CharField('Код региона', max_length=2, blank=True, null=True) counter = models.IntegerField('Счетчик записей домов для КЛАДР 4') def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if self.eststatus_id is None or self.eststatus_id == '': self.eststatus_id = 0 super(House, self).save(force_insert, force_update, using, update_fields)
class HouseInt(Common): class Meta: app_label = 'fias' houseintid = UUIDField() intguid = UUIDField(primary_key=True) aoguid = models.ForeignKey(AddrObj) intstart = models.PositiveIntegerField() intend = models.PositiveIntegerField() intstatus = models.PositiveIntegerField() counter = models.PositiveIntegerField()
class Common(models.Model): class Meta: abstract = True ifnsfl = models.CharField('Код ИФНС ФЗ', max_length=4, blank=True, null=True) terrifnsfl = models.CharField('Код территориального участка ИФНС ФЛ', max_length=4, blank=True, null=True) ifnsul = models.CharField('Код ИФНС ЮЛ', max_length=4, blank=True, null=True) terrifnsul = models.CharField('Код территориального участка ИФНС ЮЛ', max_length=4, blank=True, null=True) okato = models.CharField('ОКАТО', max_length=11, blank=True, null=True) oktmo = models.CharField('ОКТМО', max_length=11, blank=True, null=True) postalcode = models.CharField('Почтовый индекс', max_length=6, blank=True, null=True) updatedate = models.DateField('Дата время внесения записи') startdate = models.DateField('Начало действия записи') enddate = models.DateField('Окончание действия записи') normdoc = UUIDField('Внешний ключ на нормативный документ', blank=True, null=True)
class House(Common): class Meta: app_label = 'fias' aoguid = models.ForeignKey(AddrObj) housenum = models.CharField(max_length=20, blank=True, null=True) eststatus = models.BooleanField() buildnum = models.CharField(max_length=10, blank=True, null=True) strucnum = models.CharField(max_length=10, blank=True, null=True) strstatus = models.PositiveSmallIntegerField() houseguid = UUIDField(primary_key=True) houseid = UUIDField() statstatus = models.PositiveSmallIntegerField() counter = models.IntegerField()
class AddrObjIndex(models.Model): class Meta: app_label = 'fias' aoguid = UUIDField() aolevel = models.PositiveSmallIntegerField() scname = models.TextField() fullname = models.TextField() item_weight = models.PositiveSmallIntegerField(default=64)
class Stead(June2016Update): """ Сведения о земельных участках """ class Meta: app_label = 'fias' verbose_name = 'Земельный участок' verbose_name_plural = 'Земельные участки' steadguid = UUIDField( 'Глобальный уникальный идентификатор адресного объекта (земельного участка)', primary_key=True) parentguid = UUIDField('Идентификатор объекта родительского объекта', blank=True, null=True, db_index=True) steadid = UUIDField('Уникальный идентификатор записи', unique=True) previd = UUIDField( 'Идентификатор записи связывания с предыдушей исторической записью', blank=True, null=True) nextid = UUIDField( 'Идентификатор записи связывания с последующей исторической записью', blank=True, null=True) number = models.CharField('Номер земельного участка', max_length=120, blank=True, null=True) regioncode = models.CharField('Код региона', max_length=2) operstatus = models.ForeignKey( OperStat, verbose_name='Статус действия над записью – причина появления записи', default=0, on_delete=models.CASCADE) livestatus = models.BooleanField('Признак действующего адресного объекта', default=False) counter = models.IntegerField(null=True) def __str__(self): return self.number
class NormDoc(models.Model): class Meta: app_label = 'fias' normdocid = UUIDField(primary_key=True) docname = models.TextField(blank=True) docdate = models.DateField(blank=True, null=True) docnum = models.CharField(max_length=20, blank=True, null=True) doctype = models.PositiveIntegerField() docimgid = models.PositiveIntegerField(blank=True, null=True)
class HouseBase(IFNS): class Meta: abstract = True postalcode = models.PositiveIntegerField(blank=True, null=True) housenum = models.CharField(max_length=20, blank=True, null=True) eststatus = models.BooleanField() buildnum = models.CharField(max_length=10, blank=True, null=True) strucnum = models.CharField(max_length=10, blank=True, null=True) strstatus = models.PositiveSmallIntegerField() houseguid = UUIDField() houseid = UUIDField(primary_key=True) startdate = models.DateField() enddate = models.DateField() statstatus = models.PositiveSmallIntegerField() normdoc = UUIDField(blank=True, null=True) counter = models.IntegerField()
class Room(models.Model): """ Классификатор помещений """ class Meta: app_label = 'fias' verbose_name = 'Помещение' verbose_name_plural = 'Помещения' houseguid = models.ForeignKey(House, verbose_name='Идентификатор родительского объекта (дома)', on_delete=models.CASCADE) roomguid = UUIDField('Глобальный уникальный идентификатор адресного объекта (помещения)', primary_key=True) roomid = UUIDField('Уникальный идентификатор записи.', unique=True) previd = UUIDField('Идентификатор записи связывания с предыдушей исторической записью', blank=True, null=True) nextid = UUIDField('Идентификатор записи связывания с последующей исторической записью', blank=True, null=True) flatnumber = models.CharField('Номер помещения или офиса', max_length=50) flattype = models.IntegerField('Тип помещения') roomnumber = models.CharField('Номер комнаты', max_length=50, blank=True, null=True) roomtype = models.IntegerField('Тип комнаты', blank=True, null=True) regioncode = models.CharField('Код региона', max_length=2) postalcode = models.PositiveIntegerField('Почтовый индекс', blank=True, null=True) updatedate = models.DateField('Дата внесения записи') startdate = models.DateField('Начало действия записи') enddate = models.DateField('Окончание действия записи') livestatus = models.BooleanField('Признак действующего адресного объекта', default=False) normdoc = UUIDField('Внешний ключ на нормативный документ', blank=True, null=True) operstatus = models.ForeignKey(OperStat, verbose_name='Статус действия над записью – причина появления записи', default=0, on_delete=models.CASCADE) cadnum = models.CharField('Кадастровый номер помещения', max_length=100, blank=True, null=True) roomcadnum = models.CharField('Кадастровый номер комнаты в помещении', max_length=100, blank=True, null=True) def __str__(self): return self.flatnumber
class NormDoc(models.Model): """ Сведения по нормативному документу, являющемуся основанием присвоения адресному элементу наименования """ class Meta: app_label = 'fias' verbose_name = 'Нормативный документ' verbose_name_plural = 'Нормативные документы' normdocid = UUIDField(primary_key=True, verbose_name='Идентификатор нормативного документа') docname = models.TextField('Наименование документа', blank=True, null=True) docdate = models.DateField('Дата документа', blank=True, null=True) docnum = models.CharField('Номер документа', max_length=250, blank=True, null=True) doctype = models.ForeignKey(NDocType, verbose_name='Тип документа', default=0, on_delete=models.CASCADE) docimgid = models.UUIDField('Идентификатор образа (внешний ключ)', blank=True, null=True)
class Common(models.Model): class Meta: abstract = True ifnsfl = models.PositiveIntegerField(blank=True, null=True) terrifnsfl = models.PositiveIntegerField(blank=True, null=True) ifnsul = models.PositiveIntegerField(blank=True, null=True) terrifnsul = models.PositiveIntegerField(blank=True, null=True) okato = models.BigIntegerField(blank=True, null=True) oktmo = models.BigIntegerField(blank=True, null=True) postalcode = models.PositiveIntegerField(blank=True, null=True) updatedate = models.DateField() startdate = models.DateField() enddate = models.DateField() normdoc = UUIDField(blank=True, null=True, auto=False)
class AddrObjBase(IFNS): class Meta: abstract = True index_together = ( ('aolevel', 'shortname'), ('shortname', 'formalname'), ) ordering = ['aolevel', 'formalname'] aoguid = UUIDField(primary_key=True) parentguid = UUIDField(blank=True, null=True, db_index=True) aoid = UUIDField(db_index=True, unique=True) previd = UUIDField(blank=True, null=True) nextid = UUIDField(blank=True, null=True) startdate = models.DateField() enddate = models.DateField() formalname = models.CharField(max_length=120, db_index=True) offname = models.CharField(max_length=120, blank=True, null=True) shortname = models.CharField(max_length=10, db_index=True) aolevel = models.PositiveSmallIntegerField(db_index=True) postalcode = models.PositiveIntegerField(blank=True, null=True) #KLADE regioncode = models.CharField(max_length=2) autocode = models.CharField(max_length=1) areacode = models.CharField(max_length=3) citycode = models.CharField(max_length=3) ctarcode = models.CharField(max_length=3) placecode = models.CharField(max_length=3) streetcode = models.CharField(max_length=4) extrcode = models.CharField(max_length=4) sextcode = models.CharField(max_length=3) #KLADR code = models.CharField(max_length=17, blank=True, null=True) plaincode = models.CharField(max_length=15, blank=True, null=True) actstatus = models.BooleanField() centstatus = models.PositiveSmallIntegerField() operstatus = models.PositiveSmallIntegerField() currstatus = models.PositiveSmallIntegerField() normdoc = UUIDField(blank=True, null=True) livestatus = models.BooleanField() def __unicode__(self): return '{} {}'.format(self.shortname, self.formalname)
class AddrObj(June2016Update): """ Классификатор адресообразующих элементов """ class Meta: app_label = 'fias' verbose_name = 'Адресообразующий элемент' verbose_name_plural = 'Адресообразующие элементы' index_together = ( ('aolevel', 'shortname'), ('shortname', 'formalname'), ) ordering = ['aolevel', 'formalname'] aoguid = UUIDField('Глобальный уникальный идентификатор адресного объекта', primary_key=True) parentguid = UUIDField('Идентификатор объекта родительского объекта', blank=True, null=True, db_index=True) aoid = UUIDField('Уникальный идентификатор записи', db_index=True, unique=True) previd = UUIDField( 'Идентификатор записи связывания с предыдушей исторической записью', blank=True, null=True) nextid = UUIDField( 'Идентификатор записи связывания с последующей исторической записью', blank=True, null=True) formalname = models.CharField('Формализованное наименование', max_length=120, db_index=True) offname = models.CharField('Официальное наименование', max_length=120, blank=True, null=True) shortname = models.CharField('Краткое наименование типа объекта', max_length=10, db_index=True) aolevel = models.PositiveSmallIntegerField('Уровень адресного объекта', db_index=True) # KLADE regioncode = models.CharField('Код региона', max_length=2) autocode = models.CharField('Код автономии', max_length=1) areacode = models.CharField('Код района', max_length=3) citycode = models.CharField('Код города', max_length=3) ctarcode = models.CharField('Код внутригородского района', max_length=3) placecode = models.CharField('Код населенного пункта', max_length=3) plancode = models.CharField('Код элемента планировочной структуры', max_length=4) streetcode = models.CharField('Код улицы', max_length=4) extrcode = models.CharField( 'Код дополнительного адресообразующего элемента', max_length=4) sextcode = models.CharField( 'Код подчиненного дополнительного адресообразующего элемента', max_length=3) # KLADR code = models.CharField( 'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0', max_length=17, blank=True, null=True) plaincode = models.CharField( 'Код адресного объекта из КЛАДР 4.0 одной строкой', help_text='Без признака актуальности (последних двух цифр)', max_length=15, blank=True, null=True) actstatus = models.BooleanField( 'Статус исторической записи в жизненном цикле адресного объекта', default=False) centstatus = models.ForeignKey(CenterSt, verbose_name='Статус центра', default=0, on_delete=models.CASCADE) operstatus = models.ForeignKey( OperStat, verbose_name='Статус действия над записью – причина появления записи', default=0, on_delete=models.CASCADE) currstatus = models.ForeignKey(CurentSt, verbose_name='Статус актуальности КЛАДР 4', help_text='последние две цифры в коде', default=0, on_delete=models.CASCADE) livestatus = models.BooleanField('Признак действующего адресного объекта', default=False) # gnedoy parent_address = models.CharField( 'Полный адрес родителя', blank=True, default='', max_length=150, help_text= 'Сохранненный в виде текстовой строки адрес родителей из ФИАС') def full_name(self, depth=None, formal=False): assert isinstance(depth, six.integer_types), 'Depth must be integer' if not self.parentguid or self.aolevel <= 1 or depth <= 0: if formal: return self.get_formal_name() return self.get_natural_name() else: parent = AddrObj.objects.get(pk=self.parentguid) return '{0}, {1}'.format(parent.full_name(depth - 1, formal), self) def get_formal_name(self): return '{0}. {1}'.format(self.shortname, self.formalname) def full_name_rus(self, min_level=2): names_list = [self.get_natural_name()] try: parent = self while True: parent = AddrObj.objects.get(pk=parent.parentguid) if parent.aolevel < min_level: break names_list.append(parent.get_natural_name()) # без Республики except: pass name = names_list[len(names_list) - 1] for i in range(len(names_list) - 2, -1, -1): name += ', ' + names_list[i] return name def full_address(self): return self.full_name(5) def get_natural_name(self): if self.shortname == 'р-н' or self.shortname == 'км': return '{0} {1}'.format(self.formalname, self.shortname) if self.shortname in ['ул', 'г', 'с', 'пер', 'тер', 'ш']: return '{0}. {1}'.format(self.shortname, self.formalname) return '{0} {1}'.format(self.shortname, self.formalname) def get_parent_natural_address(self): parents_natural_name = '' try: parent = AddrObj.objects.get(pk=self.parentguid) parents_natural_name = parent.get_natural_name() while True: parent = AddrObj.objects.get(pk=parent.parentguid) # name = name + ', ' + parent.get_natural_name() # c Республикой if parent.aolevel == 1: break parents_natural_name += ', ' + parent.get_natural_name( ) # без Республики except: pass return parents_natural_name def get_natural_address(self): return '{}, {}'.format(self.get_natural_name(), self.get_parent_natural_address()) def __str__(self): return '{}, {}'.format(self.get_natural_name(), self.parent_address) # gnedoy def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not update_fields or 'parent_address' not in update_fields: self.parent_address = '' if self.parentguid is not None: try: self.parent_address = str( AddrObj.objects.get(pk=self.parentguid)) except: pass super(AddrObj, self).save(force_insert, force_update, using, update_fields) # change all children addresses parent_address = self.__str__() for addr in AddrObj.objects.filter(parentguid=self.aoguid): addr.parent_address = parent_address addr.save(update_fields=['parent_address']) else: super(AddrObj, self).save(force_insert, force_update, using, update_fields)
class AddrObj(June2016Update): """ Классификатор адресообразующих элементов """ class Meta: app_label = 'fias' verbose_name = 'Адресообразующий элемент' verbose_name_plural = 'Адресообразующие элементы' index_together = ( ('aolevel', 'shortname'), ('shortname', 'formalname'), ) ordering = ['aolevel', 'formalname'] aoguid = UUIDField('Глобальный уникальный идентификатор адресного объекта', primary_key=True) parentguid = UUIDField('Идентификатор объекта родительского объекта', blank=True, null=True, db_index=True) aoid = UUIDField('Уникальный идентификатор записи', db_index=True, unique=True) previd = UUIDField( 'Идентификатор записи связывания с предыдушей исторической записью', blank=True, null=True) nextid = UUIDField( 'Идентификатор записи связывания с последующей исторической записью', blank=True, null=True) formalname = models.CharField('Формализованное наименование', max_length=120, db_index=True) offname = models.CharField('Официальное наименование', max_length=120, blank=True, null=True) shortname = models.CharField('Краткое наименование типа объекта', max_length=10, db_index=True) aolevel = models.PositiveSmallIntegerField('Уровень адресного объекта', db_index=True) # KLADE regioncode = models.CharField('Код региона', max_length=2) autocode = models.CharField('Код автономии', max_length=1) areacode = models.CharField('Код района', max_length=3) citycode = models.CharField('Код города', max_length=3) ctarcode = models.CharField('Код внутригородского района', max_length=3) placecode = models.CharField('Код населенного пункта', max_length=3) plancode = models.CharField('Код элемента планировочной структуры', max_length=4) streetcode = models.CharField('Код улицы', max_length=4) extrcode = models.CharField( 'Код дополнительного адресообразующего элемента', max_length=4) sextcode = models.CharField( 'Код подчиненного дополнительного адресообразующего элемента', max_length=3) # KLADR code = models.CharField( 'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0', max_length=17, blank=True, null=True) plaincode = models.CharField( 'Код адресного объекта из КЛАДР 4.0 одной строкой', help_text='Без признака актуальности (последних двух цифр)', max_length=15, blank=True, null=True) actstatus = models.BooleanField( 'Статус исторической записи в жизненном цикле адресного объекта', default=False) centstatus = models.ForeignKey(CenterSt, verbose_name='Статус центра', default=0, on_delete=models.CASCADE) operstatus = models.ForeignKey( OperStat, verbose_name='Статус действия над записью – причина появления записи', default=0, on_delete=models.CASCADE) currstatus = models.ForeignKey(CurentSt, verbose_name='Статус актуальности КЛАДР 4', help_text='последние две цифры в коде', default=0, on_delete=models.CASCADE) livestatus = models.BooleanField('Признак действующего адресного объекта', default=False) def full_name(self, depth=None, formal=False): assert isinstance(depth, six.integer_types), 'Depth must be integer' if not self.parentguid or self.aolevel <= 1 or depth <= 0: if formal: return self.get_formal_name() return self.get_natural_name() else: parent = AddrObj.objects.get(pk=self.parentguid) return '{0}, {1}'.format(parent.full_name(depth - 1, formal), self) def get_natural_name(self): if self.aolevel == 1: return '{0} {1}'.format(self.formalname, self.shortname) return self.get_formal_name() def get_formal_name(self): return '{0} {1}'.format(self.shortname, self.formalname) def __str__(self): return self.get_natural_name() def full_address(self): return self.full_name(5)
class AddrObj(Common): class Meta: app_label = 'fias' index_together = ( ('aolevel', 'shortname'), ('shortname', 'formalname'), ) ordering = ['aolevel', 'formalname'] aoguid = UUIDField(primary_key=True) parentguid = UUIDField(blank=True, null=True, auto=False, db_index=True) aoid = UUIDField(db_index=True, unique=True) previd = UUIDField(blank=True, null=True, auto=False) nextid = UUIDField(blank=True, null=True, auto=False) formalname = models.CharField(max_length=120, db_index=True) offname = models.CharField(max_length=120, blank=True, null=True) shortname = models.CharField(max_length=10, db_index=True) aolevel = models.PositiveSmallIntegerField(db_index=True) #KLADE regioncode = models.CharField(max_length=2) autocode = models.CharField(max_length=1) areacode = models.CharField(max_length=3) citycode = models.CharField(max_length=3) ctarcode = models.CharField(max_length=3) placecode = models.CharField(max_length=3) streetcode = models.CharField(max_length=4) extrcode = models.CharField(max_length=4) sextcode = models.CharField(max_length=3) #KLADR code = models.CharField(max_length=17, blank=True, null=True) plaincode = models.CharField(max_length=15, blank=True, null=True) actstatus = models.BooleanField() centstatus = models.PositiveSmallIntegerField() operstatus = models.PositiveSmallIntegerField() currstatus = models.PositiveSmallIntegerField() livestatus = models.BooleanField() def full_name(self, depth=None, formal=False): assert isinstance(depth, six.integer_types), 'Depth must be integer' if not self.parentguid or self.aolevel <= 1 or depth <= 0: if formal: return self.get_formal_name() return self.get_natural_name() else: parent = AddrObj.objects.get(pk=self.parentguid) return '{0}, {1}'.format(parent.full_name(depth-1, formal), self) def get_natural_name(self): if self.aolevel == 1: return '{0} {1}'.format(self.formalname, self.shortname) return self.get_formal_name() def get_formal_name(self): return '{0} {1}'.format(self.shortname, self.formalname) def __unicode__(self): return self.get_natural_name() def full_address(self): return self.full_name(5)