Files
query-orchestration/docs/ai.generated/service.details.md
T
Jay Brown da6de0080b Merged in feature/update-docs (pull request #180)
Update complete pdf code for entire system

* docs

and code for generation of updated docs
2025-09-09 19:34:03 +00:00

13 KiB

Service Processing Details

This document provides detailed information about what each service in the document processing pipeline actually does.

Document Processing Pipeline Services

1. storeEventRunner

Purpose: Entry point for document processing, triggered by S3 upload events

Code Locations:

  • cmd/storeEventRunner/ - Service entry point and main.go
  • api/storeEventRunner/ - Runner implementation and message handling
  • internal/document/store/ - Core document storage logic
  • internal/serviceconfig/queue/documentinit/ - Queue configuration for next stage

Processing Logic:

  • Receives S3 event notifications (ObjectCreated:Put, ObjectCreated:CompleteMultipartUpload)
  • Validates that the event type is supported
  • Parses the S3 object key to extract structured information (client ID, location, timestamps)
  • Filters for objects in the "import" location only
  • Extracts document metadata (bucket, key, hash/ETag)
  • Sends message to DOCINIT queue with document location information

Key Validations:

  • Only processes supported S3 events (Put and CompleteMultipartUpload)
  • Only processes objects with "import" location in their key path
  • Validates key can be parsed into expected structure

Output: Sends to DOCINIT queue with {bucket, key, hash}


2. docInitRunner

Purpose: Document registration and deduplication

Code Locations:

  • cmd/docInitRunner/ - Service entry point and main.go
  • api/docInitRunner/ - Runner implementation and message handling
  • internal/document/init/ - Core document initialization logic
  • internal/serviceconfig/queue/documentsync/ - Queue configuration for next stage

Processing Logic:

  • Parses the S3 key to extract client ID, batch ID, and other metadata
  • Checks if document already exists by looking up hash in database for the client
  • If document exists (duplicate):
    • Adds new document entry to existing document record
    • Does NOT trigger downstream processing (deduplication)
  • If new document:
    • Creates new document record in database with client ID and hash
    • Associates batch ID if present
    • Adds document entry with S3 location details
    • Sends message to DOCSYNC queue to continue processing

Key Features:

  • Hash-based deduplication per client
  • Maintains multiple entries for same document (different uploads)
  • Transaction-based database operations for consistency

Output: Sends to DOCSYNC queue with {document_id} (only for new documents)


3. docSyncRunner

Purpose: Client synchronization validation

Code Locations:

  • cmd/docSyncRunner/ - Service entry point and main.go
  • api/docSyncRunner/ - Runner implementation and message handling
  • internal/document/sync/ - Core document synchronization logic
  • internal/client/ - Client management utilities
  • internal/document/ - Shared document utilities
  • internal/serviceconfig/queue/documentclean/ - Queue configuration for next stage

Processing Logic:

  • Retrieves document summary from database
  • Fetches client configuration
  • Checks if client has "CanSync" flag enabled
  • If CanSync is true:
    • Sends document to DOCCLEAN queue for processing
  • If CanSync is false:
    • Logs that document won't be synced
    • Processing stops here for this document

Key Validations:

  • Client must exist in database
  • Client must have CanSync=true to proceed

Output: Sends to DOCCLEAN queue with {document_id} (only if client can sync)


4. docCleanRunner

Purpose: Document validation and preparation

Code Locations:

  • cmd/docCleanRunner/ - Service entry point and main.go
  • api/docCleanRunner/ - Runner implementation and message handling
  • internal/document/clean/ - Core document cleaning and validation logic
  • internal/document/types/ - Document type definitions and MIME type handling
  • internal/serviceconfig/queue/documenttext/ - Queue configuration for next stage

Processing Logic:

  • Checks if document has already been cleaned (idempotency)
  • If not cleaned:
    • Retrieves document entry from database
    • Makes HEAD request to S3 to get content metadata
    • Validates content type/MIME type is acceptable (PDF)
    • Downloads document from S3
    • Validates document integrity (not corrupt)
    • Stores clean record with:
      • Success: bucket, key, hash, mimetype
      • Failure: reason for failure (invalid MIME, corrupt file)
  • Creates versioned clean entry for tracking
  • Sends to DOCTEXT queue regardless of success/failure

Key Validations:

  • MIME type validation (must be acceptable format)
  • Document corruption check
  • Hash verification against S3 ETag

Output: Sends to DOCTEXT queue with {document_id}


5. docTextRunner

Purpose: Text extraction from documents using AWS Textract

Code Locations:

  • cmd/docTextRunner/ - Service entry point and main.go
  • api/docTextRunner/ - Runner implementation and message handling
  • internal/document/text/ - Core text extraction logic using AWS Textract
  • internal/document/types/ - Document type utilities for text processing
  • internal/serviceconfig/textract/ - AWS Textract client configuration
  • internal/serviceconfig/queue/querysync/ - Queue configuration for next stage

Tests for this use mocks only. No tests to the actual aws textract service.

Processing Logic:

  • Checks if text has already been extracted (idempotency)
  • If not extracted:
    • Retrieves clean document record
    • Skips if document failed cleaning
    • Downloads document from S3
    • Determines page count
    • For each page (in parallel using thread pool):
      • Sends page to AWS Textract for OCR
      • Processes base text blocks
      • Identifies required features (tables, forms)
      • Performs additional extraction if needed
      • Merges text with page markers
    • Stores extracted text in S3
    • Records text extraction in database with versioning
  • Sends to QUERYSYNC queue for query processing

Key Features:

  • Parallel page processing for performance
  • Supports tables and forms extraction
  • Stores full text with page boundaries preserved
  • Version tracking for text extractions

Output: Sends to QUERYSYNC queue with {document_id}


6. querySyncRunner

Purpose: Query dependency resolution and scheduling

Code Locations:

  • cmd/querySyncRunner/ - Service entry point and main.go
  • api/querySyncRunner/ - Runner implementation and message handling
  • internal/query/sync/ - Core query synchronization logic
  • internal/query/result/sync/ - Result synchronization utilities
  • internal/serviceconfig/queue/query/ - Queue configuration for next stage

Processing Logic:

  • Verifies document has extracted text
  • Queries database for unsynced queries that:
    • Are configured for this client (via collector)
    • Have no dependencies OR
    • Have all dependencies already satisfied
  • For each eligible query:
    • Sends message to QUERY queue for execution

Key Features:

  • Dependency graph resolution
  • Only schedules queries with satisfied dependencies
  • Client-specific query configuration via collectors

Output: Sends to QUERY queue with {document_id, query_id} for each eligible query


7. queryRunner

Purpose: Query execution and result storage

Code Locations:

  • cmd/queryRunner/ - Service entry point and main.go
  • api/queryRunner/ - Runner implementation and message handling
  • internal/query/result/set/ - Core query result processing
  • internal/query/result/ - Query execution logic and processors
  • internal/query/result/processor/ - Base processor interface and utilities
  • internal/query/types/contextFull/ - CONTEXT_FULL query type implementation
  • internal/query/types/jsonExtractor/ - JSON_EXTRACTOR query type implementation
  • internal/query/ - Query management utilities
  • internal/query/result/sync/ - Result synchronization for triggering dependents

Processing Logic:

  • Retrieves document text version information
  • Fetches query definition and active version
  • If query has dependencies:
    • Retrieves results from required queries
    • Validates all dependencies are satisfied
  • Executes query based on type:
    • CONTEXT_FULL: Returns complete document text
    • JSON_EXTRACTOR: Extracts specific JSON paths from dependent results
  • Stores result in database with:
    • Query result value
    • Query version used
    • Text version processed
    • Dependencies tracked
  • Identifies queries that depend on this result
  • Sends dependent queries to QUERY queue (recursive processing)

Key Features:

  • Supports multiple query types with different processors
  • Dependency tracking and validation
  • Recursive processing for dependent queries
  • Version tracking for reproducibility

Output: Sends to QUERY queue with {document_id, query_id} for each dependent query


Additional Synchronization Services

8. clientSyncRunner

Purpose: Client-level document synchronization

Code Locations:

  • cmd/clientSyncRunner/ - Service entry point and main.go
  • api/clientSyncRunner/ - Runner implementation and message handling
  • internal/client/sync/ - Core client synchronization logic
  • internal/serviceconfig/queue/documentsync/ - Queue configuration for document sync

Processing Logic:

  • Processes CLIENTSYNC queue messages
  • Retrieves all documents for a specific client
  • Sends each document to DOCSYNC queue for processing
  • Enables bulk reprocessing of client documents

Output: Sends to DOCSYNC queue with {document_id} for each client document


9. queryVersionSyncRunner

Purpose: Query version change propagation

Code Locations:

  • cmd/queryVersionSyncRunner/ - Service entry point and main.go
  • api/queryVersionSyncRunner/ - Runner implementation and message handling
  • internal/query/versionsync/ - Core query version synchronization logic
  • internal/serviceconfig/queue/clientsync/ - Queue configuration for client sync

Processing Logic:

  • Processes QUERYVERSIONSYNC queue messages triggered by query updates
  • Identifies all clients affected by query version changes
  • Sends affected clients to CLIENTSYNC queue for reprocessing
  • Enables cascading updates when query logic changes

Output: Sends to CLIENTSYNC queue with {client_id} for each affected client


Data Flow Summary

Primary Document Processing Pipeline

S3 Upload Event
    ↓
storeEventRunner (validates event, extracts metadata)
    ↓
docInitRunner (deduplication, document registration)
    ↓
docSyncRunner (client sync validation)
    ↓
docCleanRunner (document validation, MIME check)
    ↓
docTextRunner (OCR via AWS Textract)
    ↓
querySyncRunner (find executable queries)
    ↓
queryRunner (execute queries, trigger dependents)
    ↓
queryRunner (recursive for dependent queries)

Synchronization Flows

Query Version Update
    ↓
queryVersionSyncRunner (find affected clients)
    ↓
clientSyncRunner (reprocess all client documents)
    ↓
docSyncRunner → ... (normal processing pipeline)

Key Design Patterns

Idempotency

  • Each service checks if its work has already been done
  • Prevents duplicate processing on retries
  • Version tracking ensures consistency

Dependency Management

  • Queries can depend on other query results
  • Dependency graph is resolved before execution
  • Results are chained through recursive processing

Version Tracking

  • Document clean versions
  • Text extraction versions
  • Query versions
  • Enables reprocessing when configurations change

Error Handling

  • Failed documents are marked but continue through pipeline
  • Allows partial processing and debugging
  • Failure reasons are stored for analysis

Client Isolation

  • All processing is scoped to client ID
  • Deduplication is per-client
  • Query configurations are per-client via collectors

Shared Code Directories

These directories contain utilities and configurations used across multiple services:

Core Infrastructure

  • internal/database/ - Database queries, migrations, and repository patterns
  • internal/serviceconfig/ - Configuration management for all services
  • internal/serviceconfig/queue/ - SQS queue client configurations
  • internal/serviceconfig/objectstore/ - S3 client configurations
  • internal/serviceconfig/aws/ - AWS service configurations
  • internal/server/runner/ - Base runner framework for queue-based services

Business Logic Libraries

  • internal/document/ - General document utilities (shared across document services)
  • internal/client/ - Client management utilities
  • internal/query/ - Query management and utilities (shared across query services)

Testing & Utilities

  • internal/test/ - Test utilities and helpers
  • internal/validation/ - Input validation utilities
  • mocks/ - Auto-generated mock interfaces for testing

API Layer

  • api/queryAPI/ - REST API handlers and controllers (not a queue-based runner)
  • pkg/queryAPI/ - Generated API client libraries