Está en la página 1de 10

Modelo de datos

Creado por elias gomez

Etiquetas Producto

Modelo Entidad-Relación

Campos
Clase Contrato
Campos:

Modelo de datos 1
fecha : Fecha del contrato.

fecha_inicio : Fecha de inicio del contrato.

fecha_aprobacion : Fecha de aprobación del contrato (puede ser nulo).

tipo_facturador : Tipo de facturador, con opciones como 'IFACTURE', 'MI PYME'


y 'OTRO'.

numero_DTE : Número DTE (Documento Tributario Electrónico).

tramo_DTE : Datos en formato JSON relacionados con el DTE.

numero_empresa : Número de empresa.

tramo_empresa : Datos en formato JSON relacionados con la empresa.

numero_usuario : Número de usuario.

tramo_usuario : Datos en formato JSON relacionados con el usuario.

tipo_cobro : Tipo de cobro, que puede ser 'Valor Fijo' o 'Valor Variable'.

monto_cobro : Monto del cobro en formato decimal.

monto_tope : Monto tope en formato decimal (puede ser nulo).

monto_onboarding : Monto de onboarding en formato decimal.

moneda_onboarding : Moneda de onboarding.

: Estado del contrato, con opciones como 'Pendiente', 'Vigente',


estado

'Suspendido' y 'Terminado'.

periodicidad : Periodicidad del contrato, con opciones como 'Mensual',


'Trimestral', 'Semestral' y 'Anual'.

motivo_baja : Motivo de baja (puede ser nulo).

comentario_baja : Comentario relacionado con la baja (puede ser nulo).

fecha_baja : Fecha de baja (puede ser nulo).

creado_en : Fecha de creación del contrato (auto-generada).

Relaciones:

categoria : Relación con la clase Categoria .

Modelo de datos 2
usuario_padre : Relación uno a uno con la clase User con el nombre
contrato_padre .

usuario_creador : Relación con la clase User con el nombre contrato_creador

(puede ser nulo).

usuario_modificador : Relación con la clase User con el nombre


contrato_modificador (puede ser nulo).

usuario_aprobador : Relación con la clase User con el nombre contrato_aprobador

(puede ser nulo).

grupos : Relación con la clase Group (muchos a muchos).

Clase Descuento
Campos:

porcentaje : Porcentaje de descuento en formato decimal.

periodo_inicio : Fecha de inicio del período de descuento.

periodo_fin : Fecha de fin del período de descuento.

creado_en : Fecha de creación del descuento (auto-generada).

Relaciones:

contrato : Relación con la clase Contrato .

usuario_modificador : Relación con la clase User con el nombre user_modificador

(puede ser nulo).

Clase HistoricoContrato
Campos:

Campos similares a la clase Contrato para mantener un historial de contratos.

creado_en : Fecha de creación del historial del contrato (auto-generada).

Relaciones:

categoria : Relación con la clase Categoria .

usuario_padre : Relación con la clase User con el nombre


contrato_padre_historico .

Modelo de datos 3
usuario_modificador : Relación con la clase User con el nombre
contrato_modificador_historico (puede ser nulo).

grupos : Relación con la clase Group (muchos a muchos).

contrato : Relación con la clase Contrato .

Clase HistoricoDescuento
Campos:

Campos similares a la clase Descuento para mantener un historial de


descuentos.

creado_en : Fecha de creación del historial del descuento (auto-generada).

Relaciones:

contrato : Relación con la clase HistoricoContrato .

usuario_modificador : Relación con la clase User (puede ser nulo).

Clase Pago
Campos:

codigo : Código relacionado con el pago (puede ser nulo).

monto : Monto del pago en formato decimal.

fecha_pago : Fecha del pago (puede ser nulo).

periodo : Período del pago.

estado : Estado del pago, con opciones como 'Pendiente', 'Pagado' y 'Trial'.

cantidad_empresas : Cantidad de empresas relacionadas con el pago (por


defecto, 0).

cantidad_usuarios : Cantidad de usuarios relacionados con el pago (por defecto,


0).

cantidad_documentos : Cantidad de documentos relacionados con el pago (por


defecto, 0).

cobro_base : Campo booleano que indica si es un cobro base o no (por defecto,


False).

