Artifex/control_plane/ventures/migrations/0001_initial.py
2026-08-15 20:56:56 +07:00

239 lines
14 KiB
Python

# Generated by Django 5.2.16 on 2026-08-15 13:50
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('graph', '0004_unique_champion_graph_version'),
]
operations = [
migrations.CreateModel(
name='CompanyMandate',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('objective', models.TextField()),
('constraints', models.JSONField(blank=True, default=dict)),
('optimization_targets', models.JSONField(blank=True, default=list)),
('max_validation_capital', models.DecimalField(decimal_places=2, default=50, max_digits=10)),
('target_net_new_cash', models.DecimalField(decimal_places=2, default=500, max_digits=10)),
('target_window_days', models.PositiveIntegerField(default=30)),
('metadata', models.JSONField(blank=True, default=dict)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='CompanyProposal',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('title', models.CharField(max_length=255)),
('description', models.TextField()),
('problem', models.TextField()),
('target_customer', models.TextField()),
('proposed_solution', models.TextField()),
('business_model', models.TextField()),
('pricing_hypothesis', models.TextField()),
('acquisition_strategy', models.TextField()),
('validation_plan', models.TextField()),
('capital_requested', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
('time_to_first_dollar_estimate', models.CharField(max_length=120)),
('expected_margin', models.CharField(max_length=120)),
('build_complexity', models.CharField(max_length=80)),
('market_evidence', models.JSONField(blank=True, default=list)),
('differentiation', models.TextField()),
('major_risks', models.JSONField(blank=True, default=list)),
('confidence', models.FloatField(default=0.0)),
('status', models.CharField(choices=[('DRAFT', 'Draft'), ('SUBMITTED', 'Submitted'), ('UNDER_DILIGENCE', 'Under Diligence'), ('REVISE', 'Revise'), ('FUNDED_RECOMMENDED', 'Funded Recommended'), ('WATCHLIST', 'Watchlist'), ('REJECTED', 'Rejected')], default='DRAFT', max_length=32)),
('pitch', models.JSONField(blank=True, default=dict)),
('metadata', models.JSONField(blank=True, default=dict)),
('mandate', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='company_proposals', to='ventures.companymandate')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='CompanyCapabilityRequirement',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('category', models.CharField(max_length=120)),
('status', models.CharField(choices=[('AVAILABLE', 'Available'), ('PARTIAL', 'Partial'), ('MISSING', 'Missing')], max_length=32)),
('rationale', models.TextField(blank=True)),
('priority', models.CharField(choices=[('BEFORE_VALIDATION', 'Before Validation'), ('BEFORE_FIRST_CUSTOMER', 'Before First Customer'), ('BEFORE_SCALING', 'Before Scaling')], default='BEFORE_SCALING', max_length=32)),
('evidence', models.JSONField(blank=True, default=dict)),
('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='capability_requirements', to='ventures.companyproposal')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='CompanyBoardReview',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('observations', models.JSONField(blank=True, default=dict)),
('strengths', models.JSONField(blank=True, default=list)),
('weaknesses', models.JSONField(blank=True, default=list)),
('key_assumptions', models.JSONField(blank=True, default=list)),
('required_revisions', models.JSONField(blank=True, default=list)),
('recommendation', models.CharField(max_length=80)),
('revised_pitch', models.JSONField(blank=True, default=dict)),
('metadata', models.JSONField(blank=True, default=dict)),
('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='board_reviews', to='ventures.companyproposal')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='ICDiligence',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('status', models.CharField(default='INITIAL_PITCH', max_length=32)),
('rounds', models.JSONField(blank=True, default=list)),
('red_team_challenge', models.JSONField(blank=True, default=dict)),
('final_response', models.JSONField(blank=True, default=dict)),
('metadata', models.JSONField(blank=True, default=dict)),
('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ic_diligence', to='ventures.companyproposal')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='ICDecision',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('decision', models.CharField(choices=[('FUND_RECOMMENDED', 'Fund Recommended'), ('CONDITIONAL_FUND', 'Conditional Fund'), ('REVISE_AND_RESUBMIT', 'Revise And Resubmit'), ('WATCHLIST', 'Watchlist'), ('PIVOT', 'Pivot'), ('REJECT', 'Reject')], max_length=32)),
('component_scores', models.JSONField(blank=True, default=dict)),
('composite_score', models.FloatField(default=0.0)),
('probability_500_within_30_days', models.FloatField(default=0.0)),
('initial_tranche', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
('validation_condition', models.TextField(blank=True)),
('evidence_required', models.JSONField(blank=True, default=list)),
('recommended_allocation', models.JSONField(blank=True, default=dict)),
('kill_criteria', models.JSONField(blank=True, default=list)),
('next_decision_point', models.TextField(blank=True)),
('metadata', models.JSONField(blank=True, default=dict)),
('diligence', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='decision', to='ventures.icdiligence')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='ICQuestion',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('question', models.TextField()),
('category', models.CharField(max_length=80)),
('evidence_required', models.BooleanField(default=True)),
('round_name', models.CharField(default='Diligence Round 1', max_length=80)),
('metadata', models.JSONField(blank=True, default=dict)),
('diligence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='ventures.icdiligence')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='ICResponse',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('answer', models.TextField()),
('evidence', models.JSONField(blank=True, default=list)),
('uncertainty', models.TextField(blank=True)),
('pitch_changes', models.JSONField(blank=True, default=dict)),
('metadata', models.JSONField(blank=True, default=dict)),
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='responses', to='ventures.icquestion')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='PortfolioCapabilityGap',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('available', models.JSONField(blank=True, default=list)),
('partial', models.JSONField(blank=True, default=list)),
('missing', models.JSONField(blank=True, default=list)),
('ranked_missing', models.JSONField(blank=True, default=list)),
('report', models.TextField(blank=True)),
('metadata', models.JSONField(blank=True, default=dict)),
('proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='capability_gap_reports', to='ventures.companyproposal')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='VentureArtifact',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('artifact_type', models.CharField(max_length=80)),
('name', models.CharField(max_length=255)),
('content', models.JSONField(blank=True, default=dict)),
('readable', models.TextField(blank=True)),
('generated_by', models.CharField(blank=True, max_length=120)),
('graph_run', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='venture_artifacts', to='graph.graphrun')),
('mandate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='artifacts', to='ventures.companymandate')),
('proposal', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='artifacts', to='ventures.companyproposal')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='VentureThesis',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('title', models.CharField(max_length=255)),
('thesis', models.TextField()),
('similarity_fingerprint', models.CharField(blank=True, max_length=128)),
('related_theses', models.JSONField(blank=True, default=list)),
('competitive_theses', models.JSONField(blank=True, default=list)),
('portfolio_visibility', models.JSONField(blank=True, default=dict)),
('metadata', models.JSONField(blank=True, default=dict)),
('mandate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='theses', to='ventures.companymandate')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='companyproposal',
name='thesis',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='company_proposals', to='ventures.venturethesis'),
),
]