Index: frontend/src/App.js
===================================================================
--- frontend/src/App.js	(revision d30d82041a2812a401511ea2aadede496a8eeb01)
+++ frontend/src/App.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -1,8 +1,6 @@
-
-
 import React, { useEffect, useState } from 'react';
+import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
 import Navbar from './components/Navbar';
-import ProtectedRoute from './components/ProtectedRoute';
-import Login from './pages/Login';
+import Dashboard from './pages/Dashboard';
 import PatientList from './pages/patients/PatientList';
 import PatientDetail from './pages/patients/PatientDetail';
@@ -10,15 +8,20 @@
 import DoctorList from './pages/doctors/DoctorList';
 import DoctorDetail from './pages/doctors/DoctorDetail';
-import DoctorForm from './pages/doctors/DoctorForm';v
+import DoctorForm from './pages/doctors/DoctorForm';
 import AppointmentList from './pages/appointments/AppointmentList';
 import AppointmentForm from './pages/appointments/AppointmentForm';
+import MedicalRecordList from './pages/medical-records/MedicalRecordList';
+import MedicalRecordDetail from './pages/medical-records/MedicalRecordDetail';
+import BillingList from './pages/billing/BillingList';
+import BillingDetail from './pages/billing/BillingDetail';
+import ReferralList from './pages/referrals/ReferralList';
+import MedicalReportList from './pages/medical-reports/MedicalReportList';
+import LabTestList from './pages/lab-tests/LabTestList';
+import LabResultForm from './pages/lab-tests/LabResultForm';
+import ProcedureList from './pages/procedures/ProcedureList';
+import ProcedureResultForm from './pages/procedures/ProcedureResultForm';
 import DepartmentList from './pages/departments/DepartmentList';
 import DepartmentDetail from './pages/departments/DepartmentDetail';
 import DoctorsByDepartment from './pages/departments/DoctorsByDepartment';
-import MedicalRecordList from './pages/medical-records/MedicalRecordList';
-import MedicalRecordDetail from './pages/medical-records/MedicalRecordDetail';
-import ReferralList from './pages/referrals/ReferralList';
-import MedicalReportList from './pages/medical-reports/MedicalReportList';
-
 
 function App() {
@@ -74,7 +77,20 @@
               <Route path="/medical-reports" element={<ProtectedRoute><MedicalReportList /></ProtectedRoute>} />
 
-
               {/* Referral Routes */}
               <Route path="/referrals" element={<ProtectedRoute><ReferralList /></ProtectedRoute>} />
+
+              {/* Lab Test Routes */}
+              <Route path="/lab-tests" element={<ProtectedRoute><LabTestList /></ProtectedRoute>} />
+              <Route path="/lab-tests/results" element={<ProtectedRoute><LabResultForm /></ProtectedRoute>} />
+
+              {/* Procedure Routes */}
+              <Route path="/procedures" element={<ProtectedRoute><ProcedureList /></ProtectedRoute>} />
+              <Route path="/procedures/results" element={<ProtectedRoute><ProcedureResultForm /></ProtectedRoute>} />
+
+              {/* Billing Routes */}
+              <Route path="/billing" element={<ProtectedRoute><BillingList /></ProtectedRoute>} />
+              <Route path="/billing/:id" element={<ProtectedRoute><BillingDetail /></ProtectedRoute>} />
+
+
             </Routes>
           </main>
@@ -82,7 +98,5 @@
       </Router>
   );
+}
 
-
-
-              }
 export default App;
