Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.097 X-Spam-Evidence: '*H*': 0.81; '*S*': 0.00; 'subject:skip:c 10': 0.07; 'item,': 0.09; 'mysql.': 0.09; 'pointers': 0.09; 'sep': 0.09; 'programmer': 0.11; 'complicated,': 0.16; 'corrupt': 0.16; 'finney': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'guide.': 0.16; 'massively': 0.16; 'putative': 0.16; 'storing': 0.16; 'verbose': 0.16; 'wrote:': 0.17; 'pieces': 0.17; 'received:209.85.214.174': 0.21; 'recognize': 0.22; 'trace': 0.22; 'example': 0.23; 'header:In-Reply-To:1': 0.25; 'am,': 0.27; 'errors.': 0.27; 'message-id:@mail.gmail.com': 0.27; 'went': 0.28; 'things,': 0.29; "i'm": 0.29; 'fri,': 0.30; 'keyword': 0.30; 'helpful': 0.30; 'point': 0.31; 'to:addr:python-list': 0.33; 'everyone': 0.33; 'received:google.com': 0.34; 'clear': 0.35; 'ben': 0.35; 'data,': 0.35; 'exist': 0.35; 'table': 0.35; 'received:209.85': 0.35; 'really': 0.36; 'but': 0.36; 'anything': 0.36; 'subject:with': 0.36; 'should': 0.36; 'display': 0.36; 'does': 0.37; 'being': 0.37; 'maintaining': 0.37; 'received:209': 0.37; 'subject:: ': 0.38; 'things': 0.38; 'sure': 0.38; 'to:addr:python.org': 0.39; 'received:209.85.214': 0.39; 'where': 0.40; 'header:Received:5': 0.40; 'your': 0.60; 'customer': 0.61; "you'll": 0.62; 'back': 0.62; 'accounts': 0.63; 'ever': 0.63; 'skip:n 10': 0.63; 'information': 0.63; 'for:': 0.64; 'our': 0.65; 'charset:windows-1252': 0.65; 'price': 0.66; 'business': 0.70; 'obvious': 0.71; 'commercial': 0.73; 'money': 0.74; '10%': 0.81; 'areas.': 0.84; 'hardly': 0.84; 'ledger': 0.84; 'transactions': 0.91; 'balances': 0.93; 'subject:business': 0.93; 'dream': 0.95 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=bgtd6QjmcSCFRd+7lVUdIAxEjv1eCLjXxtqrd4NvXo4=; b=yAEeB9tnoewsr3CsvQCgc0NHEOyYJyIGHlT+vU8a27i+2C2riV7H65fPhdF1qgM6XX qMGVCDGEy+n+wODDPFipKFnfbNNyJZf2lzlPTGphfVYRGWXD+lxQpLlOYfFpzH374YDA UkTovNuf8xEJ5fTGEHNpBeT79v9kPX/ZfE7nDnEjQPb6xzQBcHkii6RP2NOBxiocA7fv ppS33B9VomejNylzRFamfRzKgvM35a/WBQ4ivsUkWqNbwDOg3bquTDlPyHFgtaWcoeA+ bVDtYZtpeApqsmVqkr4ALg6FxHfuxG8/Ge1cqDZf1Y9XrHcGaYM49IdvtDWWsiFYq98G VVTA== MIME-Version: 1.0 In-Reply-To: <87y5kenez2.fsf@benfinney.id.au> References: <87y5kenez2.fsf@benfinney.id.au> Date: Fri, 14 Sep 2012 01:30:14 +1000 Subject: Re: Guides for communicating with business accounting systems From: Chris Angelico To: python-list@python.org Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 31 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1347550216 news.xs4all.nl 6845 [2001:888:2000:d::a6]:53861 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:29043 On Fri, Sep 14, 2012 at 1:02 AM, Ben Finney wr= ote: > What I want is pointers to a putative =93What every programmer needs to > know about storing commercial transactions for business accounting=94 > general guide. > > Does that information already exist where I can point our team to it? Not a guide per se, but a keyword to look for: ACID compliance. You'll be maintaining multiple pieces of information that depend on each other (simple example being a ledger table showing transactions and an accounts table holding balances), and you need to guarantee that the database is consistent. Log aggressively. I'm sure nobody would ever dream of maintaining customer balances without an associated ledger showing how that balance came to be; it's less obvious but just as helpful in many other areas. If anything happens to corrupt your data, you should be able to recognize from internal evidence that something's wrong. GST isn't particularly complicated, but again, be really REALLY clear what's going on. It's better to be massively verbose in the database and then squash things down for display than to be left wondering, when you trace back through things, what money went where. Be aware of your ninths/elevenths; when there's 10% tax in a $10 item, the ex tax price is $9.090909... which will annoy everyone with 1c errors. Don't use MySQL. :) Okay, that's hardly a *rule*, but it's a strong recommendation. ChrisA