statement-of-shareholders-equity

SP1V95DB4JK47QVPJBXCEN6MT35JK84CQ4CWS15DQ

Source Code

(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-STATEMENT-NOT-FOUND (err u101))
(define-constant ERR-INVALID-PERIOD (err u102))

(define-map equity-statements
  { company: principal, period: uint }
  {
    beginning-balance: uint,
    stock-issuance: uint,
    stock-repurchase: uint,
    net-income: uint,
    dividends-paid: uint,
    other-comprehensive-income: int,
    ending-balance: uint,
    submitted-at: uint,
    submitted-by: principal
  }
)

(define-map company-owners principal principal)

(define-public (register-company (owner principal))
  (ok (map-set company-owners tx-sender owner))
)

(define-public (submit-statement
  (company principal)
  (period uint)
  (beginning uint)
  (issuance uint)
  (repurchase uint)
  (net-income uint)
  (dividends uint)
  (oci int)
)
  (let (
    (ending (+ (+ (+ (- (+ beginning issuance) repurchase) net-income) (if (>= oci 0) (to-uint oci) u0)) (- dividends)))
  )
    (asserts! (is-eq (some tx-sender) (map-get? company-owners company)) ERR-NOT-AUTHORIZED)
    (ok (map-set equity-statements
      { company: company, period: period }
      {
        beginning-balance: beginning,
        stock-issuance: issuance,
        stock-repurchase: repurchase,
        net-income: net-income,
        dividends-paid: dividends,
        other-comprehensive-income: oci,
        ending-balance: ending,
        submitted-at: stacks-block-height,
        submitted-by: tx-sender
      }
    ))
  )
)

(define-read-only (get-statement (company principal) (period uint))
  (map-get? equity-statements { company: company, period: period })
)

(define-read-only (get-company-owner (company principal))
  (map-get? company-owners company)
)

(define-public (update-stock-issuance (company principal) (period uint) (new-amount uint))
  (let ((statement (unwrap! (map-get? equity-statements { company: company, period: period }) ERR-STATEMENT-NOT-FOUND)))
    (asserts! (is-eq (some tx-sender) (map-get? company-owners company)) ERR-NOT-AUTHORIZED)
    (ok (map-set equity-statements
      { company: company, period: period }
      (merge statement { stock-issuance: new-amount })
    ))
  )
)

(define-public (update-stock-repurchase (company principal) (period uint) (new-amount uint))
  (let ((statement (unwrap! (map-get? equity-statements { company: company, period: period }) ERR-STATEMENT-NOT-FOUND)))
    (asserts! (is-eq (some tx-sender) (map-get? company-owners company)) ERR-NOT-AUTHORIZED)
    (ok (map-set equity-statements
      { company: company, period: period }
      (merge statement { stock-repurchase: new-amount })
    ))
  )
)

(define-public (update-dividends-paid (company principal) (period uint) (new-amount uint))
  (let ((statement (unwrap! (map-get? equity-statements { company: company, period: period }) ERR-STATEMENT-NOT-FOUND)))
    (asserts! (is-eq (some tx-sender) (map-get? company-owners company)) ERR-NOT-AUTHORIZED)
    (ok (map-set equity-statements
      { company: company, period: period }
      (merge statement { dividends-paid: new-amount })
    ))
  )
)

(define-public (update-net-income (company principal) (period uint) (new-amount uint))
  (let ((statement (unwrap! (map-get? equity-statements { company: company, period: period }) ERR-STATEMENT-NOT-FOUND)))
    (asserts! (is-eq (some tx-sender) (map-get? company-owners company)) ERR-NOT-AUTHORIZED)
    (ok (map-set equity-statements
      { company: company, period: period }
      (merge statement { net-income: new-amount })
    ))
  )
)

Functions (7)

FunctionAccessArgs
register-companypublicowner: principal
get-statementread-onlycompany: principal, period: uint
get-company-ownerread-onlycompany: principal
update-stock-issuancepubliccompany: principal, period: uint, new-amount: uint
update-stock-repurchasepubliccompany: principal, period: uint, new-amount: uint
update-dividends-paidpubliccompany: principal, period: uint, new-amount: uint
update-net-incomepubliccompany: principal, period: uint, new-amount: uint