Index: frontend/src/pages/billing/BillingDetail.js
===================================================================
--- frontend/src/pages/billing/BillingDetail.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/billing/BillingDetail.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,234 @@
+import React, { useState, useEffect } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
+import { billingService } from '../../services/billingService';
+import Loading from '../../components/Loading';
+import ErrorAlert from '../../components/ErrorAlert';
+import SuccessAlert from '../../components/SuccessAlert';
+
+function BillingDetail() {
+  const { id } = useParams();
+  const navigate = useNavigate();
+  const user = JSON.parse(localStorage.getItem('user') || '{}');
+  const isPatient = user.role === 'PATIENT';
+
+  const [billing, setBilling] = useState(null);
+  const [billingDetail, setBillingDetail] = useState(null);
+  const [loading, setLoading] = useState(true);
+  const [error, setError] = useState(null);
+  const [success, setSuccess] = useState(null);
+  const [updating, setUpdating] = useState(false);
+  const [paymentStatus, setPaymentStatus] = useState('');
+  const [downloading, setDownloading] = useState(false);
+
+  useEffect(() => {
+    fetchBilling();
+  }, [id]);
+
+  const fetchBilling = async () => {
+    try {
+      setLoading(true);
+      const response = await billingService.getBillingById(id);
+      setBilling(response.data);
+      setPaymentStatus(response.data.paymentStatus);
+
+      // Fetch detailed billing information
+      try {
+        const detailResponse = await billingService.getBillingDetail(id);
+        setBillingDetail(detailResponse.data);
+      } catch (err) {
+        console.error('Could not fetch billing details:', err);
+      }
+    } catch (err) {
+      setError('Failed to fetch billing record');
+      console.error(err);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleUpdatePaymentStatus = async () => {
+    try {
+      setUpdating(true);
+      const response = await billingService.updatePaymentStatus(id, {
+        paymentStatus,
+        paymentDate: new Date().toISOString().split('T')[0],
+      });
+      setBilling(response.data);
+      setSuccess('Payment status updated successfully!');
+    } catch (err) {
+      setError('Failed to update payment status');
+    } finally {
+      setUpdating(false);
+    }
+  };
+
+  const handleDownloadInvoice = async () => {
+    try {
+      setDownloading(true);
+      await billingService.downloadInvoicePDF(id);
+      setSuccess('Invoice downloaded successfully!');
+    } catch (err) {
+      setError('Failed to download invoice');
+      console.error(err);
+    } finally {
+      setDownloading(false);
+    }
+  };
+
+  if (loading) return <Loading />;
+
+  if (!billing) {
+    return (
+      <div>
+        <ErrorAlert message="Billing record not found" onClose={() => navigate('/billing')} />
+      </div>
+    );
+  }
+
+  return (
+    <div>
+      <div className="flex justify-between items-center mb-6">
+        <h1 className="text-3xl font-bold" style={{ color: '#7c3aed' }}>Billing Record #{billing.billId}</h1>
+        <div className="space-x-2">
+          <button
+            onClick={handleDownloadInvoice}
+            disabled={downloading}
+            className="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700 disabled:opacity-50"
+          >
+            {downloading ? 'Downloading...' : 'Download Invoice (PDF)'}
+          </button>
+          <button onClick={() => navigate('/billing')} className="bg-gray-300 text-gray-700 px-4 py-2 rounded hover:bg-gray-400">
+            Back
+          </button>
+        </div>
+      </div>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+      {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />}
+
+      <div className={`grid gap-6 mb-6 ${isPatient ? 'grid-cols-1 lg:grid-cols-2' : 'grid-cols-1 lg:grid-cols-3'}`}>
+        <div className="bg-white rounded-lg shadow p-6">
+          <h2 className="text-xl font-bold mb-4">Billing Information</h2>
+          <div className="space-y-3">
+            <InfoRow label="Patient" value={billing.patientName} />
+            <InfoRow label="Total Cost" value={`$${billing.totalCost}`} />
+            <InfoRow label="Current Status" value={billing.paymentStatus} />
+            <InfoRow label="Payment Date" value={billing.paymentDate || 'Not paid'} />
+          </div>
+        </div>
+
+        {!isPatient && (
+          <div className="bg-white rounded-lg shadow p-6">
+            <h2 className="text-xl font-bold mb-4">Update Payment Status</h2>
+            <div className="space-y-4">
+              <div>
+                <label className="block text-sm font-semibold mb-2">Payment Status</label>
+                <select
+                  value={paymentStatus}
+                  onChange={(e) => setPaymentStatus(e.target.value)}
+                  className="w-full px-4 py-2 border rounded-lg"
+                >
+                  <option value="PENDING">Pending</option>
+                  <option value="PAID">Paid</option>
+                  <option value="CANCELLED">Cancelled</option>
+                </select>
+              </div>
+              <button
+                onClick={handleUpdatePaymentStatus}
+                disabled={updating || paymentStatus === billing.paymentStatus}
+                className="w-full bg-purple-600 text-white px-4 py-2 rounded hover:bg-purple-700 disabled:opacity-50"
+              >
+                {updating ? 'Updating...' : 'Update Status'}
+              </button>
+            </div>
+          </div>
+        )}
+
+        <div className="bg-white rounded-lg shadow p-6">
+          <h2 className="text-xl font-bold mb-4">Patient Details</h2>
+          <div className="space-y-3">
+            {billingDetail && (
+              <>
+                <InfoRow label="EMBG" value={billingDetail.patientEmbg} />
+                <InfoRow label="Phone" value={billingDetail.patientPhone} />
+                <InfoRow label="Bill Date" value={billingDetail.billDate} />
+              </>
+            )}
+          </div>
+        </div>
+      </div>
+
+      <div className="bg-white rounded-lg shadow p-6">
+        <h2 className="text-xl font-bold mb-4">Itemized Services</h2>
+
+        {billingDetail && (billingDetail.procedures.length > 0 || billingDetail.labTests.length > 0) ? (
+          <div className="space-y-4">
+            {billingDetail.procedures.length > 0 && (
+              <div>
+                <h3 className="font-semibold text-lg mb-2">Procedures</h3>
+                <table className="w-full">
+                  <thead className="bg-gray-100">
+                    <tr>
+                      <th className="px-4 py-2 text-left">Description</th>
+                      <th className="px-4 py-2 text-right">Cost</th>
+                    </tr>
+                  </thead>
+                  <tbody>
+                    {billingDetail.procedures.map((proc, idx) => (
+                      <tr key={idx} className="border-t">
+                        <td className="px-4 py-2">{proc.description}</td>
+                        <td className="px-4 py-2 text-right">${proc.cost}</td>
+                      </tr>
+                    ))}
+                  </tbody>
+                </table>
+              </div>
+            )}
+
+            {billingDetail.labTests.length > 0 && (
+              <div>
+                <h3 className="font-semibold text-lg mb-2">Lab Tests</h3>
+                <table className="w-full">
+                  <thead className="bg-gray-100">
+                    <tr>
+                      <th className="px-4 py-2 text-left">Description</th>
+                      <th className="px-4 py-2 text-right">Cost</th>
+                    </tr>
+                  </thead>
+                  <tbody>
+                    {billingDetail.labTests.map((test, idx) => (
+                      <tr key={idx} className="border-t">
+                        <td className="px-4 py-2">{test.description}</td>
+                        <td className="px-4 py-2 text-right">${test.cost}</td>
+                      </tr>
+                    ))}
+                  </tbody>
+                </table>
+              </div>
+            )}
+
+            <div className="border-t-2 pt-4 mt-4 flex justify-end">
+              <div className="text-right">
+                <p className="text-gray-600">Total Amount:</p>
+                <p className="text-2xl font-bold text-purple-600">${billing.totalCost}</p>
+              </div>
+            </div>
+          </div>
+        ) : (
+          <p className="text-gray-500">No services itemized for this billing record.</p>
+        )}
+      </div>
+    </div>
+  );
+}
+
+function InfoRow({ label, value }) {
+  return (
+    <div className="flex justify-between">
+      <span className="text-gray-800">{label}:</span>
+      <span className="text-gray-800">{value || 'N/A'}</span>
+    </div>
+  );
+}
+
+export default BillingDetail;
Index: frontend/src/pages/billing/BillingList.js
===================================================================
--- frontend/src/pages/billing/BillingList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/billing/BillingList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,88 @@
+import React, { useState, useEffect } from 'react';
+import { Link, useSearchParams } from 'react-router-dom';
+import { billingService } from '../../services/billingService';
+import Loading from '../../components/Loading';
+import ErrorAlert from '../../components/ErrorAlert';
+
+function BillingList() {
+  const [billings, setBillings] = useState([]);
+  const [loading, setLoading] = useState(true);
+  const [error, setError] = useState(null);
+  const [searchParams] = useSearchParams();
+  const patientId = searchParams.get('patientId');
+  const user = JSON.parse(localStorage.getItem('user') || '{}');
+
+  useEffect(() => {
+    fetchBillings();
+  }, [patientId]);
+
+  const fetchBillings = async () => {
+    try {
+      setLoading(true);
+      let response;
+      if (patientId) {
+        response = await billingService.getBillingHistoryForPatient(patientId);
+      } else if (user.role === 'PATIENT') {
+        // Patients can only view their own billing history
+        response = await billingService.getBillingHistoryForPatient(user.patientId);
+      } else {
+        response = await billingService.getAllBillings();
+      }
+      setBillings(response.data);
+    } catch (err) {
+      setError('Failed to fetch billing records');
+      console.error(err);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  if (loading) return <Loading />;
+
+  return (
+    <div>
+      <h1 className="text-3xl font-bold mb-6" style={{ color: '#7c3aed' }}>{patientId ? 'Patient Billing History' : 'Billing Records'}</h1>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+
+      <div className="bg-white rounded-lg shadow overflow-hidden">
+        <table className="w-full">
+          <thead className="bg-gray-100">
+            <tr>
+              <th className="px-6 py-3 text-left text-sm font-semibold">Patient</th>
+              <th className="px-6 py-3 text-left text-sm font-semibold">Total Cost</th>
+              <th className="px-6 py-3 text-left text-sm font-semibold">Payment Status</th>
+              <th className="px-6 py-3 text-left text-sm font-semibold">Payment Date</th>
+              <th className="px-6 py-3 text-left text-sm font-semibold">Actions</th>
+            </tr>
+          </thead>
+          <tbody>
+            {billings.map(billing => (
+              <tr key={billing.billId} className="border-t hover:bg-gray-50">
+                <td className="px-6 py-3">{billing.patientName}</td>
+                <td className="px-6 py-3">${billing.totalCost}</td>
+                <td className="px-6 py-3">
+                  <span className={`px-3 py-1 rounded text-sm font-semibold ${
+                    billing.paymentStatus === 'PENDING' ? 'bg-yellow-100 text-yellow-800' :
+                    billing.paymentStatus === 'PAID' ? 'bg-green-100 text-green-800' :
+                    'bg-red-100 text-red-800'
+                  }`}>
+                    {billing.paymentStatus}
+                  </span>
+                </td>
+                <td className="px-6 py-3">{billing.paymentDate || 'Not paid'}</td>
+                <td className="px-6 py-3">
+                  <Link to={`/billing/${billing.billId}`} style={{ color: '#7c3aed', textDecoration: 'none', fontWeight: '400' }} onMouseEnter={(e) => e.currentTarget.style.textDecoration = 'underline'} onMouseLeave={(e) => e.currentTarget.style.textDecoration = 'none'}>
+                    View
+                  </Link>
+                </td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </div>
+    </div>
+  );
+}
+
+export default BillingList;
Index: frontend/src/pages/lab-tests/LabResultForm.js
===================================================================
--- frontend/src/pages/lab-tests/LabResultForm.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/lab-tests/LabResultForm.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,297 @@
+import React, { useState, useEffect } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { labService } from '../../services/labService';
+import { patientService } from '../../services/patientService';
+import { medicalRecordService } from '../../services/medicalRecordService';
+import ErrorAlert from '../../components/ErrorAlert';
+import SuccessAlert from '../../components/SuccessAlert';
+
+function LabResultForm() {
+  const navigate = useNavigate();
+  const [error, setError] = useState(null);
+  const [success, setSuccess] = useState(null);
+  const [loading, setLoading] = useState(false);
+  const [searchEmbg, setSearchEmbg] = useState('');
+  const [patient, setPatient] = useState(null);
+  const [pendingTests, setPendingTests] = useState([]);
+  const [selectedTest, setSelectedTest] = useState(null);
+  const [medicalRecordId, setMedicalRecordId] = useState(null);
+
+  const [formData, setFormData] = useState({
+    medicalRecordId: '',
+    testId: '',
+    results: '',
+    resultDate: new Date().toISOString().split('T')[0],
+  });
+
+  const handleSearch = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setLoading(true);
+
+    try {
+      if (!searchEmbg.trim()) {
+        setError('Please enter patient EMBG');
+        setLoading(false);
+        return;
+      }
+
+      const patientRes = await patientService.getPatientByEmbg(searchEmbg);
+      setPatient(patientRes.data);
+
+      // Get medical record
+      const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);
+      setMedicalRecordId(medicalRecordRes.data.recordId);
+
+      // Get pending tests
+      const testsRes = await labService.getLabTestRequestsForPatient(patientRes.data.patientId);
+      setPendingTests(testsRes.data || []);
+
+      setFormData(prev => ({
+        ...prev,
+        medicalRecordId: medicalRecordRes.data.recordId
+      }));
+    } catch (err) {
+      setError('Patient not found or error loading tests');
+      setPatient(null);
+      setPendingTests([]);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleSelectTest = (test) => {
+    setSelectedTest(test);
+    setFormData(prev => ({
+      ...prev,
+      testId: test.testId,
+      medicalRecordId: medicalRecordId || prev.medicalRecordId
+    }));
+  };
+
+  const handleChange = (e) => {
+    const { name, value } = e.target;
+    setFormData({
+      ...formData,
+      [name]: value,
+    });
+  };
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setSuccess(null);
+
+    if (!formData.medicalRecordId || !formData.testId || !formData.results) {
+      setError('Please fill in all required fields');
+      return;
+    }
+
+    try {
+      setLoading(true);
+
+      const submitData = {
+        medicalRecordId: parseInt(formData.medicalRecordId),
+        testId: parseInt(formData.testId),
+        results: formData.results,
+        resultDate: formData.resultDate,
+      };
+
+      await labService.submitLabResult(submitData);
+
+      setSuccess('Lab result submitted successfully!');
+      setFormData({
+        medicalRecordId: '',
+        testId: '',
+        results: '',
+        resultDate: new Date().toISOString().split('T')[0],
+      });
+      setSelectedTest(null);
+      setPatient(null);
+      setSearchEmbg('');
+      setPendingTests([]);
+
+      // Navigate back to lab tests page after a short delay
+      setTimeout(() => navigate('/lab-tests'), 2000);
+    } catch (err) {
+      setError('Failed to submit lab result: ' + (err.response?.data?.error || err.message));
+      setLoading(false);
+    }
+  };
+
+  return (
+    <div className="max-w-3xl mx-auto">
+      <h1 className="text-3xl font-bold mb-6">Submit Lab Result</h1>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+      {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />}
+
+      {/* Search Patient Form */}
+      <div className="bg-white rounded-lg shadow p-6 mb-6">
+        <h2 className="text-xl font-bold mb-4">Search Patient</h2>
+        <form onSubmit={handleSearch} className="flex gap-4">
+          <input
+            type="text"
+            value={searchEmbg}
+            onChange={(e) => setSearchEmbg(e.target.value)}
+            placeholder="Enter patient EMBG"
+            className="flex-1 px-4 py-2 border rounded-lg"
+          />
+          <button
+            type="submit"
+            disabled={loading}
+            className="bg-purple-600 text-white px-8 py-2 rounded hover:bg-purple-700 disabled:bg-gray-400"
+          >
+            {loading ? 'Searching...' : 'Search'}
+          </button>
+        </form>
+      </div>
+
+      {/* Patient Info and Pending Tests */}
+      {patient && (
+        <div className="space-y-6">
+          {/* Patient Card */}
+          <div className="bg-white rounded-lg shadow p-6">
+            <h2 className="text-2xl font-bold mb-4">{patient.firstName} {patient.lastName}</h2>
+            <div className="grid grid-cols-3 gap-4">
+              <div>
+                <p className="text-sm text-gray-600">EMBG</p>
+                <p className="font-semibold">{patient.embg}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Blood Type</p>
+                <p className="font-semibold">{patient.bloodType || 'N/A'}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Date of Birth</p>
+                <p className="font-semibold">{patient.dateOfBirth}</p>
+              </div>
+            </div>
+          </div>
+
+          {/* Pending Tests List */}
+          {pendingTests.length > 0 ? (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h2 className="text-xl font-bold mb-4">Pending Lab Tests</h2>
+              <div className="space-y-2">
+                {pendingTests.map((test) => (
+                  <div
+                    key={test.testId}
+                    onClick={() => handleSelectTest(test)}
+                    className={`p-4 rounded-lg border-2 cursor-pointer transition ${
+                      selectedTest?.testId === test.testId
+                        ? 'border-purple-600 bg-blue-50'
+                        : 'border-gray-200 bg-gray-50 hover:border-blue-400'
+                    }`}
+                  >
+                    <p className="font-semibold text-lg">{test.testName}</p>
+                    <p className="text-sm text-gray-600">Requested by: {test.doctorName}</p>
+                    <p className="text-sm text-gray-600">Request Date: {test.requestDate}</p>
+                    {test.notes && (
+                      <p className="text-sm text-gray-600 mt-1">Notes: {test.notes}</p>
+                    )}
+                  </div>
+                ))}
+              </div>
+            </div>
+          ) : (
+            <div className="bg-blue-50 rounded-lg p-6 text-center">
+              <p className="text-gray-600">No pending lab tests for this patient</p>
+            </div>
+          )}
+
+          {/* Result Submission Form */}
+          {selectedTest && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h2 className="text-xl font-bold mb-4">Submit Results for {selectedTest.testName}</h2>
+              <form onSubmit={handleSubmit} className="space-y-4">
+                <div className="grid grid-cols-2 gap-4">
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Test ID</label>
+                    <input
+                      type="number"
+                      value={formData.testId}
+                      disabled
+                      className="w-full px-4 py-2 border rounded-lg bg-gray-100"
+                    />
+                  </div>
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Medical Record ID</label>
+                    <input
+                      type="number"
+                      value={formData.medicalRecordId}
+                      disabled
+                      className="w-full px-4 py-2 border rounded-lg bg-gray-100"
+                    />
+                  </div>
+                </div>
+
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Results *</label>
+                  <textarea
+                    name="results"
+                    value={formData.results}
+                    onChange={handleChange}
+                    placeholder="Enter the lab test results"
+                    className="w-full px-4 py-2 border rounded-lg"
+                    rows="6"
+                    required
+                  />
+                </div>
+
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Result Date</label>
+                  <input
+                    type="date"
+                    name="resultDate"
+                    value={formData.resultDate}
+                    onChange={handleChange}
+                    className="w-full px-4 py-2 border rounded-lg"
+                  />
+                </div>
+
+                <div className="flex gap-4 pt-6">
+                  <button
+                    type="submit"
+                    disabled={loading}
+                    style={{
+                      flex: 1,
+                      background: loading ? '#d1d5db' : '#bfdbfe',
+                      color: '#1e1035',
+                      padding: '8px 12px',
+                      borderRadius: '6px',
+                      border: 'none',
+                      cursor: loading ? 'not-allowed' : 'pointer',
+                      fontWeight: '400',
+                      fontSize: '13px'
+                    }}
+                    onMouseEnter={(e) => !loading && (e.currentTarget.style.background = '#93c5fd')}
+                    onMouseLeave={(e) => !loading && (e.currentTarget.style.background = '#bfdbfe')}
+                  >
+                    {loading ? 'Submitting...' : 'Submit Result'}
+                  </button>
+                  <button
+                    type="button"
+                    onClick={() => navigate('/lab-tests')}
+                    className="flex-1 bg-gray-400 text-white py-2 rounded-lg hover:bg-gray-500"
+                  >
+                    Cancel
+                  </button>
+                </div>
+              </form>
+            </div>
+          )}
+        </div>
+      )}
+
+      {/* No search performed */}
+      {!patient && (
+        <div className="bg-gray-50 rounded-lg p-12 text-center">
+          <p className="text-gray-600 text-lg">Enter a patient EMBG to view pending lab tests</p>
+        </div>
+      )}
+    </div>
+  );
+}
+
+export default LabResultForm;
Index: frontend/src/pages/lab-tests/LabTestList.js
===================================================================
--- frontend/src/pages/lab-tests/LabTestList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/lab-tests/LabTestList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,529 @@
+import React, { useState, useEffect } from 'react';
+import { patientService } from '../../services/patientService';
+import { labService } from '../../services/labService';
+import ErrorAlert from '../../components/ErrorAlert';
+
+function LabTestList() {
+  const user = JSON.parse(localStorage.getItem('user') || '{}');
+  const isLabTechnician = user.role === 'LAB_TECHNICIAN';
+
+  const [patient, setPatient] = useState(null);
+  const [embg, setEmbg] = useState('');
+  const [searched, setSearched] = useState(false);
+  const [loading, setLoading] = useState(false);
+  const [error, setError] = useState(null);
+
+  const [availableTests, setAvailableTests] = useState([]);
+  const [labTestRequests, setLabTestRequests] = useState([]);
+  const [labResults, setLabResults] = useState([]);
+  const [pendingTests, setPendingTests] = useState([]);
+  const [selectedTest, setSelectedTest] = useState(null);
+
+  const [showRequestForm, setShowRequestForm] = useState(false);
+  const [requestData, setRequestData] = useState({
+    testId: '',
+    testDate: new Date().toISOString().split('T')[0],
+    notes: '',
+  });
+
+  const [submitFormData, setSubmitFormData] = useState({
+    results: '',
+    resultDate: new Date().toISOString().split('T')[0],
+  });
+
+  useEffect(() => {
+    if (isLabTechnician) {
+      loadPendingTests();
+    }
+  }, [isLabTechnician]);
+
+  const loadPendingTests = async () => {
+    try {
+      setLoading(true);
+      const response = await labService.getPendingLabTests();
+      setPendingTests(response.data || []);
+    } catch (err) {
+      setError('Failed to load pending lab tests');
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleSearch = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setLoading(true);
+
+    try {
+      if (!embg.trim()) {
+        setError('Please enter an EMBG');
+        setLoading(false);
+        return;
+      }
+
+      const patientResponse = await patientService.getPatientByEmbg(embg);
+      setPatient(patientResponse.data);
+      setSearched(true);
+
+      // Fetch available tests
+      const testsResponse = await labService.getAllLabTests();
+      setAvailableTests(testsResponse.data);
+
+      // Fetch medical record for patient
+      const { medicalRecordService } = await import('../../services/medicalRecordService');
+      const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);
+
+      // Fetch existing test requests for patient
+      const requestsResponse = await labService.getLabTestRequestsForPatient(patientResponse.data.patientId);
+      setLabTestRequests(requestsResponse.data);
+
+      // Fetch lab results for medical record
+      const resultsResponse = await labService.getLabResultsForMedicalRecord(medicalRecordRes.data.recordId);
+      setLabResults(resultsResponse.data);
+    } catch (err) {
+      setError(`Patient with EMBG ${embg} not found`);
+      setPatient(null);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleRequestTest = async (e) => {
+    e.preventDefault();
+    setError(null);
+
+    if (!requestData.testId) {
+      setError('Please select a test');
+      return;
+    }
+
+    if (!patient) {
+      setError('Patient not found');
+      return;
+    }
+
+    try {
+      setLoading(true);
+
+      // Get doctor ID from localStorage (set during login)
+      const doctorId = localStorage.getItem('doctorId') || 1;
+
+      const request = {
+        patientId: patient.patientId,
+        medicalRecordId: patient.patientId, // Assuming medical record ID matches patient ID
+        doctorId: parseInt(doctorId),
+        testId: parseInt(requestData.testId),
+        testDate: requestData.testDate,
+        notes: requestData.notes,
+      };
+
+      await labService.requestLabTest(request);
+
+      // Refresh the test requests
+      const requestsResponse = await labService.getLabTestRequestsForPatient(patient.patientId);
+      setLabTestRequests(requestsResponse.data);
+
+      // Reset form
+      setRequestData({
+        testId: '',
+        testDate: new Date().toISOString().split('T')[0],
+        notes: '',
+      });
+      setShowRequestForm(false);
+      setError(null);
+    } catch (err) {
+      setError('Failed to request lab test: ' + err.response?.data?.error || err.message);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleSubmitResult = async (e) => {
+    e.preventDefault();
+    setError(null);
+
+    if (!submitFormData.results.trim()) {
+      setError('Please enter test results');
+      return;
+    }
+
+    if (!selectedTest) {
+      setError('No test selected');
+      return;
+    }
+
+    try {
+      setLoading(true);
+
+      const { medicalRecordService } = await import('../../services/medicalRecordService');
+      const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(selectedTest.patientId);
+
+      const resultData = {
+        medicalRecordId: medicalRecordRes.data.recordId,
+        testId: selectedTest.testId,
+        results: submitFormData.results,
+        resultDate: submitFormData.resultDate,
+      };
+
+      await labService.submitLabResult(resultData);
+
+      // Refresh pending tests
+      await loadPendingTests();
+
+      // Reset form
+      setSelectedTest(null);
+      setSubmitFormData({
+        results: '',
+        resultDate: new Date().toISOString().split('T')[0],
+      });
+
+      // Show success message
+      setError(null);
+      alert('Lab result submitted successfully!');
+    } catch (err) {
+      setError('Failed to submit lab result: ' + (err.response?.data?.error || err.message));
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  if (isLabTechnician) {
+    return (
+      <div>
+        <h1 className="text-3xl font-bold mb-6" style={{ color: '#7c3aed' }}>Lab Tests - Submit Results</h1>
+
+        {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+
+        {selectedTest ? (
+          // Submit Result Form
+          <div className="bg-white rounded-lg shadow p-6 mb-6">
+            <h2 className="text-xl font-bold mb-4">Submit Lab Result</h2>
+            <div className="mb-4 p-4 bg-gray-50 rounded-lg">
+              <p className="mb-2"><strong>Test:</strong> {selectedTest.testName}</p>
+              <p className="mb-2"><strong>Patient:</strong> {selectedTest.patientName}</p>
+              <p className="mb-2"><strong>Doctor:</strong> {selectedTest.doctorName}</p>
+              <p className="mb-2"><strong>Test Date:</strong> {selectedTest.testDate}</p>
+              {selectedTest.notes && <p><strong>Notes:</strong> {selectedTest.notes}</p>}
+            </div>
+
+            <form onSubmit={handleSubmitResult} className="space-y-4">
+              <div>
+                <label className="block text-sm font-semibold mb-2">Test Results *</label>
+                <textarea
+                  value={submitFormData.results}
+                  onChange={(e) => setSubmitFormData({ ...submitFormData, results: e.target.value })}
+                  placeholder="Enter detailed test results"
+                  className="w-full px-4 py-2 border rounded-lg"
+                  rows="4"
+                  required
+                />
+              </div>
+
+              <div>
+                <label className="block text-sm font-semibold mb-2">Result Date *</label>
+                <input
+                  type="date"
+                  value={submitFormData.resultDate}
+                  onChange={(e) => setSubmitFormData({ ...submitFormData, resultDate: e.target.value })}
+                  className="w-full px-4 py-2 border rounded-lg"
+                  required
+                />
+              </div>
+
+              <div className="flex gap-4">
+                <button
+                  type="submit"
+                  disabled={loading}
+                  style={{
+                    background: loading ? '#d1d5db' : '#bfdbfe',
+                    color: '#1e1035',
+                    padding: '8px 24px',
+                    borderRadius: '6px',
+                    border: 'none',
+                    cursor: loading ? 'not-allowed' : 'pointer',
+                    fontSize: '14px',
+                    fontWeight: '400'
+                  }}
+                  onMouseEnter={(e) => !loading && (e.currentTarget.style.background = '#93c5fd')}
+                  onMouseLeave={(e) => !loading && (e.currentTarget.style.background = '#bfdbfe')}
+                >
+                  {loading ? 'Submitting...' : 'Submit Result'}
+                </button>
+                <button
+                  type="button"
+                  onClick={() => {
+                    setSelectedTest(null);
+                    setSubmitFormData({
+                      results: '',
+                      resultDate: new Date().toISOString().split('T')[0],
+                    });
+                  }}
+                  className="bg-gray-400 text-white px-6 py-2 rounded hover:bg-gray-500"
+                >
+                  Cancel
+                </button>
+              </div>
+            </form>
+          </div>
+        ) : (
+          // Pending Tests List
+          <div className="bg-white rounded-lg shadow overflow-hidden">
+            <div className="p-6 border-b">
+              <h2 className="text-xl font-bold">Pending Lab Tests ({pendingTests.length})</h2>
+            </div>
+
+            {pendingTests.length === 0 ? (
+              <div className="p-6 text-center text-gray-600">
+                No pending lab tests
+              </div>
+            ) : (
+              <table className="w-full">
+                <thead className="bg-gray-100">
+                  <tr>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Test</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Patient</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Doctor</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Requested</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Test Date</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Notes</th>
+                    <th className="px-6 py-3 text-left text-sm font-semibold">Action</th>
+                  </tr>
+                </thead>
+                <tbody>
+                  {pendingTests.map((test, index) => (
+                    <tr key={index} className="border-t hover:bg-gray-50">
+                      <td className="px-6 py-3 font-medium">{test.testName}</td>
+                      <td className="px-6 py-3">{test.patientName}</td>
+                      <td className="px-6 py-3">{test.doctorName}</td>
+                      <td className="px-6 py-3 text-green-600">{test.requestDate}</td>
+                      <td className="px-6 py-3 text-purple-600">{test.testDate}</td>
+                      <td className="px-6 py-3 text-gray-600 text-sm">{test.notes || '-'}</td>
+                      <td className="px-6 py-3">
+                        <button
+                          onClick={() => setSelectedTest(test)}
+                          style={{
+                            background: '#bfdbfe',
+                            color: '#1e1035',
+                            padding: '6px 12px',
+                            borderRadius: '4px',
+                            border: 'none',
+                            cursor: 'pointer',
+                            fontSize: '12px',
+                            fontWeight: '400'
+                          }}
+                          onMouseEnter={(e) => e.currentTarget.style.background = '#93c5fd'}
+                          onMouseLeave={(e) => e.currentTarget.style.background = '#bfdbfe'}
+                        >
+                          Submit Result
+                        </button>
+                      </td>
+                    </tr>
+                  ))}
+                </tbody>
+              </table>
+            )}
+          </div>
+        )}
+      </div>
+    );
+  }
+
+  return (
+    <div>
+      <h1 className="text-3xl font-bold mb-6" style={{ color: '#7c3aed' }}>Lab Tests</h1>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+
+      {/* Search Form */}
+      <div className="bg-white rounded-lg shadow p-6 mb-6">
+        <h2 className="text-xl font-bold mb-4">Search Patient</h2>
+        <form onSubmit={handleSearch} className="space-y-4">
+          <div className="flex gap-4">
+            <div className="flex-1">
+              <label className="block text-sm font-semibold mb-2">Patient EMBG</label>
+              <input
+                type="text"
+                value={embg}
+                onChange={(e) => setEmbg(e.target.value)}
+                placeholder="e.g., 1402994123456"
+                className="w-full px-4 py-2 border rounded-lg"
+              />
+            </div>
+            <div className="flex items-end">
+              <button
+                type="submit"
+                disabled={loading}
+                className="bg-purple-600 text-white px-8 py-2 rounded-full hover:bg-purple-700 disabled:bg-gray-400"
+              >
+                {loading ? 'Searching...' : 'Search'}
+              </button>
+            </div>
+          </div>
+        </form>
+      </div>
+
+      {/* Patient Lab Tests */}
+      {searched && patient && (
+        <div className="space-y-6">
+          {/* Patient Info */}
+          <div className="bg-white rounded-lg shadow p-6">
+            <div className="flex justify-between items-start mb-4">
+              <h2 className="text-2xl font-bold">{patient.firstName} {patient.lastName}</h2>
+              {!showRequestForm && (
+                <button
+                  onClick={() => setShowRequestForm(true)}
+                  className="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700"
+                >
+                  Request Lab Test
+                </button>
+              )}
+            </div>
+            <div className="grid grid-cols-4 gap-4">
+              <div>
+                <p className="text-sm text-gray-600">EMBG</p>
+                <p className="font-semibold">{patient.embg}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Blood Type</p>
+                <p className="font-semibold">{patient.bloodType || 'N/A'}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Date of Birth</p>
+                <p className="font-semibold">{patient.dateOfBirth}</p>
+              </div>
+            </div>
+          </div>
+
+          {/* Request Lab Test Form */}
+          {showRequestForm && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Request Lab Test</h3>
+              <form onSubmit={handleRequestTest} className="space-y-4">
+                <div className="grid grid-cols-2 gap-4">
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Test</label>
+                    <select
+                      value={requestData.testId}
+                      onChange={(e) => setRequestData({ ...requestData, testId: e.target.value })}
+                      className="w-full px-4 py-2 border rounded-lg"
+                      required
+                    >
+                      <option value="">Select a test</option>
+                      {availableTests.map((test) => (
+                        <option key={test.testId} value={test.testId}>
+                          {test.testName} (${test.cost})
+                        </option>
+                      ))}
+                    </select>
+                  </div>
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Test Date</label>
+                    <input
+                      type="date"
+                      value={requestData.testDate}
+                      onChange={(e) => setRequestData({ ...requestData, testDate: e.target.value })}
+                      className="w-full px-4 py-2 border rounded-lg"
+                    />
+                  </div>
+                </div>
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Notes</label>
+                  <textarea
+                    value={requestData.notes}
+                    onChange={(e) => setRequestData({ ...requestData, notes: e.target.value })}
+                    placeholder="Additional notes for the lab technician"
+                    className="w-full px-4 py-2 border rounded-lg"
+                    rows="3"
+                  />
+                </div>
+                <div className="flex gap-4">
+                  <button
+                    type="submit"
+                    disabled={loading}
+                    className="bg-green-600 text-white px-6 py-2 rounded hover:bg-green-700 disabled:bg-gray-400"
+                  >
+                    {loading ? 'Requesting...' : 'Request Test'}
+                  </button>
+                  <button
+                    type="button"
+                    onClick={() => setShowRequestForm(false)}
+                    className="bg-gray-400 text-white px-6 py-2 rounded hover:bg-gray-500"
+                  >
+                    Cancel
+                  </button>
+                </div>
+              </form>
+            </div>
+          )}
+
+          {/* Test Requests */}
+          {labTestRequests && labTestRequests.length > 0 && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Lab Test Requests</h3>
+              <div className="space-y-3">
+                {labTestRequests.map((request) => (
+                  <div key={request.testId} className="border-l-4 border-purple-500 pl-4 py-2">
+                    <p className="font-semibold text-lg">{request.testName}</p>
+                    <p className="text-sm text-gray-600">Requested by: {request.doctorName}</p>
+                    <p className="text-sm text-gray-600">Test Date: {request.requestDate}</p>
+                    {request.notes && (
+                      <p className="text-sm text-gray-600">Notes: {request.notes}</p>
+                    )}
+                  </div>
+                ))}
+              </div>
+            </div>
+          )}
+
+          {/* Lab Test Results */}
+          {labResults && labResults.length > 0 && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Lab Test Results</h3>
+              <div className="space-y-4">
+                {labResults.map((result) => (
+                  <div key={result.resultId} className="border-l-4 border-green-500 pl-4 py-3 bg-green-50 rounded">
+                    <p className="font-semibold text-lg text-green-700">{result.testName}</p>
+                    <p className="text-sm text-gray-700 mt-2"><strong>Results:</strong> {result.results}</p>
+                    <p className="text-sm text-gray-600">Result Date: {result.resultDate}</p>
+                  </div>
+                ))}
+              </div>
+            </div>
+          )}
+
+          {/* Link to submit results */}
+          {labTestRequests && labTestRequests.length > 0 && (
+            <div className="bg-yellow-50 rounded-lg p-6">
+              <h3 className="text-lg font-semibold text-yellow-800 mb-3">Lab Technician: Submit Test Results</h3>
+              <p className="text-sm text-gray-700 mb-4">
+                {labTestRequests.length} test{labTestRequests.length !== 1 ? 's' : ''} awaiting results
+              </p>
+              <a
+                href="/lab-tests/results"
+                className="inline-block bg-yellow-600 text-white px-6 py-2 rounded hover:bg-yellow-700"
+              >
+                Submit Lab Results
+              </a>
+            </div>
+          )}
+
+          {/* No requests message */}
+          {!labTestRequests || labTestRequests.length === 0 && !labResults?.length && (
+            <div className="bg-blue-50 rounded-lg p-6 text-center">
+              <p className="text-gray-600">No lab test requests for this patient</p>
+            </div>
+          )}
+        </div>
+      )}
+
+      {/* No search performed */}
+      {!searched && (
+        <div className="bg-gray-50 rounded-lg p-12 text-center">
+          <p className="text-gray-600 text-lg">Enter a patient EMBG to request lab tests</p>
+        </div>
+      )}
+    </div>
+  );
+}
+
+export default LabTestList;
Index: frontend/src/pages/procedures/ProcedureList.js
===================================================================
--- frontend/src/pages/procedures/ProcedureList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/procedures/ProcedureList.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,333 @@
+import React, { useState, useEffect } from 'react';
+import { patientService } from '../../services/patientService';
+import { procedureService } from '../../services/procedureService';
+import { medicalRecordService } from '../../services/medicalRecordService';
+import ErrorAlert from '../../components/ErrorAlert';
+
+function ProcedureList() {
+  const [patient, setPatient] = useState(null);
+  const [embg, setEmbg] = useState('');
+  const [searched, setSearched] = useState(false);
+  const [loading, setLoading] = useState(false);
+  const [error, setError] = useState(null);
+
+  const [availableProcedures, setAvailableProcedures] = useState([]);
+  const [performedProcedures, setPerformedProcedures] = useState([]);
+  const [procedureResults, setProcedureResults] = useState([]);
+
+  const [showRequestForm, setShowRequestForm] = useState(false);
+  const [requestData, setRequestData] = useState({
+    procedureId: '',
+    procedureDate: new Date().toISOString().split('T')[0],
+    notes: '',
+  });
+
+  const handleSearch = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setLoading(true);
+
+    try {
+      if (!embg.trim()) {
+        setError('Please enter an EMBG');
+        setLoading(false);
+        return;
+      }
+
+      const patientResponse = await patientService.getPatientByEmbg(embg);
+      setPatient(patientResponse.data);
+      setSearched(true);
+
+      // Fetch medical record for patient
+      const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientResponse.data.patientId);
+
+      // Fetch available procedures from database
+      try {
+        const proceduresResponse = await procedureService.getAllProcedures();
+        console.log('Procedures response:', proceduresResponse);
+        console.log('Procedures data:', proceduresResponse.data);
+        setAvailableProcedures(Array.isArray(proceduresResponse.data) ? proceduresResponse.data : []);
+      } catch (procErr) {
+        console.error('Failed to fetch procedures:', procErr);
+        setError('Failed to fetch procedures: ' + procErr.message);
+        setAvailableProcedures([]);
+      }
+
+      // Fetch performed procedures for patient
+      try {
+        const performedRes = await procedureService.getPerformedProceduresForPatient(patientResponse.data.patientId);
+        setPerformedProcedures(Array.isArray(performedRes.data) ? performedRes.data : []);
+      } catch (err) {
+        console.error('Failed to fetch performed procedures:', err);
+        setPerformedProcedures([]);
+      }
+
+      // Fetch procedure results for medical record
+      try {
+        const resultsResponse = await procedureService.getProcedureResultsForMedicalRecord(medicalRecordRes.data.recordId);
+        setProcedureResults(Array.isArray(resultsResponse.data) ? resultsResponse.data : []);
+      } catch (err) {
+        console.error('Failed to fetch procedure results:', err);
+        setProcedureResults([]);
+      }
+    } catch (err) {
+      console.error('Search error:', err);
+      setError(`Error: ${err.response?.data?.error || err.message || 'Patient not found'}`);
+      setPatient(null);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleRequestProcedure = async (e) => {
+    e.preventDefault();
+    setError(null);
+
+    if (!requestData.procedureId) {
+      setError('Please select a procedure');
+      return;
+    }
+
+    if (!patient) {
+      setError('Patient not found');
+      return;
+    }
+
+    try {
+      setLoading(true);
+
+      // Get doctor ID from localStorage (set during login)
+      const doctorId = localStorage.getItem('doctorId') || 1;
+
+      const request = {
+        procedureId: parseInt(requestData.procedureId),
+        doctorId: parseInt(doctorId),
+        patientId: patient.patientId,
+        procedureDate: requestData.procedureDate,
+        notes: requestData.notes,
+      };
+
+      console.log('Sending request:', request);
+      await procedureService.recordProcedure(request);
+
+      // Refresh the performed procedures
+      const performedRes = await procedureService.getPerformedProceduresForPatient(patient.patientId);
+      setPerformedProcedures(performedRes.data);
+
+      // Reset form
+      setRequestData({
+        procedureId: '',
+        procedureDate: new Date().toISOString().split('T')[0],
+        notes: '',
+      });
+      setShowRequestForm(false);
+      setError(null);
+    } catch (err) {
+      console.error('Error details:', err);
+      console.error('Response:', err.response);
+      const errorMsg = err.response?.data?.error || err.message || 'Unknown error';
+      setError('Failed to request procedure: ' + errorMsg);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  return (
+    <div>
+      <h1 className="text-3xl font-bold mb-6" style={{ color: '#7c3aed' }}>Procedures</h1>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+
+      {/* Search Form */}
+      <div className="bg-white rounded-lg shadow p-6 mb-6">
+        <h2 className="text-xl font-bold mb-4">Search Patient</h2>
+        <form onSubmit={handleSearch} className="space-y-4">
+          <div className="flex gap-4">
+            <div className="flex-1">
+              <label className="block text-sm font-semibold mb-2">Patient EMBG</label>
+              <input
+                type="text"
+                value={embg}
+                onChange={(e) => setEmbg(e.target.value)}
+                placeholder="e.g., 1402994123456"
+                className="w-full px-4 py-2 border rounded-lg"
+              />
+            </div>
+            <div className="flex items-end">
+              <button
+                type="submit"
+                disabled={loading}
+                className="bg-purple-600 text-white px-8 py-2 rounded-full hover:bg-purple-700 disabled:bg-gray-400"
+              >
+                {loading ? 'Searching...' : 'Search'}
+              </button>
+            </div>
+          </div>
+        </form>
+      </div>
+
+      {/* Patient Procedures */}
+      {searched && patient && (
+        <div className="space-y-6">
+          {/* Patient Info */}
+          <div className="bg-white rounded-lg shadow p-6">
+            <div className="flex justify-between items-start mb-4">
+              <h2 className="text-2xl font-bold">{patient.firstName} {patient.lastName}</h2>
+              {!showRequestForm && (
+                <button
+                  onClick={() => setShowRequestForm(true)}
+                  className="bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700"
+                >
+                  Request Procedure
+                </button>
+              )}
+            </div>
+            <div className="grid grid-cols-4 gap-4">
+              <div>
+                <p className="text-sm text-gray-600">EMBG</p>
+                <p className="font-semibold">{patient.embg}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Blood Type</p>
+                <p className="font-semibold">{patient.bloodType || 'N/A'}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Date of Birth</p>
+                <p className="font-semibold">{patient.dateOfBirth}</p>
+              </div>
+            </div>
+          </div>
+
+          {/* Request Procedure Form */}
+          {showRequestForm && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Request Procedure</h3>
+              <form onSubmit={handleRequestProcedure} className="space-y-4">
+                <div className="grid grid-cols-2 gap-4">
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Procedure</label>
+                    <select
+                      value={requestData.procedureId}
+                      onChange={(e) => setRequestData({ ...requestData, procedureId: e.target.value })}
+                      className="w-full px-4 py-2 border rounded-lg"
+                      required
+                    >
+                      <option value="">Select a procedure</option>
+                      {availableProcedures.map((proc) => (
+                        <option key={proc.procedureId} value={proc.procedureId}>
+                          {proc.procedureType}
+                        </option>
+                      ))}
+                    </select>
+                  </div>
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Procedure Date</label>
+                    <input
+                      type="date"
+                      value={requestData.procedureDate}
+                      onChange={(e) => setRequestData({ ...requestData, procedureDate: e.target.value })}
+                      className="w-full px-4 py-2 border rounded-lg"
+                    />
+                  </div>
+                </div>
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Notes</label>
+                  <textarea
+                    value={requestData.notes}
+                    onChange={(e) => setRequestData({ ...requestData, notes: e.target.value })}
+                    placeholder="Additional notes for the procedure"
+                    className="w-full px-4 py-2 border rounded-lg"
+                    rows="3"
+                  />
+                </div>
+                <div className="flex gap-4">
+                  <button
+                    type="submit"
+                    disabled={loading}
+                    className="bg-green-600 text-white px-6 py-2 rounded hover:bg-green-700 disabled:bg-gray-400"
+                  >
+                    {loading ? 'Requesting...' : 'Request Procedure'}
+                  </button>
+                  <button
+                    type="button"
+                    onClick={() => setShowRequestForm(false)}
+                    className="bg-gray-400 text-white px-6 py-2 rounded hover:bg-gray-500"
+                  >
+                    Cancel
+                  </button>
+                </div>
+              </form>
+            </div>
+          )}
+
+          {/* Performed Procedures */}
+          {performedProcedures && performedProcedures.length > 0 && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Performed Procedures</h3>
+              <div className="space-y-3">
+                {performedProcedures.map((proc) => (
+                  <div key={proc.performedId} className="border-l-4 border-purple-500 pl-4 py-2">
+                    <p className="font-semibold text-lg">{proc.procedure?.procedureType || 'Procedure'}</p>
+                    <p className="text-sm text-gray-600">Requested by: {proc.doctor?.firstName} {proc.doctor?.lastName}</p>
+                    <p className="text-sm text-gray-600">Procedure Date: {proc.procedureDate}</p>
+                    {proc.notes && (
+                      <p className="text-sm text-gray-600">Notes: {proc.notes}</p>
+                    )}
+                  </div>
+                ))}
+              </div>
+            </div>
+          )}
+
+          {/* Procedure Results */}
+          {procedureResults && procedureResults.length > 0 && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h3 className="text-xl font-bold mb-4">Procedure Results</h3>
+              <div className="space-y-4">
+                {procedureResults.map((result) => (
+                  <div key={result.resultId} className="border-l-4 border-orange-500 pl-4 py-3 bg-orange-50 rounded">
+                    <p className="font-semibold text-lg text-orange-700">{result.procedure?.procedureType || 'Procedure'}</p>
+                    <p className="text-sm text-gray-700 mt-2"><strong>Outcome:</strong> {result.resultDescription}</p>
+                    <p className="text-sm text-gray-600">Result Date: {result.resultDate}</p>
+                  </div>
+                ))}
+              </div>
+            </div>
+          )}
+
+          {/* Link to submit results */}
+          {performedProcedures && performedProcedures.length > 0 && (
+            <div className="bg-yellow-50 rounded-lg p-6">
+              <h3 className="text-lg font-semibold text-yellow-800 mb-3">Submit Procedure Results</h3>
+              <p className="text-sm text-gray-700 mb-4">
+                {performedProcedures.length} procedure{performedProcedures.length !== 1 ? 's' : ''} awaiting results
+              </p>
+              <a
+                href="/procedures/results"
+                className="inline-block bg-yellow-600 text-white px-6 py-2 rounded hover:bg-yellow-700"
+              >
+                Submit Procedure Results
+              </a>
+            </div>
+          )}
+
+          {/* No procedures message */}
+          {!performedProcedures || (performedProcedures.length === 0 && !procedureResults?.length) && (
+            <div className="bg-blue-50 rounded-lg p-6 text-center">
+              <p className="text-gray-600">No procedures for this patient</p>
+            </div>
+          )}
+        </div>
+      )}
+
+      {/* No search performed */}
+      {!searched && (
+        <div className="bg-gray-50 rounded-lg p-12 text-center">
+          <p className="text-gray-600 text-lg">Enter a patient EMBG to request procedures</p>
+        </div>
+      )}
+    </div>
+  );
+}
+
+export default ProcedureList;
Index: frontend/src/pages/procedures/ProcedureResultForm.js
===================================================================
--- frontend/src/pages/procedures/ProcedureResultForm.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/pages/procedures/ProcedureResultForm.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,291 @@
+import React, { useState, useEffect } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { procedureService } from '../../services/procedureService';
+import { patientService } from '../../services/patientService';
+import { medicalRecordService } from '../../services/medicalRecordService';
+import ErrorAlert from '../../components/ErrorAlert';
+import SuccessAlert from '../../components/SuccessAlert';
+
+function ProcedureResultForm() {
+  const navigate = useNavigate();
+  const [error, setError] = useState(null);
+  const [success, setSuccess] = useState(null);
+  const [loading, setLoading] = useState(false);
+  const [searchEmbg, setSearchEmbg] = useState('');
+  const [patient, setPatient] = useState(null);
+  const [performedProcedures, setPerformedProcedures] = useState([]);
+  const [selectedProcedure, setSelectedProcedure] = useState(null);
+  const [medicalRecordId, setMedicalRecordId] = useState(null);
+
+  const [formData, setFormData] = useState({
+    medicalRecordId: '',
+    procedureId: '',
+    resultDescription: '',
+    resultDate: new Date().toISOString().split('T')[0],
+  });
+
+  const handleSearch = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setLoading(true);
+
+    try {
+      if (!searchEmbg.trim()) {
+        setError('Please enter patient EMBG');
+        setLoading(false);
+        return;
+      }
+
+      const patientRes = await patientService.getPatientByEmbg(searchEmbg);
+      setPatient(patientRes.data);
+
+      // Get medical record
+      const medicalRecordRes = await medicalRecordService.getMedicalRecordByPatientId(patientRes.data.patientId);
+      setMedicalRecordId(medicalRecordRes.data.recordId);
+
+      // Get performed procedures
+      try {
+        const proceduresRes = await procedureService.getPerformedProceduresForPatient(patientRes.data.patientId);
+        setPerformedProcedures(Array.isArray(proceduresRes.data) ? proceduresRes.data : []);
+      } catch (err) {
+        console.error('Failed to fetch performed procedures:', err);
+        setPerformedProcedures([]);
+      }
+
+      setFormData(prev => ({
+        ...prev,
+        medicalRecordId: medicalRecordRes.data.recordId
+      }));
+    } catch (err) {
+      console.error('Search error:', err);
+      setError(`Error: ${err.response?.data?.error || err.message || 'Patient not found'}`);
+      setPatient(null);
+      setPerformedProcedures([]);
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  const handleSelectProcedure = (procedure) => {
+    setSelectedProcedure(procedure);
+    setFormData(prev => ({
+      ...prev,
+      procedureId: procedure.procedure?.procedureId || procedure.procedureId,
+      medicalRecordId: medicalRecordId || prev.medicalRecordId
+    }));
+  };
+
+  const handleChange = (e) => {
+    const { name, value } = e.target;
+    setFormData({
+      ...formData,
+      [name]: value,
+    });
+  };
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    setError(null);
+    setSuccess(null);
+
+    if (!formData.medicalRecordId || !formData.procedureId || !formData.resultDescription) {
+      setError('Please fill in all required fields');
+      return;
+    }
+
+    try {
+      setLoading(true);
+
+      const submitData = {
+        medicalRecordId: parseInt(formData.medicalRecordId),
+        procedureId: parseInt(formData.procedureId),
+        resultDescription: formData.resultDescription,
+        resultDate: formData.resultDate,
+      };
+
+      await procedureService.submitProcedureResult(submitData);
+
+      setSuccess('Procedure result submitted successfully!');
+      setFormData({
+        medicalRecordId: '',
+        procedureId: '',
+        resultDescription: '',
+        resultDate: new Date().toISOString().split('T')[0],
+      });
+      setSelectedProcedure(null);
+      setPatient(null);
+      setSearchEmbg('');
+      setPerformedProcedures([]);
+
+      // Navigate back to procedures page after a short delay
+      setTimeout(() => navigate('/procedures'), 2000);
+    } catch (err) {
+      setError('Failed to submit procedure result: ' + (err.response?.data?.error || err.message));
+      setLoading(false);
+    }
+  };
+
+  return (
+    <div className="max-w-3xl mx-auto">
+      <h1 className="text-3xl font-bold mb-6">Submit Procedure Result</h1>
+
+      {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
+      {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />}
+
+      {/* Search Patient Form */}
+      <div className="bg-white rounded-lg shadow p-6 mb-6">
+        <h2 className="text-xl font-bold mb-4">Search Patient</h2>
+        <form onSubmit={handleSearch} className="flex gap-4">
+          <input
+            type="text"
+            value={searchEmbg}
+            onChange={(e) => setSearchEmbg(e.target.value)}
+            placeholder="Enter patient EMBG"
+            className="flex-1 px-4 py-2 border rounded-lg"
+          />
+          <button
+            type="submit"
+            disabled={loading}
+            className="bg-purple-600 text-white px-8 py-2 rounded hover:bg-purple-700 disabled:bg-gray-400"
+          >
+            {loading ? 'Searching...' : 'Search'}
+          </button>
+        </form>
+      </div>
+
+      {/* Patient Info and Performed Procedures */}
+      {patient && (
+        <div className="space-y-6">
+          {/* Patient Card */}
+          <div className="bg-white rounded-lg shadow p-6">
+            <h2 className="text-2xl font-bold mb-4">{patient.firstName} {patient.lastName}</h2>
+            <div className="grid grid-cols-3 gap-4">
+              <div>
+                <p className="text-sm text-gray-600">EMBG</p>
+                <p className="font-semibold">{patient.embg}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Blood Type</p>
+                <p className="font-semibold">{patient.bloodType || 'N/A'}</p>
+              </div>
+              <div>
+                <p className="text-sm text-gray-600">Date of Birth</p>
+                <p className="font-semibold">{patient.dateOfBirth}</p>
+              </div>
+            </div>
+          </div>
+
+          {/* Performed Procedures List */}
+          {performedProcedures.length > 0 ? (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h2 className="text-xl font-bold mb-4">Performed Procedures</h2>
+              <div className="space-y-2">
+                {performedProcedures.map((proc) => (
+                  <div
+                    key={proc.performedId}
+                    onClick={() => handleSelectProcedure(proc)}
+                    className={`p-4 rounded-lg border-2 cursor-pointer transition ${
+                      selectedProcedure?.performedId === proc.performedId
+                        ? 'border-purple-600 bg-blue-50'
+                        : 'border-gray-200 bg-gray-50 hover:border-blue-400'
+                    }`}
+                  >
+                    <p className="font-semibold text-lg">{proc.procedure?.procedureType || 'Procedure'}</p>
+                    <p className="text-sm text-gray-600">Requested by: {proc.doctor?.firstName} {proc.doctor?.lastName}</p>
+                    <p className="text-sm text-gray-600">Procedure Date: {proc.procedureDate}</p>
+                    {proc.notes && (
+                      <p className="text-sm text-gray-600 mt-1">Notes: {proc.notes}</p>
+                    )}
+                  </div>
+                ))}
+              </div>
+            </div>
+          ) : (
+            <div className="bg-blue-50 rounded-lg p-6 text-center">
+              <p className="text-gray-600">No performed procedures for this patient</p>
+            </div>
+          )}
+
+          {/* Result Submission Form */}
+          {selectedProcedure && (
+            <div className="bg-white rounded-lg shadow p-6">
+              <h2 className="text-xl font-bold mb-4">Submit Result for {selectedProcedure.procedure?.procedureType}</h2>
+              <form onSubmit={handleSubmit} className="space-y-4">
+                <div className="grid grid-cols-2 gap-4">
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Procedure ID</label>
+                    <input
+                      type="number"
+                      value={formData.procedureId}
+                      disabled
+                      className="w-full px-4 py-2 border rounded-lg bg-gray-100"
+                    />
+                  </div>
+                  <div>
+                    <label className="block text-sm font-semibold mb-2">Medical Record ID</label>
+                    <input
+                      type="number"
+                      value={formData.medicalRecordId}
+                      disabled
+                      className="w-full px-4 py-2 border rounded-lg bg-gray-100"
+                    />
+                  </div>
+                </div>
+
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Procedure Outcome *</label>
+                  <textarea
+                    name="resultDescription"
+                    value={formData.resultDescription}
+                    onChange={handleChange}
+                    placeholder="Describe the procedure outcome and any findings"
+                    className="w-full px-4 py-2 border rounded-lg"
+                    rows="6"
+                    required
+                  />
+                </div>
+
+                <div>
+                  <label className="block text-sm font-semibold mb-2">Result Date</label>
+                  <input
+                    type="date"
+                    name="resultDate"
+                    value={formData.resultDate}
+                    onChange={handleChange}
+                    className="w-full px-4 py-2 border rounded-lg"
+                  />
+                </div>
+
+                <div className="flex gap-4 pt-6">
+                  <button
+                    type="submit"
+                    disabled={loading}
+                    className="flex-1 bg-purple-600 text-white py-2 rounded-lg hover:bg-purple-700 disabled:bg-gray-400"
+                  >
+                    {loading ? 'Submitting...' : 'Submit Result'}
+                  </button>
+                  <button
+                    type="button"
+                    onClick={() => navigate('/procedures')}
+                    className="flex-1 bg-gray-400 text-white py-2 rounded-lg hover:bg-gray-500"
+                  >
+                    Cancel
+                  </button>
+                </div>
+              </form>
+            </div>
+          )}
+        </div>
+      )}
+
+      {/* No search performed */}
+      {!patient && (
+        <div className="bg-gray-50 rounded-lg p-12 text-center">
+          <p className="text-gray-600 text-lg">Enter a patient EMBG to view performed procedures</p>
+        </div>
+      )}
+    </div>
+  );
+}
+
+export default ProcedureResultForm;
Index: frontend/src/services/billingService.js
===================================================================
--- frontend/src/services/billingService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/services/billingService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,36 @@
+import apiClient from './api';
+
+const ENDPOINT = '/billing';
+
+export const billingService = {
+  getAllBillings: () => apiClient.get(ENDPOINT),
+
+  getBillingById: (id) => apiClient.get(`${ENDPOINT}/${id}`),
+
+  getBillingHistoryForPatient: (patientId) => apiClient.get(`${ENDPOINT}/patient/${patientId}`),
+
+  getBillingDetail: (id) => apiClient.get(`${ENDPOINT}/${id}/detail`),
+
+  generateBillingRecord: (billing) => apiClient.post(ENDPOINT, billing),
+
+  updatePaymentStatus: (id, paymentData) => apiClient.patch(`${ENDPOINT}/${id}/payment-status`, paymentData),
+
+  downloadInvoicePDF: async (billId) => {
+    try {
+      const response = await apiClient.get(`${ENDPOINT}/${billId}/invoice-pdf`, {
+        responseType: 'blob'
+      });
+      // Create a blob URL and download
+      const url = window.URL.createObjectURL(new Blob([response.data]));
+      const link = document.createElement('a');
+      link.href = url;
+      link.setAttribute('download', `invoice-${billId}.pdf`);
+      document.body.appendChild(link);
+      link.click();
+      link.parentNode.removeChild(link);
+      window.URL.revokeObjectURL(url);
+    } catch (error) {
+      throw error;
+    }
+  },
+};
Index: frontend/src/services/labService.js
===================================================================
--- frontend/src/services/labService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/services/labService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,55 @@
+import api from './api';
+
+const labService = {
+  // Get all lab tests
+  getAllLabTests: () => {
+    return api.get('/lab-tests');
+  },
+
+  // Get a specific lab test
+  getLabTestById: (testId) => {
+    return api.get(`/lab-tests/${testId}`);
+  },
+
+  // Create a new lab test definition
+  createLabTest: (testData) => {
+    return api.post('/lab-tests', testData);
+  },
+
+  // Update a lab test
+  updateLabTest: (testId, testData) => {
+    return api.put(`/lab-tests/${testId}`, testData);
+  },
+
+  // Request a lab test for a patient (UC013)
+  requestLabTest: (requestData) => {
+    return api.post('/lab-tests/request', requestData);
+  },
+
+  // Get lab test requests for a patient
+  getLabTestRequestsForPatient: (patientId) => {
+    return api.get(`/lab-tests/requests/patient/${patientId}`);
+  },
+
+  // Get lab test requests by doctor
+  getLabTestRequestsByDoctor: (doctorId) => {
+    return api.get(`/lab-tests/requests/doctor/${doctorId}`);
+  },
+
+  // Submit lab results (UC014)
+  submitLabResult: (resultData) => {
+    return api.post('/lab-tests/results', resultData);
+  },
+
+  // Get lab results for a medical record
+  getLabResultsForMedicalRecord: (medicalRecordId) => {
+    return api.get(`/lab-tests/results/medical-record/${medicalRecordId}`);
+  },
+
+  // Get pending lab tests (for lab technicians)
+  getPendingLabTests: () => {
+    return api.get('/lab-tests/requests/pending');
+  },
+};
+
+export { labService };
Index: frontend/src/services/medicalItemsService.js
===================================================================
--- frontend/src/services/medicalItemsService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/services/medicalItemsService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,11 @@
+import apiClient from './api';
+
+export const medicalItemsService = {
+  getDiagnosesForPatient: (patientId) => apiClient.get(`/diagnoses/patient/${patientId}`),
+
+  getPrescriptionsForMedicalRecord: (medicalRecordId) => apiClient.get(`/prescriptions/medical-record/${medicalRecordId}`),
+
+  getAllergiesForMedicalRecord: (medicalRecordId) => apiClient.get(`/medical-records/${medicalRecordId}/allergies`),
+
+  getSymptomsForMedicalRecord: (medicalRecordId) => apiClient.get(`/medical-records/${medicalRecordId}/symptoms`),
+};
Index: frontend/src/services/procedureService.js
===================================================================
--- frontend/src/services/procedureService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
+++ frontend/src/services/procedureService.js	(revision f05de0502f3c7c6a4149420915249e784c827f57)
@@ -0,0 +1,55 @@
+import api from './api';
+
+const procedureService = {
+  // Get all available procedures
+  getAllProcedures: () => {
+    return api.get('/performed-procedures/available');
+  },
+
+  // Request a procedure for a patient
+  requestProcedure: (requestData) => {
+    return api.post('/performed-procedures/request', requestData);
+  },
+
+  // Get performed procedures for a patient
+  getPerformedProceduresForPatient: (patientId) => {
+    return api.get(`/performed-procedures/patient/${patientId}`);
+  },
+
+  // Get procedures for a medical record
+  getProceduresForMedicalRecord: (medicalRecordId) => {
+    return api.get(`/performed-procedures/medical-record/${medicalRecordId}`);
+  },
+
+  // Record a procedure (UC016)
+  recordProcedure: (procedureData) => {
+    return api.post('/performed-procedures/record', null, {
+      params: {
+        procedureId: procedureData.procedureId,
+        doctorId: procedureData.doctorId,
+        patientId: procedureData.patientId,
+        diagnosisId: procedureData.diagnosisId,
+        procedureDate: procedureData.procedureDate
+      }
+    });
+  },
+
+  // Submit procedure result (UC017)
+  submitProcedureResult: (resultData) => {
+    return api.post('/performed-procedures/results', resultData);
+  },
+
+  // Get procedure results for a medical record
+  getProcedureResultsForMedicalRecord: (medicalRecordId) => {
+    return api.get(`/performed-procedures/results/medical-record/${medicalRecordId}`);
+  },
+
+  // Record procedure outcome (older endpoint)
+  recordProcedureOutcome: (procedureId, notes) => {
+    return api.patch(`/performed-procedures/${procedureId}/outcome`, null, {
+      params: { notes }
+    });
+  }
+};
+
+export { procedureService };
