{
  "built_at_commit": "269e65b003b11260ff938e7d0d4ee4bd25bc8936",
  "edges": [
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "alembic/env.py#alembic.env.run_migrations_offline",
      "evidence": [
        {
          "end_line": 60,
          "file": "alembic/env.py",
          "start_line": 60
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "alembic/env.py#alembic.env.run_migrations_online",
      "evidence": [
        {
          "end_line": 62,
          "file": "alembic/env.py",
          "start_line": 62
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "alembic/env.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "alembic/env.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 12,
          "file": "alembic/env.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/__init__.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "alembic/env.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 13,
          "file": "alembic/env.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 13,
          "file": "alembic/env.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "alembic/env.py#alembic.env.run_async_migrations",
      "evidence": [
        {
          "end_line": 56,
          "file": "alembic/env.py",
          "start_line": 56
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "alembic/env.py#alembic.env.run_migrations_online"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/api/deps.py",
          "start_line": 6
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.get_db",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/api/deps.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 7,
          "file": "app/api/deps.py",
          "start_line": 7
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.get_current_user",
      "evidence": [
        {
          "end_line": 7,
          "file": "app/api/deps.py",
          "start_line": 7
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/deps.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/deps.py",
          "start_line": 8
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/deps.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/routes/auth.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/auth.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/auth.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/auth.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.verify_password",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/auth.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/auth.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/auth.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/auth.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/auth.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.TokenResponse",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/auth.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.UserCreate",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/auth.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.UserResponse",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/auth.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 65,
          "file": "app/api/routes/auth.py",
          "start_line": 65
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py#app.api.routes.auth.login"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.verify_password",
      "evidence": [
        {
          "end_line": 52,
          "file": "app/api/routes/auth.py",
          "start_line": 52
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py#app.api.routes.auth.login"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/auth.py#app.schemas.auth.TokenResponse",
      "evidence": [
        {
          "end_line": 66,
          "file": "app/api/routes/auth.py",
          "start_line": 66
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py#app.api.routes.auth.login"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 33,
          "file": "app/api/routes/auth.py",
          "start_line": 33
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py#app.api.routes.auth.register"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 31,
          "file": "app/api/routes/auth.py",
          "start_line": 31
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py#app.api.routes.auth.register"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/deps.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/routes/documents.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/storage.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/documents.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/job.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/documents.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.DocumentType",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/documents.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.JobResponse",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/documents.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.JobResultResponse",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/documents.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/services/job_service.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/documents.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/services/job_service.py#app.services.job_service.create_job",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/documents.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/services/job_service.py#app.services.job_service.get_job",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/documents.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/services/job_service.py#app.services.job_service.list_user_jobs",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/documents.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/api/routes/documents.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/api/routes/documents.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/validators.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/api/routes/documents.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/validators.py#app.utils.validators.generate_storage_key",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/api/routes/documents.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/validators.py#app.utils.validators.validate_file_size",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/api/routes/documents.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/validators.py#app.utils.validators.validate_file_type",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/api/routes/documents.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/workers/tasks.py",
      "evidence": [
        {
          "end_line": 69,
          "file": "app/api/routes/documents.py",
          "start_line": 69
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/workers/tasks.py#app.workers.tasks.process_document",
      "evidence": [
        {
          "end_line": 69,
          "file": "app/api/routes/documents.py",
          "start_line": 69
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/job_service.py#app.services.job_service.get_job",
      "evidence": [
        {
          "end_line": 89,
          "file": "app/api/routes/documents.py",
          "start_line": 89
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.get_result"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/job_service.py#app.services.job_service.list_user_jobs",
      "evidence": [
        {
          "end_line": 109,
          "file": "app/api/routes/documents.py",
          "start_line": 109
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.list_jobs"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "qualified"
      },
      "context": "call",
      "dst": "app/core/storage.py#app.core.storage.StorageClient.upload_file",
      "evidence": [
        {
          "end_line": 49,
          "file": "app/api/routes/documents.py",
          "start_line": 49
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.upload_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/job_service.py#app.services.job_service.create_job",
      "evidence": [
        {
          "end_line": 58,
          "file": "app/api/routes/documents.py",
          "start_line": 58
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.upload_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/validators.py#app.utils.validators.generate_storage_key",
      "evidence": [
        {
          "end_line": 45,
          "file": "app/api/routes/documents.py",
          "start_line": 45
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.upload_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/validators.py#app.utils.validators.validate_file_size",
      "evidence": [
        {
          "end_line": 38,
          "file": "app/api/routes/documents.py",
          "start_line": 38
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.upload_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/validators.py#app.utils.validators.validate_file_type",
      "evidence": [
        {
          "end_line": 41,
          "file": "app/api/routes/documents.py",
          "start_line": 41
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py#app.api.routes.documents.upload_document"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/routes/health.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/redis_client.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/health.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/redis_client.py#app.core.redis_client.check_redis_connectivity",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/health.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/storage.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/health.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/redis_client.py#app.core.redis_client.check_redis_connectivity",
      "evidence": [
        {
          "end_line": 35,
          "file": "app/api/routes/health.py",
          "start_line": 35
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/health.py#app.api.routes.health.health_check"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "qualified"
      },
      "context": "call",
      "dst": "app/core/storage.py#app.core.storage.StorageClient.check_connectivity",
      "evidence": [
        {
          "end_line": 45,
          "file": "app/api/routes/health.py",
          "start_line": 45
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/api/routes/health.py#app.api.routes.health.health_check"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/core/celery_app.py",
          "start_line": 3
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/celery_app.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/config.py#app.core.config.Settings",
      "evidence": [
        {
          "end_line": 72,
          "file": "app/core/config.py",
          "start_line": 72
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/config.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/core/database.py",
          "start_line": 6
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/database.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/core/logging.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/logging.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 5,
          "file": "app/core/redis_client.py",
          "start_line": 5
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/redis_client.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/redis_client.py#app.core.redis_client.get_redis_pool",
      "evidence": [
        {
          "end_line": 39,
          "file": "app/core/redis_client.py",
          "start_line": 39
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/redis_client.py#app.core.redis_client.check_redis_connectivity"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/redis_client.py#app.core.redis_client.get_redis_pool",
      "evidence": [
        {
          "end_line": 34,
          "file": "app/core/redis_client.py",
          "start_line": 34
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/redis_client.py#app.core.redis_client.get_redis"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/core/security.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/core/security.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.get_db",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/core/security.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 53,
          "file": "app/core/security.py",
          "start_line": 53
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 53,
          "file": "app/core/security.py",
          "start_line": 53
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.decode_access_token",
      "evidence": [
        {
          "end_line": 55,
          "file": "app/core/security.py",
          "start_line": 55
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/security.py#app.core.security.get_current_user"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/core/storage.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/storage.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/storage.py#app.core.storage.StorageClient",
      "evidence": [
        {
          "end_line": 92,
          "file": "app/core/storage.py",
          "start_line": 92
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/storage.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/core/storage.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core/storage.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/core/storage.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/core/storage.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "evidence": [
        {
          "end_line": 85,
          "file": "app/core/storage.py",
          "start_line": 85
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/storage.py#app.core.storage.StorageClient.delete_file"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "evidence": [
        {
          "end_line": 72,
          "file": "app/core/storage.py",
          "start_line": 72
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/storage.py#app.core.storage.StorageClient.download_file"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "evidence": [
        {
          "end_line": 62,
          "file": "app/core/storage.py",
          "start_line": 62
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/core/storage.py#app.core.storage.StorageClient.upload_file"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/__init__.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/main.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/routes/__init__.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/main.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/routes/auth.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/main.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/routes/documents.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/main.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/api/routes/health.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/main.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/main.py",
          "start_line": 15
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/logging.py",
      "evidence": [
        {
          "end_line": 16,
          "file": "app/main.py",
          "start_line": 16
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/logging.py#app.core.logging.CorrelationIdMiddleware",
      "evidence": [
        {
          "end_line": 16,
          "file": "app/main.py",
          "start_line": 16
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/logging.py#app.core.logging.configure_logging",
      "evidence": [
        {
          "end_line": 19,
          "file": "app/main.py",
          "start_line": 19
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/logging.py#app.core.logging.configure_logging",
      "evidence": [
        {
          "end_line": 16,
          "file": "app/main.py",
          "start_line": 16
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/redis_client.py",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/main.py",
          "start_line": 17
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/redis_client.py#app.core.redis_client.close_redis",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/main.py",
          "start_line": 17
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/redis_client.py#app.core.redis_client.init_redis",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/main.py",
          "start_line": 17
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/main.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/redis_client.py#app.core.redis_client.close_redis",
      "evidence": [
        {
          "end_line": 29,
          "file": "app/main.py",
          "start_line": 29
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/main.py#app.main.lifespan"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/redis_client.py#app.core.redis_client.init_redis",
      "evidence": [
        {
          "end_line": 26,
          "file": "app/main.py",
          "start_line": 26
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/main.py#app.main.lifespan"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/job.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/models/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/models/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/models/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/models/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/models/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/models/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/models/job.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/models/job.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/models/job.py",
          "start_line": 8
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/models/job.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 66,
          "file": "app/models/job.py",
          "start_line": 11
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/models/job.py#app.models.job.Job"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/models/user.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/models/user.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/models/user.py",
          "start_line": 8
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/models/user.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 31,
          "file": "app/models/user.py",
          "start_line": 11
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/models/user.py#app.models.user.User"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/auth.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.TokenRequest",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.TokenResponse",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.UserCreate",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/auth.py#app.schemas.auth.UserResponse",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/documents.py",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/schemas/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/schemas/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/schemas/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.LegalExtraction",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/schemas/__init__.py",
          "start_line": 2
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/job.py",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/schemas/__init__.py",
          "start_line": 3
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.DocumentType",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/schemas/__init__.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.JobResponse",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/schemas/__init__.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.JobResultResponse",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/schemas/__init__.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/job.py#app.schemas.job.JobStatus",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/schemas/__init__.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/schemas/__init__.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/schemas/job.py#app.schemas.job.JobResponse",
      "evidence": [
        {
          "end_line": 38,
          "file": "app/schemas/job.py",
          "start_line": 33
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/schemas/job.py#app.schemas.job.JobResultResponse"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/job.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/job_service.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/job_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/job_service.py",
          "start_line": 8
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/job_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/job_service.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/job_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/job_service.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/job_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 21,
          "file": "app/services/job_service.py",
          "start_line": 21
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/job_service.py#app.services.job_service.create_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "evidence": [
        {
          "end_line": 41,
          "file": "app/services/job_service.py",
          "start_line": 41
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/job_service.py#app.services.job_service.get_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "evidence": [
        {
          "end_line": 54,
          "file": "app/services/job_service.py",
          "start_line": 54
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/job_service.py#app.services.job_service.update_job_status"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/llm_service.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/logging.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/llm_service.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/logging.py#app.core.logging.get_logger",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/services/llm_service.py",
          "start_line": 15
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/logging.py#app.core.logging.get_logger",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/llm_service.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/documents.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/services/llm_service.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "evidence": [
        {
          "end_line": 162,
          "file": "app/services/llm_service.py",
          "start_line": 162
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/services/llm_service.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.LLMExtractionError",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/services/llm_service.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/prompts.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/services/llm_service.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/prompts.py#app.utils.prompts.build_user_prompt",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/services/llm_service.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/services/llm_service.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/text_processing.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/services/llm_service.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/services/llm_service.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "self"
      },
      "context": "call",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._calculate_confidence",
      "evidence": [
        {
          "end_line": 134,
          "file": "app/services/llm_service.py",
          "start_line": 134
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "4"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.LLMExtractionError",
      "evidence": [
        {
          "end_line": 113,
          "file": "app/services/llm_service.py",
          "start_line": 113
        },
        {
          "end_line": 121,
          "file": "app/services/llm_service.py",
          "start_line": 121
        },
        {
          "end_line": 126,
          "file": "app/services/llm_service.py",
          "start_line": 126
        },
        {
          "end_line": 131,
          "file": "app/services/llm_service.py",
          "start_line": 131
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.build_user_prompt",
      "evidence": [
        {
          "end_line": 97,
          "file": "app/services/llm_service.py",
          "start_line": 97
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 96,
          "file": "app/services/llm_service.py",
          "start_line": 96
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "self",
        "sites": "2"
      },
      "context": "call",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction",
      "evidence": [
        {
          "end_line": 68,
          "file": "app/services/llm_service.py",
          "start_line": 68
        },
        {
          "end_line": 76,
          "file": "app/services/llm_service.py",
          "start_line": 76
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService.extract"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 65,
          "file": "app/services/llm_service.py",
          "start_line": 65
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService.extract"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 27,
          "file": "app/services/mineru_service.py",
          "start_line": 27
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/mineru_service.py#app.services.mineru_service.MinerUService",
      "evidence": [
        {
          "end_line": 182,
          "file": "app/services/mineru_service.py",
          "start_line": 182
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 28,
          "file": "app/services/mineru_service.py",
          "start_line": 28
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 28,
          "file": "app/services/mineru_service.py",
          "start_line": 28
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/mineru_service.py#app.services.mineru_service._write_mineru_config",
      "evidence": [
        {
          "end_line": 137,
          "file": "app/services/mineru_service.py",
          "start_line": 137
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#app.services.mineru_service.MinerUService.__init__"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 176,
          "file": "app/services/mineru_service.py",
          "start_line": 176
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#app.services.mineru_service.MinerUService.extract_text"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 71,
          "file": "app/services/mineru_service.py",
          "start_line": 71
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#app.services.mineru_service._image_to_pdf"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "4"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 100,
          "file": "app/services/mineru_service.py",
          "start_line": 100
        },
        {
          "end_line": 102,
          "file": "app/services/mineru_service.py",
          "start_line": 102
        },
        {
          "end_line": 107,
          "file": "app/services/mineru_service.py",
          "start_line": 107
        },
        {
          "end_line": 115,
          "file": "app/services/mineru_service.py",
          "start_line": 115
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#app.services.mineru_service._run_mineru_sync"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/logging.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/ocr_service.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/logging.py#app.core.logging.get_logger",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/services/ocr_service.py",
          "start_line": 11
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/logging.py#app.core.logging.get_logger",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/ocr_service.py",
          "start_line": 8
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/ocr_service.py#app.services.ocr_service.OCRService",
      "evidence": [
        {
          "end_line": 71,
          "file": "app/services/ocr_service.py",
          "start_line": 71
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/ocr_service.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/ocr_service.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 47,
          "file": "app/services/ocr_service.py",
          "start_line": 47
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#app.services.ocr_service.OCRService._pdf_to_images"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "self"
      },
      "context": "call",
      "dst": "app/services/ocr_service.py#app.services.ocr_service.OCRService._bytes_to_image",
      "evidence": [
        {
          "end_line": 26,
          "file": "app/services/ocr_service.py",
          "start_line": 26
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#app.services.ocr_service.OCRService.extract_text"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "self"
      },
      "context": "call",
      "dst": "app/services/ocr_service.py#app.services.ocr_service.OCRService._ocr_image",
      "evidence": [
        {
          "end_line": 28,
          "file": "app/services/ocr_service.py",
          "start_line": 28
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#app.services.ocr_service.OCRService.extract_text"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "self"
      },
      "context": "call",
      "dst": "app/services/ocr_service.py#app.services.ocr_service.OCRService._pdf_to_images",
      "evidence": [
        {
          "end_line": 24,
          "file": "app/services/ocr_service.py",
          "start_line": 24
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#app.services.ocr_service.OCRService.extract_text"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 34,
          "file": "app/services/ocr_service.py",
          "start_line": 34
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#app.services.ocr_service.OCRService.extract_text"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 22,
          "file": "app/utils/exceptions.py",
          "start_line": 21
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/utils/exceptions.py",
          "start_line": 9
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#app.utils.exceptions.LLMExtractionError"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/utils/exceptions.py",
          "start_line": 5
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#app.utils.exceptions.OCRError"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/utils/exceptions.py",
          "start_line": 13
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#app.utils.exceptions.SchemaValidationError"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "inherit",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 18,
          "file": "app/utils/exceptions.py",
          "start_line": 17
        }
      ],
      "kind": "inherits",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#app.utils.exceptions.StorageError"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/utils/model_sync.py",
          "start_line": 17
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/model_sync.py#app.utils.model_sync.pull_models_from_minio",
      "evidence": [
        {
          "end_line": 96,
          "file": "app/utils/model_sync.py",
          "start_line": 96
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py#app.utils.model_sync.ensure_models"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/model_sync.py#app.utils.model_sync._make_s3_client",
      "evidence": [
        {
          "end_line": 59,
          "file": "app/utils/model_sync.py",
          "start_line": 59
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py#app.utils.model_sync.pull_models_from_minio"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/model_sync.py#app.utils.model_sync._make_s3_client",
      "evidence": [
        {
          "end_line": 38,
          "file": "app/utils/model_sync.py",
          "start_line": 38
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py#app.utils.model_sync.push_models_to_minio"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing._find_sentence_boundary",
      "evidence": [
        {
          "end_line": 41,
          "file": "app/utils/text_processing.py",
          "start_line": 41
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/utils/text_processing.py#app.utils.text_processing.chunk_text"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/utils/validators.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/utils/validators.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/validators.py#app.utils.validators.sanitize_filename",
      "evidence": [
        {
          "end_line": 50,
          "file": "app/utils/validators.py",
          "start_line": 50
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/utils/validators.py#app.utils.validators.generate_storage_key"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 7,
          "file": "app/workers/sync_db.py",
          "start_line": 7
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/sync_db.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/celery_app.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/workers/tasks.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/logging.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/workers/tasks.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/logging.py#app.core.logging.configure_logging",
      "evidence": [
        {
          "end_line": 19,
          "file": "app/workers/tasks.py",
          "start_line": 19
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/logging.py#app.core.logging.configure_logging",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/workers/tasks.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/storage.py",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/workers/tasks.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/storage.py#app.core.storage.StorageClient",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/workers/tasks.py",
          "start_line": 11
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/job.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/workers/tasks.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/workers/tasks.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/services/llm_service.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/workers/tasks.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/workers/tasks.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/services/mineru_service.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/workers/tasks.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/workers/tasks.py",
          "start_line": 15
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/workers/tasks.py",
          "start_line": 15
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/text_processing.py",
      "evidence": [
        {
          "end_line": 16,
          "file": "app/workers/tasks.py",
          "start_line": 16
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_markdown",
      "evidence": [
        {
          "end_line": 16,
          "file": "app/workers/tasks.py",
          "start_line": 16
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/workers/sync_db.py",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/workers/tasks.py",
          "start_line": 17
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/workers/sync_db.py#app.workers.sync_db.get_sync_db",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/workers/tasks.py",
          "start_line": 17
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/workers/sync_db.py#app.workers.sync_db.get_sync_db",
      "evidence": [
        {
          "end_line": 119,
          "file": "app/workers/tasks.py",
          "start_line": 119
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks._mark_failed"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/workers/tasks.py#app.workers.tasks._get_job",
      "evidence": [
        {
          "end_line": 120,
          "file": "app/workers/tasks.py",
          "start_line": 120
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks._mark_failed"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/storage.py#app.core.storage.StorageClient",
      "evidence": [
        {
          "end_line": 60,
          "file": "app/workers/tasks.py",
          "start_line": 60
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "evidence": [
        {
          "end_line": 81,
          "file": "app/workers/tasks.py",
          "start_line": 81
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "qualified"
      },
      "context": "call",
      "dst": "app/services/mineru_service.py#app.services.mineru_service.MinerUService.extract_text",
      "evidence": [
        {
          "end_line": 69,
          "file": "app/workers/tasks.py",
          "start_line": 69
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_markdown",
      "evidence": [
        {
          "end_line": 70,
          "file": "app/workers/tasks.py",
          "start_line": 70
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "4"
      },
      "context": "call",
      "dst": "app/workers/sync_db.py#app.workers.sync_db.get_sync_db",
      "evidence": [
        {
          "end_line": 43,
          "file": "app/workers/tasks.py",
          "start_line": 43
        },
        {
          "end_line": 65,
          "file": "app/workers/tasks.py",
          "start_line": 65
        },
        {
          "end_line": 74,
          "file": "app/workers/tasks.py",
          "start_line": 74
        },
        {
          "end_line": 86,
          "file": "app/workers/tasks.py",
          "start_line": 86
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "4"
      },
      "context": "call",
      "dst": "app/workers/tasks.py#app.workers.tasks._get_job",
      "evidence": [
        {
          "end_line": 44,
          "file": "app/workers/tasks.py",
          "start_line": 44
        },
        {
          "end_line": 66,
          "file": "app/workers/tasks.py",
          "start_line": 66
        },
        {
          "end_line": 75,
          "file": "app/workers/tasks.py",
          "start_line": 75
        },
        {
          "end_line": 87,
          "file": "app/workers/tasks.py",
          "start_line": 87
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "4"
      },
      "context": "call",
      "dst": "app/workers/tasks.py#app.workers.tasks._mark_failed",
      "evidence": [
        {
          "end_line": 99,
          "file": "app/workers/tasks.py",
          "start_line": 99
        },
        {
          "end_line": 104,
          "file": "app/workers/tasks.py",
          "start_line": 104
        },
        {
          "end_line": 109,
          "file": "app/workers/tasks.py",
          "start_line": 109
        },
        {
          "end_line": 113,
          "file": "app/workers/tasks.py",
          "start_line": 113
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "app/workers/tasks.py#app.workers.tasks.process_document"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.minio",
      "evidence": [
        {
          "end_line": 27,
          "file": "docker-compose.yml",
          "start_line": 27
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.minio-init",
      "evidence": [
        {
          "end_line": 29,
          "file": "docker-compose.yml",
          "start_line": 29
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.postgres",
      "evidence": [
        {
          "end_line": 23,
          "file": "docker-compose.yml",
          "start_line": 23
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.redis",
      "evidence": [
        {
          "end_line": 25,
          "file": "docker-compose.yml",
          "start_line": 25
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.minio",
      "evidence": [
        {
          "end_line": 114,
          "file": "docker-compose.yml",
          "start_line": 114
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.minio-init"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.minio",
      "evidence": [
        {
          "end_line": 127,
          "file": "docker-compose.yml",
          "start_line": 127
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.minio-models-init"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.api",
      "evidence": [
        {
          "end_line": 52,
          "file": "docker-compose.yml",
          "start_line": 52
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.worker"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.minio-models-init",
      "evidence": [
        {
          "end_line": 56,
          "file": "docker-compose.yml",
          "start_line": 56
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.worker"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "depends_on",
      "dst": "docker-compose.yml#service.redis",
      "evidence": [
        {
          "end_line": 54,
          "file": "docker-compose.yml",
          "start_line": 54
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "docker-compose.yml#service.worker"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 119,
          "file": "scripts/init_mineru_models.py",
          "start_line": 119
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/model_sync.py",
      "evidence": [
        {
          "end_line": 120,
          "file": "scripts/init_mineru_models.py",
          "start_line": 120
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/model_sync.py#app.utils.model_sync.push_models_to_minio",
      "evidence": [
        {
          "end_line": 120,
          "file": "scripts/init_mineru_models.py",
          "start_line": 120
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "scripts/init_mineru_models.py#scripts.init_mineru_models.main",
      "evidence": [
        {
          "end_line": 148,
          "file": "scripts/init_mineru_models.py",
          "start_line": 148
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "scripts/init_mineru_models.py#scripts.init_mineru_models._write_temp_config",
      "evidence": [
        {
          "end_line": 58,
          "file": "scripts/init_mineru_models.py",
          "start_line": 58
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py#scripts.init_mineru_models.download_models"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/model_sync.py#app.utils.model_sync.push_models_to_minio",
      "evidence": [
        {
          "end_line": 140,
          "file": "scripts/init_mineru_models.py",
          "start_line": 140
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py#scripts.init_mineru_models.main"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "scripts/init_mineru_models.py#scripts.init_mineru_models.download_models",
      "evidence": [
        {
          "end_line": 125,
          "file": "scripts/init_mineru_models.py",
          "start_line": 125
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py#scripts.init_mineru_models.main"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 12,
          "file": "tests/conftest.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.Base",
      "evidence": [
        {
          "end_line": 12,
          "file": "tests/conftest.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/database.py#app.core.database.get_db",
      "evidence": [
        {
          "end_line": 12,
          "file": "tests/conftest.py",
          "start_line": 12
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/redis_client.py",
      "evidence": [
        {
          "end_line": 13,
          "file": "tests/conftest.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/redis_client.py#app.core.redis_client.get_redis",
      "evidence": [
        {
          "end_line": 13,
          "file": "tests/conftest.py",
          "start_line": 13
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/conftest.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/conftest.py",
          "start_line": 14
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/conftest.py",
          "start_line": 14
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/main.py",
      "evidence": [
        {
          "end_line": 15,
          "file": "tests/conftest.py",
          "start_line": 15
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 16,
          "file": "tests/conftest.py",
          "start_line": 16
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 16,
          "file": "tests/conftest.py",
          "start_line": 16
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/conftest.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 80,
          "file": "tests/conftest.py",
          "start_line": 80
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/conftest.py#tests.conftest.auth_headers"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 69,
          "file": "tests/conftest.py",
          "start_line": 69
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/conftest.py#tests.conftest.test_user"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 66,
          "file": "tests/conftest.py",
          "start_line": 66
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/conftest.py#tests.conftest.test_user"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 77,
          "file": "tests/integration/test_result.py",
          "start_line": 77
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 77,
          "file": "tests/integration/test_result.py",
          "start_line": 77
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 77,
          "file": "tests/integration/test_result.py",
          "start_line": 77
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/job.py",
      "evidence": [
        {
          "end_line": 9,
          "file": "tests/integration/test_result.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 9,
          "file": "tests/integration/test_result.py",
          "start_line": 9
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 10,
          "file": "tests/integration/test_result.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 10,
          "file": "tests/integration/test_result.py",
          "start_line": 10
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/models/job.py#app.models.job.Job",
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/integration/test_result.py",
          "start_line": 14
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result._create_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "tests/integration/test_result.py#tests.integration.test_result._create_job",
      "evidence": [
        {
          "end_line": 51,
          "file": "tests/integration/test_result.py",
          "start_line": 51
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_completed_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 101,
          "file": "tests/integration/test_result.py",
          "start_line": 101
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_other_user_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "2"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 83,
          "file": "tests/integration/test_result.py",
          "start_line": 83
        },
        {
          "end_line": 95,
          "file": "tests/integration/test_result.py",
          "start_line": 95
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_other_user_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "2"
      },
      "context": "call",
      "dst": "app/models/user.py#app.models.user.User",
      "evidence": [
        {
          "end_line": 80,
          "file": "tests/integration/test_result.py",
          "start_line": 80
        },
        {
          "end_line": 92,
          "file": "tests/integration/test_result.py",
          "start_line": 92
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_other_user_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "tests/integration/test_result.py#tests.integration.test_result._create_job",
      "evidence": [
        {
          "end_line": 89,
          "file": "tests/integration/test_result.py",
          "start_line": 89
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_other_user_job"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "tests/integration/test_result.py#tests.integration.test_result._create_job",
      "evidence": [
        {
          "end_line": 36,
          "file": "tests/integration/test_result.py",
          "start_line": 36
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_pending_job"
    },
    {
      "arity": 1,
      "attrs": {
        "sites": "3"
      },
      "context": "import",
      "dst": "app/services/llm_service.py",
      "evidence": [
        {
          "end_line": 50,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 50
        },
        {
          "end_line": 56,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 56
        },
        {
          "end_line": 70,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 70
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "sites": "3"
      },
      "context": "reference",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "evidence": [
        {
          "end_line": 50,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 50
        },
        {
          "end_line": 56,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 56
        },
        {
          "end_line": 70,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 70
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/prompts.py",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 6
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/prompts.py#app.utils.prompts.build_user_prompt",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "2"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 26,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 26
        },
        {
          "end_line": 27,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 27
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_enhanced_prompt_adds_suffix"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 21,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 21
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_esg_system_prompt_contains_schema"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 11,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 11
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_invoice_system_prompt_contains_schema"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "evidence": [
        {
          "end_line": 16,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 16
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_legal_system_prompt_contains_schema"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/prompts.py#app.utils.prompts.build_user_prompt",
      "evidence": [
        {
          "end_line": 32,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 32
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_user_prompt_includes_document_type"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/schemas/documents.py",
      "evidence": [
        {
          "end_line": 4,
          "file": "tests/unit/test_schemas.py",
          "start_line": 4
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "evidence": [
        {
          "end_line": 4,
          "file": "tests/unit/test_schemas.py",
          "start_line": 4
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "evidence": [
        {
          "end_line": 4,
          "file": "tests/unit/test_schemas.py",
          "start_line": 4
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/schemas/documents.py#app.schemas.documents.LegalExtraction",
      "evidence": [
        {
          "end_line": 4,
          "file": "tests/unit/test_schemas.py",
          "start_line": 4
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "evidence": [
        {
          "end_line": 68,
          "file": "tests/unit/test_schemas.py",
          "start_line": 68
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_score_out_of_range_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "evidence": [
        {
          "end_line": 75,
          "file": "tests/unit/test_schemas.py",
          "start_line": 75
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_score_zero_is_valid"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "evidence": [
        {
          "end_line": 63,
          "file": "tests/unit/test_schemas.py",
          "start_line": 63
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_valid_esg"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "evidence": [
        {
          "end_line": 24,
          "file": "tests/unit/test_schemas.py",
          "start_line": 24
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_negative_total_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "evidence": [
        {
          "end_line": 31,
          "file": "tests/unit/test_schemas.py",
          "start_line": 31
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_optional_fields_default_to_none"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_schemas.py",
          "start_line": 18
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_valid_invoice"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.LegalExtraction",
      "evidence": [
        {
          "end_line": 51,
          "file": "tests/unit/test_schemas.py",
          "start_line": 51
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestLegalSchema.test_empty_parties_is_valid"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/schemas/documents.py#app.schemas.documents.LegalExtraction",
      "evidence": [
        {
          "end_line": 47,
          "file": "tests/unit/test_schemas.py",
          "start_line": 47
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestLegalSchema.test_valid_legal"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_security.py",
          "start_line": 6
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_security.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.decode_access_token",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_security.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_security.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/core/security.py#app.core.security.verify_password",
      "evidence": [
        {
          "end_line": 6,
          "file": "tests/unit/test_security.py",
          "start_line": 6
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 23,
          "file": "tests/unit/test_security.py",
          "start_line": 23
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_create_and_decode"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.decode_access_token",
      "evidence": [
        {
          "end_line": 24,
          "file": "tests/unit/test_security.py",
          "start_line": 24
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_create_and_decode"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 28,
          "file": "tests/unit/test_security.py",
          "start_line": 28
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_expired_token_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.decode_access_token",
      "evidence": [
        {
          "end_line": 33,
          "file": "tests/unit/test_security.py",
          "start_line": 33
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_expired_token_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.create_access_token",
      "evidence": [
        {
          "end_line": 37,
          "file": "tests/unit/test_security.py",
          "start_line": 37
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_tampered_token_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.decode_access_token",
      "evidence": [
        {
          "end_line": 40,
          "file": "tests/unit/test_security.py",
          "start_line": 40
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_tampered_token_raises"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 12,
          "file": "tests/unit/test_security.py",
          "start_line": 12
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_hash_and_verify"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.verify_password",
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/unit/test_security.py",
          "start_line": 14
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_hash_and_verify"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.hash_password",
      "evidence": [
        {
          "end_line": 17,
          "file": "tests/unit/test_security.py",
          "start_line": 17
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_wrong_password_fails"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/core/security.py#app.core.security.verify_password",
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_security.py",
          "start_line": 18
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_wrong_password_fails"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "import",
      "dst": "app/utils/text_processing.py",
      "evidence": [
        {
          "end_line": 3,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 3
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 3,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 3,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "reference",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "evidence": [
        {
          "end_line": 3,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 3
        }
      ],
      "kind": "references",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 45,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 45
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_long_text_splits_into_multiple_chunks"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 50,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 50
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_no_empty_chunks"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 55,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 55
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_overlap_content_repeated"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "evidence": [
        {
          "end_line": 39,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 39
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_short_text_returns_single_chunk"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 27,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 27
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_empty_string"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare",
        "sites": "1"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 24,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 24
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_normalises_unicode"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 9,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 9
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_removes_excess_blank_lines"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 30,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 30
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_strips_form_feed"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "evidence": [
        {
          "end_line": 16,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 16
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_strips_noise_lines"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "evidence": [
        {
          "end_line": 77,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 77
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_fallback_for_empty"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "evidence": [
        {
          "end_line": 67,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 67
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_replaces_special_chars"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "evidence": [
        {
          "end_line": 73,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 73
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_respects_max_length"
    },
    {
      "arity": 1,
      "attrs": {
        "shape": "bare"
      },
      "context": "call",
      "dst": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "evidence": [
        {
          "end_line": 62,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 62
        }
      ],
      "kind": "calls",
      "resolution": "resolved",
      "src": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_strips_path_components"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/health.py#app.api.routes.health.health_check#route:GET ",
      "evidence": [
        {
          "end_line": 19,
          "file": "app/api/routes/health.py",
          "start_line": 15
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/documents.py#app.api.routes.documents.list_jobs#route:GET /jobs",
      "evidence": [
        {
          "end_line": 102,
          "file": "app/api/routes/documents.py",
          "start_line": 98
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/documents.py#app.api.routes.documents.get_result#route:GET /result/{job_id}",
      "evidence": [
        {
          "end_line": 82,
          "file": "app/api/routes/documents.py",
          "start_line": 78
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/auth.py#app.api.routes.auth.register#route:POST /register",
      "evidence": [
        {
          "end_line": 22,
          "file": "app/api/routes/auth.py",
          "start_line": 17
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/auth.py#app.api.routes.auth.login#route:POST /token",
      "evidence": [
        {
          "end_line": 44,
          "file": "app/api/routes/auth.py",
          "start_line": 40
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "route",
      "dst": "app/api/routes/documents.py#app.api.routes.documents.upload_document#route:POST /upload",
      "evidence": [
        {
          "end_line": 24,
          "file": "app/api/routes/documents.py",
          "start_line": 19
        }
      ],
      "kind": "exposes",
      "resolution": "resolved",
      "src": "app/api/routes/documents.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 4,
          "file": "alembic/env.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "alembic/env.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 10,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 10
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "alembic/versions/001_create_users_and_jobs.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 4,
          "file": "app/api/deps.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/api/deps.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 5,
          "file": "app/api/routes/auth.py",
          "start_line": 5
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/api/routes/auth.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 5,
          "file": "app/api/routes/health.py",
          "start_line": 5
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/api/routes/health.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/core/database.py",
          "start_line": 3
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/core/database.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:Redis",
      "evidence": [
        {
          "end_line": 3,
          "file": "app/core/redis_client.py",
          "start_line": 3
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/core/redis_client.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/core/security.py",
          "start_line": 8
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/core/security.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "cloud",
      "dst": "ext:cloud:AWS SDK",
      "evidence": [
        {
          "end_line": 5,
          "file": "app/core/storage.py",
          "start_line": 5
        },
        {
          "end_line": 6,
          "file": "app/core/storage.py",
          "start_line": 6
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/core/storage.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 4,
          "file": "app/models/job.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/models/job.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 4,
          "file": "app/models/user.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/models/user.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 5,
          "file": "app/services/job_service.py",
          "start_line": 5
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/services/job_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "cloud",
      "dst": "ext:cloud:OpenAI API",
      "evidence": [
        {
          "end_line": 4,
          "file": "app/services/llm_service.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/services/llm_service.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "cloud",
      "dst": "ext:cloud:AWS SDK",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/utils/model_sync.py",
          "start_line": 13
        },
        {
          "end_line": 14,
          "file": "app/utils/model_sync.py",
          "start_line": 14
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 4,
          "file": "app/workers/sync_db.py",
          "start_line": 4
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/workers/sync_db.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "store",
      "dst": "ext:database:SQL database",
      "evidence": [
        {
          "end_line": 7,
          "file": "app/workers/tasks.py",
          "start_line": 7
        }
      ],
      "kind": "depends_on",
      "resolution": "resolved",
      "src": "app/workers/tasks.py"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "alembic/versions/001_create_users_and_jobs.py",
      "evidence": [
        {
          "end_line": 6,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 1
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "alembic/versions/001_create_users_and_jobs.py#rationale:1:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "evidence": [
        {
          "end_line": 32,
          "file": "app/services/llm_service.py",
          "start_line": 32
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/services/llm_service.py#rationale:32:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/services/mineru_service.py",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/services/mineru_service.py",
          "start_line": 1
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#rationale:1:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/services/mineru_service.py#app.services.mineru_service.MinerUService",
      "evidence": [
        {
          "end_line": 134,
          "file": "app/services/mineru_service.py",
          "start_line": 126
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/services/mineru_service.py#rationale:126:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/services/ocr_service.py#app.services.ocr_service.OCRService",
      "evidence": [
        {
          "end_line": 18,
          "file": "app/services/ocr_service.py",
          "start_line": 18
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/services/ocr_service.py#rationale:18:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "evidence": [
        {
          "end_line": 2,
          "file": "app/utils/exceptions.py",
          "start_line": 2
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:2:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/utils/exceptions.py",
          "start_line": 6
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:6:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.LLMExtractionError",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/utils/exceptions.py",
          "start_line": 10
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:10:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.SchemaValidationError",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/utils/exceptions.py",
          "start_line": 14
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:14:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "evidence": [
        {
          "end_line": 18,
          "file": "app/utils/exceptions.py",
          "start_line": 18
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:18:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "evidence": [
        {
          "end_line": 22,
          "file": "app/utils/exceptions.py",
          "start_line": 22
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/exceptions.py#rationale:22:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "app/utils/model_sync.py",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/utils/model_sync.py",
          "start_line": 1
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "app/utils/model_sync.py#rationale:1:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "rationale",
      "dst": "scripts/init_mineru_models.py",
      "evidence": [
        {
          "end_line": 21,
          "file": "scripts/init_mineru_models.py",
          "start_line": 2
        }
      ],
      "kind": "rationale_for",
      "resolution": "resolved",
      "src": "scripts/init_mineru_models.py#rationale:2:docstring"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "alembic/env.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/env.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "alembic"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "alembic/versions/001_create_users_and_jobs.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "alembic/versions"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/__init__.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/main.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/main.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/api/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/deps.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/deps.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/routes/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/api/routes/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/routes/auth.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/auth.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/routes/documents.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/documents.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/api/routes/health.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/health.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/core/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/celery_app.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/celery_app.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/config.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/config.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/database.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/database.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/logging.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/logging.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/redis_client.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/redis_client.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/security.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/security.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/core/storage.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/storage.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/models/__init__.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/models"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/models/job.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/job.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/models"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/models/user.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/user.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/models"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/schemas/__init__.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/schemas"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/schemas/auth.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/auth.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/schemas"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/schemas/documents.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/documents.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/schemas"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/schemas/job.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/job.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/schemas"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/services/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/services/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/services/job_service.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/job_service.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/services/llm_service.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/llm_service.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/services/mineru_service.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/mineru_service.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/services/ocr_service.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/ocr_service.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/utils/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/exceptions.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/exceptions.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/model_sync.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/model_sync.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/prompts.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/prompts.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/text_processing.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/text_processing.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/utils/validators.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/validators.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/workers/__init__.py",
      "evidence": [
        {
          "end_line": 0,
          "file": "app/workers/__init__.py",
          "start_line": 0
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/workers/sync_db.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/workers/sync_db.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "app/workers/tasks.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "app/workers/tasks.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {},
      "context": "contain",
      "dst": "scripts/init_mineru_models.py",
      "evidence": [
        {
          "end_line": 1,
          "file": "scripts/init_mineru_models.py",
          "start_line": 1
        }
      ],
      "kind": "contains",
      "resolution": "resolved",
      "src": "scripts"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 11,
          "file": "alembic/env.py",
          "start_line": 11
        },
        {
          "end_line": 12,
          "file": "alembic/env.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "alembic"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 13,
          "file": "alembic/env.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "alembic"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/api/routes",
      "evidence": [
        {
          "end_line": 14,
          "file": "app/main.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "3"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/main.py",
          "start_line": 15
        },
        {
          "end_line": 16,
          "file": "app/main.py",
          "start_line": 16
        },
        {
          "end_line": 17,
          "file": "app/main.py",
          "start_line": 17
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 6,
          "file": "app/api/deps.py",
          "start_line": 6
        },
        {
          "end_line": 7,
          "file": "app/api/deps.py",
          "start_line": 7
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/deps.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/api",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/api/routes/auth.py",
          "start_line": 8
        },
        {
          "end_line": 8,
          "file": "app/api/routes/documents.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "5"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/api/routes/auth.py",
          "start_line": 9
        },
        {
          "end_line": 9,
          "file": "app/api/routes/documents.py",
          "start_line": 9
        },
        {
          "end_line": 8,
          "file": "app/api/routes/health.py",
          "start_line": 8
        },
        {
          "end_line": 9,
          "file": "app/api/routes/health.py",
          "start_line": 9
        },
        {
          "end_line": 10,
          "file": "app/api/routes/health.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/api/routes/auth.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/schemas",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/auth.py",
          "start_line": 11
        },
        {
          "end_line": 10,
          "file": "app/api/routes/documents.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/services",
      "evidence": [
        {
          "end_line": 11,
          "file": "app/api/routes/documents.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/utils",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/api/routes/documents.py",
          "start_line": 12
        },
        {
          "end_line": 13,
          "file": "app/api/routes/documents.py",
          "start_line": 13
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/workers",
      "evidence": [
        {
          "end_line": 69,
          "file": "app/api/routes/documents.py",
          "start_line": 69
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/api/routes"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 53,
          "file": "app/core/security.py",
          "start_line": 53
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/utils",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/core/storage.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/core"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/models/job.py",
          "start_line": 8
        },
        {
          "end_line": 8,
          "file": "app/models/user.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/models"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "4"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/llm_service.py",
          "start_line": 8
        },
        {
          "end_line": 9,
          "file": "app/services/llm_service.py",
          "start_line": 9
        },
        {
          "end_line": 27,
          "file": "app/services/mineru_service.py",
          "start_line": 27
        },
        {
          "end_line": 8,
          "file": "app/services/ocr_service.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 8,
          "file": "app/services/job_service.py",
          "start_line": 8
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/schemas",
      "evidence": [
        {
          "end_line": 10,
          "file": "app/services/llm_service.py",
          "start_line": 10
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "6"
      },
      "context": "import",
      "dst": "app/utils",
      "evidence": [
        {
          "end_line": 9,
          "file": "app/services/job_service.py",
          "start_line": 9
        },
        {
          "end_line": 11,
          "file": "app/services/llm_service.py",
          "start_line": 11
        },
        {
          "end_line": 12,
          "file": "app/services/llm_service.py",
          "start_line": 12
        },
        {
          "end_line": 13,
          "file": "app/services/llm_service.py",
          "start_line": 13
        },
        {
          "end_line": 28,
          "file": "app/services/mineru_service.py",
          "start_line": 28
        },
        {
          "end_line": 9,
          "file": "app/services/ocr_service.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/services"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 17,
          "file": "app/utils/model_sync.py",
          "start_line": 17
        },
        {
          "end_line": 9,
          "file": "app/utils/validators.py",
          "start_line": 9
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/utils"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "4"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 7,
          "file": "app/workers/sync_db.py",
          "start_line": 7
        },
        {
          "end_line": 9,
          "file": "app/workers/tasks.py",
          "start_line": 9
        },
        {
          "end_line": 10,
          "file": "app/workers/tasks.py",
          "start_line": 10
        },
        {
          "end_line": 11,
          "file": "app/workers/tasks.py",
          "start_line": 11
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/models",
      "evidence": [
        {
          "end_line": 12,
          "file": "app/workers/tasks.py",
          "start_line": 12
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/services",
      "evidence": [
        {
          "end_line": 13,
          "file": "app/workers/tasks.py",
          "start_line": 13
        },
        {
          "end_line": 14,
          "file": "app/workers/tasks.py",
          "start_line": 14
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "2"
      },
      "context": "import",
      "dst": "app/utils",
      "evidence": [
        {
          "end_line": 15,
          "file": "app/workers/tasks.py",
          "start_line": 15
        },
        {
          "end_line": 16,
          "file": "app/workers/tasks.py",
          "start_line": 16
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "app/workers"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/core",
      "evidence": [
        {
          "end_line": 119,
          "file": "scripts/init_mineru_models.py",
          "start_line": 119
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "scripts"
    },
    {
      "arity": 1,
      "attrs": {
        "weight": "1"
      },
      "context": "import",
      "dst": "app/utils",
      "evidence": [
        {
          "end_line": 120,
          "file": "scripts/init_mineru_models.py",
          "start_line": 120
        }
      ],
      "kind": "imports",
      "resolution": "resolved",
      "src": "scripts"
    }
  ],
  "hyperedges": [],
  "module_deps": [
    [
      "alembic",
      "app/core"
    ],
    [
      "alembic",
      "app/models"
    ],
    [
      "app",
      "app/api/routes"
    ],
    [
      "app",
      "app/core"
    ],
    [
      "app/api",
      "app/core"
    ],
    [
      "app/api",
      "app/models"
    ],
    [
      "app/api/routes",
      "app/api"
    ],
    [
      "app/api/routes",
      "app/core"
    ],
    [
      "app/api/routes",
      "app/models"
    ],
    [
      "app/api/routes",
      "app/schemas"
    ],
    [
      "app/api/routes",
      "app/services"
    ],
    [
      "app/api/routes",
      "app/utils"
    ],
    [
      "app/api/routes",
      "app/workers"
    ],
    [
      "app/core",
      "app/models"
    ],
    [
      "app/core",
      "app/utils"
    ],
    [
      "app/models",
      "app/core"
    ],
    [
      "app/services",
      "app/core"
    ],
    [
      "app/services",
      "app/models"
    ],
    [
      "app/services",
      "app/schemas"
    ],
    [
      "app/services",
      "app/utils"
    ],
    [
      "app/utils",
      "app/core"
    ],
    [
      "app/workers",
      "app/core"
    ],
    [
      "app/workers",
      "app/models"
    ],
    [
      "app/workers",
      "app/services"
    ],
    [
      "app/workers",
      "app/utils"
    ],
    [
      "scripts",
      "app/core"
    ],
    [
      "scripts",
      "app/utils"
    ]
  ],
  "modules": [
    "",
    "alembic",
    "alembic/versions",
    "app",
    "app/api",
    "app/api/routes",
    "app/core",
    "app/models",
    "app/schemas",
    "app/services",
    "app/utils",
    "app/workers",
    "scripts"
  ],
  "nodes": [
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/env.py",
          "start_line": 1
        }
      ],
      "id": "alembic/env.py",
      "kind": "module",
      "label": "env.py",
      "lang": "python",
      "qualified_name": "alembic/env.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "alembic/env.py",
          "start_line": 38
        }
      ],
      "id": "alembic/env.py#alembic.env.do_run_migrations",
      "kind": "function",
      "label": "do_run_migrations",
      "lang": "python",
      "qualified_name": "alembic.env.do_run_migrations"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 52,
          "file": "alembic/env.py",
          "start_line": 44
        }
      ],
      "id": "alembic/env.py#alembic.env.run_async_migrations",
      "kind": "function",
      "label": "run_async_migrations",
      "lang": "python",
      "qualified_name": "alembic.env.run_async_migrations"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 35,
          "file": "alembic/env.py",
          "start_line": 26
        }
      ],
      "id": "alembic/env.py#alembic.env.run_migrations_offline",
      "kind": "function",
      "label": "run_migrations_offline",
      "lang": "python",
      "qualified_name": "alembic.env.run_migrations_offline"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 56,
          "file": "alembic/env.py",
          "start_line": 55
        }
      ],
      "id": "alembic/env.py#alembic.env.run_migrations_online",
      "kind": "function",
      "label": "run_migrations_online",
      "lang": "python",
      "qualified_name": "alembic.env.run_migrations_online"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 1
        }
      ],
      "id": "alembic/versions/001_create_users_and_jobs.py",
      "kind": "module",
      "label": "001_create_users_and_jobs.py",
      "lang": "python",
      "qualified_name": "alembic/versions/001_create_users_and_jobs.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 95,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 93
        }
      ],
      "id": "alembic/versions/001_create_users_and_jobs.py#alembic.versions.001_create_users_and_jobs.downgrade",
      "kind": "function",
      "label": "downgrade",
      "lang": "python",
      "qualified_name": "alembic.versions.001_create_users_and_jobs.downgrade"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 90,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 21
        }
      ],
      "id": "alembic/versions/001_create_users_and_jobs.py#alembic.versions.001_create_users_and_jobs.upgrade",
      "kind": "function",
      "label": "upgrade",
      "lang": "python",
      "qualified_name": "alembic.versions.001_create_users_and_jobs.upgrade"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/__init__.py",
          "start_line": 1
        }
      ],
      "id": "app/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/api/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/api/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/api/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/deps.py",
          "start_line": 1
        }
      ],
      "id": "app/api/deps.py",
      "kind": "module",
      "label": "deps.py",
      "lang": "python",
      "qualified_name": "app/api/deps.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 19,
          "file": "app/api/deps.py",
          "start_line": 15
        }
      ],
      "id": "app/api/deps.py#app.api.deps.get_pagination",
      "kind": "function",
      "label": "get_pagination",
      "lang": "python",
      "qualified_name": "app.api.deps.get_pagination"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/api/routes/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/api/routes/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/api/routes/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/auth.py",
          "start_line": 1
        }
      ],
      "id": "app/api/routes/auth.py",
      "kind": "module",
      "label": "auth.py",
      "lang": "python",
      "qualified_name": "app/api/routes/auth.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 66,
          "file": "app/api/routes/auth.py",
          "start_line": 45
        }
      ],
      "id": "app/api/routes/auth.py#app.api.routes.auth.login",
      "kind": "function",
      "label": "login",
      "lang": "python",
      "qualified_name": "app.api.routes.auth.login"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 37,
          "file": "app/api/routes/auth.py",
          "start_line": 23
        }
      ],
      "id": "app/api/routes/auth.py#app.api.routes.auth.register",
      "kind": "function",
      "label": "register",
      "lang": "python",
      "qualified_name": "app.api.routes.auth.register"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/documents.py",
          "start_line": 1
        }
      ],
      "id": "app/api/routes/documents.py",
      "kind": "module",
      "label": "documents.py",
      "lang": "python",
      "qualified_name": "app/api/routes/documents.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 95,
          "file": "app/api/routes/documents.py",
          "start_line": 83
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.get_result",
      "kind": "function",
      "label": "get_result",
      "lang": "python",
      "qualified_name": "app.api.routes.documents.get_result"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 109,
          "file": "app/api/routes/documents.py",
          "start_line": 103
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.list_jobs",
      "kind": "function",
      "label": "list_jobs",
      "lang": "python",
      "qualified_name": "app.api.routes.documents.list_jobs"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 75,
          "file": "app/api/routes/documents.py",
          "start_line": 25
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.upload_document",
      "kind": "function",
      "label": "upload_document",
      "lang": "python",
      "qualified_name": "app.api.routes.documents.upload_document"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/health.py",
          "start_line": 1
        }
      ],
      "id": "app/api/routes/health.py",
      "kind": "module",
      "label": "health.py",
      "lang": "python",
      "qualified_name": "app/api/routes/health.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 57,
          "file": "app/api/routes/health.py",
          "start_line": 20
        }
      ],
      "id": "app/api/routes/health.py#app.api.routes.health.health_check",
      "kind": "function",
      "label": "health_check",
      "lang": "python",
      "qualified_name": "app.api.routes.health.health_check"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/core/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/core/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/core/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/celery_app.py",
          "start_line": 1
        }
      ],
      "id": "app/core/celery_app.py",
      "kind": "module",
      "label": "celery_app.py",
      "lang": "python",
      "qualified_name": "app/core/celery_app.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/config.py",
          "start_line": 1
        }
      ],
      "id": "app/core/config.py",
      "kind": "module",
      "label": "config.py",
      "lang": "python",
      "qualified_name": "app/core/config.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 69,
          "file": "app/core/config.py",
          "start_line": 7
        }
      ],
      "id": "app/core/config.py#app.core.config.Settings",
      "kind": "class",
      "label": "Settings",
      "lang": "python",
      "qualified_name": "app.core.config.Settings"
    },
    {
      "attrs": {
        "class": "Settings",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 69,
          "file": "app/core/config.py",
          "start_line": 67
        }
      ],
      "id": "app/core/config.py#app.core.config.Settings.validate_openai_key",
      "kind": "method",
      "label": "validate_openai_key",
      "lang": "python",
      "qualified_name": "app.core.config.Settings.validate_openai_key"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/database.py",
          "start_line": 1
        }
      ],
      "id": "app/core/database.py",
      "kind": "module",
      "label": "database.py",
      "lang": "python",
      "qualified_name": "app/core/database.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 26,
          "file": "app/core/database.py",
          "start_line": 25
        }
      ],
      "id": "app/core/database.py#app.core.database.Base",
      "kind": "class",
      "label": "Base",
      "lang": "python",
      "qualified_name": "app.core.database.Base"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 38,
          "file": "app/core/database.py",
          "start_line": 29
        }
      ],
      "id": "app/core/database.py#app.core.database.get_db",
      "kind": "function",
      "label": "get_db",
      "lang": "python",
      "qualified_name": "app.core.database.get_db"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/logging.py",
          "start_line": 1
        }
      ],
      "id": "app/core/logging.py",
      "kind": "module",
      "label": "logging.py",
      "lang": "python",
      "qualified_name": "app/core/logging.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 58,
          "file": "app/core/logging.py",
          "start_line": 47
        }
      ],
      "id": "app/core/logging.py#app.core.logging.CorrelationIdMiddleware",
      "kind": "class",
      "label": "CorrelationIdMiddleware",
      "lang": "python",
      "qualified_name": "app.core.logging.CorrelationIdMiddleware"
    },
    {
      "attrs": {
        "class": "CorrelationIdMiddleware",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 49,
          "file": "app/core/logging.py",
          "start_line": 48
        }
      ],
      "id": "app/core/logging.py#app.core.logging.CorrelationIdMiddleware.__init__",
      "kind": "method",
      "label": "__init__",
      "lang": "python",
      "qualified_name": "app.core.logging.CorrelationIdMiddleware.__init__"
    },
    {
      "attrs": {
        "class": "CorrelationIdMiddleware",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 58,
          "file": "app/core/logging.py",
          "start_line": 51
        }
      ],
      "id": "app/core/logging.py#app.core.logging.CorrelationIdMiddleware.dispatch",
      "kind": "method",
      "label": "dispatch",
      "lang": "python",
      "qualified_name": "app.core.logging.CorrelationIdMiddleware.dispatch"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 40,
          "file": "app/core/logging.py",
          "start_line": 14
        }
      ],
      "id": "app/core/logging.py#app.core.logging.configure_logging",
      "kind": "function",
      "label": "configure_logging",
      "lang": "python",
      "qualified_name": "app.core.logging.configure_logging"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 44,
          "file": "app/core/logging.py",
          "start_line": 43
        }
      ],
      "id": "app/core/logging.py#app.core.logging.get_logger",
      "kind": "function",
      "label": "get_logger",
      "lang": "python",
      "qualified_name": "app.core.logging.get_logger"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/redis_client.py",
          "start_line": 1
        }
      ],
      "id": "app/core/redis_client.py",
      "kind": "module",
      "label": "redis_client.py",
      "lang": "python",
      "qualified_name": "app/core/redis_client.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 42,
          "file": "app/core/redis_client.py",
          "start_line": 37
        }
      ],
      "id": "app/core/redis_client.py#app.core.redis_client.check_redis_connectivity",
      "kind": "function",
      "label": "check_redis_connectivity",
      "lang": "python",
      "qualified_name": "app.core.redis_client.check_redis_connectivity"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 24,
          "file": "app/core/redis_client.py",
          "start_line": 20
        }
      ],
      "id": "app/core/redis_client.py#app.core.redis_client.close_redis",
      "kind": "function",
      "label": "close_redis",
      "lang": "python",
      "qualified_name": "app.core.redis_client.close_redis"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "app/core/redis_client.py",
          "start_line": 33
        }
      ],
      "id": "app/core/redis_client.py#app.core.redis_client.get_redis",
      "kind": "function",
      "label": "get_redis",
      "lang": "python",
      "qualified_name": "app.core.redis_client.get_redis"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 30,
          "file": "app/core/redis_client.py",
          "start_line": 27
        }
      ],
      "id": "app/core/redis_client.py#app.core.redis_client.get_redis_pool",
      "kind": "function",
      "label": "get_redis_pool",
      "lang": "python",
      "qualified_name": "app.core.redis_client.get_redis_pool"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 17,
          "file": "app/core/redis_client.py",
          "start_line": 10
        }
      ],
      "id": "app/core/redis_client.py#app.core.redis_client.init_redis",
      "kind": "function",
      "label": "init_redis",
      "lang": "python",
      "qualified_name": "app.core.redis_client.init_redis"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/security.py",
          "start_line": 1
        }
      ],
      "id": "app/core/security.py",
      "kind": "module",
      "label": "security.py",
      "lang": "python",
      "qualified_name": "app/core/security.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "app/core/security.py",
          "start_line": 26
        }
      ],
      "id": "app/core/security.py#app.core.security.create_access_token",
      "kind": "function",
      "label": "create_access_token",
      "lang": "python",
      "qualified_name": "app.core.security.create_access_token"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 46,
          "file": "app/core/security.py",
          "start_line": 35
        }
      ],
      "id": "app/core/security.py#app.core.security.decode_access_token",
      "kind": "function",
      "label": "decode_access_token",
      "lang": "python",
      "qualified_name": "app.core.security.decode_access_token"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 70,
          "file": "app/core/security.py",
          "start_line": 49
        }
      ],
      "id": "app/core/security.py#app.core.security.get_current_user",
      "kind": "function",
      "label": "get_current_user",
      "lang": "python",
      "qualified_name": "app.core.security.get_current_user"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 19,
          "file": "app/core/security.py",
          "start_line": 18
        }
      ],
      "id": "app/core/security.py#app.core.security.hash_password",
      "kind": "function",
      "label": "hash_password",
      "lang": "python",
      "qualified_name": "app.core.security.hash_password"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 23,
          "file": "app/core/security.py",
          "start_line": 22
        }
      ],
      "id": "app/core/security.py#app.core.security.verify_password",
      "kind": "function",
      "label": "verify_password",
      "lang": "python",
      "qualified_name": "app.core.security.verify_password"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/storage.py",
          "start_line": 1
        }
      ],
      "id": "app/core/storage.py",
      "kind": "module",
      "label": "storage.py",
      "lang": "python",
      "qualified_name": "app/core/storage.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 89,
          "file": "app/core/storage.py",
          "start_line": 13
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient",
      "kind": "class",
      "label": "StorageClient",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 23,
          "file": "app/core/storage.py",
          "start_line": 14
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.__init__",
      "kind": "method",
      "label": "__init__",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.__init__"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 53,
          "file": "app/core/storage.py",
          "start_line": 48
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient._check_bucket_sync",
      "kind": "method",
      "label": "_check_bucket_sync",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient._check_bucket_sync"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 46,
          "file": "app/core/storage.py",
          "start_line": 45
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient._delete_sync",
      "kind": "method",
      "label": "_delete_sync",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient._delete_sync"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 36,
          "file": "app/core/storage.py",
          "start_line": 33
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient._download_sync",
      "kind": "method",
      "label": "_download_sync",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient._download_sync"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 43,
          "file": "app/core/storage.py",
          "start_line": 38
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient._presign_sync",
      "kind": "method",
      "label": "_presign_sync",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient._presign_sync"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 31,
          "file": "app/core/storage.py",
          "start_line": 25
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient._upload_sync",
      "kind": "method",
      "label": "_upload_sync",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient._upload_sync"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 89,
          "file": "app/core/storage.py",
          "start_line": 87
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.check_connectivity",
      "kind": "method",
      "label": "check_connectivity",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.check_connectivity"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 85,
          "file": "app/core/storage.py",
          "start_line": 80
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.delete_file",
      "kind": "method",
      "label": "delete_file",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.delete_file"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 72,
          "file": "app/core/storage.py",
          "start_line": 65
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.download_file",
      "kind": "method",
      "label": "download_file",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.download_file"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 78,
          "file": "app/core/storage.py",
          "start_line": 74
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.generate_presigned_url",
      "kind": "method",
      "label": "generate_presigned_url",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.generate_presigned_url"
    },
    {
      "attrs": {
        "class": "StorageClient",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 63,
          "file": "app/core/storage.py",
          "start_line": 55
        }
      ],
      "id": "app/core/storage.py#app.core.storage.StorageClient.upload_file",
      "kind": "method",
      "label": "upload_file",
      "lang": "python",
      "qualified_name": "app.core.storage.StorageClient.upload_file"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/main.py",
          "start_line": 1
        }
      ],
      "id": "app/main.py",
      "kind": "module",
      "label": "main.py",
      "lang": "python",
      "qualified_name": "app/main.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 30,
          "file": "app/main.py",
          "start_line": 24
        }
      ],
      "id": "app/main.py#app.main.lifespan",
      "kind": "function",
      "label": "lifespan",
      "lang": "python",
      "qualified_name": "app.main.lifespan"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 76,
          "file": "app/main.py",
          "start_line": 71
        }
      ],
      "id": "app/main.py#app.main.unhandled_exception_handler",
      "kind": "function",
      "label": "unhandled_exception_handler",
      "lang": "python",
      "qualified_name": "app.main.unhandled_exception_handler"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/__init__.py",
          "start_line": 1
        }
      ],
      "id": "app/models/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/models/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/job.py",
          "start_line": 1
        }
      ],
      "id": "app/models/job.py",
      "kind": "module",
      "label": "job.py",
      "lang": "python",
      "qualified_name": "app/models/job.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 66,
          "file": "app/models/job.py",
          "start_line": 11
        }
      ],
      "id": "app/models/job.py#app.models.job.Job",
      "kind": "class",
      "label": "Job",
      "lang": "python",
      "qualified_name": "app.models.job.Job"
    },
    {
      "attrs": {
        "class": "Job",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 66,
          "file": "app/models/job.py",
          "start_line": 65
        }
      ],
      "id": "app/models/job.py#app.models.job.Job.__repr__",
      "kind": "method",
      "label": "__repr__",
      "lang": "python",
      "qualified_name": "app.models.job.Job.__repr__"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/user.py",
          "start_line": 1
        }
      ],
      "id": "app/models/user.py",
      "kind": "module",
      "label": "user.py",
      "lang": "python",
      "qualified_name": "app/models/user.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 31,
          "file": "app/models/user.py",
          "start_line": 11
        }
      ],
      "id": "app/models/user.py#app.models.user.User",
      "kind": "class",
      "label": "User",
      "lang": "python",
      "qualified_name": "app.models.user.User"
    },
    {
      "attrs": {
        "class": "User",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 31,
          "file": "app/models/user.py",
          "start_line": 30
        }
      ],
      "id": "app/models/user.py#app.models.user.User.__repr__",
      "kind": "method",
      "label": "__repr__",
      "lang": "python",
      "qualified_name": "app.models.user.User.__repr__"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        }
      ],
      "id": "app/schemas/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/schemas/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/auth.py",
          "start_line": 1
        }
      ],
      "id": "app/schemas/auth.py",
      "kind": "module",
      "label": "auth.py",
      "lang": "python",
      "qualified_name": "app/schemas/auth.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "app/schemas/auth.py",
          "start_line": 30
        }
      ],
      "id": "app/schemas/auth.py#app.schemas.auth.TokenRequest",
      "kind": "class",
      "label": "TokenRequest",
      "lang": "python",
      "qualified_name": "app.schemas.auth.TokenRequest"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 37,
          "file": "app/schemas/auth.py",
          "start_line": 35
        }
      ],
      "id": "app/schemas/auth.py#app.schemas.auth.TokenResponse",
      "kind": "class",
      "label": "TokenResponse",
      "lang": "python",
      "qualified_name": "app.schemas.auth.TokenResponse"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/schemas/auth.py",
          "start_line": 7
        }
      ],
      "id": "app/schemas/auth.py#app.schemas.auth.UserCreate",
      "kind": "class",
      "label": "UserCreate",
      "lang": "python",
      "qualified_name": "app.schemas.auth.UserCreate"
    },
    {
      "attrs": {
        "class": "UserCreate",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/schemas/auth.py",
          "start_line": 13
        }
      ],
      "id": "app/schemas/auth.py#app.schemas.auth.UserCreate.password_strength",
      "kind": "method",
      "label": "password_strength",
      "lang": "python",
      "qualified_name": "app.schemas.auth.UserCreate.password_strength"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 27,
          "file": "app/schemas/auth.py",
          "start_line": 21
        }
      ],
      "id": "app/schemas/auth.py#app.schemas.auth.UserResponse",
      "kind": "class",
      "label": "UserResponse",
      "lang": "python",
      "qualified_name": "app.schemas.auth.UserResponse"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/documents.py",
          "start_line": 1
        }
      ],
      "id": "app/schemas/documents.py",
      "kind": "module",
      "label": "documents.py",
      "lang": "python",
      "qualified_name": "app/schemas/documents.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 49,
          "file": "app/schemas/documents.py",
          "start_line": 37
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.ESGExtraction",
      "kind": "class",
      "label": "ESGExtraction",
      "lang": "python",
      "qualified_name": "app.schemas.documents.ESGExtraction"
    },
    {
      "attrs": {
        "class": "ESGExtraction",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 49,
          "file": "app/schemas/documents.py",
          "start_line": 46
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.ESGExtraction.score_in_range",
      "kind": "method",
      "label": "score_in_range",
      "lang": "python",
      "qualified_name": "app.schemas.documents.ESGExtraction.score_in_range"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 26,
          "file": "app/schemas/documents.py",
          "start_line": 13
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction",
      "kind": "class",
      "label": "InvoiceExtraction",
      "lang": "python",
      "qualified_name": "app.schemas.documents.InvoiceExtraction"
    },
    {
      "attrs": {
        "class": "InvoiceExtraction",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 26,
          "file": "app/schemas/documents.py",
          "start_line": 23
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.InvoiceExtraction.total_must_be_positive",
      "kind": "method",
      "label": "total_must_be_positive",
      "lang": "python",
      "qualified_name": "app.schemas.documents.InvoiceExtraction.total_must_be_positive"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "app/schemas/documents.py",
          "start_line": 29
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.LegalExtraction",
      "kind": "class",
      "label": "LegalExtraction",
      "lang": "python",
      "qualified_name": "app.schemas.documents.LegalExtraction"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 10,
          "file": "app/schemas/documents.py",
          "start_line": 6
        }
      ],
      "id": "app/schemas/documents.py#app.schemas.documents.LineItem",
      "kind": "class",
      "label": "LineItem",
      "lang": "python",
      "qualified_name": "app.schemas.documents.LineItem"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/job.py",
          "start_line": 1
        }
      ],
      "id": "app/schemas/job.py",
      "kind": "module",
      "label": "job.py",
      "lang": "python",
      "qualified_name": "app/schemas/job.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 19,
          "file": "app/schemas/job.py",
          "start_line": 16
        }
      ],
      "id": "app/schemas/job.py#app.schemas.job.DocumentType",
      "kind": "class",
      "label": "DocumentType",
      "lang": "python",
      "qualified_name": "app.schemas.job.DocumentType"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 30,
          "file": "app/schemas/job.py",
          "start_line": 22
        }
      ],
      "id": "app/schemas/job.py#app.schemas.job.JobResponse",
      "kind": "class",
      "label": "JobResponse",
      "lang": "python",
      "qualified_name": "app.schemas.job.JobResponse"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 38,
          "file": "app/schemas/job.py",
          "start_line": 33
        }
      ],
      "id": "app/schemas/job.py#app.schemas.job.JobResultResponse",
      "kind": "class",
      "label": "JobResultResponse",
      "lang": "python",
      "qualified_name": "app.schemas.job.JobResultResponse"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 13,
          "file": "app/schemas/job.py",
          "start_line": 9
        }
      ],
      "id": "app/schemas/job.py#app.schemas.job.JobStatus",
      "kind": "class",
      "label": "JobStatus",
      "lang": "python",
      "qualified_name": "app.schemas.job.JobStatus"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/services/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/services/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/services/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/job_service.py",
          "start_line": 1
        }
      ],
      "id": "app/services/job_service.py",
      "kind": "module",
      "label": "job_service.py",
      "lang": "python",
      "qualified_name": "app/services/job_service.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "app/services/job_service.py",
          "start_line": 12
        }
      ],
      "id": "app/services/job_service.py#app.services.job_service.create_job",
      "kind": "function",
      "label": "create_job",
      "lang": "python",
      "qualified_name": "app.services.job_service.create_job"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 42,
          "file": "app/services/job_service.py",
          "start_line": 35
        }
      ],
      "id": "app/services/job_service.py#app.services.job_service.get_job",
      "kind": "function",
      "label": "get_job",
      "lang": "python",
      "qualified_name": "app.services.job_service.get_job"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 77,
          "file": "app/services/job_service.py",
          "start_line": 64
        }
      ],
      "id": "app/services/job_service.py#app.services.job_service.list_user_jobs",
      "kind": "function",
      "label": "list_user_jobs",
      "lang": "python",
      "qualified_name": "app.services.job_service.list_user_jobs"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 61,
          "file": "app/services/job_service.py",
          "start_line": 45
        }
      ],
      "id": "app/services/job_service.py#app.services.job_service.update_job_status",
      "kind": "function",
      "label": "update_job_status",
      "lang": "python",
      "qualified_name": "app.services.job_service.update_job_status"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/llm_service.py",
          "start_line": 1
        }
      ],
      "id": "app/services/llm_service.py",
      "kind": "module",
      "label": "llm_service.py",
      "lang": "python",
      "qualified_name": "app/services/llm_service.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 159,
          "file": "app/services/llm_service.py",
          "start_line": 31
        }
      ],
      "id": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService",
      "kind": "class",
      "label": "LLMExtractionService",
      "lang": "python",
      "qualified_name": "app.services.llm_service.LLMExtractionService"
    },
    {
      "attrs": {
        "class": "LLMExtractionService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 53,
          "file": "app/services/llm_service.py",
          "start_line": 34
        }
      ],
      "id": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService.__init__",
      "kind": "method",
      "label": "__init__",
      "lang": "python",
      "qualified_name": "app.services.llm_service.LLMExtractionService.__init__"
    },
    {
      "attrs": {
        "class": "LLMExtractionService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 159,
          "file": "app/services/llm_service.py",
          "start_line": 137
        }
      ],
      "id": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._calculate_confidence",
      "kind": "method",
      "label": "_calculate_confidence",
      "lang": "python",
      "qualified_name": "app.services.llm_service.LLMExtractionService._calculate_confidence"
    },
    {
      "attrs": {
        "class": "LLMExtractionService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 135,
          "file": "app/services/llm_service.py",
          "start_line": 90
        }
      ],
      "id": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService._run_extraction",
      "kind": "method",
      "label": "_run_extraction",
      "lang": "python",
      "qualified_name": "app.services.llm_service.LLMExtractionService._run_extraction"
    },
    {
      "attrs": {
        "class": "LLMExtractionService",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 82,
          "file": "app/services/llm_service.py",
          "start_line": 55
        }
      ],
      "id": "app/services/llm_service.py#app.services.llm_service.LLMExtractionService.extract",
      "kind": "method",
      "label": "extract",
      "lang": "python",
      "qualified_name": "app.services.llm_service.LLMExtractionService.extract"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/mineru_service.py",
          "start_line": 1
        }
      ],
      "id": "app/services/mineru_service.py",
      "kind": "module",
      "label": "mineru_service.py",
      "lang": "python",
      "qualified_name": "app/services/mineru_service.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 178,
          "file": "app/services/mineru_service.py",
          "start_line": 125
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service.MinerUService",
      "kind": "class",
      "label": "MinerUService",
      "lang": "python",
      "qualified_name": "app.services.mineru_service.MinerUService"
    },
    {
      "attrs": {
        "class": "MinerUService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 137,
          "file": "app/services/mineru_service.py",
          "start_line": 136
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service.MinerUService.__init__",
      "kind": "method",
      "label": "__init__",
      "lang": "python",
      "qualified_name": "app.services.mineru_service.MinerUService.__init__"
    },
    {
      "attrs": {
        "class": "MinerUService",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 178,
          "file": "app/services/mineru_service.py",
          "start_line": 139
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service.MinerUService.extract_text",
      "kind": "method",
      "label": "extract_text",
      "lang": "python",
      "qualified_name": "app.services.mineru_service.MinerUService.extract_text"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 71,
          "file": "app/services/mineru_service.py",
          "start_line": 59
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service._image_to_pdf",
      "kind": "function",
      "label": "_image_to_pdf",
      "lang": "python",
      "qualified_name": "app.services.mineru_service._image_to_pdf"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 122,
          "file": "app/services/mineru_service.py",
          "start_line": 74
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service._run_mineru_sync",
      "kind": "function",
      "label": "_run_mineru_sync",
      "lang": "python",
      "qualified_name": "app.services.mineru_service._run_mineru_sync"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 56,
          "file": "app/services/mineru_service.py",
          "start_line": 41
        }
      ],
      "id": "app/services/mineru_service.py#app.services.mineru_service._write_mineru_config",
      "kind": "function",
      "label": "_write_mineru_config",
      "lang": "python",
      "qualified_name": "app.services.mineru_service._write_mineru_config"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/ocr_service.py",
          "start_line": 1
        }
      ],
      "id": "app/services/ocr_service.py",
      "kind": "module",
      "label": "ocr_service.py",
      "lang": "python",
      "qualified_name": "app/services/ocr_service.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 68,
          "file": "app/services/ocr_service.py",
          "start_line": 17
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService",
      "kind": "class",
      "label": "OCRService",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService"
    },
    {
      "attrs": {
        "class": "OCRService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 53,
          "file": "app/services/ocr_service.py",
          "start_line": 49
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService._bytes_to_image",
      "kind": "method",
      "label": "_bytes_to_image",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService._bytes_to_image"
    },
    {
      "attrs": {
        "class": "OCRService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 62,
          "file": "app/services/ocr_service.py",
          "start_line": 55
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService._ocr_image",
      "kind": "method",
      "label": "_ocr_image",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService._ocr_image"
    },
    {
      "attrs": {
        "class": "OCRService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 47,
          "file": "app/services/ocr_service.py",
          "start_line": 36
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService._pdf_to_images",
      "kind": "method",
      "label": "_pdf_to_images",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService._pdf_to_images"
    },
    {
      "attrs": {
        "class": "OCRService",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 68,
          "file": "app/services/ocr_service.py",
          "start_line": 65
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService._preprocess",
      "kind": "method",
      "label": "_preprocess",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService._preprocess"
    },
    {
      "attrs": {
        "class": "OCRService",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "app/services/ocr_service.py",
          "start_line": 20
        }
      ],
      "id": "app/services/ocr_service.py#app.services.ocr_service.OCRService.extract_text",
      "kind": "method",
      "label": "extract_text",
      "lang": "python",
      "qualified_name": "app.services.ocr_service.OCRService.extract_text"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/utils/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/utils/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/utils/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/exceptions.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/exceptions.py",
      "kind": "module",
      "label": "exceptions.py",
      "lang": "python",
      "qualified_name": "app/utils/exceptions.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 2,
          "file": "app/utils/exceptions.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.DocumentExtractionError",
      "kind": "class",
      "label": "DocumentExtractionError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.DocumentExtractionError"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 22,
          "file": "app/utils/exceptions.py",
          "start_line": 21
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.JobNotFoundError",
      "kind": "class",
      "label": "JobNotFoundError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.JobNotFoundError"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 10,
          "file": "app/utils/exceptions.py",
          "start_line": 9
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.LLMExtractionError",
      "kind": "class",
      "label": "LLMExtractionError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.LLMExtractionError"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 6,
          "file": "app/utils/exceptions.py",
          "start_line": 5
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.OCRError",
      "kind": "class",
      "label": "OCRError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.OCRError"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 14,
          "file": "app/utils/exceptions.py",
          "start_line": 13
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.SchemaValidationError",
      "kind": "class",
      "label": "SchemaValidationError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.SchemaValidationError"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/utils/exceptions.py",
          "start_line": 17
        }
      ],
      "id": "app/utils/exceptions.py#app.utils.exceptions.StorageError",
      "kind": "class",
      "label": "StorageError",
      "lang": "python",
      "qualified_name": "app.utils.exceptions.StorageError"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/model_sync.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/model_sync.py",
      "kind": "module",
      "label": "model_sync.py",
      "lang": "python",
      "qualified_name": "app/utils/model_sync.py"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 30,
          "file": "app/utils/model_sync.py",
          "start_line": 22
        }
      ],
      "id": "app/utils/model_sync.py#app.utils.model_sync._make_s3_client",
      "kind": "function",
      "label": "_make_s3_client",
      "lang": "python",
      "qualified_name": "app.utils.model_sync._make_s3_client"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 108,
          "file": "app/utils/model_sync.py",
          "start_line": 75
        }
      ],
      "id": "app/utils/model_sync.py#app.utils.model_sync.ensure_models",
      "kind": "function",
      "label": "ensure_models",
      "lang": "python",
      "qualified_name": "app.utils.model_sync.ensure_models"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 72,
          "file": "app/utils/model_sync.py",
          "start_line": 52
        }
      ],
      "id": "app/utils/model_sync.py#app.utils.model_sync.pull_models_from_minio",
      "kind": "function",
      "label": "pull_models_from_minio",
      "lang": "python",
      "qualified_name": "app.utils.model_sync.pull_models_from_minio"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 49,
          "file": "app/utils/model_sync.py",
          "start_line": 33
        }
      ],
      "id": "app/utils/model_sync.py#app.utils.model_sync.push_models_to_minio",
      "kind": "function",
      "label": "push_models_to_minio",
      "lang": "python",
      "qualified_name": "app.utils.model_sync.push_models_to_minio"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/prompts.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/prompts.py",
      "kind": "module",
      "label": "prompts.py",
      "lang": "python",
      "qualified_name": "app/utils/prompts.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 67,
          "file": "app/utils/prompts.py",
          "start_line": 66
        }
      ],
      "id": "app/utils/prompts.py#app.utils.prompts.build_user_prompt",
      "kind": "function",
      "label": "build_user_prompt",
      "lang": "python",
      "qualified_name": "app.utils.prompts.build_user_prompt"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 72,
          "file": "app/utils/prompts.py",
          "start_line": 70
        }
      ],
      "id": "app/utils/prompts.py#app.utils.prompts.get_system_prompt",
      "kind": "function",
      "label": "get_system_prompt",
      "lang": "python",
      "qualified_name": "app.utils.prompts.get_system_prompt"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/text_processing.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/text_processing.py",
      "kind": "module",
      "label": "text_processing.py",
      "lang": "python",
      "qualified_name": "app/utils/text_processing.py"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 66,
          "file": "app/utils/text_processing.py",
          "start_line": 59
        }
      ],
      "id": "app/utils/text_processing.py#app.utils.text_processing._find_sentence_boundary",
      "kind": "function",
      "label": "_find_sentence_boundary",
      "lang": "python",
      "qualified_name": "app.utils.text_processing._find_sentence_boundary"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 56,
          "file": "app/utils/text_processing.py",
          "start_line": 21
        }
      ],
      "id": "app/utils/text_processing.py#app.utils.text_processing.chunk_text",
      "kind": "function",
      "label": "chunk_text",
      "lang": "python",
      "qualified_name": "app.utils.text_processing.chunk_text"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 83,
          "file": "app/utils/text_processing.py",
          "start_line": 69
        }
      ],
      "id": "app/utils/text_processing.py#app.utils.text_processing.clean_markdown",
      "kind": "function",
      "label": "clean_markdown",
      "lang": "python",
      "qualified_name": "app.utils.text_processing.clean_markdown"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/utils/text_processing.py",
          "start_line": 6
        }
      ],
      "id": "app/utils/text_processing.py#app.utils.text_processing.clean_text",
      "kind": "function",
      "label": "clean_text",
      "lang": "python",
      "qualified_name": "app.utils.text_processing.clean_text"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 91,
          "file": "app/utils/text_processing.py",
          "start_line": 86
        }
      ],
      "id": "app/utils/text_processing.py#app.utils.text_processing.sanitize_filename",
      "kind": "function",
      "label": "sanitize_filename",
      "lang": "python",
      "qualified_name": "app.utils.text_processing.sanitize_filename"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/validators.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/validators.py",
      "kind": "module",
      "label": "validators.py",
      "lang": "python",
      "qualified_name": "app/utils/validators.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 52,
          "file": "app/utils/validators.py",
          "start_line": 47
        }
      ],
      "id": "app/utils/validators.py#app.utils.validators.generate_storage_key",
      "kind": "function",
      "label": "generate_storage_key",
      "lang": "python",
      "qualified_name": "app.utils.validators.generate_storage_key"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 44,
          "file": "app/utils/validators.py",
          "start_line": 35
        }
      ],
      "id": "app/utils/validators.py#app.utils.validators.sanitize_filename",
      "kind": "function",
      "label": "sanitize_filename",
      "lang": "python",
      "qualified_name": "app.utils.validators.sanitize_filename"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "app/utils/validators.py",
          "start_line": 25
        }
      ],
      "id": "app/utils/validators.py#app.utils.validators.validate_file_size",
      "kind": "function",
      "label": "validate_file_size",
      "lang": "python",
      "qualified_name": "app.utils.validators.validate_file_size"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 22,
          "file": "app/utils/validators.py",
          "start_line": 14
        }
      ],
      "id": "app/utils/validators.py#app.utils.validators.validate_file_type",
      "kind": "function",
      "label": "validate_file_type",
      "lang": "python",
      "qualified_name": "app.utils.validators.validate_file_type"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "app/workers/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/workers/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "app/workers/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/workers/sync_db.py",
          "start_line": 1
        }
      ],
      "id": "app/workers/sync_db.py",
      "kind": "module",
      "label": "sync_db.py",
      "lang": "python",
      "qualified_name": "app/workers/sync_db.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "app/workers/sync_db.py",
          "start_line": 24
        }
      ],
      "id": "app/workers/sync_db.py#app.workers.sync_db.get_sync_db",
      "kind": "function",
      "label": "get_sync_db",
      "lang": "python",
      "qualified_name": "app.workers.sync_db.get_sync_db"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "app/workers/tasks.py",
          "start_line": 1
        }
      ],
      "id": "app/workers/tasks.py",
      "kind": "module",
      "label": "tasks.py",
      "lang": "python",
      "qualified_name": "app/workers/tasks.py"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 24,
          "file": "app/workers/tasks.py",
          "start_line": 23
        }
      ],
      "id": "app/workers/tasks.py#app.workers.tasks._get_job",
      "kind": "function",
      "label": "_get_job",
      "lang": "python",
      "qualified_name": "app.workers.tasks._get_job"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 126,
          "file": "app/workers/tasks.py",
          "start_line": 117
        }
      ],
      "id": "app/workers/tasks.py#app.workers.tasks._mark_failed",
      "kind": "function",
      "label": "_mark_failed",
      "lang": "python",
      "qualified_name": "app.workers.tasks._mark_failed"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 114,
          "file": "app/workers/tasks.py",
          "start_line": 35
        }
      ],
      "id": "app/workers/tasks.py#app.workers.tasks.process_document",
      "kind": "function",
      "label": "process_document",
      "lang": "python",
      "qualified_name": "app.workers.tasks.process_document"
    },
    {
      "attrs": {
        "build_context": ".",
        "build_line": "16",
        "dockerfile": "docker/api/Dockerfile",
        "ships": "requirements.txt:18\napp:22\nalembic:23\nalembic.ini:24\ndocker/api/entrypoint.sh:31"
      },
      "evidence": [
        {
          "end_line": 15,
          "file": "docker-compose.yml",
          "start_line": 15
        }
      ],
      "id": "docker-compose.yml#service.api",
      "kind": "service",
      "label": "api",
      "lang": "compose",
      "qualified_name": "api"
    },
    {
      "attrs": {
        "image": "minio/minio:latest"
      },
      "evidence": [
        {
          "end_line": 97,
          "file": "docker-compose.yml",
          "start_line": 97
        }
      ],
      "id": "docker-compose.yml#service.minio",
      "kind": "datastore",
      "label": "minio",
      "lang": "compose",
      "qualified_name": "minio"
    },
    {
      "attrs": {
        "image": "minio/mc:latest"
      },
      "evidence": [
        {
          "end_line": 111,
          "file": "docker-compose.yml",
          "start_line": 111
        }
      ],
      "id": "docker-compose.yml#service.minio-init",
      "kind": "service",
      "label": "minio-init",
      "lang": "compose",
      "qualified_name": "minio-init"
    },
    {
      "attrs": {
        "image": "minio/mc:latest"
      },
      "evidence": [
        {
          "end_line": 124,
          "file": "docker-compose.yml",
          "start_line": 124
        }
      ],
      "id": "docker-compose.yml#service.minio-models-init",
      "kind": "service",
      "label": "minio-models-init",
      "lang": "compose",
      "qualified_name": "minio-models-init"
    },
    {
      "attrs": {
        "image": "postgres:16-alpine"
      },
      "evidence": [
        {
          "end_line": 69,
          "file": "docker-compose.yml",
          "start_line": 69
        }
      ],
      "id": "docker-compose.yml#service.postgres",
      "kind": "datastore",
      "label": "postgres",
      "lang": "compose",
      "qualified_name": "postgres"
    },
    {
      "attrs": {
        "image": "redis:7-alpine"
      },
      "evidence": [
        {
          "end_line": 87,
          "file": "docker-compose.yml",
          "start_line": 87
        }
      ],
      "id": "docker-compose.yml#service.redis",
      "kind": "datastore",
      "label": "redis",
      "lang": "compose",
      "qualified_name": "redis"
    },
    {
      "attrs": {
        "build_context": ".",
        "build_line": "41",
        "dockerfile": "docker/worker/Dockerfile",
        "ships": "requirements.txt:18\napp:22\nalembic:23\nalembic.ini:24\ndocker/worker/entrypoint.sh:30"
      },
      "evidence": [
        {
          "end_line": 40,
          "file": "docker-compose.yml",
          "start_line": 40
        }
      ],
      "id": "docker-compose.yml#service.worker",
      "kind": "service",
      "label": "worker",
      "lang": "compose",
      "qualified_name": "worker"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "scripts/init_mineru_models.py",
          "start_line": 1
        }
      ],
      "id": "scripts/init_mineru_models.py",
      "kind": "module",
      "label": "init_mineru_models.py",
      "lang": "python",
      "qualified_name": "scripts/init_mineru_models.py"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 47,
          "file": "scripts/init_mineru_models.py",
          "start_line": 38
        }
      ],
      "id": "scripts/init_mineru_models.py#scripts.init_mineru_models._write_temp_config",
      "kind": "function",
      "label": "_write_temp_config",
      "lang": "python",
      "qualified_name": "scripts.init_mineru_models._write_temp_config"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 95,
          "file": "scripts/init_mineru_models.py",
          "start_line": 50
        }
      ],
      "id": "scripts/init_mineru_models.py#scripts.init_mineru_models.download_models",
      "kind": "function",
      "label": "download_models",
      "lang": "python",
      "qualified_name": "scripts.init_mineru_models.download_models"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 144,
          "file": "scripts/init_mineru_models.py",
          "start_line": 98
        }
      ],
      "id": "scripts/init_mineru_models.py#scripts.init_mineru_models.main",
      "kind": "function",
      "label": "main",
      "lang": "python",
      "qualified_name": "scripts.init_mineru_models.main"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "tests/__init__.py",
          "start_line": 0
        }
      ],
      "id": "tests/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "tests/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/conftest.py",
          "start_line": 1
        }
      ],
      "id": "tests/conftest.py",
      "kind": "module",
      "label": "conftest.py",
      "lang": "python",
      "qualified_name": "tests/conftest.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 84,
          "file": "tests/conftest.py",
          "start_line": 79
        }
      ],
      "id": "tests/conftest.py#tests.conftest.auth_headers",
      "kind": "function",
      "label": "auth_headers",
      "lang": "python",
      "qualified_name": "tests.conftest.auth_headers"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 61,
          "file": "tests/conftest.py",
          "start_line": 44
        }
      ],
      "id": "tests/conftest.py#tests.conftest.client",
      "kind": "function",
      "label": "client",
      "lang": "python",
      "qualified_name": "tests.conftest.client"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 50,
          "file": "tests/conftest.py",
          "start_line": 49
        }
      ],
      "id": "tests/conftest.py#tests.conftest.client.override_get_db",
      "kind": "function",
      "label": "override_get_db",
      "lang": "python",
      "qualified_name": "tests.conftest.client.override_get_db"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 53,
          "file": "tests/conftest.py",
          "start_line": 52
        }
      ],
      "id": "tests/conftest.py#tests.conftest.client.override_get_redis",
      "kind": "function",
      "label": "override_get_redis",
      "lang": "python",
      "qualified_name": "tests.conftest.client.override_get_redis"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 33,
          "file": "tests/conftest.py",
          "start_line": 28
        }
      ],
      "id": "tests/conftest.py#tests.conftest.create_test_tables",
      "kind": "function",
      "label": "create_test_tables",
      "lang": "python",
      "qualified_name": "tests.conftest.create_test_tables"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 40,
          "file": "tests/conftest.py",
          "start_line": 37
        }
      ],
      "id": "tests/conftest.py#tests.conftest.db_session",
      "kind": "function",
      "label": "db_session",
      "lang": "python",
      "qualified_name": "tests.conftest.db_session"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 97,
          "file": "tests/conftest.py",
          "start_line": 88
        }
      ],
      "id": "tests/conftest.py#tests.conftest.sample_pdf_bytes",
      "kind": "function",
      "label": "sample_pdf_bytes",
      "lang": "python",
      "qualified_name": "tests.conftest.sample_pdf_bytes"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 108,
          "file": "tests/conftest.py",
          "start_line": 101
        }
      ],
      "id": "tests/conftest.py#tests.conftest.sample_png_bytes",
      "kind": "function",
      "label": "sample_png_bytes",
      "lang": "python",
      "qualified_name": "tests.conftest.sample_png_bytes"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 75,
          "file": "tests/conftest.py",
          "start_line": 65
        }
      ],
      "id": "tests/conftest.py#tests.conftest.test_user",
      "kind": "function",
      "label": "test_user",
      "lang": "python",
      "qualified_name": "tests.conftest.test_user"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "tests/integration/__init__.py",
          "start_line": 0
        }
      ],
      "id": "tests/integration/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "tests/integration/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/integration/test_auth.py",
          "start_line": 1
        }
      ],
      "id": "tests/integration/test_auth.py",
      "kind": "module",
      "label": "test_auth.py",
      "lang": "python",
      "qualified_name": "tests/integration/test_auth.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 48,
          "file": "tests/integration/test_auth.py",
          "start_line": 36
        }
      ],
      "id": "tests/integration/test_auth.py#tests.integration.test_auth.test_login_returns_token",
      "kind": "function",
      "label": "test_login_returns_token",
      "lang": "python",
      "qualified_name": "tests.integration.test_auth.test_login_returns_token"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 61,
          "file": "tests/integration/test_auth.py",
          "start_line": 52
        }
      ],
      "id": "tests/integration/test_auth.py#tests.integration.test_auth.test_login_wrong_password",
      "kind": "function",
      "label": "test_login_wrong_password",
      "lang": "python",
      "qualified_name": "tests.integration.test_auth.test_login_wrong_password"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 23,
          "file": "tests/integration/test_auth.py",
          "start_line": 19
        }
      ],
      "id": "tests/integration/test_auth.py#tests.integration.test_auth.test_register_duplicate_email",
      "kind": "function",
      "label": "test_register_duplicate_email",
      "lang": "python",
      "qualified_name": "tests.integration.test_auth.test_register_duplicate_email"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 15,
          "file": "tests/integration/test_auth.py",
          "start_line": 6
        }
      ],
      "id": "tests/integration/test_auth.py#tests.integration.test_auth.test_register_new_user",
      "kind": "function",
      "label": "test_register_new_user",
      "lang": "python",
      "qualified_name": "tests.integration.test_auth.test_register_new_user"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "tests/integration/test_auth.py",
          "start_line": 27
        }
      ],
      "id": "tests/integration/test_auth.py#tests.integration.test_auth.test_register_weak_password",
      "kind": "function",
      "label": "test_register_weak_password",
      "lang": "python",
      "qualified_name": "tests.integration.test_auth.test_register_weak_password"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/integration/test_health.py",
          "start_line": 1
        }
      ],
      "id": "tests/integration/test_health.py",
      "kind": "module",
      "label": "test_health.py",
      "lang": "python",
      "qualified_name": "tests/integration/test_health.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 29,
          "file": "tests/integration/test_health.py",
          "start_line": 8
        }
      ],
      "id": "tests/integration/test_health.py#tests.integration.test_health.test_health_returns_200",
      "kind": "function",
      "label": "test_health_returns_200",
      "lang": "python",
      "qualified_name": "tests.integration.test_health.test_health_returns_200"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 51,
          "file": "tests/integration/test_health.py",
          "start_line": 33
        }
      ],
      "id": "tests/integration/test_health.py#tests.integration.test_health.test_health_returns_503_when_redis_down",
      "kind": "function",
      "label": "test_health_returns_503_when_redis_down",
      "lang": "python",
      "qualified_name": "tests.integration.test_health.test_health_returns_503_when_redis_down"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/integration/test_result.py",
          "start_line": 1
        }
      ],
      "id": "tests/integration/test_result.py",
      "kind": "module",
      "label": "test_result.py",
      "lang": "python",
      "qualified_name": "tests/integration/test_result.py"
    },
    {
      "attrs": {
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 26,
          "file": "tests/integration/test_result.py",
          "start_line": 13
        }
      ],
      "id": "tests/integration/test_result.py#tests.integration.test_result._create_job",
      "kind": "function",
      "label": "_create_job",
      "lang": "python",
      "qualified_name": "tests.integration.test_result._create_job"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 61,
          "file": "tests/integration/test_result.py",
          "start_line": 45
        }
      ],
      "id": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_completed_job",
      "kind": "function",
      "label": "test_get_result_completed_job",
      "lang": "python",
      "qualified_name": "tests.integration.test_result.test_get_result_completed_job"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 68,
          "file": "tests/integration/test_result.py",
          "start_line": 65
        }
      ],
      "id": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_not_found",
      "kind": "function",
      "label": "test_get_result_not_found",
      "lang": "python",
      "qualified_name": "tests.integration.test_result.test_get_result_not_found"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 105,
          "file": "tests/integration/test_result.py",
          "start_line": 72
        }
      ],
      "id": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_other_user_job",
      "kind": "function",
      "label": "test_get_result_other_user_job",
      "lang": "python",
      "qualified_name": "tests.integration.test_result.test_get_result_other_user_job"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "tests/integration/test_result.py",
          "start_line": 30
        }
      ],
      "id": "tests/integration/test_result.py#tests.integration.test_result.test_get_result_pending_job",
      "kind": "function",
      "label": "test_get_result_pending_job",
      "lang": "python",
      "qualified_name": "tests.integration.test_result.test_get_result_pending_job"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/integration/test_upload.py",
          "start_line": 1
        }
      ],
      "id": "tests/integration/test_upload.py",
      "kind": "module",
      "label": "test_upload.py",
      "lang": "python",
      "qualified_name": "tests/integration/test_upload.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 69,
          "file": "tests/integration/test_upload.py",
          "start_line": 60
        }
      ],
      "id": "tests/integration/test_upload.py#tests.integration.test_upload.test_upload_file_too_large",
      "kind": "function",
      "label": "test_upload_file_too_large",
      "lang": "python",
      "qualified_name": "tests.integration.test_upload.test_upload_file_too_large"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 56,
          "file": "tests/integration/test_upload.py",
          "start_line": 45
        }
      ],
      "id": "tests/integration/test_upload.py#tests.integration.test_upload.test_upload_invalid_document_type",
      "kind": "function",
      "label": "test_upload_invalid_document_type",
      "lang": "python",
      "qualified_name": "tests.integration.test_upload.test_upload_invalid_document_type"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "tests/integration/test_upload.py",
          "start_line": 19
        }
      ],
      "id": "tests/integration/test_upload.py#tests.integration.test_upload.test_upload_pdf_returns_job_id",
      "kind": "function",
      "label": "test_upload_pdf_returns_job_id",
      "lang": "python",
      "qualified_name": "tests.integration.test_upload.test_upload_pdf_returns_job_id"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 15,
          "file": "tests/integration/test_upload.py",
          "start_line": 9
        }
      ],
      "id": "tests/integration/test_upload.py#tests.integration.test_upload.test_upload_requires_auth",
      "kind": "function",
      "label": "test_upload_requires_auth",
      "lang": "python",
      "qualified_name": "tests.integration.test_upload.test_upload_requires_auth"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 0,
          "file": "tests/unit/__init__.py",
          "start_line": 0
        }
      ],
      "id": "tests/unit/__init__.py",
      "kind": "module",
      "label": "__init__.py",
      "lang": "python",
      "qualified_name": "tests/unit/__init__.py"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 1
        }
      ],
      "id": "tests/unit/test_llm_service.py",
      "kind": "module",
      "label": "test_llm_service.py",
      "lang": "python",
      "qualified_name": "tests/unit/test_llm_service.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 81,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 37
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestConfidenceScoring",
      "kind": "class",
      "label": "TestConfidenceScoring",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestConfidenceScoring"
    },
    {
      "attrs": {
        "class": "TestConfidenceScoring",
        "exported": "false"
      },
      "evidence": [
        {
          "end_line": 53,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 40
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestConfidenceScoring._make_service",
      "kind": "method",
      "label": "_make_service",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestConfidenceScoring._make_service"
    },
    {
      "attrs": {
        "class": "TestConfidenceScoring",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 67,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 55
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestConfidenceScoring.test_full_invoice_score_is_high",
      "kind": "method",
      "label": "test_full_invoice_score_is_high",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestConfidenceScoring.test_full_invoice_score_is_high"
    },
    {
      "attrs": {
        "class": "TestConfidenceScoring",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 81,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 69
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestConfidenceScoring.test_missing_required_fields_lowers_score",
      "kind": "method",
      "label": "test_missing_required_fields_lowers_score",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestConfidenceScoring.test_missing_required_fields_lowers_score"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 9
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts",
      "kind": "class",
      "label": "TestPrompts",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts"
    },
    {
      "attrs": {
        "class": "TestPrompts",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 29,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 25
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_enhanced_prompt_adds_suffix",
      "kind": "method",
      "label": "test_enhanced_prompt_adds_suffix",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts.test_enhanced_prompt_adds_suffix"
    },
    {
      "attrs": {
        "class": "TestPrompts",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 23,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 20
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_esg_system_prompt_contains_schema",
      "kind": "method",
      "label": "test_esg_system_prompt_contains_schema",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts.test_esg_system_prompt_contains_schema"
    },
    {
      "attrs": {
        "class": "TestPrompts",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 13,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 10
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_invoice_system_prompt_contains_schema",
      "kind": "method",
      "label": "test_invoice_system_prompt_contains_schema",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts.test_invoice_system_prompt_contains_schema"
    },
    {
      "attrs": {
        "class": "TestPrompts",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 15
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_legal_system_prompt_contains_schema",
      "kind": "method",
      "label": "test_legal_system_prompt_contains_schema",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts.test_legal_system_prompt_contains_schema"
    },
    {
      "attrs": {
        "class": "TestPrompts",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "tests/unit/test_llm_service.py",
          "start_line": 31
        }
      ],
      "id": "tests/unit/test_llm_service.py#tests.unit.test_llm_service.TestPrompts.test_user_prompt_includes_document_type",
      "kind": "method",
      "label": "test_user_prompt_includes_document_type",
      "lang": "python",
      "qualified_name": "tests.unit.test_llm_service.TestPrompts.test_user_prompt_includes_document_type"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/unit/test_schemas.py",
          "start_line": 1
        }
      ],
      "id": "tests/unit/test_schemas.py",
      "kind": "module",
      "label": "test_schemas.py",
      "lang": "python",
      "qualified_name": "tests/unit/test_schemas.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 76,
          "file": "tests/unit/test_schemas.py",
          "start_line": 55
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema",
      "kind": "class",
      "label": "TestESGSchema",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestESGSchema"
    },
    {
      "attrs": {
        "class": "TestESGSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 72,
          "file": "tests/unit/test_schemas.py",
          "start_line": 66
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_score_out_of_range_raises",
      "kind": "method",
      "label": "test_score_out_of_range_raises",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestESGSchema.test_score_out_of_range_raises"
    },
    {
      "attrs": {
        "class": "TestESGSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 76,
          "file": "tests/unit/test_schemas.py",
          "start_line": 74
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_score_zero_is_valid",
      "kind": "method",
      "label": "test_score_zero_is_valid",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestESGSchema.test_score_zero_is_valid"
    },
    {
      "attrs": {
        "class": "TestESGSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 64,
          "file": "tests/unit/test_schemas.py",
          "start_line": 56
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestESGSchema.test_valid_esg",
      "kind": "method",
      "label": "test_valid_esg",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestESGSchema.test_valid_esg"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 37,
          "file": "tests/unit/test_schemas.py",
          "start_line": 7
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema",
      "kind": "class",
      "label": "TestInvoiceSchema",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestInvoiceSchema"
    },
    {
      "attrs": {
        "class": "TestInvoiceSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 28,
          "file": "tests/unit/test_schemas.py",
          "start_line": 22
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_negative_total_raises",
      "kind": "method",
      "label": "test_negative_total_raises",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestInvoiceSchema.test_negative_total_raises"
    },
    {
      "attrs": {
        "class": "TestInvoiceSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 37,
          "file": "tests/unit/test_schemas.py",
          "start_line": 30
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_optional_fields_default_to_none",
      "kind": "method",
      "label": "test_optional_fields_default_to_none",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestInvoiceSchema.test_optional_fields_default_to_none"
    },
    {
      "attrs": {
        "class": "TestInvoiceSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 20,
          "file": "tests/unit/test_schemas.py",
          "start_line": 8
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestInvoiceSchema.test_valid_invoice",
      "kind": "method",
      "label": "test_valid_invoice",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestInvoiceSchema.test_valid_invoice"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 52,
          "file": "tests/unit/test_schemas.py",
          "start_line": 40
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestLegalSchema",
      "kind": "class",
      "label": "TestLegalSchema",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestLegalSchema"
    },
    {
      "attrs": {
        "class": "TestLegalSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 52,
          "file": "tests/unit/test_schemas.py",
          "start_line": 50
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestLegalSchema.test_empty_parties_is_valid",
      "kind": "method",
      "label": "test_empty_parties_is_valid",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestLegalSchema.test_empty_parties_is_valid"
    },
    {
      "attrs": {
        "class": "TestLegalSchema",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 48,
          "file": "tests/unit/test_schemas.py",
          "start_line": 41
        }
      ],
      "id": "tests/unit/test_schemas.py#tests.unit.test_schemas.TestLegalSchema.test_valid_legal",
      "kind": "method",
      "label": "test_valid_legal",
      "lang": "python",
      "qualified_name": "tests.unit.test_schemas.TestLegalSchema.test_valid_legal"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/unit/test_security.py",
          "start_line": 1
        }
      ],
      "id": "tests/unit/test_security.py",
      "kind": "module",
      "label": "test_security.py",
      "lang": "python",
      "qualified_name": "tests/unit/test_security.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "tests/unit/test_security.py",
          "start_line": 21
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestJWT",
      "kind": "class",
      "label": "TestJWT",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestJWT"
    },
    {
      "attrs": {
        "class": "TestJWT",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 25,
          "file": "tests/unit/test_security.py",
          "start_line": 22
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_create_and_decode",
      "kind": "method",
      "label": "test_create_and_decode",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestJWT.test_create_and_decode"
    },
    {
      "attrs": {
        "class": "TestJWT",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 34,
          "file": "tests/unit/test_security.py",
          "start_line": 27
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_expired_token_raises",
      "kind": "method",
      "label": "test_expired_token_raises",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestJWT.test_expired_token_raises"
    },
    {
      "attrs": {
        "class": "TestJWT",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "tests/unit/test_security.py",
          "start_line": 36
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestJWT.test_tampered_token_raises",
      "kind": "method",
      "label": "test_tampered_token_raises",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestJWT.test_tampered_token_raises"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_security.py",
          "start_line": 9
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing",
      "kind": "class",
      "label": "TestPasswordHashing",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestPasswordHashing"
    },
    {
      "attrs": {
        "class": "TestPasswordHashing",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 14,
          "file": "tests/unit/test_security.py",
          "start_line": 10
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_hash_and_verify",
      "kind": "method",
      "label": "test_hash_and_verify",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestPasswordHashing.test_hash_and_verify"
    },
    {
      "attrs": {
        "class": "TestPasswordHashing",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_security.py",
          "start_line": 16
        }
      ],
      "id": "tests/unit/test_security.py#tests.unit.test_security.TestPasswordHashing.test_wrong_password_fails",
      "kind": "method",
      "label": "test_wrong_password_fails",
      "lang": "python",
      "qualified_name": "tests.unit.test_security.TestPasswordHashing.test_wrong_password_fails"
    },
    {
      "attrs": {},
      "evidence": [
        {
          "end_line": 1,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 1
        }
      ],
      "id": "tests/unit/test_text_processing.py",
      "kind": "module",
      "label": "test_text_processing.py",
      "lang": "python",
      "qualified_name": "tests/unit/test_text_processing.py"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 57,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 36
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText",
      "kind": "class",
      "label": "TestChunkText",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestChunkText"
    },
    {
      "attrs": {
        "class": "TestChunkText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 46,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 43
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_long_text_splits_into_multiple_chunks",
      "kind": "method",
      "label": "test_long_text_splits_into_multiple_chunks",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestChunkText.test_long_text_splits_into_multiple_chunks"
    },
    {
      "attrs": {
        "class": "TestChunkText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 51,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 48
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_no_empty_chunks",
      "kind": "method",
      "label": "test_no_empty_chunks",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestChunkText.test_no_empty_chunks"
    },
    {
      "attrs": {
        "class": "TestChunkText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 57,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 53
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_overlap_content_repeated",
      "kind": "method",
      "label": "test_overlap_content_repeated",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestChunkText.test_overlap_content_repeated"
    },
    {
      "attrs": {
        "class": "TestChunkText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 41,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 37
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestChunkText.test_short_text_returns_single_chunk",
      "kind": "method",
      "label": "test_short_text_returns_single_chunk",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestChunkText.test_short_text_returns_single_chunk"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 33,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 6
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText",
      "kind": "class",
      "label": "TestCleanText",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText"
    },
    {
      "attrs": {
        "class": "TestCleanText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 27,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 26
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_empty_string",
      "kind": "method",
      "label": "test_empty_string",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText.test_empty_string"
    },
    {
      "attrs": {
        "class": "TestCleanText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 24,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 20
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_normalises_unicode",
      "kind": "method",
      "label": "test_normalises_unicode",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText.test_normalises_unicode"
    },
    {
      "attrs": {
        "class": "TestCleanText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 12,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 7
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_removes_excess_blank_lines",
      "kind": "method",
      "label": "test_removes_excess_blank_lines",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText.test_removes_excess_blank_lines"
    },
    {
      "attrs": {
        "class": "TestCleanText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 33,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 29
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_strips_form_feed",
      "kind": "method",
      "label": "test_strips_form_feed",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText.test_strips_form_feed"
    },
    {
      "attrs": {
        "class": "TestCleanText",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 14
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestCleanText.test_strips_noise_lines",
      "kind": "method",
      "label": "test_strips_noise_lines",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestCleanText.test_strips_noise_lines"
    },
    {
      "attrs": {
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 78,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 60
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename",
      "kind": "class",
      "label": "TestSanitizeFilename",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestSanitizeFilename"
    },
    {
      "attrs": {
        "class": "TestSanitizeFilename",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 78,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 76
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_fallback_for_empty",
      "kind": "method",
      "label": "test_fallback_for_empty",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestSanitizeFilename.test_fallback_for_empty"
    },
    {
      "attrs": {
        "class": "TestSanitizeFilename",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 69,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 66
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_replaces_special_chars",
      "kind": "method",
      "label": "test_replaces_special_chars",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestSanitizeFilename.test_replaces_special_chars"
    },
    {
      "attrs": {
        "class": "TestSanitizeFilename",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 74,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 71
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_respects_max_length",
      "kind": "method",
      "label": "test_respects_max_length",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestSanitizeFilename.test_respects_max_length"
    },
    {
      "attrs": {
        "class": "TestSanitizeFilename",
        "exported": "true"
      },
      "evidence": [
        {
          "end_line": 64,
          "file": "tests/unit/test_text_processing.py",
          "start_line": 61
        }
      ],
      "id": "tests/unit/test_text_processing.py#tests.unit.test_text_processing.TestSanitizeFilename.test_strips_path_components",
      "kind": "method",
      "label": "test_strips_path_components",
      "lang": "python",
      "qualified_name": "tests.unit.test_text_processing.TestSanitizeFilename.test_strips_path_components"
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.health.health_check",
        "method": "GET",
        "path": ""
      },
      "evidence": [
        {
          "end_line": 19,
          "file": "app/api/routes/health.py",
          "start_line": 15
        }
      ],
      "id": "app/api/routes/health.py#app.api.routes.health.health_check#route:GET ",
      "kind": "endpoint",
      "label": "GET ",
      "lang": null,
      "qualified_name": "app/api/routes/health.py#app.api.routes.health.health_check#route:GET "
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.documents.list_jobs",
        "method": "GET",
        "path": "/jobs"
      },
      "evidence": [
        {
          "end_line": 102,
          "file": "app/api/routes/documents.py",
          "start_line": 98
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.list_jobs#route:GET /jobs",
      "kind": "endpoint",
      "label": "GET /jobs",
      "lang": null,
      "qualified_name": "app/api/routes/documents.py#app.api.routes.documents.list_jobs#route:GET /jobs"
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.documents.get_result",
        "method": "GET",
        "path": "/result/{job_id}"
      },
      "evidence": [
        {
          "end_line": 82,
          "file": "app/api/routes/documents.py",
          "start_line": 78
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.get_result#route:GET /result/{job_id}",
      "kind": "endpoint",
      "label": "GET /result/{job_id}",
      "lang": null,
      "qualified_name": "app/api/routes/documents.py#app.api.routes.documents.get_result#route:GET /result/{job_id}"
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.auth.register",
        "method": "POST",
        "path": "/register"
      },
      "evidence": [
        {
          "end_line": 22,
          "file": "app/api/routes/auth.py",
          "start_line": 17
        }
      ],
      "id": "app/api/routes/auth.py#app.api.routes.auth.register#route:POST /register",
      "kind": "endpoint",
      "label": "POST /register",
      "lang": null,
      "qualified_name": "app/api/routes/auth.py#app.api.routes.auth.register#route:POST /register"
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.auth.login",
        "method": "POST",
        "path": "/token"
      },
      "evidence": [
        {
          "end_line": 44,
          "file": "app/api/routes/auth.py",
          "start_line": 40
        }
      ],
      "id": "app/api/routes/auth.py#app.api.routes.auth.login#route:POST /token",
      "kind": "endpoint",
      "label": "POST /token",
      "lang": null,
      "qualified_name": "app/api/routes/auth.py#app.api.routes.auth.login#route:POST /token"
    },
    {
      "attrs": {
        "framework": "fastapi",
        "handler": "app.api.routes.documents.upload_document",
        "method": "POST",
        "path": "/upload"
      },
      "evidence": [
        {
          "end_line": 24,
          "file": "app/api/routes/documents.py",
          "start_line": 19
        }
      ],
      "id": "app/api/routes/documents.py#app.api.routes.documents.upload_document#route:POST /upload",
      "kind": "endpoint",
      "label": "POST /upload",
      "lang": null,
      "qualified_name": "app/api/routes/documents.py#app.api.routes.documents.upload_document#route:POST /upload"
    },
    {
      "attrs": {
        "category": "cloud",
        "packages": "boto3, botocore"
      },
      "evidence": [
        {
          "end_line": 5,
          "file": "app/core/storage.py",
          "start_line": 5
        },
        {
          "end_line": 6,
          "file": "app/core/storage.py",
          "start_line": 6
        },
        {
          "end_line": 13,
          "file": "app/utils/model_sync.py",
          "start_line": 13
        },
        {
          "end_line": 14,
          "file": "app/utils/model_sync.py",
          "start_line": 14
        }
      ],
      "id": "ext:cloud:AWS SDK",
      "kind": "resource",
      "label": "AWS SDK",
      "lang": null,
      "qualified_name": "ext:cloud:AWS SDK"
    },
    {
      "attrs": {
        "category": "cloud",
        "packages": "openai"
      },
      "evidence": [
        {
          "end_line": 4,
          "file": "app/services/llm_service.py",
          "start_line": 4
        }
      ],
      "id": "ext:cloud:OpenAI API",
      "kind": "resource",
      "label": "OpenAI API",
      "lang": null,
      "qualified_name": "ext:cloud:OpenAI API"
    },
    {
      "attrs": {
        "category": "database",
        "packages": "redis"
      },
      "evidence": [
        {
          "end_line": 3,
          "file": "app/core/redis_client.py",
          "start_line": 3
        }
      ],
      "id": "ext:database:Redis",
      "kind": "datastore",
      "label": "Redis",
      "lang": null,
      "qualified_name": "ext:database:Redis"
    },
    {
      "attrs": {
        "category": "database",
        "packages": "sqlalchemy"
      },
      "evidence": [
        {
          "end_line": 4,
          "file": "alembic/env.py",
          "start_line": 4
        },
        {
          "end_line": 10,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 10
        },
        {
          "end_line": 4,
          "file": "app/api/deps.py",
          "start_line": 4
        },
        {
          "end_line": 5,
          "file": "app/api/routes/auth.py",
          "start_line": 5
        },
        {
          "end_line": 5,
          "file": "app/api/routes/health.py",
          "start_line": 5
        },
        {
          "end_line": 3,
          "file": "app/core/database.py",
          "start_line": 3
        },
        {
          "end_line": 8,
          "file": "app/core/security.py",
          "start_line": 8
        },
        {
          "end_line": 4,
          "file": "app/models/job.py",
          "start_line": 4
        },
        {
          "end_line": 4,
          "file": "app/models/user.py",
          "start_line": 4
        },
        {
          "end_line": 5,
          "file": "app/services/job_service.py",
          "start_line": 5
        },
        {
          "end_line": 4,
          "file": "app/workers/sync_db.py",
          "start_line": 4
        },
        {
          "end_line": 7,
          "file": "app/workers/tasks.py",
          "start_line": 7
        }
      ],
      "id": "ext:database:SQL database",
      "kind": "datastore",
      "label": "SQL database",
      "lang": null,
      "qualified_name": "ext:database:SQL database"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Create users and jobs tables"
      },
      "evidence": [
        {
          "end_line": 6,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 1
        }
      ],
      "id": "alembic/versions/001_create_users_and_jobs.py#rationale:1:docstring",
      "kind": "rationale",
      "label": "Create users and jobs tables",
      "lang": null,
      "qualified_name": "alembic/versions/001_create_users_and_jobs.py:1"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Extracts structured data from text using either OpenAI or Ollama (OpenAI-compatible)."
      },
      "evidence": [
        {
          "end_line": 32,
          "file": "app/services/llm_service.py",
          "start_line": 32
        }
      ],
      "id": "app/services/llm_service.py#rationale:32:docstring",
      "kind": "rationale",
      "label": "Extracts structured data from text using either OpenAI or O…",
      "lang": null,
      "qualified_name": "app/services/llm_service.py:32"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "MinerU-based document text extraction service."
      },
      "evidence": [
        {
          "end_line": 15,
          "file": "app/services/mineru_service.py",
          "start_line": 1
        }
      ],
      "id": "app/services/mineru_service.py#rationale:1:docstring",
      "kind": "rationale",
      "label": "MinerU-based document text extraction service.",
      "lang": null,
      "qualified_name": "app/services/mineru_service.py:1"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Extracts text from PDF and image documents using MinerU (vlm-auto-engine)."
      },
      "evidence": [
        {
          "end_line": 134,
          "file": "app/services/mineru_service.py",
          "start_line": 126
        }
      ],
      "id": "app/services/mineru_service.py#rationale:126:docstring",
      "kind": "rationale",
      "label": "Extracts text from PDF and image documents using MinerU (vl…",
      "lang": null,
      "qualified_name": "app/services/mineru_service.py:126"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Extracts text from PDF and image files using Tesseract OCR."
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/services/ocr_service.py",
          "start_line": 18
        }
      ],
      "id": "app/services/ocr_service.py#rationale:18:docstring",
      "kind": "rationale",
      "label": "Extracts text from PDF and image files using Tesseract OCR.",
      "lang": null,
      "qualified_name": "app/services/ocr_service.py:18"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Base exception for document extraction errors."
      },
      "evidence": [
        {
          "end_line": 2,
          "file": "app/utils/exceptions.py",
          "start_line": 2
        }
      ],
      "id": "app/utils/exceptions.py#rationale:2:docstring",
      "kind": "rationale",
      "label": "Base exception for document extraction errors.",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:2"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Raised when OCR processing fails."
      },
      "evidence": [
        {
          "end_line": 6,
          "file": "app/utils/exceptions.py",
          "start_line": 6
        }
      ],
      "id": "app/utils/exceptions.py#rationale:6:docstring",
      "kind": "rationale",
      "label": "Raised when OCR processing fails.",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:6"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Raised when LLM extraction fails after all retries."
      },
      "evidence": [
        {
          "end_line": 10,
          "file": "app/utils/exceptions.py",
          "start_line": 10
        }
      ],
      "id": "app/utils/exceptions.py#rationale:10:docstring",
      "kind": "rationale",
      "label": "Raised when LLM extraction fails after all retries.",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:10"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Raised when extracted data does not match the expected schema."
      },
      "evidence": [
        {
          "end_line": 14,
          "file": "app/utils/exceptions.py",
          "start_line": 14
        }
      ],
      "id": "app/utils/exceptions.py#rationale:14:docstring",
      "kind": "rationale",
      "label": "Raised when extracted data does not match the expected sche…",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:14"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Raised when file storage operations fail."
      },
      "evidence": [
        {
          "end_line": 18,
          "file": "app/utils/exceptions.py",
          "start_line": 18
        }
      ],
      "id": "app/utils/exceptions.py#rationale:18:docstring",
      "kind": "rationale",
      "label": "Raised when file storage operations fail.",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:18"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "Raised when a job cannot be found or does not belong to the requesting user."
      },
      "evidence": [
        {
          "end_line": 22,
          "file": "app/utils/exceptions.py",
          "start_line": 22
        }
      ],
      "id": "app/utils/exceptions.py#rationale:22:docstring",
      "kind": "rationale",
      "label": "Raised when a job cannot be found or does not belong to the…",
      "lang": null,
      "qualified_name": "app/utils/exceptions.py:22"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "MinIO-backed model sync utilities for MinerU model weights."
      },
      "evidence": [
        {
          "end_line": 8,
          "file": "app/utils/model_sync.py",
          "start_line": 1
        }
      ],
      "id": "app/utils/model_sync.py#rationale:1:docstring",
      "kind": "rationale",
      "label": "MinIO-backed model sync utilities for MinerU model weights.",
      "lang": null,
      "qualified_name": "app/utils/model_sync.py:1"
    },
    {
      "attrs": {
        "kind": "docstring",
        "text": "One-time bootstrap: download MinerU model weights from HuggingFace and push to MinIO."
      },
      "evidence": [
        {
          "end_line": 21,
          "file": "scripts/init_mineru_models.py",
          "start_line": 2
        }
      ],
      "id": "scripts/init_mineru_models.py#rationale:2:docstring",
      "kind": "rationale",
      "label": "One-time bootstrap: download MinerU model weights from Hugg…",
      "lang": null,
      "qualified_name": "scripts/init_mineru_models.py:2"
    },
    {
      "attrs": {
        "files": "1",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/env.py",
          "start_line": 1
        }
      ],
      "id": "alembic",
      "kind": "module",
      "label": "alembic",
      "lang": null,
      "qualified_name": "alembic"
    },
    {
      "attrs": {
        "files": "1",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "alembic/versions/001_create_users_and_jobs.py",
          "start_line": 1
        }
      ],
      "id": "alembic/versions",
      "kind": "module",
      "label": "versions",
      "lang": null,
      "qualified_name": "alembic/versions"
    },
    {
      "attrs": {
        "files": "2",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/__init__.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/main.py",
          "start_line": 1
        }
      ],
      "id": "app",
      "kind": "module",
      "label": "app",
      "lang": null,
      "qualified_name": "app"
    },
    {
      "attrs": {
        "files": "2",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/deps.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/api/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/api",
      "kind": "module",
      "label": "api",
      "lang": null,
      "qualified_name": "app/api"
    },
    {
      "attrs": {
        "files": "4",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/api/routes/auth.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/api/routes/documents.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/api/routes/health.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/api/routes/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/api/routes",
      "kind": "module",
      "label": "routes",
      "lang": null,
      "qualified_name": "app/api/routes"
    },
    {
      "attrs": {
        "files": "8",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/core/celery_app.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/core/config.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/core/database.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/core/logging.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/core/redis_client.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/core/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/core",
      "kind": "module",
      "label": "core",
      "lang": null,
      "qualified_name": "app/core"
    },
    {
      "attrs": {
        "files": "3",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/models/__init__.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/models/job.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/models/user.py",
          "start_line": 1
        }
      ],
      "id": "app/models",
      "kind": "module",
      "label": "models",
      "lang": null,
      "qualified_name": "app/models"
    },
    {
      "attrs": {
        "files": "4",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/schemas/__init__.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/schemas/auth.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/schemas/documents.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/schemas/job.py",
          "start_line": 1
        }
      ],
      "id": "app/schemas",
      "kind": "module",
      "label": "schemas",
      "lang": null,
      "qualified_name": "app/schemas"
    },
    {
      "attrs": {
        "files": "5",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/services/job_service.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/services/llm_service.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/services/mineru_service.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/services/ocr_service.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/services/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/services",
      "kind": "module",
      "label": "services",
      "lang": null,
      "qualified_name": "app/services"
    },
    {
      "attrs": {
        "files": "6",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/utils/exceptions.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/utils/model_sync.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/utils/prompts.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/utils/text_processing.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/utils/validators.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/utils/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/utils",
      "kind": "module",
      "label": "utils",
      "lang": null,
      "qualified_name": "app/utils"
    },
    {
      "attrs": {
        "files": "3",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "app/workers/sync_db.py",
          "start_line": 1
        },
        {
          "end_line": 1,
          "file": "app/workers/tasks.py",
          "start_line": 1
        },
        {
          "end_line": 0,
          "file": "app/workers/__init__.py",
          "start_line": 0
        }
      ],
      "id": "app/workers",
      "kind": "module",
      "label": "workers",
      "lang": null,
      "qualified_name": "app/workers"
    },
    {
      "attrs": {
        "files": "1",
        "structural": "directory"
      },
      "evidence": [
        {
          "end_line": 1,
          "file": "scripts/init_mineru_models.py",
          "start_line": 1
        }
      ],
      "id": "scripts",
      "kind": "module",
      "label": "scripts",
      "lang": null,
      "qualified_name": "scripts"
    }
  ],
  "schema": 2,
  "scorecard": {
    "measures": "the share of intra-repository references pinned to a target, not whether the target is correct; a wrong edge counts as resolved",
    "rows": [
      {
        "candidate": 0,
        "external": 287,
        "kind": "calls",
        "lang": "python",
        "pinned_pct": 34.0,
        "resolved": 136,
        "unresolved": 264
      },
      {
        "candidate": 0,
        "external": 157,
        "kind": "imports",
        "lang": "python",
        "pinned_pct": 77.36,
        "resolved": 82,
        "unresolved": 24
      },
      {
        "candidate": 0,
        "external": 16,
        "kind": "inherits",
        "lang": "python",
        "pinned_pct": 88.89,
        "resolved": 8,
        "unresolved": 1
      },
      {
        "candidate": 0,
        "external": 167,
        "kind": "references",
        "lang": "python",
        "pinned_pct": 69.4,
        "resolved": 93,
        "unresolved": 41
      }
    ],
    "unresolved_samples": {
      "python/calls": [
        "member:select(User).where",
        "qualified:config.get_main_option",
        "qualified:config.set_main_option",
        "qualified:connectable.connect",
        "qualified:connectable.dispose",
        "qualified:connection.run_sync",
        "qualified:db.add",
        "qualified:db.execute",
        "qualified:db.flush",
        "qualified:result.scalar_one_or_none"
      ],
      "python/imports": [
        "PIL",
        "botocore.config",
        "botocore.exceptions",
        "jose",
        "pdf2image",
        "pytesseract",
        "starlette.middleware.base",
        "starlette.requests",
        "starlette.responses",
        "starlette.types"
      ],
      "python/inherits": [
        "BaseHTTPMiddleware"
      ],
      "python/references": [
        "app.api.deps.CurrentUser",
        "app.api.deps.DBSession",
        "app.api.deps.Pagination",
        "app.core.config.settings",
        "app.core.database.AsyncSessionLocal",
        "app.core.storage.storage_client",
        "starlette.middleware.base",
        "starlette.requests",
        "starlette.responses",
        "starlette.types"
      ]
    }
  },
  "worktree_dirty": false
}
