summaryrefslogtreecommitdiff
path: root/doc/manual/LedgerSMB-manual.tex
blob: 66cdeaceeb54b622d2ecac7bbabddccc2532163d (plain)
  1. %% LyX 1.4.2 created this file. For more info, see http://www.lyx.org/.
  2. %% Do not edit unless you really know what you are doing.
  3. \documentclass[english]{article}
  4. \usepackage[T1]{fontenc}
  5. \usepackage[latin1]{inputenc}
  6. \IfFileExists{url.sty}{\usepackage{url}}
  7.                       {\newcommand{\url}{\texttt}}
  8. \makeatletter
  9. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
  10. \providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
  11. %% Bold symbol macro for standard LaTeX users
  12. \providecommand{\boldsymbol}[1]{\mbox{\boldmath $#1$}}
  13. %% Because html converters don't know tabularnewline
  14. \providecommand{\tabularnewline}{\\}
  15. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
  16. \usepackage{metatron}
  17. \renewcommand{\abstractname}{Executive Summary}
  18. \newcommand{\mycustomer}[1][]{#1\space}
  19. \newcommand{\myproject}[1][]{#1\space}
  20. \title{Ledger-SMB Manual}
  21. \author{The LedgerSMB Core Team}
  22. \date{\today}
  23. \usepackage{babel}
  24. \makeatother
  25. \begin{document}
  26. \maketitle
  27. Copyright \copyright 2006 The LedgerSMB Core Team. Permission
  28. is granted to copy, distribute and/or modify this document under the
  29. terms of the GNU Free Documentation License, Version 1.2 or any later
  30. version published by the Free Software Foundation; with no Invariant
  31. Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of
  32. the license is included in the section entitled \char`\"{}GNU Free
  33. Documentation License\char`\"{} (Appendix \ref{fdl}).
  34. \tableofcontents{}
  35. \listoffigures
  36. \clearpage
  37. \part{Ledger-SMB and Business Processes}
  38. \section{Introduction to Ledger-SMB}
  39. \subsection{Why Ledger-SMB}
  40. \subsubsection{Advantages of Ledger-SMB}
  41. \begin{itemize}
  42. \item Flexibility and Central Management
  43. \item Accessibility over the Internet (for some users)
  44. \item Data is in a relatively open format
  45. \item Integration with other tools
  46. \item One of the best accounting options for Linux users.
  47. \item Open Source
  48. \item A flexible, open framework that can be extended or modified to fit
  49. your business.
  50. \item Security-conscious development community.
  51. \end{itemize}
  52. \subsubsection{Key Features}
  53. \begin{itemize}
  54. \item Accounts Receivable
  55. \begin{itemize}
  56. \item Track sales by customer
  57. \item Issue Invoices, Statements, Receipts, and more
  58. \item Job costing and time entry for customer projects.
  59. \item Manage sales orders and quotations
  60. \item Ship items from sales orders
  61. \end{itemize}
  62. \item Accounts Payable
  63. \begin{itemize}
  64. \item Track purchases and debts by vendor.
  65. \item Issue RFQ's Purchase Orders, etc.
  66. \item Track items received from purchase orders.
  67. \end{itemize}
  68. \item Budgeting
  69. \begin{itemize}
  70. \item Track expenditures and income across multiple departments.
  71. \item Track all transactions across departments.
  72. \end{itemize}
  73. \item Check Printing
  74. \begin{itemize}
  75. \item Can customize template for any check form
  76. \end{itemize}
  77. \item General Ledger
  78. \item Inventory Management
  79. \begin{itemize}
  80. \item Track sales and orders of parts
  81. \item Track cost of goods sold using First In/First Out method
  82. \item List all parts below reorder point.
  83. \item Track ordering requirements.
  84. \item Track, ship, receive, and transfer parts to and from multiple warehouses.
  85. \end{itemize}
  86. \item Localization
  87. \begin{itemize}
  88. \item Provide Localized Translations for Part Descriptions
  89. \item Provide Localized Templates for Invoices, Orders, Checks, and more.
  90. \item Select language per customer, invoice, order, etc.
  91. \end{itemize}
  92. \item Manufacturing
  93. \begin{itemize}
  94. \item Track cost of goods sold for manufactured goods (assemblies)
  95. \item Create assemblies and stock assemblies, tracking materials on hand.
  96. \end{itemize}
  97. \item Multi-company/Multiuser
  98. \begin{itemize}
  99. \item One isolated database per company
  100. \item Users can have localized systems independent of company data set.
  101. \end{itemize}
  102. \item Point of Sale
  103. \begin{itemize}
  104. \item Run multiple cash registers against main Ledger-SMB installation.
  105. \item Suitable for retail stores and more.
  106. \item Supports some POS hardware out of the box.
  107. \item Third party add-ons available for more functionality.
  108. \end{itemize}
  109. \item Price Matrix
  110. \begin{itemize}
  111. \item Track different prices for vendors and customers across the board.
  112. \item Provide discounts to groups of customers per item or across the board.
  113. \item Store vendors' prices independent of the other last cost in the parts
  114. record.
  115. \end{itemize}
  116. \item Reporting
  117. \begin{itemize}
  118. \item All basic financial statements supported.
  119. \item Customer history, sales data, and additional information can be easily
  120. displayed.
  121. \item Open framework allows for ODBC connections to be used to generate
  122. reports using third party reporting tools.
  123. \end{itemize}
  124. \item Tax
  125. \begin{itemize}
  126. \item Supports Retail Sales Tax and Value Added Tax type systems
  127. \item Flexible framework allows one to customize reports to change the tax
  128. reporting framework to meet any local requirement.
  129. \end{itemize}
  130. \end{itemize}
  131. \subsection{Limitations of Ledger-SMB}
  132. \begin{itemize}
  133. \item No payroll module (Payroll must be done manually)
  134. \item Some integration limitations
  135. \item Further development/maintenance requires a knowledge of a relatively
  136. broad range of technologies.
  137. \end{itemize}
  138. \subsection{System Requirements of Ledger-SMB}
  139. \begin{itemize}
  140. \item PostgreSQL
  141. \item A CGI-enabled Web Server (for example, Apache)
  142. \item Perl with the DBI and DBD::Pg modules
  143. \item An operating system which supports the above software (usually Linux,
  144. though Windows, MacOS X, etc. do work).
  145. \item \LaTeX{}\ (optional) is required to create PDF or Postscript invoices.
  146. \end{itemize}
  147. \section{User Account and Database Administration Basics}
  148. These functions are accessed by going to the admin.pl script in the
  149. installed directory of Ledger-SMB.
  150. \subsection{Companies and Datasets}
  151. Ledger-SMB stores its information in locale-specific data sets. When
  152. a dataset is created, it sets various defaults such as currency, a
  153. basic chart of accounts setup, and so forth. Note that the default
  154. setup is for Canada, where the author of the software resides.
  155. Datasets are generally tracked as PostgreSQL databases. The application
  156. is designed with the idea that each dataset will represent exactly
  157. one company. If a customer is working with multiple companies, he/she
  158. must create a dataset to for each.
  159. When creating a dataset, the application asks for both a username and a
  160. superusername. If the superuser's information is not filled in, Ledger-SMB will
  161. attempt to populate an existing dataset, but if this information is filled in,
  162. the progam will log into the PostgreSQL cluster with the superusername and
  163. password, create the database, and attempt to add Plpgsql to it.
  164. \subsection{How to Create a User}
  165. Users are created by going to the admin.pl page and clicking on \char`\"{}Add
  166. User.\char`\"{} One then fills out the form and when it is saved,
  167. the user is created.
  168. \subsection{Permissions}
  169. The permissions system is not rigorously enforced within Ledger-SMB,
  170. in the sense that the permissions API is generally not used in the
  171. application itself. Instead permissions are used to enable/disable
  172. menu options. Setting an enforcement of such permissions would require
  173. some custom programming at the present time. Most organizations, however,
  174. find that the current system is adequate.
  175. The checkboxes which are marked enable menu entries. Those that are
  176. unchecked disable those entries on the menu.
  177. \subsection{User Account Types}
  178. \begin{itemize}
  179. \item User is a general user of the system
  180. \item Managers often are able to see a larger amount of data
  181. \item Administrators have full access to the system
  182. \end{itemize}
  183. \subsection{Other Features}
  184. \begin{itemize}
  185. \item Lock System allows one to lock users out of the system while maintenance
  186. is performed. This is only necessary during upgrades or maintenance
  187. which results in the RDBMS being offline.
  188. \item Change Admin Password.
  189. \item Logout terminates the admin session.
  190. \end{itemize}
  191. \section{Chart of Accounts}
  192. The Chart of Accounts provides a basic overview of the logical structure
  193. of the accounting program. One can customize this chart to allow for
  194. tracking of different sorts of information.
  195. \subsection{Introduction to Double Entry Bookkeeping}
  196. Ledger-SMB is a double entry system, meaning that every transaction
  197. consists of an equal sum of credits and debits (see below). A transaction
  198. is said to be balanced when the debits and credits are equal. This
  199. is an oversimplification and doesn't cover more complex processes
  200. involving closing books properly. In general customers should be referred
  201. to their accountants for information beyond the capabilities of the
  202. software. This module is just designed to provide enough familiarity
  203. with the concepts to be able to have an intelligent conversation with
  204. a bookkeeper or accountant who has specific requirements in this regard.
  205. \subsubsection{Account Types}
  206. \begin{itemize}
  207. \item Assets represent tangible or intangible property or money retained
  208. by the company. This includes money owed to the company.
  209. \item Liabilities are money that the company owes others.
  210. \item Equity is the valuation of the company as a whole. Includes investment
  211. capital, and money paid out to owners either as dividends or as withdrawals
  212. (for sole proprietorships). Normally one will have at least three
  213. equity accounts: One for tracking investment in the business, one
  214. for tracking withdrawals or dividends, and one for tracking retained
  215. earnings.
  216. \item Income accounts track the category of money as it is earned by the
  217. business.
  218. \item Expense accounts track the category of money flowing out as expenses
  219. are accrued.
  220. \end{itemize}
  221. \subsubsection{Debits and Credits}
  222. Debits and credits are the basic unit of double-entry bookkeeping.
  223. When money is removed from the business by the owners (as an equity
  224. payment) that is a debit, while when money is invested in the business,
  225. that is a credit. Every other transaction is set to balance these
  226. concepts. Therefore asset accounts normally have a debit balance because
  227. this allows for the equity account to be debited, while expense accounts
  228. normally have a credit balance.
  229. If the total debits is not equal to the total credits in the chart
  230. of accounts, something is very wrong, and the customer should get
  231. technical support immediately.
  232. \subsubsection{A few Examples}
  233. One might have a business that rents an office space. When rent is
  234. due, the accounts payable account would be credited, while the rent
  235. expense account would be debited. When this is paid, the accounts
  236. payable account would be debited while the asset account would be
  237. credited. This may seem backwards, but the result is to reduce by
  238. the amount owed for rent the amount that the owners can withdraw from
  239. the business as a debit. Let's say the office rent is \$300.
  240. \begin{itemize}
  241. \item Rent expense account is debited \$300
  242. \item Accounts Payable is credited \$300
  243. \item When this is paid, the checking account is credited \$300
  244. \item And the Accounts Payable is debited \$300
  245. \end{itemize}
  246. Let us say one performs a small consulting project for \$600. At the
  247. completion of this project, the following transaction would be made:
  248. \begin{itemize}
  249. \item Accounts Receivable is debited \$600
  250. \item Income (Consulting) is credited \$600.
  251. \end{itemize}
  252. Then the customer pays the \$600, the following transaction is entered.
  253. \begin{itemize}
  254. \item Accounts Receivable is credited \$600
  255. \item Payments Received is debited \$600.
  256. \end{itemize}
  257. \subsection{General Guidelines on Numbering Accounts}
  258. In general, most drop-down boxes in Ledger-SMB order the accounts
  259. by account number. Therefore by setting appropriate account numbers,
  260. one can affect the default values.
  261. A second consideration is to try to keep things under each heading
  262. appropriate tot hat heading. Thus setting an account number for a
  263. bank loan account in the assets category is not generally advisable.
  264. \subsection{Adding/Modifying Accounts}
  265. These features are listed under System-\textgreater Chart of Accounts.
  266. One can list the accounts and click on the account number to modify
  267. them or click on the \char`\"{}add account\char`\"{} option to create
  268. new accounts.
  269. \begin{itemize}
  270. \item Headings are just broad categories and do not store values themselves,
  271. while accounts are used to store the transactional information.
  272. \item One cannot have an account that is both a summary account (like AR)
  273. but also has another function.
  274. \item GIFI is mostly of interest to Canadian customers but it can be used
  275. to create reports of account hierarchies.
  276. \end{itemize}
  277. \subsection{Listing Account Balances and Transactions}
  278. One can list the account balances via the Reports-\textgreater Chart
  279. of Accounts report. Clicking on the account number will provide a
  280. ledger for that account.
  281. \section{Administration}
  282. This section will cover other (non-Chart of Accounts) aspects to the
  283. setup of the Ledger-SMB accounting package. These are generally accessed
  284. in the System submenu.
  285. \subsection{Taxes, Defaults, and Preferences}
  286. \subsubsection{Adding A Sales Tax Account}
  287. Sales Tax is collected on behalf of a state of national government
  288. by the individual store. Thus a sales tax account is a liability--
  289. it represents money {*}owed{*} by the business to the government.
  290. To add a sales tax account, one would create an account in the COA
  291. as a liability account, check all of the \char`\"{}tax\char`\"{} checkboxes,
  292. and answer the following question as \char`\"{}yes:\char`\"{}
  293. \char`\"{}Include this account on the customer/vendor forms to flag
  294. customer/vendor as taxable?\char`\"{}
  295. Once this account is created, one can set the tax amount.
  296. \subsubsection{Setting a Sales Tax Amount}
  297. Go to System-\textgreater Defaults and the tax account will be listed
  298. near the bottom of the page. The rate can be set there.
  299. \subsubsection{Default Account Setup}
  300. These accounts are the default accounts for part creation and foreign
  301. exchange tracking.
  302. \subsubsection{Currency Setup}
  303. The US accounts list this as USD:CAD:EUR. One can add other currencies
  304. in here, such as IDR (Indonesian Rupiah), etc. Currencies are separated
  305. by colons.
  306. \subsubsection{Sequence Settings}
  307. These sequences are used to generate user identifiers for quotations,
  308. invoices, and the like. If an identifier is not added, the next number
  309. will be used.
  310. A common application is to set invoices, etc. to start at 1000 in
  311. order to hide the number of issued invoices from a customer.
  312. \subsection{Audit Control}
  313. Auditibility is a core concern of the architects of any accounting
  314. system. Such ensures that any modification to the accounting information
  315. leaves a trail which can be followed to determine the nature of the
  316. change. Audits can help ensure that the data in the accounting system
  317. is meaningful and accurate, and that no foul play (such as embezzlement)
  318. is occurring.
  319. \subsubsection{Explaining transaction reversal}
  320. In paper accounting systems, it was necessary to have a means to authoritatively
  321. track corrections of mistakes. The means by which this was done was
  322. known as \char`\"{}transaction reversal.\char`\"{}
  323. When a mistake would be made, one would then reverse the transaction
  324. and then enter it in correctly. For example, let us say that an office
  325. was renting space for \$300 per month. Let us say that they inadvertently
  326. entered it in as a \$200 expense.
  327. The original transaction would be:
  328. \begin{tabular}{l|r|r}
  329. Account &
  330. Debit &
  331. Credit \tabularnewline
  332. \hline
  333. 5760 Rent &
  334. \$200 &
  335. \tabularnewline
  336. 2100 Accounts Payable &
  337. &
  338. \$200\tabularnewline
  339. \end{tabular}
  340. The reversal would be:
  341. \begin{tabular}{l|r|r}
  342. Account &
  343. Debit &
  344. Credit \tabularnewline
  345. \hline
  346. 5760 Rent &
  347. &
  348. \$200\tabularnewline
  349. 2100 Accounts Payable &
  350. \$200 &
  351. \tabularnewline
  352. \end{tabular}
  353. This would be followed by re-entering the rent data with the correct
  354. numbers. This was meant to ensure that one did not erase data from
  355. the accounting books (and as such that erasing data would be a sign
  356. of foul play).
  357. Ledger-SMB has a capability to require such reversals if the business
  358. deems this to be necessary. When this option is enabled, existing
  359. transactions cannot be modified and one will need to post reversing
  360. transactions to void existing transactions before posting corrected
  361. ones.
  362. Most accountants prefer this means to other audit trails because it
  363. is well proven and understood by them.
  364. \subsubsection{Close books option}
  365. The option to close books requires transaction reversal for any transaction
  366. up to a certain date.
  367. \subsubsection{Audit Trails}
  368. This option stores additional information in the database to help
  369. auditors trace individual transactions. The information stored, however,
  370. is limited and it is intended to be supplemental to other auditing
  371. facilities.
  372. The information added includes which table stored the record, which
  373. employee entered the information, which form was used, and what the
  374. action was. No direct financial information is included.
  375. \subsection{Departments}
  376. Departments are logical divisions of a business. They allow for budgets
  377. to be prepared for the individual department as well as the business
  378. as a whole. This allows larger businesses to use Ledger-SMB to meet
  379. their needs.
  380. \subsubsection{Cost v Profit Centers.}
  381. In general business units are divided into cost and profit centers.
  382. Cost centers are generally regarded as business units where the business
  383. expects to lose money and profit centers are where they expect to
  384. gain money. For example, the legal department in most companies is
  385. a cost center.
  386. One of the serious misunderstandings people run up against is that
  387. Ledger-SMB tends to more narrowly define cost and profit centers than
  388. most businesses do. In Ledger-SMB a cost center is any department
  389. of the business that does not issue AR transactions. Although many
  390. businesses may have cost centers (like technical support) where customer
  391. fees may subsidize the cost of providing the service, in Ledger-SMB,
  392. these are profit centers.
  393. Ledger-SMB will not allow cost centers to be associated with AR transactions.
  394. So if you want this functionality, you must create the department
  395. as a profit center.
  396. \subsection{Warehouses}
  397. Ledger-SMB has the ability to track inventory by warehouse. Inventory
  398. items can be moved between warehouses, and shipped from any warehouse
  399. where the item is in stock. We will explore this concept more later.
  400. \subsection{Languages}
  401. Languages allow for goods and services to be translated so that one
  402. can maintain offices in different countries and allow for different
  403. goods and service descriptions to be translated to different languages
  404. for localization purposes.
  405. \subsection{Types of Businesses}
  406. One can create types of businesses and then give them discounts across
  407. the board. For example, one might give a firm that uses one's services
  408. as a subcontractor a 10\% discount or more.
  409. \subsection{Misc.}
  410. \subsubsection{GIFI}
  411. GIFI is a requirement for Canadian customers. This feature allows
  412. one to link accounts with Canadian tax codes to simplify the reporting
  413. process.
  414. It also has another use in that non-Canadians can use this functionality
  415. to create customized reports by categorizing accounts using this field.
  416. This allows for a sort of shallow \char`\"{}account hierarchy\char`\"{}
  417. like some users are used to with other products.
  418. \subsubsection{SIC}
  419. Standard Industrial Classification is a way of tracking the type of
  420. business that a vendor or customer is in. For example, an accountant
  421. would have an SIC of 8721 while a graphic design firm would have an
  422. SIC of 7336. The classification is hierarchical so one could use this
  423. field for custom reporting and marketing purposes.
  424. \subsubsection{Overview of Template Editing}
  425. The templates for invoices, orders, and the like can be edited from
  426. within Ledger-SMB. The submenus within the System submenu such as
  427. HTML Templates, Text Templates and \LaTeX{} templates provide access
  428. to this functionality.
  429. \subsubsection{Year-end}
  430. Although the Year-end functionality in Ledger-SMB is very useful,
  431. it does not entirely make the process simple and painless. One must
  432. still manually enter adjustments prior to closing the books. The extent
  433. to which these adjustments are necessary for any given business is
  434. a matter best discussed with an accountant.
  435. The standard way books are normally closed at the end of the year
  436. is by moving all adjusted%
  437. \footnote{Adjustments would be entered via the General Ledger. The exact process
  438. is beyond the scope of this class, however.%
  439. } income and expenses to an equity account usually called \char`\"{}Retained
  440. Earnings.\char`\"{} Assets and liabilities are not moved. Equity drawing/dividend
  441. accounts are also moved, but the investment accounts are not. The
  442. reasoning behind this process is that one wants a permanent record
  443. of the amount invested in a business, but any dividends ought not
  444. to count against their recipients when new investors are brought on
  445. board.
  446. Ledger-SMB automatically moves all income and expense into the specified
  447. year-end/retained earnings account. It does not move the drawing account,
  448. and this must be done manually, nor does it automate the process of
  449. making adjustments.
  450. Contrary to its name, this function can close the books at any time,
  451. though this would likely be of limited use.
  452. \subsection{Options in the ledger-smb.conf}
  453. For those who are unfamiliar with Perl as a programming language,
  454. the ledger-smb.conf configures the software by assigning site-wide
  455. variables. Most of these should be left alone unless one knows what
  456. one is doing. However, on some systems some options might need to
  457. be changed, so all options are presented here for reference:
  458. \begin{itemize}
  459. \item \$userspath is the directory where Ledger-SMB will store the user
  460. accounts. The web server process must be able to read from and write
  461. to this directory.
  462. \item \$templates is the directory where the templates are stored.
  463. \item \$memberfile is the master list of user configuration information
  464. \item \$sendmail is the command to use to send a message. It must read the
  465. email from standard input.
  466. \item \$language allows one to set the language for the login screen and
  467. admin page.
  468. \item \$latex tells Ledger-SMB whether \LaTeX{} is installed. \LaTeX{} is
  469. required for generating Postscript and PDF invoices and the like.
  470. \item Various environmental variables (\$ENV...) can be set here too. One
  471. can add paths for searching for \LaTeX{}, etc.
  472. \item \%printer can be used to set a hash table of printers for the software.
  473. The primary example is\\
  474. \%printer = ( 'Default' =\textgreater 'lpr', 'Color' =\textgreater
  475. 'lpr -PEpson' ); \\
  476. However, this can use any program that can accept print documents
  477. (in Postscript) from standard input, so there are many more possibilities.
  478. \end{itemize}
  479. I have omitted the variables used to configure Oracle as I do not
  480. believe it is still supported (it could be with a small amount of
  481. work though).
  482. \section{Goods and Services}
  483. The Goods and Services module will focus on the definition of goods
  484. and services and the related accounting concepts.
  485. \subsection{Basic Terms}
  486. \begin{description}
  487. \item [{COGS}] is Cost of Goods Sold. When an item is sold, then the expense
  488. of its purchase is accrued as attached to the income of the sale.
  489. It is tracked as COGS.
  490. \item [{List}] Price is the recommended retail price.
  491. \item [{Markup}] is the percentage increase that is applied to the last
  492. cost to get the sell price.
  493. \item [{ROP}] Re-order point. Items with fewer in stock than this will
  494. show up on short reports.
  495. \item [{Sell}] Price is the price at which the item is sold.
  496. \end{description}
  497. \subsection{The Price Matrix}
  498. It is possible to set different prices for different groups of customers,
  499. or for different customers individually. Similarly, one can track
  500. different prices from different vendors along with the required lead
  501. time for an order.
  502. \subsection{Pricegroups}
  503. Pricegroups are used to help determine the discount a given customer
  504. may have.
  505. \subsection{Groups}
  506. Groups represent a way of categorizing POS items for a touchscreen
  507. environment. It is not fully functional yet, but is sufficient that
  508. with some stylesheet changes, it could be made to work.
  509. \subsection{Labor/Overhead}
  510. Labor/overhead is usually used for tracking manufacturing expenses.
  511. It is not directly billed to a customer. It is associated with an
  512. expense/Cost of Goods Sold (COGS) account
  513. \subsection{Services}
  514. Services include any labor that is billed directly to the customer.
  515. It is associated with an expense/COGS account and an income account.
  516. Services can be associated with sales tax.
  517. \subsubsection{Shipping and Handling as a Service}
  518. One approach to dealing with shipping and handling is to add it as
  519. a service. Create a service called {}``Shipping and Handling'',
  520. with a sell price \$1 per unit, and a 0\% markup. Bill it as \$1 per
  521. unit. This allows me to add the exact amount of shipping and handling
  522. as necessary.
  523. \subsection{Parts}
  524. A part is any single item you might purchase and either might resell
  525. or use in manufacturing an assembly. It is linked to an expense/COGS
  526. account, an income account, and an inventory account. Parts can be
  527. associated with sales tax.
  528. \subsection{Assemblies and Manufacturing}
  529. Manufacturers order parts but they sell the products of their efforts.
  530. Ledger-SMB supports manufacturing using the concept of assemblies.
  531. An assembly is any product which is manufactured on site. It consists
  532. of a selection of parts, services, and/or labor and overhead. Assemblies
  533. are treated as parts in most other regards.
  534. However, one cannot order assemblies from vendors. One must instead
  535. order the components and stock them once they are manufactured.
  536. %Excersize 1
  537. \subsubsection{Stocking Assemblies}
  538. One stocks assemblies in the Stock Assembly entry on the Goods and
  539. Services submenu. When an assembly is stocked the inventory is adjusted
  540. properly.
  541. The Check Inventory option will cause Ledger-SMB to refuse to stock
  542. an assembly if the inventory required to produce the assembly would
  543. drop the part below the reorder point.
  544. \subsection{Reporting}
  545. \subsubsection{All Items and Parts Reports}
  546. The All Items provides a unified view of assemblies, parts, services,
  547. and labor for the company, while the Parts report confines it to parts.
  548. Types of reports are:
  549. \begin{description}
  550. \item [{Active}] lists all items not marked as obsolete.
  551. \item [{On}] Hand lists current inventory
  552. \item [{Short}] Lists all items which are stocked below their ROP
  553. \item [{Obsolete}] Lists all items which are marked as obsolete
  554. \item [{Orphaned}] Lists all items which have never had a transaction associated
  555. with them.
  556. \end{description}
  557. One can also list these goods by invoice, order, or quotation.
  558. For best results, it is a good idea to enter some AR and AP data before
  559. running these reports.
  560. \subsubsection{Requirements}
  561. This report is designed to assist managers determine the quantities
  562. of goods to order and/or stock. It compares the quantity on hand with
  563. the activity in a given time frame and provides a list of goods which
  564. need to be ordered and the relevant quantity.
  565. \subsubsection{Services and Labor}
  566. This is similar to the Parts and All Items menu but only supports
  567. active, obsolete, and orphaned reports.
  568. \subsubsection{Assemblies}
  569. This is similar to the Parts and All Items reports but it also provides
  570. an ability to list individual items in the assemblies as well.
  571. AP Invoices, Purchase Orders, and RFQ's are not available on this
  572. report.
  573. \subsubsection{Groups and Pricegroups}
  574. These reports provide a simple interface for locating groups and pricegroups.
  575. The report types are similar to what they are for services.
  576. \subsection{Translations}
  577. One can add translations so that they show up in the customer's native
  578. language in the issued invoice.
  579. To issue translations, one must have languages defined. One can then
  580. add translations to descriptions and part groups.
  581. \subsection{How Cost of Goods Sold is tracked}
  582. Cost of Goods Sold is tracked on a First-In, First-out (FIFO) basis.
  583. When a part is purchased, its cost is recorded in the database. The
  584. cost of the item is then added to the inventory asset account. When
  585. the good is sold, the cost of the item is moved to the cost of goods
  586. sold account.
  587. This means that one must actually provide invoices for all goods entered
  588. at their actual cost. If one enters in \$0 for the cost, the cost
  589. of goods sold will also be \$0 when the item is sold. We will cover
  590. this entire process in more depth after we cover the AP and AR units
  591. below.
  592. \section{AP}
  593. \subsection{Basic AP Concepts}
  594. The Accounts Payable module tracks all financial commitments that
  595. the company makes to other businesses. This includes rent, utilities,
  596. etc. as well as orders of goods and services.
  597. \subsection{Vendors}
  598. A vendor is any business that the company agrees to pay money to.
  599. One can enter vendor information under AP-\textgreater Vendors-\textgreater
  600. Add Vendor. The vendor list can be searched under AP-\textgreater
  601. Vendors-\textgreater Reports-\textgreater Search.
  602. Enter start and end-dates for each vendor. This will make searches
  603. and drop-down boxes faster when some vendors are no longer actively
  604. supporting your company.
  605. A few fields that need explanation are:
  606. \begin{description}
  607. \item [{BIC}] Bank Identifier Code is often the same as the S.W.I.F.T.
  608. code. This is a code for the bank a customer uses for automated money
  609. transfers.
  610. \item [{IBAN}] International Bank Account Number is related to the BIC
  611. and is used for cross-border automated money transfers.
  612. \item [{Terms}] is the number of days one has to pay the invoice.
  613. \item [{Vendor}] Number is automatically generated.
  614. \end{description}
  615. \subsection{AP Transactions}
  616. AP Transactions are generally used for items other than goods and
  617. services. Utilities, rent, travel expenses, etc. could be entered
  618. in as an AP transaction.
  619. If the item is paid partially or in full when the transaction is entered,
  620. one can add payments to the payment section.
  621. All other payments can and should be entered under cash payment (below).
  622. The PO Number and Order Number fields are generally used to track
  623. associations with purchase orders sent to vendors, etc. These fields
  624. can be helpful for adding misc. expenses to orders for reporting purposes.
  625. The department drop-down box appears when one has created one or more
  626. departments. A transaction is not required to be associated with a
  627. department, but one can use this feature for budget tracking.
  628. With AP Transactions, there is no option for internal notes. All notes
  629. will appear on any printed version of the transaction.
  630. Note: Printing a transaction does not post it. No data is committed
  631. until the invoice is posted.
  632. \subsection{AP Invoices}
  633. AP Invoices are used to enter in the receipt of goods and services.
  634. Goods and services are deemed entered into the inventory when they
  635. are invoiced.
  636. This screen is reasonably similar to the AP Transaction Screen, though
  637. the part entry section is a bit different.
  638. The AP Invoice section has a capacity to separate internal notes from
  639. notes printed on the invoice. Note, however, that since these are
  640. received invoices, it is rare that one needs this ability.
  641. Note that Ledger-SMB can search for partial part numbers or descriptions.
  642. Also if you have a group you can use this to select the part.
  643. To remove a line item from an invoice or order, delete the partnumber
  644. and click update.
  645. \subsubsection{Correcting an AP Invoice}
  646. If an invoice is entered improperly, the methods used to correct it
  647. will vary depending on whether transaction reversal is enforced or
  648. not. If transaction reversal is not enforced, one can simply correct
  649. the invoice or transaction and repost.
  650. If not, one needs to create a {*}duplicate{*} invoice with exactly
  651. opposite values entered. If one part was listed as received, then
  652. one should enter a negative one for the quantity. Then one can enter
  653. the invoice number as the same as the old one (though I like to add
  654. an R to the end to show that it is a reversing transaction). Once
  655. this is posted, one can enter the invoice correctly.
  656. \subsection{Cash payment And Check Printing}
  657. In general, it is a bad idea to repost invoices/transactions just
  658. in order to enter a payment. The Cash-\textgreater Payment window
  659. allows one to enter payments against AP invoices or transactions.
  660. The printing capability can be used to print checks. The default template
  661. is NEBS 9085, though you can use 9082 as well (as Quickbooks does).
  662. The source field is used to store an identifying number of the source
  663. document, such as the check number. One must select the item to have
  664. it paid, and then enter the amount. One can then print a check.
  665. \subsubsection{Rapid Payment Entry Screen}
  666. One can also use the rapid payment entry screen to print multiple
  667. checks. However, this does not allow you to print the multiple checks
  668. to the screen as a separate document is created for each check. In
  669. this event, one must print directly to a printer as postscript.
  670. \subsection{Transaction/Invoice Reporting}
  671. \subsubsection{Transactions Report}
  672. This report is designed to help you locate AP transactions based on
  673. various criteria. One can search by vendor, invoice number, department,
  674. and the like. One can even search by the shipping method.
  675. The summary button will show what was placed where, while the details
  676. button will show all debits and credits associated with the transaction.
  677. To view the invoice, click on the invoice number. In the detail view,
  678. to view the account transactions as a whole, click on the account
  679. number.
  680. Open invoices are ones not fully paid off, while paid closed invoices
  681. are those that have been paid.
  682. \subsubsection{Outstanding Report}
  683. The outstanding report is designed to help you locate AP transactions
  684. that are not paid yet. The ID field is mostly useful for locating
  685. the specific database record of a duplicate invoice number exists.
  686. \subsubsection{AP Aging Report}
  687. This report can tell you how many invoices are past due and by how
  688. much.
  689. A summary report just shows vendors while a detail report shows individual
  690. invoices.
  691. \subsubsection{Tax Paid and Non-taxable Report}
  692. These reports are not generally used in the US because most of the
  693. time wholesale goods are not taxable. However, for businesses with
  694. offices in other countries including Canada, it is often important
  695. for them to be aware of this functionality. In these countries, one
  696. generally pays sales tax even on wholesale goods and then takes a
  697. tax credit for these when when paying the sales tax to the country
  698. of province. Thus one needs to be able to track taxable and non-taxable
  699. expenses, and how much was paid. For now, it is sufficient to know
  700. that they are there.
  701. \subsection{Vendor Reporting}
  702. \subsubsection{Vendor Search}
  703. The Vendor Search screen can be used to locate vendors or AP transactions
  704. associated with those vendors.
  705. The basic types of reports are:
  706. \begin{description}
  707. \item [{All}] Lists all vendors
  708. \item [{Active}] Lists those vendors currently active
  709. \item [{Inactive}] Lists those vendors who are currently inactive. time
  710. frame.
  711. \item [{Orphaned}] Lists those vendors who do not have transactions associated
  712. with them. These vendors can be deleted.
  713. \end{description}
  714. One can include purchase orders, Requests for Quotations, AP invoices,
  715. and AP transactions on this report as well if they occur between the
  716. from and to dates.
  717. \subsubsection{Vendor History}
  718. This report can be used to obtain information about the past goods
  719. and services ordered or received from vendors. One can find quantities,
  720. partnumber, and sell prices on this report. This facility can be used
  721. to search RFQ's, Purchase Orders, and AP Invoices.
  722. \section{AR}
  723. \subsection{Customers}
  724. Customers are entered in using the AR-\textgreater Customers-\textgreater
  725. Add Customer menu.
  726. The salesperson is autopopulated with the current user who is logged
  727. in. Otherwise, it looks fairly similar to the Vendor input screen.
  728. Customers, like vendors can be assigned languages, but it is more
  729. important to do so because invoices will be printed and sent to them.
  730. The credit limit field can be used to assign an amount that one is
  731. willing to do for a customer on credit.
  732. \subsubsection{Customer Price Matrix}
  733. The price list button can be used to enter specific discounts to the
  734. customer, and groups of customers can be assigned a pricegroup for
  735. the purpose of offering specific discounts on specific parts to the
  736. customer. Such discounts can be temporary or permanent.
  737. \subsection{AR Transactions}
  738. AR Transactions are where one can add moneys owed the business by
  739. customers. One can associate these transactions with income accounts,
  740. and add payments if the item is paid when the invoice is issued.
  741. The PO number field is used to track the PO that the customer sent.
  742. This makes it easier to find items when a customer is asking for clarification
  743. on a bill, for example.
  744. \subsection{AR Invoices}
  745. AR Invoices are designed to provide for the delivery of goods and
  746. services to customers. One would normally issue these invoices at
  747. the time when the everything has been done that is necessary to get
  748. paid by the customer.
  749. As with AP invoices, one can search for matches to partial part numbers
  750. and descriptions, and enter initial payments at this screen.
  751. \subsection{Cash Receipt}
  752. The Cash-\textgreater Receipt screen allows you to accept prepayments
  753. from customers or pay single or multiple invoices after they have
  754. been posted. One can print a receipt, however the current templates
  755. seem to be based on check printing templates and so are unsuitable
  756. for this purpose. This presents a great opportunity for improvement.
  757. \subsubsection{Cash Receipts for multiple customers}
  758. The cash-\textgreater receipts screen allows you to accept payments
  759. on all open customer invoices of all customers at once. One could
  760. print (directly to a printer only) all receipts to be sent out if
  761. this was desired.
  762. \subsection{AR Transaction Reporting}
  763. The AR Outstanding report is almost identical to the AP Outstanding
  764. report and is not covered in any detail in this document.
  765. \subsubsection{AR Transactions Report}
  766. This is almost identical to the AP Transactions Report.
  767. If a customer's PO has been associated with this transaction, one
  768. can search under this field as well.
  769. \subsubsection{AR Aging Report}
  770. This report is almost identical to the AP Aging report, with the exception
  771. that one can print up statements for customer accounts that are overdue.
  772. One more application is to calculate interest based on balance owed
  773. so that these can be entered as AR transactions associated with the
  774. customer.
  775. \subsection{Customer Reporting}
  776. These reports are almost identical to the AP Vendor reports and are
  777. not discussed in these notes.
  778. \section{Projects}
  779. \subsection{Project Basics}
  780. A project is a logical collection of AR and AP transactions, orders,
  781. and the like that allow one to better manage specific service or product
  782. offerings. Ledger-SMB does not offer comprehensive project management
  783. capabilities, and projects are only used here as they relate to accounting.
  784. One can also add translated descriptions to the project names as well.
  785. \subsection{Timecards}
  786. Timecards allow one to track time entered on specific services. These
  787. can then be used to generate invoices for the time entered.
  788. The non-chargeable is the number of hours that are not billed on the
  789. invoice.
  790. One can then generate invoices based on this information.
  791. The project field is not optional.
  792. \subsection{Projects and Invoices}
  793. One can select the project id for line items of both AR and AP invoices.
  794. These will then be tracked against the project itself.
  795. \subsection{Reporting}
  796. \subsubsection{Timecard Reporting}
  797. The Timecard Report allows one to search for timecards associated
  798. with one or more projects. One can then use the total time in issuing
  799. invoices (this is not automated yet).
  800. \subsubsection{Project Transaction Reporting}
  801. The Standard or GIFI options can be used to create different reports
  802. (for example, for Canadian Tax reporting purposes).
  803. This report brings up a summary that looks sort of like a chart of
  804. accounts. Of one clicks on the account numbers, one can see the transactions
  805. associated with the project.
  806. \subsubsection{List of Projects}
  807. This provides a simple way of searching for projects to edit or modify.
  808. \subsection{Possibilities for Using Projects}
  809. \begin{itemize}
  810. \item One can use them similar to departments for tracking work done for
  811. a variety of customers.
  812. \item One can use them for customer-specific projects, such as this training.
  813. \end{itemize}
  814. \section{Quotations and Order Management}
  815. This unit will introduce the business processes that Ledger-SMB allows.
  816. These processes are designed to allow various types of businesses
  817. to manage their orders allow for rudimentary customer relationship
  818. management processes to be built around this software. In this module,
  819. we will introduce the work flow options that many businesses may use
  820. in their day-to-day use of the software.
  821. \subsection{Sales Orders}
  822. Sales orders represent orders from customers that have not been delivered
  823. or shipped yet. These orders can be for work in the future, or for
  824. back ordered products, or work in progress. A sales order can be generated
  825. form an AR invoice or from a quotation automatically.
  826. \subsection{Quotations}
  827. Quotations are offers made to a customer but to which the customer
  828. has not committed to the work. Quotations can be created from Sales
  829. orders or AR Invoice automatically.
  830. \subsection{Shipping}
  831. The Shipping module (Shipping-\textgreater Shipping) allows one to
  832. ship portions or entireties of existing sales orders, printing pick
  833. lists and packing slips.
  834. One can then generate invoices for those parts that were shipped.
  835. In general, one will be more likely to use these features if they
  836. have multiple warehouses that they ship from. More likely most customers
  837. will just generate invoices from orders.
  838. \subsection{AR Work Flow}
  839. \subsubsection{Service Example}
  840. A customer contacts your firm and asks for a quote on some services.
  841. Your company would create a quotation for the job and email it to
  842. the customer or print it and mail it. Once the customer agrees to
  843. pay, one creates an order from the quotation.
  844. When the work is completed, the order is converted into a sales invoice
  845. and this is presented to the customer as a bill.
  846. Note that in some cases, this procedure may be shortened. If the customer
  847. places an order without asking for a quotation and is offered a verbal
  848. quote, then one might merely prepare the order.
  849. %
  850. \begin{figure}[hbtp]
  851. \caption{Simple AR Service Invoice Workflow Example}
  852. \input{simple_ar_dataflow}
  853. \end{figure}
  854. \subsubsection{Single Warehouse Example}
  855. A customer contacts your firm and asks for a quotation for shipping
  856. a part. You would create the quotation and when you get confirmation,
  857. convert it to an order. Once the parts are in place you could go to
  858. shipping and ship the part.
  859. The billing department can then generate the invoice from the sales
  860. order based on what merchandise has been shipped and mail it to the
  861. customer.
  862. Note that this requires that you have the part in your inventory.
  863. %
  864. \begin{figure}[hbtp]
  865. \caption{AR Workflow with Shipping}
  866. \input{ar_workflow_ship}
  867. \end{figure}
  868. \subsubsection{Multiple Warehouse Example}
  869. A customer contacts your firm and asks for a quotation for a number
  870. of different parts. You would create a quotation and when you get
  871. confirmation, convert it to an order. When you go to ship the item,
  872. you would select the warehouse in the drop-down menu, and select the
  873. parts to ship. One would repeat with other warehouses until the entire
  874. order is shipped.
  875. Then the billing department would go to the sales order and generate
  876. the invoice. It would then be mailed to the customer.
  877. %
  878. \begin{figure}[hbtp]
  879. \caption{Complex AR Workflow with Shipping}
  880. \input{ar_workflow_complex}
  881. \end{figure}
  882. \subsection{Requests for Quotation (RFQ)}
  883. A request for quotation would be a formal document one might submit
  884. to a vendor to ask for a quote on a product or service they might
  885. offer. These can be generated from Purchase Orders or AP Invoices
  886. \subsection{Purchase Orders}
  887. A purchase order is a confirmation that is issued to the vendor to
  888. order the product of service. Many businesses will require a purchase
  889. order with certain terms in order to begin work on a product. These
  890. can be generated from RFQ's or AP Invoices.
  891. \subsection{Receiving}
  892. The Shipping-\textgreater Receiving screen allows you to track the
  893. parts received from an existing purchase order. Like shipping, it
  894. does not post an invoice but tracks the received parts in the order.
  895. \subsection{AP Work Flow}
  896. \subsubsection{Bookkeeper entering the received items, order completed in full}
  897. Your company inquires about the price of a given good or service from
  898. another firm. You submit an RFQ to the vendor, and finding that the
  899. price is reasonable, you convert it to an order, adjust the price
  900. to what they have quoted, and save it. When the goods are delivered
  901. you convert the order into an AP invoice and post it.
  902. %
  903. \begin{figure}[hbtp]
  904. \caption{Simple AP Workflow}
  905. \input{simple_ap_workflow}
  906. \end{figure}
  907. \subsubsection{Bookkeeper entering received items, order completed in part}
  908. Your company inquires about the price of a given good or service from
  909. another firm, You submit an RFQ to the vendor, and finding that the
  910. price is acceptable, you convert it into an order, adjusting the price
  911. to what they have quoted, and save it. When some of the goods are
  912. received, you open up the purchase order, enter the number of parts
  913. received, convert that order into an invoice, and post it. Repeat
  914. until all parts are received.
  915. %
  916. \begin{figure}[hbtp]
  917. \caption{AP Workflow with Receiving}
  918. \input{ap_workflow_ship}
  919. \end{figure}
  920. \subsubsection{Receiving staff entering items}
  921. Your company inquires about the price of a given good or service from
  922. another firm, You submit an RFQ to the vendor, and finding that the
  923. price is acceptable, you convert it into an order, adjusting the price
  924. to what they have quoted, and save it. When some or all of the goods
  925. are received, the receiving staff goes Shipping-Receiving, locates
  926. the purchase order, and fills in the number of items received.
  927. The bookkeeper can then determine when all items have been received
  928. and post the invoice at that time.
  929. %
  930. \begin{figure}[hbtp]
  931. \caption{Complex AP Workflow}
  932. \input{ap_workflow_complex}
  933. \end{figure}
  934. \subsection{Generation and Consolidation}
  935. \subsubsection{Generation}
  936. The Generation screen allows you to generate Purchase Orders based
  937. on sales orders. One selects the sales orders one wants to use, and
  938. clicks \char`\"{}Generate Purchase Orders.\char`\"{} Then one selects
  939. clicks on the parts to order, adjusts the quantity if necessary, and
  940. clicks \char`\"{}Select Vendor.\char`\"{} This process is repeated
  941. for every vendor required. Then the Generate Orders button is clicked.
  942. \subsubsection{Consolidation}
  943. One can consolidate sales and/or purchase orders using this screen.
  944. For the consolidation to work you must have more than one order associated
  945. with the relevant customer or vendor.
  946. \subsection{Reporting}
  947. The reporting functionality in the order management is largely limited
  948. to the ability to locate purchase orders, sales orders, RFQ's, and
  949. quotations.
  950. \subsection{Shipping Module: Transferring Inventory between Warehouses}
  951. One can transfer inventory between warehouses if necessary by using
  952. the Shipping-\textgreater Transfer Inventory screen.
  953. \section{HR}
  954. The HR module is currently limited to tracking employees for and their
  955. start and end dates. It has very little other functionality. One could
  956. build payroll systems that could integrate with it however.
  957. \section{POS}
  958. The Point of Sale screen is still fairly rudimentary, and it is one
  959. of the least mature aspects of Ledger-SMB. It is suitable for small
  960. retail environments at the moment but not much else.
  961. \subsection{Sales Screen}
  962. The sales screen looks very much like a normal invoice entry screen
  963. with a few differences.
  964. \begin{itemize}
  965. \item The discount text field is not available, nor is the unit field..
  966. \item The next part number is automatically focused when the data loads
  967. for rapid data entry.
  968. \item Hot keys for the buttons are Alt-U for update, Alt-P for print, Alt-O
  969. for post, and Alt-R for print and post.
  970. \item Part Groups appear at the bottom of the screen.
  971. \end{itemize}
  972. \subsection{Possibilities for Data Entry}
  973. \begin{itemize}
  974. \item Barcode scanners can be used to scan items in as they are being rung
  975. in.
  976. \item One could use touch screens, though this would ideally require some
  977. custom stylesheets to make it efficient.
  978. \end{itemize}
  979. \subsection{Hardware Support}
  980. As Ledger-SMB is a web-based application, the web browser usually
  981. does not allow the page to write to arbitrary files. Therefore hardware
  982. support for pole displays, etc. is not readily possible from the application
  983. itself. In some cases, there are add-on packages (such as SL-POS)
  984. which offer some additional hardware options via simple additional
  985. networking programs.
  986. Notes for specific types of hardware are as follows:
  987. \begin{description}
  988. \item [{Touch}] screens: The default stylesheet is not really usable from
  989. a touchscreen as the items are often too small. One would need to
  990. modify the stylesheets to ensure that the relevant items would be
  991. reasonable. Setting down the resolution would also help.
  992. \item [{Receipt}] Printers: ESC/POS printers generally work in text mode.
  993. Control sequences can be embedded in the template as necessary.
  994. \item [{Pole}] Displays: Generally are unsupported in Ledger-SMB without
  995. add-on patches and special network clients.
  996. \item [{Cash}] Drawers: These should be attached to the printer. The control
  997. codes can then be embedded in the invoices so that the drawer opens
  998. whenever an invoice is printed.
  999. \item [{Barcode}] Scanners: Most customers use decoded barcode scanners
  1000. through a keyboard wedge interface. This allows them to scan items
  1001. as if they were typing them on the keyboard.
  1002. \end{description}
  1003. \subsection{Reports}
  1004. \subsubsection{Open Invoices}
  1005. The POS-\textgreater Open screen allows one to find any POS receipts
  1006. that are not entirely paid off.
  1007. \subsubsection{Receipts}
  1008. The POS-\textgreater Receipts screen allows one to bring up a basic
  1009. record of the POS terminals. It is not sufficient for closing the
  1010. till, however, though it may help for reconciliation.
  1011. The till column is the last component or octet of the terminal's IP
  1012. address. Therefore it is a good idea to try to avoid having IP addresses
  1013. where the last octet is the same.
  1014. All entries are grouped by date and source in this report.
  1015. \section{General Ledger}
  1016. \subsection{GL Basics}
  1017. The General Ledger is the heart of Ledger-SMB. Indeed, Ledger-SMB
  1018. is designed to be as close as possible to a software equivalent of
  1019. a paper-based accounting program (but with no difference between the
  1020. General Ledger and General Journal).
  1021. \subsubsection{Paper-based accounting systems and the GL}
  1022. In order to understand the principle of the General Ledger, one must
  1023. have a basic understanding of the general process of bookkeeping using
  1024. double-entry paper-based accounting systems.
  1025. Normally when a transaction would be recorded, it would first be recorded
  1026. in the \char`\"{}General Journal\char`\"{} which would contain detailed
  1027. information about the transaction, notes, etc. Then the entries from
  1028. the General Journal would be transcribed to the General Ledger, where
  1029. one could keep closer tabs on what was going on in each account.
  1030. In the general journal, all transactions are listed chronologically
  1031. with whatever commentary is deemed necessary, while in the general
  1032. ledger each account has its own page and transactions are recorded
  1033. in a simple and terse manner. The General Journal is the first place
  1034. the transaction is recorded and the General Ledger is the last.
  1035. At the end of the accounting period, the GL transactions would be
  1036. summarized into a trial balance and this would be used for creating
  1037. financial statements and closing the books at the end of the year.
  1038. \subsubsection{Double Entry Examples on Paper}
  1039. Let us say that John starts his business with an initial investment
  1040. of \$10,000.
  1041. This is recorded in the General Journal as follows (in this example,
  1042. suppose it is page 1):
  1043. \begin{tabular}{|l|l|l|r|r|}
  1044. \hline
  1045. Date &
  1046. Accounts and Explanation &
  1047. Ref &
  1048. DEBIT &
  1049. CREDIT \tabularnewline
  1050. \hline
  1051. March 1 &
  1052. Checking Account &
  1053. 1060 &
  1054. 10000.00 &
  1055. \tabularnewline
  1056. &
  1057. John Doe Capital &
  1058. 3011 &
  1059. &
  1060. 10000.00\tabularnewline
  1061. &
  1062. John Doe began a business &
  1063. &
  1064. &
  1065. \tabularnewline
  1066. &
  1067. with an investment of &
  1068. &
  1069. &
  1070. \tabularnewline
  1071. &
  1072. \$10000 &
  1073. &
  1074. &
  1075. \tabularnewline
  1076. \hline
  1077. \end{tabular}\medskip{}
  1078. This would then be transcribed into two pages of the General Ledger.
  1079. The first page might be the Checking Account page:\medskip{}
  1080. \begin{tabular}{|l|l|l|r|l|l|l|r|}
  1081. \hline
  1082. DATE &
  1083. EXPLANATION &
  1084. REF. &
  1085. DEBITS &
  1086. DATE &
  1087. EXPLANATION &
  1088. REF. &
  1089. CREDITS\tabularnewline
  1090. \hline
  1091. March 1 &
  1092. &
  1093. J1 &
  1094. 10000.00 &
  1095. &
  1096. &
  1097. &
  1098. \tabularnewline
  1099. \hline
  1100. \end{tabular}\medskip{}
  1101. On the John Doe Capital page, we would add a similar entry:\medskip{}
  1102. \begin{tabular}{|l|l|l|r|l|l|l|r|}
  1103. \hline
  1104. DATE &
  1105. EXPLANATION &
  1106. REF. &
  1107. DEBITS &
  1108. DATE &
  1109. EXPLANATION &
  1110. REF. &
  1111. CREDITS\tabularnewline
  1112. \hline
  1113. &
  1114. &
  1115. &
  1116. &
  1117. March 1 &
  1118. &
  1119. J1 &
  1120. 10000.00\tabularnewline
  1121. \hline
  1122. \end{tabular}\medskip{}
  1123. \subsubsection{The GL in Ledger-SMB}
  1124. The paper-based accounting procedure works well when one is stuck
  1125. with paper recording requirements but it has one serious deficiency---
  1126. all of this transcribing creates an opportunity for errors.
  1127. Relational databases relieve the need for such transcription as it
  1128. is possible to store everything physically in a way similar to the
  1129. way a General Journal is used in the paper-based systems and then
  1130. present the same information in ways which are more closely related
  1131. to the General Ledger book.
  1132. This is the exact way that the General Ledger is used in Ledger-SMB.
  1133. The actual data is entered and stored as if it was a general journal,
  1134. and then the data can be presented in any number of different ways.
  1135. All modules of Ledger-SMB that involve COA accounts store their data
  1136. in the General Ledger (it is a little more complex than this but this
  1137. is very close to the actual mechanism).
  1138. \subsection{Cash Transfer}
  1139. The simplest form of GL entry in Ledger-SMB is the Cash-\textgreater
  1140. Transfer screen. This screen shows two transaction lines, and fields
  1141. for reference, department, description, and notes.
  1142. The field descriptions are as follows:
  1143. \begin{description}
  1144. \item [{Reference}] refers to the source document for the transfer. One
  1145. can use transfer sheets, bank receipt numbers, etc for this field.
  1146. \item [{Description}] is optional but really should be filled in. It ought
  1147. to be a description of the transaction.
  1148. \item [{Notes}] provide supplemental information for the transaction.
  1149. \item [{FX}] indicates whether foreign exchange is a factor in this transaction.
  1150. \item [{Debit}] indicates money going \textbf{into} the asset account.
  1151. \item [{Credit}] indicates money coming \textbf{out} of the asset account.
  1152. \item [{Source}] is the source document for that portion of the transaction.
  1153. \item [{Memo}] lists additional information as necessary
  1154. \item [{Project}] allows you to assign this line to a project.
  1155. \end{description}
  1156. The credit and debit options seem to be the opposite of what one would
  1157. think of concerning one's bank account. The reason is that credits
  1158. and debits are recorded so as to balance any money that may be invested
  1159. in or withdrawn from the business. A debit to an asset account will
  1160. be credited when money is withdrawn from the business, for example.
  1161. Also note that in this screen, when an item is updated, it will reduce
  1162. the number of lines to those already filled in plus an extra line
  1163. for the new line in the data entry.
  1164. \subsection{GL Transactions}
  1165. The GL Transaction screen (General Ledger-\textgreater Add Transaction)
  1166. is identical to the Cash Transfer screen with the exception that it
  1167. starts with nine instead of two lines. Otherwise, they are identical.
  1168. Again, one must be careful with debits and credits. Often it is easy
  1169. to get confused. It is generally worth while to go back to the principle
  1170. that one tracks them with regard to their impact on the equity accounts.
  1171. So expenses are credits because they debit the equity accounts, and
  1172. income is a debit because it credits the retained earning equity account.
  1173. \subsection{Payroll as a GL transaction}
  1174. Currently payroll must be done as a GL transaction. The attempts to
  1175. create a payroll system that would ship with SL have largely stalled.
  1176. Most customers running their businesses will have an idea of how to
  1177. do this.
  1178. %
  1179. \begin{figure}[hbtp]
  1180. \caption{Payroll as a GL Transaction (Purely fictitious numbers)}
  1181. \begin{tabular}{|l|r|r|}
  1182. \hline
  1183. Account &
  1184. Debit &
  1185. Credit \tabularnewline
  1186. 5101 Wages and Salaries &
  1187. 500 &
  1188. \tabularnewline
  1189. 2032 Accrued Wages &
  1190. &
  1191. 450 \tabularnewline
  1192. 2033 Fed. Income Tax wthd &
  1193. &
  1194. 30 \tabularnewline
  1195. 2034 State Inc. Tax. wthd &
  1196. &
  1197. 15 \tabularnewline
  1198. 2035 Social Security wthd &
  1199. &
  1200. 3 \tabularnewline
  1201. 2036 Medicare wthd &
  1202. &
  1203. 2 \tabularnewline
  1204. 2032 Accrued Wages &
  1205. 450 &
  1206. \tabularnewline
  1207. 1060 Checking Acct &
  1208. &
  1209. 450 \tabularnewline
  1210. \hline
  1211. \end{tabular}
  1212. \end{figure}
  1213. \subsection{Reconciliation}
  1214. To reconcile an account (say, when one would get a checking account
  1215. statement), one would go to cash/reconciliation, and check off the
  1216. items that have cleared. One can then attempt to determine where any
  1217. errors lie by comparing the total on the statement with the total
  1218. that SL generates.
  1219. This can be done for other accounts too, such as petty cash.%
  1220. \footnote{Petty cash denotes a drawer of cash that is used to pay small expenses.
  1221. When an expense is paid, it is recorded on a slip of paper that is
  1222. stored for reconciliation purposes.%
  1223. }
  1224. \subsection{Reports}
  1225. The most flexible report in Ledger-SMB is the GL report because it
  1226. has access to the entire set of financial transactions of a business.
  1227. Every invoice posted, payment made or received, etc. can be located
  1228. here.
  1229. The search criteria include:
  1230. \begin{description}
  1231. \item [{Reference}] is the invoice number, or other reference number associated
  1232. with the transaction.
  1233. \item [{Source}] is the field related to the source document number in
  1234. a payment or other transaction.%
  1235. \footnote{Source documents are things like receipts, canceled checks, etc. that
  1236. can be used to verify the existence and nature of a transaction.%
  1237. }
  1238. \item [{Memo}] relates to the memo field on a payment
  1239. \item [{Department}] can be used to filter results by department.
  1240. \item [{Account}] Type can be used to filter results by type of account
  1241. (Asset, Liability, etc.)
  1242. \item [{Description}] can be used to filter out by GL description or by
  1243. customer/vendor name.
  1244. \end{description}
  1245. The actual format of the report looks more like what one would expect
  1246. in a paper accounting system's general journal than a general ledger
  1247. per se. A presentation of the data that is more like the paper general
  1248. ledger is found in the Chart of Accounts report.
  1249. \subsubsection{GL as access to almost everything else}
  1250. The GL reports can be used to do all manner of things. One can determine,
  1251. for example, which AP invoice or transaction was paid with a certain
  1252. check number, which invoice by a specific customer was paid by a specific
  1253. check number.
  1254. \section{Recurring Transactions}
  1255. Any transaction or invoice may be repeated a number of times in regular
  1256. intervals. To schedule any GL, AR, or AP transaction or invoice, click
  1257. the schedule button.
  1258. In general the reference number should be left blank as this will
  1259. force Ledger-SMB to create a new invoice or transaction number for
  1260. each iteration. The rest of the options are self-explanatory. Note
  1261. that a blank number if iterations will result in no recurrences of
  1262. the transaction.
  1263. To process the recurring transactions, click on the Recurring Transactions
  1264. option on the main menu select the ones you want to process and click
  1265. \char`\"{}Process Transactions.\char`\"{}
  1266. \section{Financial Statements and Reports}
  1267. Financial statements and reports are a very important part of any
  1268. accounting system. Accountants and businesspeople rely on these reports
  1269. to determine the financial soundness of the business and its prospects
  1270. for the next accounting period.
  1271. \subsection{Cash v. Accrual Basis}
  1272. Financial statements, such as the Income Statement and Balance Sheet
  1273. can be prepared either on a cash or accrual basis. In cash-basis accounting,
  1274. the income is deemed earned when the customer pays it, and the expenses
  1275. are deemed incurred when the business pays them.
  1276. There are a number of issues with cash-basis accounting from a business
  1277. point of view. The most extreme is that one can misrepresent the wellbeing
  1278. of a business by paying a large expense after a deadline. Thus cash-basis
  1279. accounting does not allow one to accurately pair the income with the
  1280. related expense as these are recorded at different times. If one cannot
  1281. accurately pair the income with the related expense, then financial
  1282. statements cannot be guaranteed to tell one much of anything about
  1283. the well-being of the business.
  1284. In accrual basis accounting, income is considered earned when the
  1285. invoice is posted, and expenses are considered incurred at the time
  1286. when the goods or services are delivered to the business. This way,
  1287. one can pair the income made from the sale of a product with the expense
  1288. incurred in bringing that product to sale. This pairing allows for
  1289. greater confidence in business reporting.
  1290. \subsection{Viewing the Chart of Accounts and Transactions}
  1291. The Reports--\textgreater Chart of Accounts will provide the chart
  1292. of accounts along with current totals in each account.
  1293. If you click on an account number, you will get a screen that allows
  1294. you to filter out transactions in that account by various criteria.
  1295. One can also include AR/AP, and Subtotal in the report.
  1296. The report format is similar to that of a paper-based general ledger,
  1297. \subsection{Trial Balance}
  1298. \subsubsection{The Paper-based function of a Trial Balance}
  1299. In paper-based accounting systems, the accountant at the end of the
  1300. year would total up the debits and credits in every account and transfer
  1301. them onto another sheet called the trial balance. The accountant would
  1302. check to determine that the total debits and credits were equal and
  1303. would then transfer this information onto the financial statements.
  1304. It was called a trial balance because it was the main step at which
  1305. the error-detection capabilities of double-entry accounting systems
  1306. were used.
  1307. \subsubsection{Running the Trial Balance Report}
  1308. This report is located under Reports --\textgreater Trial Balance.
  1309. One can filter out items by date, accounting period, or department.
  1310. One can run the report by accounts or using GIFI classifications to
  1311. group accounts together.
  1312. From this report, you can click on the account number and see all
  1313. transactions on the trial balance as well as whether or not they have
  1314. been reconciled.
  1315. \subsubsection{What if the Trial Balance doesn't Balance?}
  1316. If the trial balance does not balance, get technical support immediately.
  1317. This usually means that transactions were not entered properly. Some
  1318. may have been out of balance, or some may have gone into non-existent
  1319. accounts (believe it or not, Ledger-SMB does not check this latter
  1320. issue).
  1321. \subsubsection{Trial Balance as a Summary of Account Activity}
  1322. The trial balance offers a glance at the total activity in every account.
  1323. It can provide a useful look at financial activity at a glance for
  1324. the entire business.
  1325. \subsubsection{Trial Balance as a Budget Planning Tool}
  1326. By filtering out departments, one can determine what a department
  1327. earned and spent during a given financial interval. This can be used
  1328. in preparing budgets for the next accounting period.
  1329. \subsection{Income Statement}
  1330. The Income Statement is another tool that can be used to assist with
  1331. budgetary planning as well as provide information on the financial
  1332. health of a business.
  1333. The report is run from Reports--\textgreater Income Statement. The
  1334. report preparation screen shows the following fields:
  1335. \begin{description}
  1336. \item [{Department}] allows you to run reports for individual departments.
  1337. This is useful for budgetary purposes.
  1338. \item [{Project}] allows you to run reports on individual projects. This
  1339. can show how profitable a given project was during a given time period.
  1340. \item [{From}] and To allow you to select arbitrary from and to dates.
  1341. \item [{Period}] allows you to specify a standard accounting period.
  1342. \item [{Compare}] to fields allow you to run a second report for comparison
  1343. purposes for a separate range of dates or accounting period.
  1344. \item [{Decimalplaces}] allows you to display numbers to a given precision.
  1345. \item [{Method}] allows you to select between accrual and cash basis reports.
  1346. \item [{Include}] in Report provides various options for reporting.
  1347. \item [{Accounts}] allows you to run GIFI reports instead of the standard
  1348. ones.
  1349. \end{description}
  1350. The report shows all income and expense accounts with activity during
  1351. the period when the report is run, the balances accrued during the
  1352. period, as well as the total income and expense at the bottom of each
  1353. section. The total expense is subtracted from the total income to
  1354. provide the net income during the period. If there is a loss, it appears
  1355. in parentheses.
  1356. \subsubsection{Uses of an Income Statement}
  1357. The income statement provides a basic snapshot of the overall ability
  1358. of the business to make money. It is one of the basic accounting statements
  1359. and is required, for example, on many SEC forms for publicly traded
  1360. firms.
  1361. Additionally, businessmen use the income statement to look at overall
  1362. trends in the ability of the business to make money. One can compare
  1363. a given month, quarter, or year with a year prior to look for trends
  1364. so that one can make adjustments in order to maximize profit.
  1365. Finally, these reports can be used to provide a look at each department's
  1366. performance and their ability to work within their budget. One can
  1367. compare a department or project's performance to a year prior and
  1368. look for patterns that can indicate problems or opportunities that
  1369. need to be addressed.
  1370. \subsection{Balance Sheet}
  1371. The balance sheet is the second major accounting statement supported
  1372. by Ledger-SMB. The balance sheet provides a snapshot of the current
  1373. financial health of the business by comparing assets, liabilities,
  1374. and equity.
  1375. In essence the balance sheet is a statement of the current state of
  1376. owner equity. Traditionally, it does not track changes in owner equity
  1377. in the same way the Statement of Owner Equity does.
  1378. The Balance Sheet report preparation screen is much simpler than the
  1379. Income Statement screen. Balance sheets don't apply to projects, but
  1380. they do apply to departments. Also, unlike an income statement, a
  1381. balance sheet is fixed for a specific date in time. Therefore one
  1382. does not need to select a period.
  1383. The fields in creating a balance sheet are:
  1384. \begin{description}
  1385. \item [{Department}] allows you to run separate balance sheets for each
  1386. department.
  1387. \item [{As}] at specifies the date. If blank this will be the current date.
  1388. \item [{Compare}] to specifies the date to compare the balance sheet to.
  1389. \item [{Decimalplaces}] specifies the number of decimal places to use.
  1390. \item [{Method}] selects between cash and accrual basis.
  1391. \item [{Include}] in report allows you to select supplemental information
  1392. on the report.
  1393. \item [{Accounts}] allows you to select between standard and GIFI reports.
  1394. \end{description}
  1395. The balance sheet lists all asset, liability, and equity accounts
  1396. with a balance. Each category has a total listed, and the total of
  1397. the equity and liability accounts is also listed.
  1398. The total assets should be equal to the sum of the totals of the liability
  1399. and equity accounts.
  1400. \subsection{What if the Balance Sheet doesn't balance?}
  1401. Get technical support immediately, This may indicate that out of balance
  1402. transactions were entered or that transactions did not post properly.
  1403. \subsection{No Statement of Owner Equity?}
  1404. The Statement of Owner Equity is the one accounting statement that
  1405. Ledger-SMB does not support. However, it can be simulated by running
  1406. a balance sheet at the end of the time frame in question and comparing
  1407. it to the beginning. One can check this against an income statement
  1408. for the period in question to verify its accuracy. The statement of
  1409. owner equity is not as commonly used now as it once was.
  1410. \section{The Template System}
  1411. Ledger-SMB allows most documents to be generated according to a template
  1412. system. This allows financial statements, invoices, orders, and the
  1413. like to be customized to meet the needs of most businesses. Company
  1414. logos can be inserted, the format can be radically altered, one can
  1415. print letters to be included with checks to vendors instead of the
  1416. checks themselves, and the like. In the end, there is very little
  1417. that cannot be accomplished regarding modification of these documents
  1418. with the template system.
  1419. One can define different templates for different languages, so that
  1420. a customer in Spain gets a different invoice than a customer in Canada.
  1421. \subsection{Text Templates}
  1422. The only template that uses a text-only format is the POS receipt.
  1423. This example provides the simplest way to understand the template
  1424. system.
  1425. The first two lines are:\\
  1426. \textless\%company align=center width=40\%\textgreater\\
  1427. \textless\%address align=center width=40\%\textgreater\\
  1428. The first line tells Ledger-SMB to print the company name as passed
  1429. to it via a variable, centered, with a page width of 40 characters.
  1430. The second line does the same thing with the address.
  1431. These variables are usually passed to the invoice using form fields
  1432. (hidden or otherwise) in the submitting web page. The printing script,
  1433. however, can disable some of these fields or add others via database
  1434. lookups and the like.
  1435. In all types of templates, variable substitution occurs between \textless\%
  1436. and \%\textgreater. One can optionally specify an alignment or a
  1437. width but these are really only useful in text templates.
  1438. \subsection{HTML Templates}
  1439. The following templates exist in HTML format:
  1440. \begin{itemize}
  1441. \item Income Statement
  1442. \item Balance Sheet
  1443. \item Invoice (AR)
  1444. \item AR Transaction
  1445. \item AP Transaction
  1446. \item Packing List
  1447. \item Pick List
  1448. \item Sales Order
  1449. \item Work Order
  1450. \item Purchase Order
  1451. \item Bin List
  1452. \item Statement
  1453. \item Quotation
  1454. \item RFQ
  1455. \item Time Card
  1456. \end{itemize}
  1457. These templates can be edited by an HTML editor. However, it is generally
  1458. recommended that one back up templates first. The reason is that some
  1459. HTML editors will fully re-parse the HTML and save it back without
  1460. what they see as invalid tags. Most editors, however, will save the
  1461. variable substitution tags because similar tags are also used by Microsoft's
  1462. active server pages.
  1463. Finally, some editors are known to mangle formatting, so many problems
  1464. can be avoided by ensuring that one has a backup of the templates,
  1465. especially if they have already been customized.
  1466. \subsection{\LaTeX{}\ Templates}
  1467. The following templates, by default, are available in \LaTeX{}\ :
  1468. \begin{itemize}
  1469. \item Invoice
  1470. \item AR Transaction
  1471. \item AP Transaction
  1472. \item Packing List
  1473. \item Pick List
  1474. \item Sales Order
  1475. \item Work Order
  1476. \item Purchase Order
  1477. \item Bin List
  1478. \item Statement
  1479. \item Check
  1480. \item Receipt
  1481. \item Quotation
  1482. \item RFQ
  1483. \item Time Card
  1484. \end{itemize}
  1485. \LaTeX{}\ templates allow one to generate PDF and postscript documents
  1486. and print directly to a postscript-enabled printer or print software
  1487. (like CUPS).
  1488. \LaTeX{}\ templates can be edited using a standard text editor (like
  1489. vim or emacs), or using a synchronous \LaTeX{}\ implementation such
  1490. as \LyX{}.
  1491. \subsubsection{What is \LaTeX{}\ ?}
  1492. \LaTeX{}\ (pronounced LAY-tech) is an extension on the \TeX{}\ typesetting
  1493. system. It largely consists of a set of macros that allow one to focus
  1494. on the structure of the document while letting the \TeX{}\ engine
  1495. do the heavy lifting in terms of determining the optimal formatting
  1496. for the page. \LaTeX{}\ is used in a large number of academic journals
  1497. (including those of the American Mathematics Association). It is available
  1498. at \url{http://www.tug.org}.
  1499. Like HTML, \LaTeX{}\ uses plain text documents to store the formatting
  1500. information and then when the document is rendered, attempts to fit
  1501. it onto a page. \LaTeX{}\
  1502. supports the concept of stylesheets, allowing one to separate content
  1503. from format, and this feature is used in many higher-end applications,
  1504. like journal publication.
  1505. Unlike HTML, \LaTeX{}\ is a complete though simple programming language
  1506. that allows one to redefine internals of the system for formatting
  1507. purposes.
  1508. This document is written in \LaTeX{}.
  1509. \subsubsection{Using \LyX{} to Edit \LaTeX{}\ Templates}
  1510. \LyX{} is a synchronous \LaTeX{}\ editor that runs on Windows, UNIX/Linux,
  1511. and Mac OS X. It requires an installed \LaTeX{}-2e implementation
  1512. and can be obtained at \url{http://www.lyx.org}. Like the most common
  1513. \LaTeX{}\ implementations, it is open source.
  1514. In \LaTeX{}, the \% sign is used to begin a comment. Therefore in
  1515. order to edit the documents effectively, you must convert the \% signs
  1516. into another character combination, such as @@@. This can be done
  1517. with a sed script such as:\\
  1518. sed -e \char`\"{}s$\vert$\%$\vert$@@@$\vert$ig\char`\"{} template.tex
  1519. \textgreater\ template-edit.tex \\
  1520. Then when you are done:\\
  1521. sed -e \char`\"{}$\vert$@@@$\vert$\%$\vert$ig\char`\"{} template-edit.tex
  1522. \textgreater\ template.tex
  1523. One can edit the template-edit.tex without worrying about \LyX{} disregarding
  1524. lines when it encounters a \%.
  1525. \subsection{Customizing Logos}
  1526. \LaTeX{}\ requires different formats of logos depending on whether
  1527. the document is going to be generated as a PDF or as postscript. Postscript
  1528. requires an embedded postscript graphic, while PDF requires any type
  1529. of graphic other than embedded postscript. Usually one uses a PNG's
  1530. for PDF's, though GIF's could be used as well. The logo for a \LaTeX{}\ document
  1531. resides in the users directory.
  1532. HTML documents can have logos in many different formats. PNG's are
  1533. generally preferred for printing reasons. The image can be stored
  1534. anywhere and merely referenced in the HTML.
  1535. Note: Always test the an invoice with an image on it to ensure that
  1536. the rest of the page format is not thrown off by it.
  1537. \subsection{How are They Stored in the Filesystem?}
  1538. The template directory (\char`\"{}templates\char`\"{} in the root
  1539. Ledger-SMB install directory) contains all the root templates used
  1540. by Ledger-SMB. These follow a naming convention of COAType-templatename.ext
  1541. where COAType is the type of dataset that was created when the user
  1542. was created, templatename is the name of the template, and ext is
  1543. either txt, html, or tex (for text, html, and \LaTeX{}\ respectively).
  1544. Inside this directory are one or more subdirectories where the relevant
  1545. templates have been copied as default language templates for the user.
  1546. Many users can use the same user directory (which bears the name of
  1547. the Ledger-SMB username). Within this directory are more subdirectories
  1548. for translated templates, one for each language created.
  1549. \subsection{Upgrade Issues}
  1550. When Ledger-SMB is upgraded, the templates are not replaced. This
  1551. is designed to prevent the upgrade script from overwriting changes
  1552. made during the course of customizing the templates.
  1553. Occasionally, however, the data model changes in a way which can cause
  1554. the templates to stop printing certain information. When information
  1555. that was showing up before an upgrade stops showing up, one can either
  1556. upgrade the templates by copying the source template over the existing
  1557. one, or one can edit the template to make the change.
  1558. \clearpage
  1559. \part{Technical Overview}
  1560. \section{Basic Architecture}
  1561. Ledger-SMB is a web-based Perl program that interfaces with PostgreSQL
  1562. using the relevant Perl modules. The code is well partitioned, and
  1563. the main operation modules are written in an object oriented way.
  1564. \subsection{The Software Stack}
  1565. %
  1566. \begin{figure}[hbtp]
  1567. \label{fig-sl-stack} \input{sl-stack.tex}
  1568. \caption{The Ledger-SMB software stack in a Typical Implementation}
  1569. \end{figure}
  1570. Ledger-SMB runs in a Perl interpreter. I do not currently know if
  1571. it is possible to run it with Perl2C or other language converters
  1572. to run in other environments. However, except for high-capacity environments,
  1573. Perl is a good language choice for this sort of program.
  1574. Ledger-SMB used to support DB2 and Oracle as well as PostgreSQL. However,
  1575. currently some of the functionality is implemented using PostgreSQL
  1576. user-defined functions. These would need to be ported to other database
  1577. managers in order to make the software work on these. It should not
  1578. be too hard, but the fact that it has not been done yet may mean that
  1579. there is no real demand for running the software under other RDBMS's.
  1580. One can substitute other web servers for Apache. Normally Ledger-SMB
  1581. is run as a CGI program but it may be possible to run it in the web
  1582. server process (note that this may not be entirely thread-safe).
  1583. The operating system can be any that supports a web server and Perl
  1584. (since PostgreSQL need not run on the same system). However, there
  1585. are a few issues running Ledger-SMB on Windows (most notably in trying
  1586. to get Postscript documents to print properly).
  1587. On the client side, any web-browser will work. Currently, the layout
  1588. is different for Lynx (which doesn't support frames), and the layout
  1589. is not really useful under eLinks (the replacement for Lynx which
  1590. does support frames). Some functionality requires Javascript to work
  1591. properly, though the application is usable without these features.
  1592. \subsection{Capacity Planning}
  1593. Some companies may ask how scalable Ledger-SMB is. In general, it
  1594. is assumed that few companies are going to have a need for a high-concurrency
  1595. accounting system. However, with all the features available in Ledger-SMB,
  1596. the staff that may have access to some of the application may be senior
  1597. enough to make the question worthwhile.
  1598. This question also becomes more important when companies might look
  1599. at integrating Ledger-SMB with a CRM solution, online store, or other
  1600. environment. This section looks at a number of the known issues and
  1601. their solutions.
  1602. \subsubsection{Scalability Strategies}
  1603. As Ledger-SMB is a fairly standard web-based application. However,
  1604. sometimes during upgrades, the database schema changes. In these cases,
  1605. it becomes impossible to use different versions of the software against
  1606. the same database version safely. Ledger-SMB checks the version of
  1607. the database and if the version is higher than the version of the
  1608. software that is running, will refuse to run.
  1609. Therefore although one strategy might be to run several front-end
  1610. web servers with Ledger-SMB, in reality this can be a bit of a problem.
  1611. One solution is to take half of the front-end servers off-line while
  1612. doing the initial upgrade, and then take the other offline to upgrade
  1613. when these are brought back online.
  1614. The database manager is less scalable in the sense that one cannot
  1615. just add more database servers and expect to carry on as normal. However,
  1616. aside from the known issues listed below, there are few performance
  1617. issues with it. If complex reports are necessary, these can be moved
  1618. to a replica database (perhaps using Slony-I).
  1619. If this solution is insufficient for database scalability, one might
  1620. be able to move staff who do not need real-time access to new entries
  1621. onto a PG-Pool/Slony-I cluster where new transactions are entered
  1622. on the master and other data is looked up on the replica. In certain
  1623. circumstances, one can also offload a number of other queries from
  1624. the master database in order to minimize the load. Ledger-SMB has
  1625. very few issues in the scalability of the application.
  1626. \subsubsection{Database Maintenance}
  1627. PostgreSQL uses a technique called Multi-version Concurrency Control
  1628. (MVCC) to provide a snapshot of the database at the beginning of a
  1629. statement or transaction (depending on the transaction isolation level).
  1630. When a row is updated, PostgreSQL leaves the old row in the database,
  1631. and inserts a new version of that row into the table. Over time, unless
  1632. those old rows are removed, performance can degrade as PostgreSQL
  1633. has to search through all the old versions of the row in order to
  1634. determine which one ought to be the current one.
  1635. Due to the way the SQL statements are executed in Ledger-SMB, most
  1636. inserts will also create a dead row.
  1637. A second problem occurs in that each transaction is given a transaction
  1638. id. These id's are numbered using 32-bit integers. If the transaction
  1639. id wraps around (prior to 8.1), data from transactions that appear
  1640. (due to the wraparound) to be in the future suddenly becomes inaccessible.
  1641. This problem was corrected in PostgreSQL 8.1, where the database will
  1642. refuse to accept new transactions if the transaction ID gets too close
  1643. to a wraparound. So while the problem is not as serious in 8.1, the
  1644. application merely becomes inaccessible rather than displaying apparent
  1645. data loss. Wraparound would occur after about a billion transactions
  1646. between all databases running on that instance of PostgreSQL.
  1647. Prior to 8.1, the main way to prevent both these problems was to run
  1648. a periodic vacuumdb command from cron (UNIX/Linux) or the task scheduler
  1649. (Windows). In 8.1 or later, autovacuum capabilities are part of the
  1650. back-end and can be configured with the database manager. See the
  1651. PostgreSQL documentation for treatment of these subjects.
  1652. In general, if performance appears to be slowly degrading, one should
  1653. try to run vacuumdb -z from the shell in order to attempt to reclaim
  1654. space and provide the planner with accurate information about the
  1655. size and composition of the tables. If this fails, then one can go
  1656. to other methods of determining the bottleneck and what to do about
  1657. it.
  1658. \subsubsection{Known issues}
  1659. The PostgreSQL planner assumes a minimum page size of ten pages for
  1660. a physically empty table. The reasoning behind this choice is that
  1661. a table could grow rapidly and one could end up with bad database
  1662. performance if the planner assumes a very small table.
  1663. However, if you end up with joins between a very large table with
  1664. millions of rows and a physically empty table, one can end up with
  1665. a very bad query plan. In this case, the planner will choose a nested
  1666. loop join and run through this loop for every row in the large table.
  1667. As a result, performance will suddenly drop once the large table becomes
  1668. too large to effectively do index scans of the join criteria on both
  1669. tables. This problem most often occurs when people have no warehouses,
  1670. departments, or projects defined and are running systems with a large
  1671. number of transactions (such as a point of sale environment).
  1672. Last time I saw this problem, the server would wait for thirty seconds
  1673. to display a new point of sale screen while the server CPU activity
  1674. would spike to 100\%.
  1675. One solution is to define one warehouse, department, and project,
  1676. and then run vacuumdb -z from the shell to force the planner to acknowledge
  1677. these tables as single-row tables. The other option is to go into
  1678. the source code and edit the database queries to omit unused tables.
  1679. \section{Customization Possibilities}
  1680. Ledger-SMB is designed to be customized relatively easily and rapidly.
  1681. In general, the source code is well written and compartmentalized.
  1682. This section covers the basic possibilities involving customization.
  1683. \subsection{Brief Guide to the Source Code}
  1684. Ledger-SMB is an application with over 34000 lines of code. While
  1685. it is not possible to cover the entire application here, a brief overview
  1686. of the source code is in order.
  1687. In the root of the install directory, one will find a setup.pl program,
  1688. a number of other .pl programs, and a number of directories. The setup.pl
  1689. program is used to update or install Ledger-SMB. The other .pl programs
  1690. provide a basic set of services for the framework (including authentication)
  1691. and then pass the work on to the data entry screen file in the bin
  1692. directory.
  1693. The bin directory contains another directory for each terminal type.
  1694. The main two offered are lynx and mozilla. Lynx would be used for
  1695. web browsers that do not support frames and is ideal for a text-mode
  1696. VGA terminal. Mozilla is the terminal type used for most other web
  1697. browsers. The perl files within these directories provides the user
  1698. interface of the software.
  1699. The css directory in the root install directory contains CSS documents
  1700. to provide various stylesheets one can select for changing various
  1701. aspects of the look and feel of the application.
  1702. The locale directory contains translation files that Ledger-SMB uses
  1703. to translate between different languages. One could add translations
  1704. to these files if necessary.
  1705. The SL directory is where the Perl modules reside that provide the
  1706. core business logic in Ledger-SMB. These modules provide functionality
  1707. such as form handling, email capabilities, and access to the database
  1708. through its at least partially object oriented API.
  1709. Finally, the sql directory provides the database schemas and upgrade
  1710. scripts.
  1711. \subsection{Data Entry Screens}
  1712. One can customize the data entry screens to optimize work flow, display
  1713. additional information, etc.
  1714. \subsubsection{Examples}
  1715. We set up hot keys for payment lines, automatically focused the keyboard
  1716. on the last partnumber field, removed separate print and post buttons
  1717. to ensure that invoices were always printed and posted together, and
  1718. removed the ability to print to the screen, and even the ability to
  1719. scan items in when an invoice was received (using a portable data
  1720. terminal) and import this data into Ledger-SMB. Finally we added the
  1721. ability to reconcile the till online in a paperless manner.
  1722. For another customer, we added the ability to print AR invoices in
  1723. plain text format and added templates (based on the POS sales template)
  1724. to do this.
  1725. \subsection{Extensions}
  1726. One can add functionality to the Perl modules in the SL directory
  1727. and often add missing functions easily.
  1728. \subsubsection{Examples}
  1729. For one customer, we added a module to take data from a portable data
  1730. terminal collected when inventory items were taken and use that to
  1731. add shrinkage and loss adjustments. We also extended the parts model
  1732. to add a check id flag (for alcohol sales) and added this flag to
  1733. the user interface.
  1734. For another customer, we added a complex invoice/packing slip tracking
  1735. system that allowed one to track all the printed documents associated
  1736. with an order or invoice.
  1737. \subsection{Templates}
  1738. As noted before templates can be modified or extended, though sometimes
  1739. this involves extending the user interface scripts. Most templates
  1740. are easy enough to modify.
  1741. \subsubsection{Examples}
  1742. For one customer we added text-only invoices for AR and AP transactions/Invoices
  1743. and an ability to use Javascript in them to automatically print them
  1744. on load.
  1745. \subsection{Reports}
  1746. The fact that all the data is available within the database manager
  1747. is a huge advantage of Ledger-SMB over Quickbooks and the like. The
  1748. rapid development of reports allows for one to easily develop reports
  1749. of any sort within Ledger-SMB.
  1750. \subsubsection{Examples}
  1751. For one customer, we developed a report of parts sold and received
  1752. during arbitrary time frames. The report allows one to go back and
  1753. look up the invoices involved.
  1754. \section{Integration Possibilities}
  1755. An open database system and programming API allows for many types
  1756. of integration. There are some challenges, but in the end, one can
  1757. integrate a large number of tools.
  1758. \subsection{Reporting Tools}
  1759. Any reporting tool which can access the PostgreSQL database can be
  1760. used with Ledger-SMB for custom reporting. These can include programs
  1761. like Microsoft Access and Excel (using the ODBC drivers), PgAccess
  1762. (A PostgreSQL front-end written in TCL/Tk with a similar feel to Access),
  1763. Rekall, Crystal Reports, OpenOffice and more.
  1764. \subsubsection{Examples}
  1765. We have created spreadsheets of the summaries of activity by day and
  1766. used the ODBC driver to import these into Excel. Excel can also read
  1767. HTML tables, so one can use PostgreSQL to create an HTML table of
  1768. the result and save it with a .xls extension so that Windows opens
  1769. it with Excel. These could then be served via the same web server
  1770. that serves Ledger-SMB.
  1771. \subsection{Line of Business Tools on PostgreSQL}
  1772. Various line of business tools have been written using PostgreSQL
  1773. in large part due to the fact that it is far more mature than MySQL
  1774. in areas relating to data integrity enforcement, transactional processing,
  1775. and the like. These tools can be integrated with Ledger-SMB in various
  1776. ways. One could integrate this program with the HERMES CRM framework,
  1777. for example.
  1778. \subsubsection{Known Issues}
  1779. Ledger-SMB uses a single 'id' sequence across many tables. At the
  1780. same time it is expected that these tables do not have identical id
  1781. values in their records as they are used as a sort of pseudo-foreign
  1782. key by the acc\_trans table which stores the financial transaction
  1783. information.
  1784. If the integration solution does not keep this in mind, it is possible
  1785. to create a situation where the account transactions are ambiguously
  1786. associated with a number of different types of financial transactions.
  1787. This would lead to a large number of problems.
  1788. \subsubsection{Strategies}
  1789. In general, it is advisable to run all such programs that benefit
  1790. from integration in the same database but under different schemas.
  1791. This allows PostgreSQL to become the main method of synchronizing
  1792. the data in real time. However, sometimes this can require dumping
  1793. the database recreating the tables etc. in a different schema and
  1794. importing the data back into Ledger-SMB.
  1795. One possibility for this sort of integration is to use database triggers
  1796. to replicate the data between the applications in real-time. This
  1797. can avoid the main issue of duplicate id's. One issue that can occur
  1798. however relates to updates. If one updates a customer record in HERMES,
  1799. for example, how do we know which record to update in Ledger-SMB?
  1800. There are solutions to this problem but they do require some forethought.
  1801. A second possibility is to use views to allow one application to present
  1802. the data from the other as its own. This can be cleaner regarding
  1803. update issues, but it can also pose issues regarding duplicate id
  1804. fields.
  1805. \subsubsection{Examples}
  1806. Others have integrated L'ane POS and Ledger-SMB in order to make it
  1807. work better with touch screen devices. Still others have successfully
  1808. integrated Ledger-SMB and Interchange. In both cases, I believe that
  1809. triggers were used to perform the actual integration.
  1810. \subsection{Line of Business Tools on other RDBMS's}
  1811. Often there are requests to integrate Ledger-SMB with applications
  1812. like SugarCRM, OSCommerce, and other applications running on MySQL
  1813. or other database managers. This is a far more complex field and it
  1814. requires a great deal more effort than integrating applications within
  1815. the same database.
  1816. \subsubsection{Strategies}
  1817. Ordinarily real-time integration is not always possible. MySQL does
  1818. not support the SQL extension SQL/MED (Management of External Data)
  1819. so it is not possible to replicate the data in real-time. Therefore
  1820. one generally resorts to integrating the system using time-based updates.
  1821. Replication may be somewhat error-prone unless the database manager
  1822. supports triggers (first added to MySQL in 5.0) or other mechanisms
  1823. to ensure that all changed records can be detected and replicated.
  1824. In general, it is usually advisable to add two fields to the record--
  1825. one that shows the insert time and one that shows the last update.
  1826. Additionally, I would suggest adding additional information to the
  1827. Ledger-SMB tables so that you can track the source record from the
  1828. other application in the case of an update.
  1829. In general, one must write replication scripts that dump the information
  1830. from one and add it to the other. This must go both ways.
  1831. \subsubsection{Integration Products and Open Source Projects}
  1832. While many people write Perl scripts to accomplish the replication,
  1833. an open source project exists called DBI-Link. This package requires
  1834. PL/Perl to be installed in PostgreSQL, and it allows PostgreSQL to
  1835. present any data accessible via Perl's DBI framework as PostgreSQL
  1836. tables. DBI-Link can be used to allow PostgreSQL to pull the data
  1837. from MySQL or other database managers.
  1838. DBI-Link can simplify the replication process by reducing the operation
  1839. to a set of SQL queries.
  1840. \section{Customization Guide}
  1841. This section is meant to provide a programmer with an understanding
  1842. of the technologies enough information to get up to speed quickly
  1843. and minimize the time spent familiarizing themselves with the software.
  1844. Topics in this section are listed in order of complexity. As it appeals
  1845. to a narrower audience than previous discussions of this topic, it
  1846. is listed separately.
  1847. \subsection{General Information}
  1848. The main framework scripts (the ar.pl, ap.pl, etc. scripts found in
  1849. the root of the installation directory) handle such basic features
  1850. as instantiating the form object, ensuring that the user is logged
  1851. in, and the like. They then pass the execution off to the user interface
  1852. script (usually in the bin/mozilla directory).
  1853. Ledger-SMB in many ways may look sort of object oriented in its design,
  1854. but in reality, it is far more data-driven than object oriented. The
  1855. Form object is used largely as a global symbol table and also as a
  1856. collection of fundamental routines for things like database access.
  1857. It also breaks down the query string into sets of variables which
  1858. are stored in its attribute hash table.
  1859. In essence one can and often will store all sorts of data structures
  1860. in the primary Form object. These can include almost anything. It
  1861. is not uncommon to see lists of hashes stored as attributes to a Form
  1862. object.
  1863. \subsection{Customizing Templates}
  1864. Templates are used to generate printed checks, invoices, receipts,
  1865. and more in Ledger-SMB. Often the format of these items does not fit
  1866. a specific set of requirements and needs to be changed. This document
  1867. will not include \LaTeX{} or HTML instruction, but will include a
  1868. general introduction to editing templates. Also, this is not intended
  1869. to function as a complete reference.
  1870. Template instructions are contained in tags \textless\% and \%\textgreater.
  1871. The actual parsing is done by the parse\_template function in SL/Form.pm.
  1872. \subsubsection{Page Breaks in \LaTeX{}}
  1873. The first tag one will see with \LaTeX{}\ templates is \textless\%pagebreak
  1874. num1 num2 num3\%\textgreater
  1875. \begin{itemize}
  1876. \item num1 represents characters per line
  1877. \item num2 represents lines on first page
  1878. \item num3 represents lines on second page.
  1879. \end{itemize}
  1880. The pagebreak block is terminated by \textless\%end pagebreak\%\textgreater
  1881. Any text within the pagebreak block is ignored by the template.
  1882. \subsubsection{Conditionals}
  1883. \begin{itemize}
  1884. \item \textless\%if not varname\%\textgreater tells the parser to ignore
  1885. include the next block only if varname was posted by the submitting
  1886. form (or set via the form hash elsewhere in the scripts). The block
  1887. ends with \textless\%end varname\%\textgreater
  1888. \item \textless\%if varname\%\textgreater tells the parser to ignore the
  1889. block if varname was not posted in the submitting form (or set via
  1890. the form hash elsewhere in the scripts). The block ends with \textless\%end
  1891. varname\%\textgreater
  1892. \item Lines conditionals are otherwise ignored by the parser.
  1893. \item Conditionals cannot be nested, but IF's can be nested inside loops
  1894. as of 2.6.4
  1895. \end{itemize}
  1896. \subsubsection{Loops}
  1897. \textless\%foreach varname\%\textgreater is used to iterate through
  1898. a list of vars set by the user interface system (usually one of the
  1899. files under bin/mozilla (or otherwise). The block is repeated for
  1900. each varname in a list. Block ends with \textless\%end varname\%\textgreater
  1901. \subsubsection{File Inclusion}
  1902. \begin{itemize}
  1903. \item Files may be included with the syntax \textless\%include template\_name\%\textgreater
  1904. where templatename is the name of the template within the current
  1905. template directory (usually templates/\$username/)
  1906. \item Cannot be used with conditionals
  1907. \item Filenames cannot use slashes (/) or .. due to directory transversal
  1908. considerations.
  1909. \item Files can force other files to be included, but the same file cannot
  1910. be included more than once.
  1911. \end{itemize}
  1912. \subsubsection{Cross-referencing and multiple passes of \LaTeX{}}
  1913. In \LaTeX{}\ cross-references require two passes with latex to resolve.
  1914. This is because the type is set page by page and the program really
  1915. doesn't know on which page a given reference will fall. This becomes
  1916. an even larger issue where floats are concerned as they can move between
  1917. pages for formatting reasons.
  1918. In rare cases, cross-references may point at incorrect pages even
  1919. with two passes (if the inclusion of the cross-reference data moves
  1920. the object to another page). In this case you will need to use three
  1921. passes of \LaTeX{}\ in order to have accurate references.
  1922. Ledger-SMB as of the time of this writing (2.6.8) only makes one pass
  1923. at the \LaTeX{}\ file. To force it to make more than one pass, open
  1924. Form.pm with your favorite text editor. Look for the line:
  1925. system(\char`\"{}latex --interaction=nonstopmode \$self-\textgreater$\lbrace$
  1926. tmpfile$\rbrace$\
  1927. \textgreater\ \$ self-\textgreater$\lbrace$ tmpfile$\rbrace$
  1928. .err\char`\"{});
  1929. Duplicate this line for two passes, or add two copies if you need
  1930. three passes.
  1931. \subsubsection{Variable Substitution}
  1932. The following format is used for variable substitution:
  1933. \begin{itemize}
  1934. \item \textless\%varname options\%\textgreater Options are one or more
  1935. (whitespace separated) of:
  1936. \begin{itemize}
  1937. \item align=left/right/center
  1938. \item width=chars where chars is the width in characters before wrapping
  1939. \item offset=chars where chars is the number of spaces to (depending on
  1940. alignment).
  1941. \end{itemize}
  1942. \end{itemize}
  1943. \subsection{Customizing Forms}
  1944. Data entry forms and other user interface pieces are in the bin directory.
  1945. In Ledger-SMB 1.0.0 and later, symlinks are not generally used.
  1946. Each module is identified with a two letter combination: ar, ap, cp,
  1947. etc. These combinations are generally explained in the comment headers
  1948. on each file.
  1949. Execution in these files begins with the function designated by the
  1950. form->$\lbrace$action$\rbrace$ variable. This variable is usually
  1951. derived from configuration parameters in the menu.ini or the name
  1952. of the button that was clicked on to submit the previous page. Due
  1953. to localization requirements, the following process is used to determine
  1954. the appropriate action taken:
  1955. The \$locale-\textgreater getsub routine is called. This routine
  1956. checks the locale package to determine if the value needs to be translated
  1957. back into an appropriate SL function. If not, the variable is lower-cased,
  1958. and all spaces are converted into underscores.
  1959. In general there is no substitute for reading the code to understand
  1960. how this can be customized and how one might go about doing this.
  1961. \subsection{Customizing Modules}
  1962. The Perl Modules (.pm files) in the LedgerSMB directory contain the
  1963. main business logic of the application including all database access.
  1964. Most of these modules are fairly easy to follow, and there is an effort
  1965. to document all API's at the wiki (\url{http://www.metatrontech.com/ledger-smb-wiki?APIReference}).
  1966. Many of these modules have a fair bit of dormant code in them which
  1967. was written for forthcoming features, such as payroll and bills of
  1968. materials.
  1969. One can add a new module through the normal means and connect it to
  1970. other existing modules.
  1971. \subsubsection{Database Access}
  1972. The \$form object provides two methods for accessing the database.
  1973. The \$form-\textgreater dbconnect(\%myconfig) method commits each
  1974. individual statement as its own transaction. The \$form-\textgreater
  1975. dbconnect\_noauto(\%myconfig) method requires a manual commit. Both
  1976. these functions are thin wrappers around the standard Perl DBI operations.
  1977. \subsection{Examples}
  1978. \subsubsection{Adding a New Report for Sales Data}
  1979. One of our customers required a report of inventory activity during
  1980. an arbitrary time period. So we added this customization. This report
  1981. required merely adding a few functions to the rp.pl user interface
  1982. script (bin/mozilla/rp.pl) and slightly altering a few more. However,
  1983. as they eventually wanted to pull up invoices (AP and AR) containing
  1984. those part numbers, we also had to customize the AA.pm module to accept
  1985. this sort of filtering.
  1986. The patch is available at \url{http://www.metatrontech.com/downloads/sl-inv\_report-2.6.7.diff}
  1987. and was not built against Ledger-SMB. It may need to be updated to
  1988. match the present software.
  1989. \subsubsection{Truncating Number of Invoices on a Check Stub}
  1990. One of our customers required an ability to truncate the list of invoices
  1991. printed on a stub so that an additional report could be printed as
  1992. an attachment. This patch required truncating the list of invoices
  1993. in the bin/mozilla/cp.pl file, and slightly patching the ledger-smb.conf
  1994. to allow for the number of listed invoices to be a runtime parameter.
  1995. Finally a very small modification was made to the template.
  1996. The patch is available at \url{http://www.metatrontech.com/downloads/sl-check-max-2.6.7.diff}
  1997. \subsubsection{Adding the a Check ID flag for Alcohol Purchases}
  1998. One of our customers is a retail store that sells alcoholic beverages.
  1999. As the law requires them to ask customers purchasing these beverages
  2000. for ID, they needed a reminder set to the screen when an alcoholic
  2001. beverage was sold.
  2002. To make this change, we added a field to the parts table of the database,
  2003. had to change a few aspects of the IC.pm to handle inserting and updating
  2004. this field. Then we modified the ps.pl to display a red banner on
  2005. invoices which had alcoholic beverages associated with them.
  2006. This patch is part of SL-POS which can be downloaded at \url{http://www.metatrontech.com/downloads/SL-POS-0.5.0.tar.gz}
  2007. (note: this patch has not been ported to Ledger-SMB yet).
  2008. \clearpage
  2009. \part{Appendix}
  2010. \appendix
  2011. %dummy comment inserted by tex2lyx to ensure that this paragraph is not empty
  2012. \section{Where to Go for More Information}
  2013. There are a couple of relevant sources of information on Ledger-SMB
  2014. in particular.
  2015. \begin{itemize}
  2016. \item The latest version of this document will always be advertised at \url{http://www.metatrontech.com/projects/}.
  2017. \item We also maintain a community wiki with more information including
  2018. programming, customization, and links to other sites. The wiki can
  2019. be found at \url{http://www.metatrontech.com/ledger-smb-wiki}
  2020. \end{itemize}
  2021. In addition, it is generally recommended that the main bookkeeper
  2022. of a company using Ledger-SMB work through at least one accounting
  2023. textbook. Which textbook is not as important as the fact that a textbook
  2024. is used however.
  2025. \section{Quick Tips}
  2026. \subsection{Understanding Shipping Addresses and Carriers}
  2027. Each customer can have a default shipping address. This address is
  2028. displayed prominantly in the add new customer screen. To change the
  2029. shipping address for a single order, one can use the ship to button
  2030. at the bottom of the quote, order, or invoice screen.
  2031. The carrier can be noted in the Ship Via field. However, this is a
  2032. freeform field and is largely used as commentary (or instructions
  2033. for the shipping crew).
  2034. \subsection{Handling bad debts}
  2035. In the event that a customer's check bounces or a collection requirement
  2036. is made, one can flag the customer's account by setting the credit
  2037. limit to a negative number.
  2038. If a debt needs to be written off, one can either use the allowance
  2039. method (by writing it against the contra asset account of \char`\"{}Allowance
  2040. for Bad Debts\char`\"{} or using the direct writeoff method where
  2041. it is posted as an expense.
  2042. \section{Step by Steps for Vertical Markets}
  2043. \subsection{Common Installation Errors}
  2044. \begin{itemize}
  2045. \item Ledger-SMB is generally best installed in its own directory outside
  2046. of the wwwroot directory. While it is possible to install it inside
  2047. the wwwroot directory, the instructions and the faq don't cover the
  2048. common problems here.
  2049. \item When the chart of accounts (COA) is altered such that it is no longer
  2050. set up with appropriate items, you can make it impossible to define
  2051. goods and services properly. In general, until you are familiar with
  2052. the software, it is best to rename and add accounts rather than deleting
  2053. them.
  2054. \end{itemize}
  2055. \subsection{Retail With Light Manufacturing}
  2056. For purposes of this example we will use a business that assembles
  2057. computers and sells them on a retail store.
  2058. \begin{enumerate}
  2059. \item Install Ledger-SMB
  2060. \item Set preferences, and customize chart of accounts
  2061. \begin{enumerate}
  2062. \item Before customizing the COA it is often worth consulting an accountant.
  2063. \end{enumerate}
  2064. \item Define Goods, Labor, and Services as raw parts ordered from the vendors.
  2065. \begin{itemize}
  2066. \item These are located under the goods and services menu node.
  2067. \end{itemize}
  2068. \item Define assemblies
  2069. \begin{itemize}
  2070. \item These are also located under goods and services.
  2071. \item Component goods and services must be defined prior to creating assembly
  2072. \end{itemize}
  2073. \item Enter an AP Invoice to populate inventory with proper raw materials.
  2074. \begin{itemize}
  2075. \item One must generally add a generic vendor first. The vendor is added
  2076. under AP-\textgreater Vendors-\textgreater Add Vendor.
  2077. \end{itemize}
  2078. \item To pay an AP invoice like a check, go to cash->payment. Fill out approrpiate
  2079. fields and click print.
  2080. \begin{itemize}
  2081. \item Note that one should select an invoice and enter in the payment amount
  2082. in the appropriate line of the invoice list. If you add amounts to
  2083. the master amount list, you will find that they are added to the amount
  2084. paid on the invoice as a prepayment.
  2085. \item The source field is the check number.
  2086. \end{itemize}
  2087. \item Stock assemblies
  2088. \item One can use AR Invoices or the POS interface to sell goods and services.
  2089. \begin{itemize}
  2090. \item Sales Invoice
  2091. \begin{itemize}
  2092. \item Can be generated from orders or quotations
  2093. \item Cannot include labor/overhead except as part of an assembly
  2094. \item One can make the mistake of printing the invoice and forgetting to
  2095. post it. In this event, the invoice does not officially exist in the
  2096. accounting system.
  2097. \item For new customers, you must add the customer first (under AR-\textgreater
  2098. Customers-\textgreater Add Customer.
  2099. \end{itemize}
  2100. \item POS Interface
  2101. \begin{itemize}
  2102. \item Cannot include labor/overhead except as part of an assembly
  2103. \item Printing without posting is often even easier in the POS because of
  2104. the rapid workflow. Yet it is just as severe a problem.
  2105. \end{itemize}
  2106. \item Ecommerce and Mail Order Operations
  2107. \begin{itemize}
  2108. \item See the shipping workflow documentation above.
  2109. \end{itemize}
  2110. \item Customers are set up by going to AR-\textgreater Customers-\textgreater
  2111. Add Customer (or the equivalent localized translation). The appropriate
  2112. fields are filled out and the buttons are used at the bottom to save
  2113. the record and optionally use it to create an invoice, etc.
  2114. \begin{itemize}
  2115. \item Saving a customer returns to the customer screen. After the appropriate
  2116. invoice, transaction, etc. is entered and posted, Ledger-SMB will
  2117. return to the add customer screen.
  2118. \end{itemize}
  2119. \end{itemize}
  2120. \item One can use the requirements report to help determine what parts need
  2121. to be ordered though one cannot generate PO's directly from this report.
  2122. Note that prior to 2.6.8 sales orders for assemblies are not properly
  2123. tracked regarding.
  2124. \end{enumerate}
  2125. Note, the needs of Ledger-SMB are mostly useful for light manufacturing
  2126. operations (assembling computers, for example). More manufacturing
  2127. capabilities are expected to be released in the next version.
  2128. A custom assembly is a bit difficult to make. One must add the assembly
  2129. prior to invoice (this is not true of goods and services). If the
  2130. assembly is based on a different assembly but may cost more (due to
  2131. non-standard parts) you can load the old assembly using Goods and
  2132. Services-\textgreater Reports-\textgreater Assemblies and then make
  2133. necessary changes (including to the SKU/Partnumber) and save it as
  2134. new.
  2135. Then one can add it to the invoice.
  2136. \section{Glossary}
  2137. \begin{description}
  2138. \item [{BIC}] Bank Identifier Code is often the same as the S.W.I.F.T.
  2139. code. This is a code for the bank a customer uses for automated money
  2140. transfers.
  2141. \item [{COGS}] is Cost of Goods Sold. When an item is sold, then the expense
  2142. of its purchase is accrued as attached to the income of the sale.
  2143. It is tracked as COGS.
  2144. \item [{Credit}] : A logical transactional unit in double entry accounting.
  2145. It is the opposite of a debit. Credits affect different account types
  2146. as follows:
  2147. \begin{description}
  2148. \item [{Equity}] : Credits are added to the account when money is invested
  2149. in the business.
  2150. \item [{Asset}] : Credits are added when money is deducted from an asset
  2151. account.
  2152. \item [{Liability}] : Credits are added when money is owed to the business
  2153. account.
  2154. \item [{Income}] : Credits are added when income is earned.
  2155. \item [{Expense}] : Credits are used to apply adjustments at the end of
  2156. accounting periods to indicate that not all the expense for an AP
  2157. transaction has been fully accrued.
  2158. \end{description}
  2159. \item [{Debit}] : A logical transactional unit in double entry accounting
  2160. systems. It is the opposite of a credit. Debits affect different account
  2161. types as follows:
  2162. \begin{description}
  2163. \item [{Equity}] : Debits are added when money is paid to business owners.
  2164. \item [{Asset}] : Debits are added when money is added to an account.
  2165. \item [{Liability}] : Debits are added when money that is owed is paid
  2166. off.
  2167. \item [{Income}] : Debits are used to temporarily adjust income to defer
  2168. unearned income to the next accounting period.
  2169. \item [{Expense}] : Debits are added as expenses are incurred.
  2170. \end{description}
  2171. \item [{IBAN}] International Bank Account Number is related to the BIC
  2172. and is used for cross-border automated money transfers.
  2173. \item [{List}] Price is the recommended retail price.
  2174. \item [{Markup}] is the percentage increase that is applied to the last
  2175. cost to get the sell price.
  2176. \item [{ROP}] Re-order point. Items with fewer in stock than this will
  2177. show up on short reports.
  2178. \item [{Sell}] Price is the price at which the item is sold.
  2179. \item [{Source}] Document : a paper document that can be used as evidence
  2180. that a transaction occurred. Source documents can include canceled
  2181. checks, receipts, credit card statements and the like.
  2182. \item [{Terms}] is the number of days one has to pay the invoice. Most
  2183. businesses abbreviate the terms as Net n where n is the number of
  2184. days. For example, Net 30 means the customer has 30 days to pay the
  2185. net due on an invoice before it is late and incurs late fees.
  2186. \end{description}
  2187. \input{fdl.tex}
  2188. \end{document}