# Generated by Django 5.2.13 on 2026-04-16 18:04

import django.core.validators
import django.db.models.deletion
import django.utils.timezone
import uuid
from decimal import Decimal
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('appointments', '0001_initial'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Clinica',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='fecha de creación')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='fecha de actualización')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='activo')),
                ('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='fecha de eliminación')),
                ('nombre', models.CharField(max_length=200, verbose_name='nombre')),
                ('direccion', models.TextField(blank=True, verbose_name='dirección')),
                ('telefono', models.CharField(blank=True, max_length=30, verbose_name='teléfono')),
                ('nif', models.CharField(blank=True, help_text='Número de Identificación Fiscal de la clínica.', max_length=30, verbose_name='NIF')),
            ],
            options={
                'verbose_name': 'clínica',
                'verbose_name_plural': 'clínicas',
                'ordering': ['nombre'],
            },
        ),
        migrations.CreateModel(
            name='TaxBracket',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='fecha de creación')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='fecha de actualización')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='activo')),
                ('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='fecha de eliminación')),
                ('desde_monto', models.DecimalField(decimal_places=2, max_digits=14, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='desde (Kz)')),
                ('hasta_monto', models.DecimalField(decimal_places=2, help_text='Usar 99999999999.99 para el último tramo (sin límite).', max_digits=14, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='hasta (Kz)')),
                ('tasa', models.DecimalField(decimal_places=2, help_text='Porcentaje de impuesto para este tramo.', max_digits=5, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='tasa (%)')),
                ('parcela_fixa', models.DecimalField(decimal_places=2, default=Decimal('0'), help_text='Monto fijo acumulado de tramos anteriores.', max_digits=14, verbose_name='parcela fija (Kz)')),
            ],
            options={
                'verbose_name': 'tramo IRT',
                'verbose_name_plural': 'tramos IRT',
                'ordering': ['desde_monto'],
            },
        ),
        migrations.CreateModel(
            name='Invoice',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='fecha de creación')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='fecha de actualización')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='activo')),
                ('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='fecha de eliminación')),
                ('numero', models.CharField(db_index=True, editable=False, max_length=20, unique=True, verbose_name='número')),
                ('subtotal', models.DecimalField(decimal_places=2, max_digits=14, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='subtotal (Kz)')),
                ('irt', models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=14, verbose_name='IRT (Kz)')),
                ('total', models.DecimalField(decimal_places=2, max_digits=14, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='total (Kz)')),
                ('estado', models.CharField(choices=[('pendiente', 'Pendiente'), ('pagado', 'Pagado'), ('pago_parcial', 'Pago Parcial'), ('anulado', 'Anulado')], db_index=True, default='pendiente', max_length=15, verbose_name='estado')),
                ('metodo_pago', models.CharField(blank=True, choices=[('efectivo', 'Efectivo'), ('transferencia', 'Transferencia Bancaria'), ('multicaixa', 'Referencia Multicaixa')], max_length=20, verbose_name='método de pago')),
                ('notas', models.TextField(blank=True, verbose_name='notas')),
                ('fecha_emision', models.DateTimeField(default=django.utils.timezone.now, verbose_name='fecha emisión')),
                ('cita', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='factura', to='appointments.cita', verbose_name='cita')),
                ('clinica', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='facturas', to='finance.clinica', verbose_name='clínica')),
                ('paciente', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='facturas', to=settings.AUTH_USER_MODEL, verbose_name='paciente')),
                ('servicio', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='facturas', to='appointments.servicio', verbose_name='servicio')),
            ],
            options={
                'verbose_name': 'factura',
                'verbose_name_plural': 'facturas',
                'ordering': ['-fecha_emision'],
            },
        ),
        migrations.CreateModel(
            name='Payment',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='fecha de creación')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='fecha de actualización')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('is_active', models.BooleanField(db_index=True, default=True, verbose_name='activo')),
                ('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='fecha de eliminación')),
                ('monto', models.DecimalField(decimal_places=2, max_digits=14, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name='monto (Kz)')),
                ('metodo', models.CharField(choices=[('efectivo', 'Efectivo'), ('transferencia', 'Transferencia Bancaria'), ('multicaixa', 'Referencia Multicaixa')], max_length=20, verbose_name='método de pago')),
                ('referencia', models.CharField(blank=True, help_text='Nro. de transferencia, referencia Multicaixa, etc.', max_length=100, verbose_name='referencia transacción')),
                ('fecha', models.DateTimeField(default=django.utils.timezone.now, verbose_name='fecha del pago')),
                ('factura', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='pagos', to='finance.invoice', verbose_name='factura')),
                ('registrado_por', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='pagos_registrados', to=settings.AUTH_USER_MODEL, verbose_name='registrado por')),
            ],
            options={
                'verbose_name': 'pago',
                'verbose_name_plural': 'pagos',
                'ordering': ['-fecha'],
            },
        ),
        migrations.AddIndex(
            model_name='invoice',
            index=models.Index(fields=['-fecha_emision', 'estado'], name='idx_invoice_fecha_estado'),
        ),
    ]