Modelo de datos 4
creado_en : Fecha de creación del pago (auto-generada).

Relaciones:

contrato : Relación con la clase Contrato .

💭 Código
class Contrato(models.Model):
TIPO_FACTURADOR = (
(1, 'IFACTURE'),
(2, 'MI PYME'),
(3, 'OTRO'),
)
TIPO_COBRO = (
(1, 'Valor Fijo'),
(2, 'Valor Variable'),
)

ESTADO = (
(1, 'Pendiente'),
(2, 'Vigente'),
(3, 'Suspendido'),
(4, 'Terminado'),
)

PERIODICIDAD = (
(1, 'Mensual'),
(2, 'Trimestral'),
(3, 'Semestral'),
(4, 'Anual'),
)

MOTIVOS = (

Modelo de datos 5
(1, 'Venta mal realizada'),
(2, 'Funcionalidad'),
(3, 'Falta de Tiempo'),
(4, 'Sin presupuesto/cerró'),
(5, 'Atención al cliente'),
(6, 'Cambios en la plataforma'),
(7, 'Competencia'),
(8, 'Descontento general'),
(9, 'Forma de pago'),
(10, 'Propios'),
(11, 'UX')
)

fecha = models.DateField()
fecha_inicio = models.DateField()
fecha_aprobacion = models.DateField(blank=True, null=True)
tipo_facturador = models.IntegerField(choices=TIPO_FACTURADOR)

numero_DTE = models.IntegerField()
tramo_DTE = JSONField(default=dict, blank=True, null=True)
numero_empresa = models.IntegerField()
tramo_empresa = JSONField(default=dict, blank=True, null=True)
numero_usuario = models.IntegerField()
tramo_usuario = JSONField(default=dict, blank=True, null=True)
tipo_cobro = models.IntegerField(choices=TIPO_COBRO)
monto_cobro = models.DecimalField(max_digits=20, decimal_places=6)
#puede ser monto fijo o base de calculo (tramos)
monto_tope = models.DecimalField(max_digits=20, decimal_places=6,
blank=True, null=True)
monto_onboarding = models.DecimalField(max_digits=20, decimal_plac
es=6)
moneda_onboarding = models.IntegerField()
estado = models.IntegerField(choices=ESTADO)
periodicidad = models.IntegerField(choices=PERIODICIDAD, default=
1)

motivo_baja = models.IntegerField(choices=MOTIVOS, blank=True, nul


l=True)
comentario_baja = models.TextField(blank=True, null=True)
fecha_baja = models.DateField(blank=True, null=True)

Modelo de datos 6
# atributos (por defecto)
creado_en = models.DateTimeField(auto_now_add=True)
modificado_en = models.DateTimeField(auto_now=True)

# relaciones
categoria = models.ForeignKey(Categoria, on_delete=models.PROTECT)
usuario_padre = models.OneToOneField(User, on_delete=models.PROTEC
T, related_name='contrato_padre')
usuario_creador = models.ForeignKey(User, on_delete=models.PROTEC
T, blank=True, null=True, related_name='contrato_creador')
usuario_modificador = models.ForeignKey(User, on_delete=models.PRO
TECT, blank=True, null=True, related_name='contrato_modificador')
usuario_aprobador = models.ForeignKey(User, on_delete=models.PROTE
CT, blank=True, null=True, related_name='contrato_aprobador')
grupos = models.ManyToManyField(Group, blank=True)

class Meta:
verbose_name = 'Contrato'
verbose_name_plural = 'Contratos'

def __str__(self):
return str(self.usuario_padre)

class Descuento(models.Model):
# atributos (generales)
porcentaje = models.DecimalField(max_digits=20, decimal_places=2)
periodo_inicio = models.DateField()
periodo_fin = models.DateField()

# atributos (por defecto)


creado_en = models.DateTimeField(auto_now_add=True)
modificado_en = models.DateTimeField(auto_now=True)

# relaciones
contrato = models.ForeignKey(Contrato, on_delete=models.CASCADE)
usuario_modificador = models.ForeignKey(User, on_delete=models.PRO
TECT, blank=True, null=True, related_name='user_modificador')

