A comprehensive procurement management system with AI-powered document intake, API services, and a modern web interface.
- Docker and Docker Compose
- OpenAI API Key
-
Configure environment variables
Copy all
.env.templatefiles from the individual apps to.env:cp apps/agent/.env.template apps/agent/.env cp apps/api/.env.template apps/api/.env cp apps/ui/.env.template apps/ui/.env
-
Set OpenAI API Key
Edit
apps/agent/.envand set your OpenAI API key:OPENAI_API_KEY=your_api_key_here
-
Build and run the application
docker-compose up --build
-
Access the application
- UI: http://localhost:8080
- Procurement API: http://localhost:8081
- Intake Agent API: http://localhost:8082
graph TB
UI[Procurement Suite UI<br/>Port 8080]
AgentAPI[Agent API<br/>Port 8082]
ProcAPI[Procurement API<br/>Port 8081]
UI -->|Upload PDF| AgentAPI
UI -->|Submit Request| ProcAPI
UI -->|Fetch Requests| ProcAPI
AgentAPI -->|AI Processing<br/>OpenAI| AgentAPI
ProcAPI -->|Store & Retrieve| DB[(In-Memory Repository)]
style UI fill:#e1f5ff
style AgentAPI fill:#fff4e1
style ProcAPI fill:#e8f5e9
style DB fill:#f3e5f5
sequenceDiagram
autonumber
actor User
participant UI as Procurement Suite UI
participant Agent as Agent API
participant API as Procurement API
Note over User,API: Document Upload & Processing
User->>UI: Upload PDF document
UI->>Agent: POST /agent/intake<br/>(PDF file)
Agent->>Agent: Extract data using AI
Agent-->>UI: Return ProcurementRequestCreate<br/>(extracted data)
UI->>UI: Pre-fill form with extracted data
Note over User,API: Request Submission
User->>UI: Review & submit form
UI->>API: POST /intake/request<br/>(JSON payload)
API->>API: Validate commodity group
API->>API: Create request with status: OPEN
API-->>UI: Return request ID
UI->>UI: Display success message
Note over User,API: Request Management
User->>UI: View requests list
UI->>API: GET /intake/requests
API-->>UI: Return all requests
User->>UI: Update request status
UI->>API: PATCH /intake/requests/{id}/status
API->>API: Update status<br/>(OPEN → IN_PROGRESS → CLOSED)
API-->>UI: Return updated request
UI->>UI: Refresh request list
POST /agent/intake- Process PDF document using Intake Agent to extract procurement data
POST /intake/request- Create new procurement requestGET /intake/requests- Get all procurement requestsGET /intake/requests/{id}- Get request by IDPATCH /intake/requests/{id}/status- Update request statusGET /intake/commodity_groups- Get available commodity groups
- Frontend: React + TypeScript + Material-UI + Vite
- Backend APIs: FastAPI + Python
- AI/ML: OpenAI API (document processing)
- Containerization: Docker + Docker Compose
- PDF Processing: react-pdf (frontend), AI extraction (backend)
procurement-suite/
├── apps/
│ ├── agent/ # AI-powered intake agent service
│ ├── api/ # Procurement management API
│ └── ui/ # React frontend application
├── docker-compose.yaml # Multi-container orchestration
└── README.md
- Document Upload: User uploads PDF → UI sends to Agent API
- AI Extraction: Agent API processes PDF using OpenAI → Returns structured data
- Form Pre-fill: UI populates form fields with extracted data
- Request Creation: User submits → UI sends to Procurement API → Stored with status OPEN
- Status Updates: Requests can be updated through workflow: OPEN → IN_PROCESS → CLOSED