Tracking project hours and invoices

Awhile back I replied to a comment (original post) about how I perform project accounting in ledger. I badly procrastinated and for some reason I am unable to reply to that comment. In the event that anyone was interested, I have created a new post with the details.

There probably is a better way and this method generates the reports that I want easily. Any feedback is appreciated.

I have two distinct types of accounting that I perform in ledger. One is project accounting that has all the transactions that the clients care about. The other is the bookkeeping that relates to bank accounts and taxes that most people associate with bookkeeping and accounting. The two types are mostly independent--they intersect when you realize income (i.e., cash vs accrual accounting).

This may be complication and there is probably a different way of doing, but I need to be able to produce project accounting reports for clients and auditors. Virtual accounts did not work as well for me as this approach.

I like to group the transactions into files that are named by:

  • accounts.ledger (general account definitions)
  • project.ledger ("project" is the project name and has all the funding transactions and project account definitions)
  • inv-YYYY.ledger (invoices for a given year)

Here is what I do (I think have pulled everything from the relevant files):

; ClientID = short identifier for client 

; ContractID = short identifier for contract or purchase order ; LCAT1 = labor category (think hours for a specific skill, e.g. SWDevel1 is an entry-level software developer and a SWDevel5 is a very experienced software developer) ; $XX,XXX.XX = funding amount in contract or purchase order ; NNN = number of hours being bought in contract or purchase order ; N.B. this could be an explicit amount or your estimate if ; the contract if firm-fixed price ; $YYY.YY = labor rate ; $ZZZZ.ZZ = invoiced amount ; ProjectType = For me I like to break out by Contract, Subcontract, PurchaseOrder, Consulting for my invoices

; This helps me generate tax reports 

tag income-type

commodity $ 

note US Dollar format $1,000.00 nomarket

; Define a labor category. This can be by year, client/year, etc 

; you would define prices in the price database commodity LCAT1 note Descriptive name of labor category nomarket

; This is the client account that is the source of all money 

account ClientID:ContractID

; This is the project I bill against 

account Projects:ClientID:Contract_Number_or_PONumber:Labor

; I like to track invoices by client 

account Invoice:ProjectType:ClientID assert commodity == "$"

; and I track income by client 

account Income:ProjectType:ClientID assert commodity == "$" assert tag("income-type")

; define an accrual account 

account Accrued:Accounts Receivable

; I define an automatic transaction to pull from an Income account 

; whenever an invoice is generated. This basically is accrual ; accounting method. You may want do something different for cash ; accounting method. ; This makes generating Income reports easier and has all income ; in the Income account hierarchy = /Invoice:ProjectType:ClientID/ Income:ProjectType:ClientID 1.0 ; income-type: income Accrued:Accounts Receivable -1.0

; ; These transactions basically pull from a hierarchy of accounts ; that performs project accounting mostly independent from the ; hierarchy of accounts that does the traditional bookkeeping ;

; This is a project account being funded 

YYYY/MM/DD Client Name with full contract/purchase number ; po_number: contract/purchase number ClientID:ContractID $XX,XXX.XX Projects:ClientID:ContractID:Labor -NNN LCAT1 @ =$YYY.YY

; alternatively, if you do not want to define a LCAT 

YYYY/MM/DD Client Name with full contract/purchase number ; po_number: contract/purchase number ClientID:ContractID $XX,XXX.XX Projects:ClientID:ContractID:Labor -NNN hours @ =$YYY.YY

; An invoice entry looks like 

YYYY/MM/DD Client Name ; invoice-id: ClientID-YYYY-## ; ## is a sequence by ClientID-YYYY Projects:ClientID:ContractID:Labor nn LCAT @ =$YYY.YY Invoice:ProjectType:ClientName $-ZZZZ.ZZ


; The automatic transaction would have been applied with the ; previous transaction. If you are doing cash accounting ; you would put a transaction here. At this point the ; LCAT (or hours) does not pass through to the traditional ; bookkeeping. ; ; This is the bridge from the project accounting to the ; regular bookkeeping.

; When a invoice gets paid 

YYYY/MM/DD Client Name Assets:Cash:Bank $ZZZZ.ZZ Accrued:Accounts Receivable


submitted by /u/zzmgck
[link] [comments]
This is a companion discussion topic for the original entry at