0% found this document useful (0 votes)
132 views

Pragma Solidity

This smart contract defines structures for regulatory authorities, physicians, patients, pharmacists, prescriptions, and data analyzers. It allows regulatory authorities to add physicians, patients, pharmacists, and data analyzers. Physicians can add patients and create prescriptions for them. Pharmacists can deliver prescriptions. The contract tracks prescription details and status.

Uploaded by

georgiana_topia
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views

Pragma Solidity

This smart contract defines structures for regulatory authorities, physicians, patients, pharmacists, prescriptions, and data analyzers. It allows regulatory authorities to add physicians, patients, pharmacists, and data analyzers. Physicians can add patients and create prescriptions for them. Pharmacists can deliver prescriptions. The contract tracks prescription details and status.

Uploaded by

georgiana_topia
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

pragma solidity ^0.5.

1;

pragma experimental ABIEncoderV2;

contract MedicalPrescriptionContract {

struct RegulatoryAuthority {

string name;

bool isValid;

struct Physician {

uint license;

string name;

string lastname;

bytes32 signature;

int[] prescriptionsCode;

bool isValid;

struct Pharmacist {

string name;

bool isValid;

struct Patient {

string name;

string lastname;

string affiliateNumber;

uint sex;

uint birthDay;

int[] prescriptionsCode;
bool isValid;

struct DataAnalyzer {

string name;

bool isValid;

struct Prescription {

address physicianAddress;

address patientAddress;

string[] drugs;

string diagnosis;

uint date;

string place;

bytes32 signature;

PrescriptionStatus status;

bool isValid;

enum PrescriptionStatus {CREATED, DELIVERED}

address owner;

mapping(address => RegulatoryAuthority) regulatoryAuthorities;

mapping(address => Physician) physicians;

mapping(address => Patient) patients;

mapping(address => Pharmacist) pharmacists;

mapping(int => Prescription) prescriptions;

int prescriptionsLength;

mapping(address => DataAnalyzer) dataAnalyzers;


constructor() public {

owner = msg.sender;

prescriptionsLength = 0;

modifier onlyOwner {

require(

msg.sender == owner,

"Only owner can call this function."

);

_;

modifier onlyRegulatoryAuthority {

require(

regulatoryAuthorities[msg.sender].isValid,

"Only Regulatory Authority can call this function."

);

_;

modifier onlyPhysician {

require(

physicians[msg.sender].isValid,

"Only Physicians can call this function."

);

_;

modifier onlyPhysiciansOrPatientsOrPharmacists {

require(
physicians[msg.sender].isValid || patients[msg.sender].isValid ||
pharmacists[msg.sender].isValid,

"Only Physicians, Patients or Pharmacists can call this function."

);

_;

function addRegulatoryAuthority(address _regulatoryAuthority, string memory _name) public


onlyOwner returns (bool success) {

if (regulatoryAuthorities[_regulatoryAuthority].isValid) return false;

regulatoryAuthorities[_regulatoryAuthority].name = _name;

regulatoryAuthorities[_regulatoryAuthority].isValid = true;

return true;

function getRegulatoryAuthorities(address _regulatoryAuthority) public view onlyOwner


returns(bool success, string memory name){

return (regulatoryAuthorities[_regulatoryAuthority].isValid,
regulatoryAuthorities[_regulatoryAuthority].name);

function addPhysician(address _physician, uint _license, string memory _name, string memory
_lastname, bytes32 _signature) public onlyRegulatoryAuthority returns (bool success) {

if (physicians[_physician].isValid) return false;

physicians[_physician].license = _license;

physicians[_physician].name = _name;

physicians[_physician].lastname = _lastname;

physicians[_physician].signature = _signature;

physicians[_physician].isValid = true;

return true;

}
function getPhysician(address _physician) public view returns(bool success, uint _license, string
memory physicianName, string memory physicianLastname) {

return (physicians[_physician].isValid,

physicians[_physician].license,

physicians[_physician].name,

physicians[_physician].lastname

);

function addPatient(address _patient, string memory _name, string memory _lastname, string
memory _affiliateNumber, uint _sex, uint _birthDay) public onlyPhysician returns (bool success) {

if (patients[_patient].isValid) return false;

patients[_patient].name = _name;

patients[_patient].lastname = _lastname;

patients[_patient].affiliateNumber = _affiliateNumber;

patients[_patient].sex = _sex;

patients[_patient].birthDay = _birthDay;

patients[_patient].isValid = true;

return true;

function addPharmacist(address _pharmacist, string memory _name) public


onlyRegulatoryAuthority returns (bool success) {

if (pharmacists[_pharmacist].isValid) return false;

pharmacists[_pharmacist].name = _name;

pharmacists[_pharmacist].isValid = true;

return true;

function addDataAnalyzer(address _dataAnalyzer, string memory _name) public


onlyRegulatoryAuthority returns (bool success) {

if (dataAnalyzers[_dataAnalyzer].isValid) return false;


dataAnalyzers[_dataAnalyzer].name = _name;

dataAnalyzers[_dataAnalyzer].isValid = true;

return true;

function generatePresciptionCode(int index) private returns (int) {

//generate hash

return index;

function createPresciption(address _patient, string[] memory _drugs, string memory _diagnosis,


uint _date, string memory _place) public onlyPhysician returns (bool success, int prescriptionCode) {

int code = generatePresciptionCode(prescriptionsLength);

if (prescriptions[code].isValid || !patients[_patient].isValid) return (false, -1);

prescriptions[code].physicianAddress = msg.sender;

prescriptions[code].patientAddress = _patient;

prescriptions[code].drugs = _drugs;

prescriptions[code].diagnosis = _diagnosis;

prescriptions[code].date = _date;

prescriptions[code].place = _place;

prescriptions[code].signature = physicians[msg.sender].signature;

prescriptions[code].status = PrescriptionStatus.CREATED;

prescriptions[code].isValid = true;

physicians[msg.sender].prescriptionsCode.push(code);

patients[_patient].prescriptionsCode.push(code);

prescriptionsLength += 1;

return (true, code);


}

function getPresciption(int _prescriptionCode) public onlyPhysiciansOrPatientsOrPharmacists


returns (bool success, address physicianAddress, address patientAddress, string[] memory drugs,
string memory diagnosis, uint date, string memory place, bytes32 signature, uint status) {

Prescription memory prescription = prescriptions[_prescriptionCode];

//physicians can only get their own prescription

if(physicians[msg.sender].isValid) {

require(msg.sender == prescription.physicianAddress, "You only can get your own


prescription");

//patients can only get their own prescription

if(patients[msg.sender].isValid) {

require(msg.sender == prescription.patientAddress, "You only can get your own


prescription");

//delivered to Pharmacists

if(pharmacists[msg.sender].isValid) {

prescriptions[_prescriptionCode].status = PrescriptionStatus.DELIVERED;

prescription.status = PrescriptionStatus.DELIVERED;

return (prescription.isValid,

prescription.physicianAddress,

prescription.patientAddress,

prescription.drugs,

prescription.diagnosis,

prescription.date,

prescription.place,
prescription.signature,

uint(prescription.status)

);

You might also like