73 lines
2.9 KiB
JavaScript
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();
|