Source Code

;; mock-provider - Clarity 4
;; Mock healthcare provider generator for testing and development

(define-constant ERR-INVALID-INDEX (err u100))

(define-data-var provider-counter uint u0)

(define-map mock-providers uint
  {
    provider-id: (string-ascii 50),
    provider-name: (string-utf8 200),
    provider-type: (string-ascii 50),
    license-number: (string-ascii 100),
    specialization: (string-ascii 50),
    location: (string-utf8 200),
    contact: (string-utf8 100),
    created-at: uint
  }
)

(define-map mock-services uint
  {
    provider-id: uint,
    service-name: (string-utf8 100),
    service-code: (string-ascii 20),
    base-price: uint,
    duration-minutes: uint
  }
)

(define-map mock-appointments uint
  {
    provider-id: uint,
    patient-id: (string-ascii 50),
    appointment-date: uint,
    service-code: (string-ascii 20),
    status: (string-ascii 20)
  }
)

(define-public (generate-mock-provider
    (provider-id (string-ascii 50))
    (name (string-utf8 200))
    (provider-type (string-ascii 50))
    (license (string-ascii 100))
    (specialization (string-ascii 50))
    (location (string-utf8 200))
    (contact (string-utf8 100)))
  (let ((id (+ (var-get provider-counter) u1)))
    (map-set mock-providers id
      {
        provider-id: provider-id,
        provider-name: name,
        provider-type: provider-type,
        license-number: license,
        specialization: specialization,
        location: location,
        contact: contact,
        created-at: stacks-block-time
      })
    (var-set provider-counter id)
    (ok id)))

(define-public (generate-mock-service
    (provider-id uint)
    (service-name (string-utf8 100))
    (service-code (string-ascii 20))
    (price uint)
    (duration uint))
  (let ((service-id (+ (var-get provider-counter) u1)))
    (map-set mock-services service-id
      {
        provider-id: provider-id,
        service-name: service-name,
        service-code: service-code,
        base-price: price,
        duration-minutes: duration
      })
    (var-set provider-counter service-id)
    (ok service-id)))

(define-public (generate-mock-appointment
    (provider-id uint)
    (patient-id (string-ascii 50))
    (appointment-date uint)
    (service-code (string-ascii 20))
    (status (string-ascii 20)))
  (let ((appointment-id (+ (var-get provider-counter) u1)))
    (map-set mock-appointments appointment-id
      {
        provider-id: provider-id,
        patient-id: patient-id,
        appointment-date: appointment-date,
        service-code: service-code,
        status: status
      })
    (var-set provider-counter appointment-id)
    (ok appointment-id)))

(define-read-only (get-mock-provider (id uint))
  (ok (map-get? mock-providers id)))

(define-read-only (get-mock-service (service-id uint))
  (ok (map-get? mock-services service-id)))

(define-read-only (get-mock-appointment (appointment-id uint))
  (ok (map-get? mock-appointments appointment-id)))

(define-read-only (get-provider-count)
  (ok (var-get provider-counter)))

(define-read-only (validate-principal (p principal))
  (principal-destruct? p))

(define-read-only (format-id (id uint))
  (ok (int-to-ascii id)))

(define-read-only (parse-id (id-str (string-ascii 20)))
  (string-to-uint? id-str))

(define-read-only (get-bitcoin-block)
  (ok burn-block-height))

Functions (11)

FunctionAccessArgs
generate-mock-providerpublicprovider-id: (string-ascii 50
generate-mock-servicepublicprovider-id: uint, service-name: (string-utf8 100
generate-mock-appointmentpublicprovider-id: uint, patient-id: (string-ascii 50
get-mock-providerread-onlyid: uint
get-mock-serviceread-onlyservice-id: uint
get-mock-appointmentread-onlyappointment-id: uint
get-provider-countread-only
validate-principalread-onlyp: principal
format-idread-onlyid: uint
parse-idread-onlyid-str: (string-ascii 20
get-bitcoin-blockread-only