ProjectHub - Tender Parsing Module¶
The Tender Parsing module, part of the ProjectHub ecosystem, specializes in parsing and processing tender documents. It provides comprehensive functionality to extract, analyze, and structure information from various tender document formats, enabling enhanced analysis and processing of bid opportunities.
Overview¶
This module primarily processes tender documentation published with opportunities by buyers, but the backend is architected to handle any documents users deem relevant to the opportunity—ranging from planning notes to client research.
Best Practice: We encourage users to upload as much contextual information as possible, as this significantly improves platform performance, output quality, and overall user experience.
Supported Document Types¶
- Primary: Official tender documentation from buyers
- Secondary: Planning notes, client research, market analysis
- Supporting: Any contextual documents relevant to the opportunity
Documentation Structure¶
This module includes comprehensive documentation covering all aspects of tender document processing:
- Document Processing Pipeline: Complete overview of how tender documents are processed from ingestion to storage
- Chunking and Embedding Strategy: Detailed technical guide on text chunking and vector embedding processes
- Data Persistence: Information about Redis caching and MongoDB storage strategies
- Overview: High-level module introduction and technology stack
Key Components¶
Tender Pack Parsing Module¶
The main module that registers all tender parsing components:
@Module({
imports: [
// Dependencies
],
controllers: [TenderParsingController],
providers: [TenderPackProcessorService, TenderPackDbService],
exports: [TenderPackProcessorService, TenderPackDbService],
})
export class TenderPackParsingModule {}
Tender Pack Processor Service¶
The TenderPackProcessorService handles core tender document processing:
- Document chunking and sectioning
- Metadata extraction
- Key information identification
- Requirements extraction
Tender Pack DB Service¶
The TenderPackDbService manages database operations for tender data:
- Storing parsed tender data
- Retrieving tender information
- Updating tender processing status
Tender Parsing Controller¶
The TenderParsingController exposes REST endpoints for tender parsing operations:
@Controller("tender-parsing")
export class TenderParsingController {
constructor(
private tenderPackProcessorService: TenderPackProcessorService,
private tenderPackDbService: TenderPackDbService
) {}
@Post("process")
processTenderPack(@Body() request: ProcessTenderPackRequest) {
return this.tenderPackProcessorService.processTenderPack(request);
}
// Other endpoints...
}
Data Models¶
The module uses specialized data models for tender information:
// Example data models
interface TenderSection {
id: string;
title: string;
content: string;
type: string;
}
interface TenderRequirement {
id: string;
description: string;
category: string;
importance: string;
}
interface TenderDocument {
id: string;
title: string;
sections: TenderSection[];
requirements: TenderRequirement[];
metadata: Record<string, any>;
}
Integration with Other Modules¶
The Tender Parsing module integrates with:
- RAG Module: For intelligent document processing
- Azure Module: For document storage and AI services
- Editor Module: For displaying processed tender information
Usage Example¶
Processing a tender document:
@Injectable()
export class SomeService {
constructor(private tenderPackProcessorService: TenderPackProcessorService) {}
async processTenderDocument(documentId: string) {
const result = await this.tenderPackProcessorService.processTenderPack({
documentId,
options: {
extractRequirements: true,
identifyDeadlines: true,
categoriseContent: true,
},
});
return result;
}
}
Processing Flow¶
- Document is uploaded through the Azure module
- Tender parsing module receives the document
- Document is processed and sectioned
- Requirements and key information are extracted
- Processed data is stored in the database
- Results are made available for retrieval and analysis