📁 Showcase
Drug Master

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"]