curaflow/backend/pharmacyAgent.js

73 lines
2.9 KiB
JavaScript

/**
* PharmacyAgent: An autonomous agent that manages hospital inventory
* and interacts with vendors and patients.
*/
const pharmacyManager = require('./pharmacyManager');
class PharmacyAgent {
constructor() {
this.vendorContact = "+91-9998887776 (Global Pharma)";
}
async analyzeInventory() {
console.log("[PharmacyAgent] Scanning inventory for discrepancies...");
const inventory = pharmacyManager.getInventory();
const lowStockItems = inventory.filter(item => item.stock < 10);
if (lowStockItems.length > 0) {
console.log(`[PharmacyAgent] Found ${lowStockItems.length} items needing attention.`);
for (const item of lowStockItems) {
await this.placeOrder(item.name, 100);
}
}
this.analyzeExpiries(inventory);
}
analyzeExpiries(inventory) {
const today = new Date();
const ninetyDaysOut = new Date();
ninetyDaysOut.setDate(today.getDate() + 90);
const nearingExpiry = inventory.filter(item => {
const exp = new Date(item.expiry);
return exp > today && exp < ninetyDaysOut;
});
if (nearingExpiry.length > 0) {
console.log(`[PharmacyAgent] 🚨 EXPIRY ALERT: ${nearingExpiry.length} items expiring within 90 days.`);
nearingExpiry.forEach(item => {
console.log(`[PharmacyAgent] Suggestion: Run a 'Clearance Sale' or push ${item.name} (Batch: ${item.batch}) to front counter.`);
});
}
}
async placeOrder(medName, qty) {
console.log(`[PharmacyAgent] 🤖 AUTONOMOUS ACTION: Sending WhatsApp to Vendor ${this.vendorContact}`);
console.log(`[WhatsApp to Vendor]: "Urgent Order from Curio Health: Need ${qty} units of ${medName}. Please confirm delivery."`);
// Mocking vendor response and auto-restock after 2 seconds
setTimeout(() => {
console.log(`[PharmacyAgent] 🚚 Vendor confirmed delivery for ${medName}.`);
pharmacyManager.restock(medName, qty);
}, 3000);
}
handlePatientQuery(query) {
const text = query.toLowerCase();
const inventory = pharmacyManager.getInventory();
const found = inventory.find(i => text.includes(i.name.toLowerCase()));
if (found) {
if (found.stock > 0) {
return `Yes, we have ${found.name} in stock. It costs ₹${found.price} per unit. Would you like me to reserve some for your visit?`;
} else {
return `I'm sorry, ${found.name} is currently out of stock. I've already notified our supplier, and it should be back in 2-3 days. Can I suggest an alternative?`;
}
}
return "I'm not sure if we carry that specific medication. Let me check with our pharmacist and get back to you.";
}
}
module.exports = new PharmacyAgent();