class Meta:
verbose_name = 'Descuento'
verbose_name_plural = 'Descuentos'

Modelo de datos 7
def __str__(self):
return '%s - %s - %s' % (str(self.porcentaje), self.periodo_in
icio, self.periodo_fin)

class HistoricoContrato(models.Model):
fecha = models.DateField()
fecha_inicio = models.DateField()
fecha_aprobacion = models.DateField(blank=True, null=True)
tipo_facturador = models.IntegerField(choices=Contrato.TIPO_FACTUR
ADOR)

numero_DTE = models.IntegerField()
tramo_DTE = JSONField(default=dict, blank=True, null=True)
numero_empresa = models.IntegerField()
tramo_empresa = JSONField(default=dict, blank=True, null=True)
numero_usuario = models.IntegerField()
tramo_usuario = JSONField(default=dict, blank=True, null=True)
tipo_cobro = models.IntegerField(choices=Contrato.TIPO_COBRO)
monto_cobro = models.DecimalField(max_digits=20, decimal_places=6)
#puede ser monto fijo o base de calculo (tramos)
monto_onboarding = models.DecimalField(max_digits=20, decimal_plac
es=6)
moneda_onboarding = models.IntegerField()
estado = models.IntegerField(choices=Contrato.ESTADO)
periodicidad = models.IntegerField(choices=Contrato.PERIODICIDAD,
default=1)

motivo_baja = models.IntegerField(choices=Contrato.MOTIVOS, blank=


True, null=True)
comentario_baja = models.TextField(blank=True, null=True)
fecha_baja = models.DateField(blank=True, null=True)

# atributos (por defecto)


creado_en = models.DateTimeField(auto_now_add=True)

# relaciones
categoria = models.ForeignKey(Categoria, on_delete=models.PROTECT)
usuario_padre = models.ForeignKey(User, on_delete=models.PROTECT,
related_name='contrato_padre_historico')
usuario_modificador = models.ForeignKey(User, on_delete=models.PRO

Modelo de datos 8
TECT, blank=True, null=True, related_name='contrato_modificador_hist
orico')
grupos = models.ManyToManyField(Group, blank=True)
contrato = models.ForeignKey(Contrato, on_delete=models.CASCADE)

class Meta:
verbose_name = 'Historico Contrato'
verbose_name_plural = 'Historico Contratos'

def __str__(self):
return str(self.usuario_padre)

class HistoricoDescuento(models.Model):
# atributos (generales)
porcentaje = models.DecimalField(max_digits=20, decimal_places=2)
periodo_inicio = models.DateField()
periodo_fin = models.DateField()

# atributos (por defecto)


creado_en = models.DateTimeField(auto_now_add=True)

# relaciones
contrato = models.ForeignKey(HistoricoContrato, on_delete=models.C
ASCADE)
usuario_modificador = models.ForeignKey(User, on_delete=models.PRO
TECT, blank=True, null=True)

class Meta:
verbose_name = 'Historico Descuento'
verbose_name_plural = 'Historico Descuentos'

def __str__(self):
return '%s - %s - %s' % (str(self.porcentaje), self.periodo_in
icio, self.periodo_fin)

class Pago(models.Model):
ESTADO = (
(1, 'Pendiente'),
(2, 'Pagado'),
(3, 'Trial'),

Modelo de datos 9
)

codigo = models.CharField(max_length=100, blank=True, null=True)


monto = models.DecimalField(max_digits=20, decimal_places=2)
fecha_pago = models.DateTimeField(blank=True, null=True)
periodo = models.DateField()
estado = models.IntegerField(choices=ESTADO)
cantidad_empresas = models.IntegerField(default=0)
cantidad_usuarios = models.IntegerField(default=0)
cantidad_documentos = models.IntegerField(default=0)
cobro_base = models.BooleanField(default=False)

creado_en = models.DateTimeField(auto_now_add=True)

# relaciones
contrato = models.ForeignKey(Contrato, on_delete=models.CASCADE)

class Meta:
verbose_name = 'Pago'
verbose_name_plural = 'Pagos'

def __str__(self):
return '%s - %s' % (str(self.contrato), self.periodo)

Modelo de datos 10

También podría gustarte