Source Code

(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-PROCESS-NOT-FOUND (err u101))
(define-constant ERR-INVALID-STATUS (err u102))

(define-map manufacturing-processes
  { process-id: uint }
  {
    chip-type: (string-ascii 50),
    node-size: uint,
    wafer-count: uint,
    started-at: uint,
    completed-at: uint,
    status: (string-ascii 20),
    operator: principal
  }
)

(define-map production-steps
  { process-id: uint, step-id: uint }
  {
    step-name: (string-ascii 50),
    duration: uint,
    completed: bool,
    quality-score: uint
  }
)

(define-data-var process-nonce uint u0)

(define-public (start-manufacturing
  (chip-type (string-ascii 50))
  (node-size uint)
  (wafer-count uint)
)
  (let ((process-id (var-get process-nonce)))
    (map-set manufacturing-processes
      { process-id: process-id }
      {
        chip-type: chip-type,
        node-size: node-size,
        wafer-count: wafer-count,
        started-at: stacks-block-height,
        completed-at: u0,
        status: "in-progress",
        operator: tx-sender
      }
    )
    (var-set process-nonce (+ process-id u1))
    (ok process-id)
  )
)

(define-public (add-production-step
  (process-id uint)
  (step-id uint)
  (step-name (string-ascii 50))
  (duration uint)
)
  (let ((process (unwrap! (map-get? manufacturing-processes { process-id: process-id }) ERR-PROCESS-NOT-FOUND)))
    (asserts! (is-eq tx-sender (get operator process)) ERR-NOT-AUTHORIZED)
    (ok (map-set production-steps
      { process-id: process-id, step-id: step-id }
      {
        step-name: step-name,
        duration: duration,
        completed: false,
        quality-score: u0
      }
    ))
  )
)

(define-public (complete-step (process-id uint) (step-id uint) (quality-score uint))
  (let (
    (process (unwrap! (map-get? manufacturing-processes { process-id: process-id }) ERR-PROCESS-NOT-FOUND))
    (step (unwrap! (map-get? production-steps { process-id: process-id, step-id: step-id }) ERR-PROCESS-NOT-FOUND))
  )
    (asserts! (is-eq tx-sender (get operator process)) ERR-NOT-AUTHORIZED)
    (ok (map-set production-steps
      { process-id: process-id, step-id: step-id }
      (merge step { completed: true, quality-score: quality-score })
    ))
  )
)

(define-public (complete-manufacturing (process-id uint))
  (let ((process (unwrap! (map-get? manufacturing-processes { process-id: process-id }) ERR-PROCESS-NOT-FOUND)))
    (asserts! (is-eq tx-sender (get operator process)) ERR-NOT-AUTHORIZED)
    (ok (map-set manufacturing-processes
      { process-id: process-id }
      (merge process { status: "completed", completed-at: stacks-block-height })
    ))
  )
)

(define-read-only (get-process-info (process-id uint))
  (map-get? manufacturing-processes { process-id: process-id })
)

(define-read-only (get-step-info (process-id uint) (step-id uint))
  (map-get? production-steps { process-id: process-id, step-id: step-id })
)

(define-public (update-wafer-count (process-id uint) (new-count uint))
  (let ((process (unwrap! (map-get? manufacturing-processes { process-id: process-id }) ERR-PROCESS-NOT-FOUND)))
    (asserts! (is-eq tx-sender (get operator process)) ERR-NOT-AUTHORIZED)
    (ok (map-set manufacturing-processes
      { process-id: process-id }
      (merge process { wafer-count: new-count })
    ))
  )
)

Functions (7)

FunctionAccessArgs
start-manufacturingpublicchip-type: (string-ascii 50
add-production-steppublicprocess-id: uint, step-id: uint, step-name: (string-ascii 50
complete-steppublicprocess-id: uint, step-id: uint, quality-score: uint
complete-manufacturingpublicprocess-id: uint
get-process-inforead-onlyprocess-id: uint
get-step-inforead-onlyprocess-id: uint, step-id: uint
update-wafer-countpublicprocess-id: uint, new-count: uint