Skip to content

Latest commit

 

History

History
594 lines (475 loc) · 20.8 KB

offer-en.org

File metadata and controls

594 lines (475 loc) · 20.8 KB

Offer Template

1 Document Versions

DateComment
<2020-02-15 Sat>First Version

2 Project Data

NameMy Fancy Project name
Acronymproject-1
Start Data2022-01-01
Duration (months)2

3 Context

Information necessary to put the project in context: pre-existing environments and tools, constraints, opportunities.

4 Goals and Expected Results

  • What do we want to achieve?
  • What will we achieve in the project?

5 Functional Groups and Functions

All todo items here contribute to the project budget if they have an effort property set. Effort can either be generic (meaning any resource might work on the task; the average rate will be used) or specific, if using properties such as EFFORT_<resource_name>.

Remarks

  • Use durations expressed in timing units (e.g., 4d, 10:10); plain numbers are interpreted as minutes
  • Use either profiled or plain efforts; if an entry contains both, the plain effort entry is used.

5.1 User Story 1

5.1.1 Task 1.1

In this task we will do such and such …

5.1.2 Task 1.2

In this other task we will do such and such …

5.1.3 Task 1.3

In this task we will do such and such …

6 Timing

This has to be filled by hand. In the future it might be interesting to try and integrate with a (Gantt) charting tool, such as Vega light or Task Juggler.

7 Plan and Budget by Item

This section provides an overview of the todo items, together with deadline sand project costs.

We also have a column to count actual time, although we prefer to do the clocking on a different file (to keep things a bit tidier).

8 Budget

Budget rows have to be inserted by hand. VAT and Total are computed. In our experience the data computed from todos need some adjustments/grouping to make it into the budget.

You can use the previous (Budget by Item) or the last section (Budget Detailed Data) of this document to get summary data and put it in the budget.

!Cost ItemCost
Group 110500
Total (Before VAT)10500.00
VAT2310.00
Total (with VAT)12810.00

9 Payments Structure

Set the first two columns of this table and the other columns will be computed for you.

DateAmountNetVATPayment
01/03/202250%5250.001155.006405.00
21/06/202210%1050.00231.001281.00
21/11/202240%4200.00924.005124.00

10 Integrating with h-ledger

This section generates the plain-text accounting data we use with hledger. Project accounting is structure as follows:

  • The project budget is split in equal parts for the duration of the project
  • Each month we transfer from revenues to accrued_work
  • When we get paid, we move from accrued_work to the bank account and we account for VAT

This works on the assumption that the project is paid for with a flat fee. If you are charging by time and expense, the data below should become the project budget and the valorization should be computed on the actual hours worked.

(setq project-name    (nth 1 (nth 0 data)))
(setq project-acronym (nth 1 (nth 1 data)))
(setq start-date      (nth 1 (nth 2 data)))
(setq months          (nth 1 (nth 3 data)))

;; computed from the table, sum of net values
(setq amount (apply '+ (mapcar (lambda (x) (nth 2 x)) (cdr table))))

(defun avm/build-date (string)
  (mapcar 'string-to-number
          (list (substring string 0 4) (substring string 5 7) (substring string 8 10))))

(defun avm/emit-date (date)
  (format "%4d-%02d-%02d" (nth 0 date) (nth 1 date) (nth 2 date)))

(defun avm/add-one-month (date)
  (let ( (year (car date))
         (month (cadr date))
         (day (caddr date)) )
    (let ( (new-month (+ month 1)) )
      (if (> new-month 12)
          (list (+ year 1) 1 day)
        (list year new-month day)))))

(defun avm/emit-accrued-work-entry (date project acronym amount)
  (format "%s ! %s\n  %s\n  %-30s %10.2f\n  %-30s\n\n"
          date
          project
          (concat "; project:" project-acronym)
          "accrued_work"
          amount
          (concat "revenues:" (downcase project-acronym))))

(defun avm/emit-project (date project acronym total-amount months)
  (let* ( (date (avm/build-date date))
          (amount (/ total-amount months))
          (remainder (- total-amount (* amount months))) )
    (avm/emit-project-ll date project acronym amount remainder months)))

(defun avm/emit-project-ll (date project acronym amount remainder months)
  (if (> months 1)
      (concat
       (avm/emit-accrued-work-entry (avm/emit-date date) project acronym amount)
       (avm/emit-project-ll (avm/add-one-month date) project acronym amount remainder (- months 1)))
    (avm/emit-accrued-work-entry (avm/emit-date date) project acronym (+ amount remainder))))

(defun avm/invert-date (date)
  (concat (substring date 6 10) "-" (substring date 3 5) "-" (substring date 0 2)))

(defun avm/print-ledger-entry (row)
  (let ( (date  (nth 0 row)) 
         (net   (nth 2 row))
         (vat   (nth 3 row))
         (gross (nth 4 row)) )
    (format
     "%s ! %s\n  %s\n  %-30s %10.2f\n  %-30s %10.2f\n  %-30s %10.2f\n\n"
     (avm/invert-date date)
     project-name
     (concat "; project:" project-acronym)
     "bank"
     gross
     "credits:vat"
     (* -1 vat)
     (concat "accrued_work:" (downcase project-acronym))
     (* -1 net))))

;; this emits the accrued work
(princ (avm/emit-project start-date project-name project-acronym amount months))

;; this emits the payments
(mapcar 'princ (mapcar 'avm/print-ledger-entry (cdr table)))

11 Additional Conditions

12 Risks Management

RiskProbabilityImpactAction Reference

13 Company/Professional Profile

##+INCLUDE: company_profile.org

14 Budget Detailed Data

14.0.1 Budget by functional group

ITEMEFFORTCOSTTOTAL
Piano di lavoro0.000.00

14.0.2 Budget by activity

ITEMEFFORTCOSTTOTAL
Piano di lavoro0.000.00

14.0.3 Budget by priority

Independent of the functional group.

AEUR 0.00
BEUR 0.00
CEUR 0.00

14.0.4 Priority A

ITEMEFFORTCOSTTOTAL

14.0.5 Priority B

ITEMEFFORTCOSTTOTAL

14.0.6 Priority C

ITEMEFFORTCOSTTOTAL

14.1 Local Variables