Drug master
Feature
Allow Owner to manage medicines and drugs. Each drug is categorized further into brand, dose, and pack.
💡
Feature → Backend + Frontend
Backend
1. DrugBrandMaster
ensure spreadsheet: DrugBrandMaster
withFields: ["Brand"]
ofTypes: [text]
readRoleSet: [Owner]
insertRoleSet: [Owner]
removeRoleSet: [Owner]
updateRoleSet: [Owner]
modules: ["Pharmacy"]
ensure layoutSpreadsheet ListLayout kind: list
filter.showSearchBar: true
firstLine.first.lineFields: [Brand]
ensure form EntityDrugBrand
modules: ["Pharmacy"]
label: "Brand"
2. DrugDoseMaster
ensure spreadsheet: DrugDoseMaster
withFields: ["Dose"]
ofTypes: [text]
readRoleSet: [Owner]
insertRoleSet: [Owner]
removeRoleSet: [Owner]
updateRoleSet: [Owner]
modules: ["Pharmacy"]
ensure layoutSpreadsheet ListLayout kind: list
filter.showSearchBar: true
firstLine.first.lineFields: [Dose]
ensure form EntityDrugDose
modules: ["Pharmacy"]
label: "Dose"
3. DrugPackMaster
ensure spreadsheet: DrugPackMaster
withFields: ["Pack"]
ofTypes: [text]
readRoleSet: [Owner]
insertRoleSet: [Owner]
removeRoleSet: [Owner]
updateRoleSet: [Owner]
modules: ["Pharmacy"]
ensure layoutSpreadsheet ListLayout kind: list
filter.showSearchBar: true
firstLine.first.lineFields: [Pack]
ensure form EntityDrugPack
modules: ["Pharmacy"]
label: "Pack"
4. DrugMaster
a. Spreadsheet
ensure spreadsheet: DrugMaster
withFields: ["Name", "Ingredient", "MRP", "Discount", "DiscountedPrice"]
ofTypes: [text, text, number, number, number]
modules: ["Pharmacy"]
readRoleSet: [Owner]
insertRoleSet: [Owner]
removeRoleSet: [Owner]
updateRoleSet: [Owner]
ensure form EntityDrug
modules: ["Pharmacy"]
label: "Drug"
ensure section: Details
ensure field Discount suffix: "%"
ensure field MRP prefix: "₹"
ensure field DiscountedPrice disabled: true
a. Reference Brand
ensure field BrandRef kind: ref
spreadsheet: DrugBrandMaster
layoutSpreadsheet: ListLayout
copyFieldMap: {
'BrandMasterRowId': '$RowId',
'Brand': 'Brand'
}
ensure field BrandMasterRowId
permissionMatrix: {
'defaultPermission': 'invisible'
}
ensure field BrandRef categoryFilterDisplayField : Brand
b. Reference Dose
ensure field DoseRef kind: ref
spreadsheet: DrugDoseMaster
layoutSpreadsheet: ListLayout
copyFieldMap: {
'DoseMasterRowId': '$RowId',
'Dose': 'Dose'
}
ensure field DoseMasterRowId
permissionMatrix: {
'defaultPermission': 'invisible'
}
ensure field DoseRef categoryFilterDisplayField : Dose
c. Reference Pack
ensure field PackRef kind: ref
spreadsheet: DrugPackMaster
layoutSpreadsheet: ListLayout
copyFieldMap: {
'PackMasterRowId': '$RowId',
'Pack': 'Pack'
}
ensure field PackMasterRowId
permissionMatrix: {
'defaultPermission': 'invisible'
}
ensure field PackRef categoryFilterDisplayField : Pack
d. Formulas
ensure formula DiscountedPriceFormula
assignToField: DiscountedPrice
formula: "(${f:MRP} - (${f:MRP} * (${f:Discount} / 100)))"
e. Searchable
ensure spreadsheet DrugMaster
searchables: [Name, Ingredient, Brand, Dose, Pack]
queryables: [DiscountedPrice]
f. ListLayout
// Layout of list item as below,
//
// AmazingMed - 123
// Ingredient# Paracetamol
// Brand# Novartis
// Dose# 50 mg, Pack# 5 tablets
// MRP# Rs 1550, Discount %# 34%, DiscountedPrice# Rs 1023
ensure layoutSpreadsheet ListLayout kind: list
filter.kind: tree
filter.showSearchBar: true
filter.categoryFields: [BrandRef, DoseRef, PackRef]
filter.advanceFilterFields: [DiscountedPrice]
filter.sortByFields: [DiscountedPrice, $CreatedOn]
firstLine.first.lineFields: [Name]
secondLine.first.lineFields: [Ingredient]
secondLine.first.showLabels: true
thirdLine.first.lineFields: [Brand]
thirdLine.first.showLabels: true
fourthLine.first.lineFields: [Dose, Pack]
fourthLine.first.showLabels: true
fifthLine.first.lineFields: [MRP, Discount, DiscountedPrice]
fifthLine.first.showLabels: true
Frontend
1. Actions
a. BrandMaster
ensure action BrandMaster kind: spreadsheetEditor
modules: ["Pharmacy"]
icon: "CategoryRounded"
spreadsheet: DrugBrandMaster
layoutSpreadsheet: ListLayout
bulkInsertRoleSet: [Owner]
b. DoseMaster
ensure action DoseMaster kind: spreadsheetEditor
modules: ["Pharmacy"]
icon: "CategoryRounded"
spreadsheet: DrugDoseMaster
layoutSpreadsheet: ListLayout
bulkInsertRoleSet: [Owner]
c. PackMaster
ensure action PackMaster kind: spreadsheetEditor
modules: ["Pharmacy"]
icon: "CategoryRounded"
spreadsheet: DrugPackMaster
layoutSpreadsheet: ListLayout
bulkInsertRoleSet: [Owner]
d. DrugMaster
ensure spreadsheet DrugMaster
ensure layoutSpreadsheet Table kind: table
showComps: [Name, Ingredient, MRP, Discount, DiscountedPrice, Brand, Dose, Pack]
ensure action DrugMaster kind: spreadsheetEditor
modules: ["Pharmacy"]
icon: "DatasetRounded"
spreadsheet: DrugMaster
layoutSpreadsheet: Table
bulkInsertRoleSet: [Owner]
2. Group actions
ensure group DrugMaster
modules: ["Pharmacy"]
pinnedActions: [DrugMaster]
actionPermission: {
'BrandMaster': {
'menuGroup': 'MASTER',
'roles': [
'Owner'
]
},
'DoseMaster': {
'menuGroup': 'MASTER',
'roles': [
'Owner'
]
},
'PackMaster': {
'menuGroup': 'MASTER',
'roles': [
'Owner'
]
},
'DrugMaster': {
'menuGroup': 'MASTER',
'roles': [
'Owner'
]
}
}
Agent
1. Configure Drive folder
ensure root
driveSheetMap.driveFolderName: BleachPharma
2. DrugBrandMaster.xlsx
ensure driveSheet DrugBrandMaster
partitionedData: false
spreadsheet: DrugBrandMaster
roles: [Owner]
exportKindSet: ["xlsx"]
3. DrugDoseMaster.xlsx
ensure driveSheet DrugDoseMaster
partitionedData: false
spreadsheet: DrugDoseMaster
roles: [Owner]
exportKindSet: ["xlsx"]
4. DrugPackMaster.xlsx
ensure driveSheet DrugPackMaster
partitionedData: false
spreadsheet: DrugPackMaster
roles: [Owner]
exportKindSet: ["xlsx"]
5. DrugMaster.xlsx
ensure driveSheet DrugMaster
partitionedData: false
spreadsheet: DrugMaster
roles: [Owner]
exportKindSet: ["xlsx"]