Changes committed
This commit is contained in:
134
docengine/app/schemas/document.py
Normal file
134
docengine/app/schemas/document.py
Normal file
@@ -0,0 +1,134 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from app.schemas.common import BaseSchema
|
||||
|
||||
|
||||
class DocumentUploadResponse(BaseSchema):
|
||||
"""Response after document upload."""
|
||||
|
||||
id: uuid.UUID
|
||||
filename: str
|
||||
original_filename: str
|
||||
content_type: str
|
||||
file_size: int
|
||||
checksum: str
|
||||
status: str
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class TextBlockResponse(BaseSchema):
|
||||
"""Extracted text block."""
|
||||
|
||||
id: uuid.UUID
|
||||
text: str
|
||||
x: float
|
||||
y: float
|
||||
width: float
|
||||
height: float
|
||||
confidence: float | None
|
||||
font_family: str | None
|
||||
font_size: float | None
|
||||
font_color: str | None
|
||||
font_style: str | None
|
||||
block_type: str
|
||||
sequence: int
|
||||
|
||||
|
||||
class DocumentImageResponse(BaseSchema):
|
||||
"""Extracted document image."""
|
||||
|
||||
id: uuid.UUID
|
||||
x: float
|
||||
y: float
|
||||
width: float
|
||||
height: float
|
||||
image_path: str
|
||||
image_type: str
|
||||
|
||||
|
||||
class DocumentTableResponse(BaseSchema):
|
||||
"""Extracted document table."""
|
||||
|
||||
id: uuid.UUID
|
||||
x: float
|
||||
y: float
|
||||
width: float
|
||||
height: float
|
||||
rows: int
|
||||
columns: int
|
||||
data: dict[str, Any] | None
|
||||
|
||||
|
||||
class DocumentPageResponse(BaseSchema):
|
||||
"""Document page with extracted content."""
|
||||
|
||||
id: uuid.UUID
|
||||
page_number: int
|
||||
width: float
|
||||
height: float
|
||||
image_path: str | None
|
||||
text_content: str | None
|
||||
text_blocks: list[TextBlockResponse] = Field(default_factory=list)
|
||||
images: list[DocumentImageResponse] = Field(default_factory=list)
|
||||
tables: list[DocumentTableResponse] = Field(default_factory=list)
|
||||
|
||||
|
||||
class DocumentResponse(BaseSchema):
|
||||
"""Full document response."""
|
||||
|
||||
id: uuid.UUID
|
||||
filename: str
|
||||
original_filename: str
|
||||
content_type: str
|
||||
file_size: int
|
||||
checksum: str
|
||||
storage_path: str
|
||||
status: str
|
||||
page_count: int | None
|
||||
is_scanned: bool | None
|
||||
document_metadata: dict[str, Any] | None
|
||||
error_message: str | None
|
||||
uploaded_by: uuid.UUID | None
|
||||
pages: list[DocumentPageResponse] = Field(default_factory=list)
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class DocumentListResponse(BaseSchema):
|
||||
"""Minimal document response for lists."""
|
||||
|
||||
id: uuid.UUID
|
||||
original_filename: str
|
||||
content_type: str
|
||||
file_size: int
|
||||
status: str
|
||||
page_count: int | None
|
||||
is_scanned: bool | None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class TemplateMatchResponse(BaseSchema):
|
||||
"""Template match result."""
|
||||
|
||||
id: uuid.UUID
|
||||
document_id: uuid.UUID
|
||||
format_id: uuid.UUID
|
||||
confidence_score: float
|
||||
match_details: dict[str, Any] | None
|
||||
selected: bool
|
||||
template_name: str | None = None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class TemplateMatchRequest(BaseSchema):
|
||||
"""Request to match a document against templates."""
|
||||
|
||||
document_id: uuid.UUID
|
||||
min_confidence: float = Field(default=0.5, ge=0.0, le=1.0)
|
||||
max_results: int = Field(default=5, ge=1, le=20)
|
||||
Reference in New Issue
Block a user