Skip to content

Samples (العينات)

Samples represent biological specimens collected from patients. Each sample is linked to a lab request and a specimen type, and progresses through collection, receiving at the lab, and eventual processing or rejection.

Entity Attributes

FieldTypeRequiredDescription
idintegerautoPrimary key
sample_numberstringautoAuto-generated sample number
barcodestringautoSample barcode for tracking
lab_request_idFKyesAssociated lab request
patient_idFKyesPatient who provided the sample
specimen_type_idFKyesType of specimen collected
statusenumautopending, collected, received, processing, completed, rejected
collected_atdatetimeautoWhen sample was collected
collected_byFKautoUser who collected the sample
received_atdatetimeautoWhen sample was received at the lab
received_byFKautoUser who received the sample
rejected_atdatetimeautoWhen sample was rejected
rejected_byFKautoUser who rejected the sample
rejection_reasonstringnoReason for rejection
notestextnoSample notes
branch_idFKnoBranch location
created_atdatetimeautoCreation timestamp
updated_atdatetimeautoLast update timestamp

Status Workflow

API Endpoints

MethodEndpointDescriptionPermission
GET/api/lis/samplesList samples (paginated)lis.samples.view
POST/api/lis/samplesCreate a samplelis.samples.create
GET/api/lis/samples/{id}Get sample detailslis.samples.view
POST/api/lis/samples/{id}/collectMark sample as collectedlis.samples.update
POST/api/lis/samples/{id}/receiveReceive sample at the lablis.samples.update
POST/api/lis/samples/{id}/rejectReject samplelis.samples.update

Query Parameters (List)

ParameterTypeDescription
searchstringSearch by sample number or barcode
statusstringFilter by status
patient_idintegerFilter by patient
lab_request_idintegerFilter by lab request
specimen_type_idintegerFilter by specimen type
fromdateStart date filter
todateEnd date filter

Request / Response Examples

Create Sample

bash
curl -X POST /api/lis/samples \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "lab_request_id": 1,
    "patient_id": 1,
    "specimen_type_id": 1,
    "branch_id": 1
  }'
dart
final response = await dio.post('/api/lis/samples', data: {
  'lab_request_id': 1,
  'patient_id': 1,
  'specimen_type_id': 1,
  'branch_id': 1,
});

Collect Sample

bash
curl -X POST /api/lis/samples/1/collect \
  -H "Authorization: Bearer {token}"
dart
final response = await dio.post('/api/lis/samples/1/collect');

Reject Sample

bash
curl -X POST /api/lis/samples/1/reject \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"rejection_reason": "Hemolyzed sample"}'
dart
final response = await dio.post('/api/lis/samples/1/reject', data: {
  'rejection_reason': 'Hemolyzed sample',
});

Business Rules

  1. Status transitions -- collect only from pending; receive only from collected; reject from collected or received.
  2. Auto-tracking -- Collection, receiving, and rejection timestamps and user IDs are automatically recorded.
  3. Barcode -- Each sample gets a unique barcode for physical tracking and machine interfacing.
  4. Chain of custody -- Every status change can be tracked via Compliance - Custody Logs.
  5. Rejection -- Rejected samples require a new sample to be collected.

Moon ERP API Documentation