mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
338 lines
20 KiB
338 lines
20 KiB
# -*- coding: utf-8 -*-
|
|
from django.db import models
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from comissoes.models import Comissao
|
|
from parlamentares.models import Parlamentar, Partido
|
|
|
|
|
|
class TipoMateriaLegislativa(models.Model):
|
|
sigla = models.CharField(max_length=5, verbose_name=_(u'Sigla')) # sgl_tipo_materia
|
|
descricao = models.CharField(max_length=50, verbose_name=_(u'Descrição ')) # des_tipo_materia
|
|
# XXX o que é isso ?
|
|
num_automatica = models.BooleanField() # ind_num_automatica
|
|
# XXX o que é isso ?
|
|
quorum_minimo_votacao = models.IntegerField() # quorum_minimo_votacao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tipo de Matéria Legislativa')
|
|
verbose_name_plural = _(u'Tipos de Matérias Legislativas')
|
|
|
|
|
|
class RegimeTramitacao(models.Model):
|
|
descricao = models.CharField(max_length=50) # des_regime_tramitacao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Regime Tramitação')
|
|
verbose_name_plural = _(u'Regimes Tramitação')
|
|
|
|
|
|
class Origem(models.Model):
|
|
sigla = models.CharField(max_length=10, verbose_name=_(u'Sigla')) # sgl_origem
|
|
nome = models.CharField(max_length=50, verbose_name=_(u'Nome')) # nom_origem
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Origem')
|
|
verbose_name_plural = _(u'Origens')
|
|
|
|
|
|
class MateriaLegislativa(models.Model):
|
|
ORAL, ESCRITA = 'O', 'E'
|
|
TIPO_APRESENTACAO_CHOICES = ((ORAL, _(u'Oral')),
|
|
(ESCRITA, _(u'Escrita')))
|
|
|
|
tipo_id_basica = models.ForeignKey(TipoMateriaLegislativa, verbose_name=_(u'Tipo')) # tip_id_basica
|
|
numero_protocolo = models.IntegerField(blank=True, null=True,verbose_name=_(u'Núm. Protocolo')) # num_protocolo
|
|
numero_ident_basica = models.IntegerField(verbose_name=_(u'Número')) # num_ident_basica
|
|
ano_ident_basica = models.SmallIntegerField(verbose_name=_(u'Ano')) # ano_ident_basica
|
|
data_apresentacao = models.DateField(blank=True, null=True, verbose_name=_(u'Data Apresentação')) # dat_apresentacao
|
|
tipo_apresentacao = models.CharField(max_length=1, blank=True, null=True, verbose_name=_(u'Tipo de Apresentação'), choices=TIPO_APRESENTACAO_CHOICES) # tip_apresentacao
|
|
regime_tramitacao = models.ForeignKey(RegimeTramitacao, verbose_name=_(u'Regime Tramitação')) # cod_regime_tramitacao
|
|
data_publicacao = models.DateField(blank=True, null=True, verbose_name=_(u'Data Publicação')) # dat_publicacao
|
|
tipo_origem_externa = models.ForeignKey(TipoMateriaLegislativa, blank=True, null=True, related_name='+', verbose_name=_(u'Tipo')) # tip_origem_externa
|
|
numero_origem_externa = models.CharField(max_length=5, blank=True, null=True, verbose_name=_(u'Número')) # num_origem_externa
|
|
ano_origem_externa = models.SmallIntegerField(blank=True, null=True, verbose_name=_(u'Ano')) # ano_origem_externa
|
|
data_origem_externa = models.DateField(blank=True, null=True, verbose_name=_(u'Data')) # dat_origem_externa
|
|
local_origem_externa = models.ForeignKey(Origem, blank=True, null=True, verbose_name=_(u'Local Origem')) # cod_local_origem_externa
|
|
apelido = models.CharField(max_length=50, blank=True, null=True, verbose_name=_(u'Apelido')) # nom_apelido
|
|
dias_prazo = models.IntegerField(blank=True, null=True, verbose_name=_(u'Dias Prazo')) # num_dias_prazo
|
|
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_(u'Data Fim Prazo')) # dat_fim_prazo
|
|
em_tramitacao = models.BooleanField(verbose_name=_(u'Em Tramitação?')) # ind_tramitacao
|
|
polemica = models.NullBooleanField(blank=True, verbose_name=_(u'Matéria Polêmica?')) # ind_polemica
|
|
objeto = models.CharField(max_length=150, blank=True, null=True, verbose_name=_(u'Objeto')) # des_objeto
|
|
complementar = models.NullBooleanField(blank=True, verbose_name=_(u'É Complementar?')) # ind_complementar
|
|
ementa = models.TextField(verbose_name=_(u'Ementa')) # txt_ementa
|
|
indexacao = models.TextField(blank=True, null=True, verbose_name=_(u'Indexação')) # txt_indexacao
|
|
observacao = models.TextField(blank=True, null=True, verbose_name=_(u'Observação')) # txt_observacao
|
|
resultado = models.TextField(blank=True, null=True) # txt_resultado
|
|
# XXX novo
|
|
anexadas = models.ManyToManyField('self', through='Anexada',
|
|
symmetrical=False, related_name='anexo_de',
|
|
through_fields=('materia_principal', 'materia_anexada'))
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Matéria Legislativa')
|
|
verbose_name_plural = _(u'Matérias Legislativas')
|
|
|
|
|
|
class AcompanhamentoMateria(models.Model): # AcompMateria
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
email = models.CharField(max_length=100, verbose_name=_(u'Endereço de E-mail')) # end_email
|
|
hash = models.CharField(max_length=8) # txt_hash
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Acompanhamento de Matéria')
|
|
verbose_name_plural = _(u'Acompanhamentos de Matéria')
|
|
|
|
|
|
class Anexada(models.Model):
|
|
materia_principal = models.ForeignKey(MateriaLegislativa, related_name='+') # cod_materia_principal
|
|
materia_anexada = models.ForeignKey(MateriaLegislativa, related_name='+') # cod_materia_anexada
|
|
data_anexacao = models.DateField(verbose_name=_(u'Data Anexação')) # dat_anexacao
|
|
data_desanexacao = models.DateField(blank=True, null=True, verbose_name=_(u'Data Desanexação')) # dat_desanexacao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Anexada')
|
|
verbose_name_plural = _(u'Anexadas')
|
|
|
|
|
|
class AssuntoMateria(models.Model):
|
|
assunto = models.CharField(max_length=200) # des_assunto
|
|
dispositivo = models.CharField(max_length=50) # des_dispositivo
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Assunto de Matéria')
|
|
verbose_name_plural = _(u'Assuntos de Matéria')
|
|
|
|
|
|
class TipoAutor(models.Model):
|
|
descricao = models.CharField(max_length=50, verbose_name=_(u'Descrição')) # des_tipo_autor
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tipo de Autor')
|
|
verbose_name_plural = _(u'Tipos de Autor')
|
|
|
|
|
|
class Autor(models.Model):
|
|
partido = models.ForeignKey(Partido, blank=True, null=True) # cod_partido
|
|
comissao = models.ForeignKey(Comissao, blank=True, null=True) # cod_comissao
|
|
parlamentar = models.ForeignKey(Parlamentar, blank=True, null=True) # cod_parlamentar
|
|
tipo = models.ForeignKey(TipoAutor, verbose_name=_(u'Tipo')) # tip_autor
|
|
nome = models.CharField(max_length=50, blank=True, null=True, verbose_name=_(u'Autor')) # nom_autor
|
|
cargo = models.CharField(max_length=50, blank=True, null=True) # des_cargo
|
|
username = models.CharField(max_length=50, blank=True, null=True) # col_username
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Autor')
|
|
verbose_name_plural = _(u'Autores')
|
|
|
|
|
|
class Autoria(models.Model):
|
|
autor = models.ForeignKey(Autor) # cod_autor
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
primeiro_autor = models.BooleanField(verbose_name=_(u'Primeiro Autor')) # ind_primeiro_autor
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Autoria')
|
|
verbose_name_plural = _(u'Autorias')
|
|
|
|
|
|
class DespachoInicial(models.Model):
|
|
# TODO M2M?
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
numero_ordem = models.IntegerField() # num_ordem
|
|
comissao = models.ForeignKey(Comissao) # cod_comissao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Despacho Inicial')
|
|
verbose_name_plural = _(u'Despachos Iniciais')
|
|
|
|
|
|
class TipoDocumento(models.Model):
|
|
descricao = models.CharField(max_length=50, verbose_name=_(u'Tipo Documento')) # des_tipo_documento
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tipo de Documento')
|
|
verbose_name_plural = _(u'Tipos de Documento')
|
|
|
|
|
|
class DocumentoAcessorio(models.Model):
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
tipo = models.ForeignKey(TipoDocumento, verbose_name=_(u'Tipo')) # tip_documento
|
|
nome = models.CharField(max_length=30, verbose_name=_(u'Descrição')) # nom_documento
|
|
data = models.DateField(blank=True, null=True, verbose_name=_(u'Data')) # dat_documento
|
|
autor = models.CharField(max_length=50, blank=True, null=True, verbose_name=_(u'Autor')) # nom_autor_documento
|
|
ementa = models.TextField(blank=True, null=True, verbose_name=_(u'Ementa')) # txt_ementa
|
|
indexacao = models.TextField(blank=True, null=True) # txt_indexacao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Documento Acessório')
|
|
verbose_name_plural = _(u'Documentos Acessórios')
|
|
|
|
|
|
class MateriaAssunto(models.Model):
|
|
# TODO M2M ??
|
|
assunto = models.ForeignKey(AssuntoMateria) # cod_assunto
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Relação Matéria - Assunto')
|
|
verbose_name_plural = _(u'Relações Matéria - Assunto')
|
|
|
|
|
|
class Numeracao(models.Model):
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
numero_ordem = models.IntegerField() # num_ordem
|
|
tipo_materia = models.ForeignKey(TipoMateriaLegislativa, verbose_name=_(u'Tipo de Matéria')) # tip_materia
|
|
numero_materia = models.CharField(max_length=5, verbose_name=_(u'Número')) # num_materia
|
|
ano_materia = models.SmallIntegerField(verbose_name=_(u'Ano')) # ano_materia
|
|
data_materia = models.DateField(blank=True, null=True, verbose_name=_(u'Data')) # dat_materia
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Numeração')
|
|
verbose_name_plural = _(u'Numerações')
|
|
|
|
|
|
class Orgao(models.Model):
|
|
nome = models.CharField(max_length=60, verbose_name=_(u'Nome')) # nom_orgao
|
|
sigla = models.CharField(max_length=10, verbose_name=_(u'Sigla')) # sgl_orgao
|
|
unidade_deliberativa = models.BooleanField(verbose_name=_(u'Unidade Deliberativa')) # ind_unid_deliberativa
|
|
endereco = models.CharField(max_length=100, blank=True, null=True, verbose_name=_(u'Endereço')) # end_orgao
|
|
telefone = models.CharField(max_length=50, blank=True, null=True, verbose_name=_(u'Telefone')) # num_tel_orgao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Órgão')
|
|
verbose_name_plural = _(u'Órgãos')
|
|
|
|
|
|
class TipoFimRelatoria(models.Model):
|
|
descricao = models.CharField(max_length=50, verbose_name=_(u'Tipo Fim Relatoria')) # des_fim_relatoria
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tipo Fim de Relatoria')
|
|
verbose_name_plural = _(u'Tipos Fim de Relatoria')
|
|
|
|
|
|
class Relatoria(models.Model):
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
parlamentar = models.ForeignKey(Parlamentar, verbose_name=_(u'Parlamentar')) # cod_parlamentar
|
|
tipo_fim_relatoria = models.ForeignKey(TipoFimRelatoria, blank=True, null=True, verbose_name=_(u'Motivo Fim Relatoria')) # tip_fim_relatoria
|
|
comissao = models.ForeignKey(Comissao, blank=True, null=True, verbose_name=_(u'Localização Atual')) # cod_comissao
|
|
data_designacao_relator = models.DateField(verbose_name=_(u'Data Designação')) # dat_desig_relator
|
|
data_destituicao_relator = models.DateField(blank=True, null=True, verbose_name=_(u'Data Destituição')) # dat_destit_relator
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Relatoria')
|
|
verbose_name_plural = _(u'Relatorias')
|
|
|
|
|
|
class Parecer(models.Model):
|
|
relatoria = models.ForeignKey(Relatoria) # cod_relatoria
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
tipo_conclusao = models.CharField(max_length=3, blank=True, null=True) # tip_conclusao
|
|
tipo_apresentacao = models.CharField(max_length=1) # tip_apresentacao
|
|
parecer = models.TextField(blank=True, null=True) # txt_parecer
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Parecer')
|
|
verbose_name_plural = _(u'Pareceres')
|
|
|
|
|
|
class TipoProposicao(models.Model):
|
|
MATERIA = 'M'
|
|
DOCUMENTO = 'D'
|
|
MAT_OU_DOC_CHOICES = ((MATERIA, _(u'Matéria')),
|
|
(DOCUMENTO, _(u'Documento')))
|
|
|
|
descricao = models.CharField(max_length=50, verbose_name=_(u'Descrição')) # des_tipo_proposicao
|
|
materia_ou_documento = models.CharField(max_length=1, verbose_name=_(u'Gera'), choices=MAT_OU_DOC_CHOICES) # ind_mat_ou_doc
|
|
modelo = models.CharField(max_length=50, verbose_name=_(u'Modelo XML')) # nom_modelo
|
|
|
|
# mutually exclusive (depend on materia_ou_documento)
|
|
tipo_materia = models.ForeignKey(TipoMateriaLegislativa, blank=True, null=True, verbose_name=_(u'Tipo Matéria')) # tip_mat_ou_doc
|
|
tipo_documento = models.ForeignKey(TipoDocumento, blank=True, null=True, verbose_name=_(u'Tipo Documento'))
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tipo de Proposição')
|
|
verbose_name_plural = _(u'Tipos de Proposições')
|
|
|
|
|
|
class Proposicao(models.Model):
|
|
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True) # cod_materia
|
|
autor = models.ForeignKey(Autor) # cod_autor
|
|
tipo = models.ForeignKey(TipoProposicao, verbose_name=_(u'Tipo')) # tip_proposicao
|
|
# XXX data_envio was not null, but actual data said otherwise!!!
|
|
data_envio = models.DateTimeField(null=True, verbose_name=_(u'Data de Envio')) # dat_envio
|
|
data_recebimento = models.DateTimeField(blank=True, null=True, verbose_name=_(u'Data de Incorporação')) # dat_recebimento
|
|
descricao = models.CharField(max_length=100, verbose_name=_(u'Descrição')) # txt_descricao
|
|
data_devolucao = models.DateTimeField(blank=True, null=True, verbose_name=_(u'Data de devolução')) # dat_devolucao
|
|
justificativa_devolucao = models.CharField(max_length=200, blank=True, null=True, verbose_name=_(u'Justificativa da Devolução')) # txt_justif_devolucao
|
|
numero_proposicao = models.IntegerField(blank=True, null=True, verbose_name=_(u'')) # num_proposicao
|
|
|
|
# mutually exclusive (depend on tipo.materia_ou_documento)
|
|
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True, verbose_name=_(u'Matéria')) # cod_mat_ou_doc
|
|
documento = models.ForeignKey(DocumentoAcessorio, blank=True, null=True, verbose_name=_(u'Documento'))
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Proposição')
|
|
verbose_name_plural = _(u'Proposições')
|
|
|
|
|
|
class StatusTramitacao(models.Model):
|
|
FIM = 'F'
|
|
RETORNO = 'R'
|
|
INDICADOR_CHOICES = ((FIM, _(u'Fim')),
|
|
(RETORNO, _(u'Retorno')))
|
|
|
|
sigla = models.CharField(max_length=10, verbose_name=_(u'Sigla')) # sgl_status
|
|
descricao = models.CharField(max_length=60, verbose_name=_(u'Descrição')) # des_status
|
|
indicador = models.CharField(max_length=1, verbose_name=_(u'Indicador da Tramitação'), choices=INDICADOR_CHOICES) # ind_fim_tramitacao
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Status de Tramitação')
|
|
verbose_name_plural = _(u'Status de Tramitação')
|
|
|
|
|
|
class UnidadeTramitacao(models.Model):
|
|
comissao = models.ForeignKey(Comissao, blank=True, null=True, verbose_name=_(u'Comissão')) # cod_comissao
|
|
orgao = models.ForeignKey(Orgao, blank=True, null=True, verbose_name=_(u'Órgão')) # cod_orgao
|
|
parlamentar = models.ForeignKey(Parlamentar, blank=True, null=True, verbose_name=_(u'Parlamentar')) # cod_parlamentar
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Unidade de Tramitação')
|
|
verbose_name_plural = _(u'Unidades de Tramitação')
|
|
|
|
|
|
class Tramitacao(models.Model):
|
|
PRIMEIRO = 'P'
|
|
SEGUNDO = 'S'
|
|
UNICO = 'Ú'
|
|
SUPLEMENTAR = 'L'
|
|
FINAL = 'F'
|
|
VOTACAO_UNICA = 'A'
|
|
PRIMEIRA_VOTACAO = 'B'
|
|
SEGUNDA_TERCEIRA_VOTACAO = 'C'
|
|
TURNO_CHOICES = ((PRIMEIRO, _(u'Primeiro')),
|
|
(SEGUNDO, _(u'Segundo')),
|
|
(UNICO, _(u'Único')),
|
|
(SUPLEMENTAR, _(u'Suplementar')),
|
|
(FINAL, _(u'Final')),
|
|
(VOTACAO_UNICA, _(u'Votação única em Regime de Urgência')),
|
|
(PRIMEIRA_VOTACAO, _(u'1ª Votação')),
|
|
(SEGUNDA_TERCEIRA_VOTACAO, _(u'2ª e 3ª Votação')))
|
|
|
|
status = models.ForeignKey(StatusTramitacao, blank=True, null=True, verbose_name=_(u'Status')) # cod_status
|
|
materia = models.ForeignKey(MateriaLegislativa) # cod_materia
|
|
data_tramitacao = models.DateField(blank=True, null=True, verbose_name=_(u'Data Tramitação')) # dat_tramitacao
|
|
unidade_tramitacao_local = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_(u'Unidade Local')) # cod_unid_tram_local
|
|
data_encaminhamento = models.DateField(blank=True, null=True, verbose_name=_(u'Data Encaminhamento')) # dat_encaminha
|
|
unidade_tramitacao_destino = models.ForeignKey(UnidadeTramitacao, blank=True, null=True, related_name='+', verbose_name=_(u'Unidade Destino')) # cod_unid_tram_dest
|
|
ultima = models.BooleanField() # ind_ult_tramitacao
|
|
urgente = models.BooleanField(verbose_name=_(u'Urgente ?')) # ind_urgencia
|
|
turno = models.CharField(max_length=1, blank=True, null=True, verbose_name=_(u'Turno'), choices=TURNO_CHOICES) # sgl_turno
|
|
texto = models.TextField(blank=True, null=True, verbose_name=_(u'Texto da Ação')) # txt_tramitacao
|
|
data_fim_prazo = models.DateField(blank=True, null=True, verbose_name=_(u'Data Fim Prazo')) # dat_fim_prazo
|
|
|
|
class Meta:
|
|
verbose_name = _(u'Tramitação')
|
|
verbose_name_plural = _(u'Tramitações')
|
|
|