Što snimati?

Oct 31, 2014 at 9:20 AM
Pozdrav,

Uočivši vlastite banalne propuste nakon nekog vremena korištenja programa za fiskalizaciju došao sam do zaključka da je tu snimanje komunikacije s CIS-om jednostavno "must be" opcija. Čak ju ne bi trebalo davati korisniku na izbor jer on po defaultu kad se pojavi problem "ništa ne zna i ništa nije dirao".

Ja sam to snimanje napravio "opcionalno" i to tako da RacunZahtjev Xml snimam u bazu podataka ali mi se to ne sviđa jer podaci postaju preveliki i korisnici su se na to žalili. Posebno oni koji svakodnevno rade backup podataka, neki čak i više puta.
Tako da sam uz malo konzultacije s ljudima ovdje došao do zaključka da bi trebalo te XML-e snimati putem file sustava na neki od klasičnih načina.

Pošto se sad spremam to isprogramirati a radi izbjegavanja daljih grešaka molim iskusnije korisnike da mi savjetuju što snimiti za svaki račun.
Prije slanja podataka na fiskalizaciju kreiram RacunZahtjev sa:

XmlDocument doc
i njega snimam kao doc.InnerXml

U slučaju greške dobijem CisOdgovorGreska iz cis.OdgovorGreska.InnerXml

JIR dobivam iz JIR = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(doc)

Iz prikazanog ja vidim da trebam snimati RacunZahtjev i CisOdgovorGreska ako postoji.

Zanima me da li sam ja to dobro shvatio ili ima još nešto preporučljivo za snimanje?
Nešto tipa RacunOdgovor. Ako ima gdje da to uzmem?

Molim savjet iskusnijih programera.
Oct 31, 2014 at 11:06 AM
Edited Oct 31, 2014 at 11:37 AM
Hm, izgleda da sam se tu malo zagubio...

S ovim kodom dobivam "RacunOdgovor":
cis.CisUrl = co.cisServer;
cis.TimeOut = Convert.ToInt32(co._Val(mi.getParam("timeoutf").Trim) * 1000);
XmlDocument doc = null;
doc = cis.PosaljiRacun(racunt, iCert, (System.Security.Cryptography.X509Certificates.StoreLocation)co.certLocation, (System.Security.Cryptography.X509Certificates.StoreName)co.certStore);

if (snimati) {
    string cisDir = "CIS\" & cpg.mydatabase & "\" & fileDat & "\RO";
    Directory.CreateDirectory(cisDir);
    File.AppendAllText(cisDir & "\" & fiskracun.ToString("D6") & ".txt", doc.InnerXml & Environment.NewLine & Environment.NewLine);
}
Jednostavno ne kužim gdje i kako da dobijem file koji sadrži podatke koje ja šaljem tipa iznos računa, porezi i to...
Tako da imam neku potvrdu što sam poslao. Mislim da se to zove RacunZahtjev.
Kako do njega s pomoću prikazanog koda?
Oct 31, 2014 at 1:36 PM
Edited Oct 31, 2014 at 1:38 PM
Au ljudi, ode cijeli dan a ja ništa napravio.

Probao sam i ovako:
Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(doc, cisDir & "\" & fiskracun.ToString("D6") & ".txt")
... ali ne ide.

Da li nešto bitno krivo radim ili se XML RacunZahtjev sa podacima s računa ne može dobit na način kako ja pokušavam?
Razmišljam da snimam cijelu strukturu 'racunt' u file ali nije to to...
Oct 31, 2014 at 2:24 PM
Edited Oct 31, 2014 at 2:26 PM
Koristim istu metodu za snimanje, vjerojatno je problem u prvom parametru, ne znam što ti je doc.

Evo, pogledaj u dokumentaciji - postoji primjer i metoda SnimiDokumentUDatoteku(string oib) - ovaj način provjereno radi. https://fiskalizacija.codeplex.com/SourceControl/latest#FiskalizacijaDEV/Source/Raverus.FiskalizacijaDEV.Sample/Form1.cs

Ako ne radi, postaj exception.
Oct 31, 2014 at 3:07 PM
Za ubit se!
Tek mi sad nije jasno!

Doc je Xml dokument kao što se vidi na kodu iznad.
'racunt' je struktura u koju sam prethodno upisao sve podatke tipa vrijeme, broj računa, zki, porezi i sve ostalo.
To je moj pravi kod s kojim fiskaliziram već duže i to radi.

Primjer za koji si mi dao link sam već primjetio međutim ja u igri nigdje nemam GetRacun(oib), nemam ZahtjevXML, nemam PotpisiXMLDokument...
Kako to uopće kod mene radi gdje cis.PosaljiRacun rješava sve?

Ja sam mislio da možda iz ovog koda koji sam prikazao i koji u praksi koristim mogu dobiti RacunZahtjev da si ga snimim.

U prilogu postam što dobijem kao RacunOdgovor:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><tns:RacunOdgovor Id="G0x7ff8225360f8-4D" xsi:schemaLocation="http://www.apis-it.hr/fin/2012/types/f73 ../schema/FiskalizacijaSchema.xsd " xmlns:tns="http://www.apis-it.hr/fin/2012/types/f73"><tns:Zaglavlje><tns:IdPoruke>7e05a004-426c-41a8-89aa-3d1af52512d5</tns:IdPoruke><tns:DatumVrijeme>31.10.2014T13:30:08</tns:DatumVrijeme></tns:Zaglavlje><tns:Jir>f554a2f1-acce-44e9-8759-4cef9b66b3fb</tns:Jir><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
  <Reference URI="#G0x7ff8225360f8-4D">
    <Transforms>
      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
      <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    <DigestValue>h1ubqMZ4En4qN7sQBkZLWNtdlI0=</DigestValue>
  </Reference>
</SignedInfo>
    <SignatureValue>dCNsc5SeVGjUca0RvkC2K+mZZfX3BReMCEU5726juND2xt6bOHlwvqInS3Tsq2PwQsB0AWdXgUsAgZOEDX4SDIq9IsWGl1egLNo1TfRxlAW9e1tvN9ngzW4ro11gdkEkfT4+ddfvOIc1dVXNicj2kYjSMIorpwAq9o62GbcQ9Gay2vqRJUp6ng9hZdsJEJF30sslXxX5JGpijsrBIFE8W7RzQw3I3TPzUsSjSZQeQO9U8HHNPYI3PsT0DxMv3GJUrAM+4mgNFWivp9Ye+NMkBnklz/wLMEFZVuNMrCYX2/WRt0ZmGRxwP0URnmDJ0K+aHxIOCAGJ9gciw6tFsJoJ+A==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIEqjCCA5KgAwIBAgIEPsubJjANBgkqhkiG9w0BAQUFADArMQswCQYDVQQGEwJIUjENMAsGA1UEChMERklOQTENMAsGA1UECxMEREVNTzAeFw0xNDA5MjYwOTIyMDZaFw0xNjA5MjYwOTUyMDZaMF0xCzAJBgNVBAYTAkhSMSUwIwYDVQQKExxBUElTIElUIEQuTy5PLiBIUjAyOTk0NjUwMTk5MQ8wDQYDVQQHEwZaQUdSRUIxFjAUBgNVBAMTDWZpc2thbGNpc3Rlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC7fFbQwTVfGzw8H8FSRPFVlkMNxd/tgaGMNgqw3PIM48r+iBG2or6a56SmlXjweP0odi8VoeJavyA9f31jaAAMFnrpggOJnJfgKeSF8dMA5fR8mqd5+l6R6WTsxaDqodQ/hzVzLXWLvTVVAVKmLyTvwdD9fWLMqjVciUaO4b9hRYTJzbVPF3gr20+L1hkPMM8nn9XmXebuwVxRL/r5pjYnDOZ5OrQUlL9NU3o++ZZzMOH5gBIxPdWxBcWOMGDS8seZkDc6etQwgVad6eIXVxRV89umlslQJfNwZyDCQa+v6hVTCN3h0N7K13WGsCnxrHke7vOtWe8h+tpezXtgbtbAgMBAAGjggGiMIIBnjAOBgNVHQ8BAf8EBAMCBaAwQgYDVR0gBDswOTA3BgkrfIhQBR8FBAIwKjAoBggrBgEFBQcCARYcaHR0cDovL2RlbW8tcGtpLmZpbmEuaHIvY3BzLzCBzwYDVR0fBIHHMIHEMEOgQaA/pD0wOzELMAkGA1UEBhMCSFIxDTALBgNVBAoTBEZJTkExDTALBgNVBAsTBERFTU8xDjAMBgNVBAMTBUNSTDEzMH2ge6B5hk9sZGFwOi8vZGVtby1sZGFwLmZpbmEuaHIvb3U9REVNTyxvPUZJTkEsYz1IUj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNCYmluYXJ5hiZodHRwOi8vZGVtby1wa2kuZmluYS5oci9jcmwvZGVtb2NhLmNybDArBgNVHRAEJDAigA8yMDE0MDkyNjA5MjIwNlqBDzIwMTYwOTI2MDk1MjA2WjAfBgNVHSMEGDAWgBR6YCOOSJ0ya6TlLd24WbSU/EJinjAdBgNVHQ4EFgQUDLFtT4WUMq2xNuDDCTO05+3axjUwCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAAgqY82RzzOOtniqzxIFUWO3JwhIbjHhzLXS0wEvC/kuGE0EQxR0HB7AR5CryIeuY4C9M8IdtgrysXrdlnK5na+KJM/q5QyvffEvNhZPavU5EOVEGLlOndfkRhuagMIDEkLzX+kOkWARy7JE61/+4gNKy4r4XUOsEaWM/KVEOihukuSGgu9geR/FseE8ZK9MlC0xvo8BWdtZVxGYECCOf84Lgup1PbsBX8Supqr4pGnc2sSe8juNhuFJmqM+4SPO9JlOs8GsYIG1KfRsSiC09FyybGWgnF9TddglzOqanxD2CcWeGp+Q0nlIJhgiTQH4kxWReJ3e/aF5yIkr8AG2lcg==</X509Certificate><X509IssuerSerial><X509IssuerName>OU=DEMO, O=FINA, C=HR</X509IssuerName><X509SerialNumber>10535xxxxx</X509SerialNumber></X509IssuerSerial></X509Data></KeyInfo></Signature></tns:RacunOdgovor></soap:Body></soap:Envelope>
Oct 31, 2014 at 4:19 PM
Uspio napokon:

Evo prepravljenog koda:
cis.CisUrl = co.cisServer;
cis.TimeOut = Convert.ToInt32(co._Val(mi.getParam("timeoutf").Trim) * 1000);
XmlDocument doc = null;

Raverus.FiskalizacijaDEV.Schema.RacunZahtjev zahtjev = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racunt);
XmlDocument zahtjevXml = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev);

if (snimati) {
    string cisDir = "CIS\\" & cpg.mydatabase & "\\" & fileDat & "\\RZ_" & broj.OznPosPr & "_" & broj.OznNapUr;
    Directory.CreateDirectory(cisDir);
    File.AppendAllText(cisDir & "\\" & fiskracun.ToString("D6") & ".txt", zahtjevXml.InnerXml & Environment.NewLine & Environment.NewLine);
}

doc = cis.PosaljiRacun(racunt, iCert, (System.Security.Cryptography.X509Certificates.StoreLocation)co.certLocation, (System.Security.Cryptography.X509Certificates.StoreName)co.certStore);

if (snimati) {
    string cisDir = "CIS\\" & cpg.mydatabase & "\\" & fileDat & "\\RO_" & broj.OznPosPr & "_" & broj.OznNapUr;
    Directory.CreateDirectory(cisDir);
    File.AppendAllText(cisDir & "\\" & fiskracun.ToString("D6") & ".txt", doc.InnerXml & Environment.NewLine & Environment.NewLine);
}

JIR = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(doc);
Radi ko puška.
@davor_h najljepša ti hvala što si me uputio u način rješavanja problema.

Da li negdje i RacunOdgovor možda mogu dobiti bez "SignatureValue" jer pretpostavljam da taj podatak ničemu nije bitan?
Nov 1, 2014 at 7:39 AM
Edited Nov 1, 2014 at 8:04 AM
Evo kako mi izgleda RacunZahtjev i molim da me netko upozori ako nešto ne valja:
<tns:RacunZahtjev Id="signXmlId">
<tns:Zaglavlje>
 <tns:IdPoruke>1586bd18-04fd-4daf-bbf4-4c7531fcee2c</tns:IdPoruke>
 <tns:DatumVrijeme>31.10.2014T22:25:29</tns:DatumVrijeme>
 </tns:Zaglavlje>
<tns:Racun>
 <tns:Oib>xxxxxxxxxxx</tns:Oib>
 <tns:USustPdv>true</tns:USustPdv>
 <tns:DatVrijeme>31.10.2014T22:25:26</tns:DatVrijeme>
 <tns:OznSlijed>P</tns:OznSlijed>
<tns:BrRac>
 <tns:BrOznRac>12592</tns:BrOznRac>
 <tns:OznPosPr>01</tns:OznPosPr>
 <tns:OznNapUr>01</tns:OznNapUr>
 </tns:BrRac>
<tns:Pdv>
<tns:Porez>
 <tns:Stopa>13.00</tns:Stopa>
 <tns:Osnovica>0.88</tns:Osnovica>
 <tns:Iznos>0.12</tns:Iznos>
 </tns:Porez>
 </tns:Pdv>
<tns:Pnp>
<tns:Porez>
 <tns:Stopa>3.00</tns:Stopa>
 <tns:Osnovica>0.88</tns:Osnovica>
 <tns:Iznos>0.03</tns:Iznos>
 </tns:Porez>
 </tns:Pnp>
 <tns:IznosUkupno>1.00</tns:IznosUkupno>
 <tns:NacinPlac>G</tns:NacinPlac>
 <tns:OibOper>xxxxxxxxxxx</tns:OibOper>
 <tns:ZastKod>9c0bc038080f7f16de2b67c44d8e4b03</tns:ZastKod>
 <tns:NakDost>false</tns:NakDost>
 </tns:Racun>
 </tns:RacunZahtjev>
Sad kad imam RacunZahtjev koji mi izgleda dobro i kad smo već pri temi zamolio bih da mi netko objasni kakve koristi imamo od fajla RacunOdgovor?
Osim što sam ga snimio u file s nekim brojem računa ja u njemu ne vidim ništa što bi ga povezivalo s konkretnim brojem računa osim JIR-a i ne kužim kako ću ga koristiti pri eventualnom sporu.
Moj RacunOdgovor prikazan je dva posta iznad i moguće je da i tu nešto pogrešno podrazumijevam?

Isto molim da mi netko potvrdi da li su mi sad dokumenti RacunZahtjev i RacunOdgovor ono što bi trebali biti kao i da li moj kod koji je prikazan jedan post iznad izgleda OK.

I još me zanima bi li bilo potrebno (ili preporučljivo) takve dokumente potvrde snimati i za prijavu poslovnog prostora odnosno radnog vremena?
Coordinator
Nov 1, 2014 at 8:34 AM
Ako već nisi, pogledaj ovo: http://fiskalizacija.codeplex.com/wikipage?title=Primjeri%20iz%20prakse - tu imaš primjer kako se pozivaju rutine za snimanje XML datoteka sa zahtjevima i odgovorima u neki folder.

Preporuka je da se SVAKAKO čuvaju i zahtjevi i odgovori, kompletni uključivo i potpis, jer je to jedini način da dokazivanje u slučaju eventualnih problema.
Nov 1, 2014 at 7:40 PM
Iznosi su za primjer, ili? Jer koliko vidim iznosi nisu dobri.
Nov 1, 2014 at 10:00 PM
Iako jest u pitanju primjer iznosi bi trebali biti točni.

Prodajna=1 kn, stopaPdv=13%, stopaPp=3%
Osnovica = (100 * Prodajna) / (100 + stopaPdv) = 100 / 113 = 0,88...
IznosPdv-a = Prodajna - Osnovica = 1 - 0.88 = 0,12
IznosPnp-a = (Osnovica / 100) * StopaPp = (0,88/100) * 3 = 0,0264 tj. 0,03

Što misliš da nije točno?
Nov 2, 2014 at 12:26 AM
bad_exception wrote:
Što misliš da nije točno?
Pa eto, prvo ti osnovica nije tocna pa onda i ostalo.
Osnovica ti treba biti 1/ (1.13+0.03)
Nov 2, 2014 at 1:23 AM
0,88+0,12+0,03=1,03
Nov 2, 2014 at 7:17 AM
Da, porez na potrošnju.
Istina, ne znam kako se on računa i to moram vidit s knjigovođom a dodao sam ga u primjer čisto zato da vidim da li će biti obuhvaćen poreznom specifikacijom u xml-u RacunZahtjev. Sukladno tomu pdv sam računao "na osnovicu" a pp "od osnovice".

Kako bi se u prikazanom primjeru trebao izračunati pp?
Nov 2, 2014 at 8:19 AM
Edited Nov 2, 2014 at 8:32 AM
bad_exception wrote:
Kako bi se u prikazanom primjeru trebao izračunati pp?
[1 / (1 PLUS 0.13 PLUS 0.03)] * 0.03
PLUS sam stavio umjesto znaka jer mi ga htc browser pretvara u ascii kod ��

Da te ne zbuni, prva jedinica u formuli je ona jedna kuna iz ukupnog iznosa a druga jedinica je matematicka i uvijek je 1
Nov 2, 2014 at 8:45 AM
Edited Nov 2, 2014 at 8:46 AM
Hm...
Ne kužim to.
Otkud mi 0,13 i 0,03 u početnoj fazi?
Nov 2, 2014 at 8:54 AM
bad_exception wrote:
Hm...
Ne kužim to.
Otkud mi 0,13 i 0,03 u početnoj fazi?
PDV i PNP nisu 13 i 3 nego 0.13 i 0.03.
Postotke su uveli ekonomisti koji ne kuze matematiku pa su im zato i formule glomazne a izracun je kao sto vidis vrlo jednostavan
Nov 2, 2014 at 9:01 AM
To računanje unaprijed i unatrag su također izmišljotine ekonomista.
Gledaj, zanemari sada PNP, a ako ga ima, samo ga pridodaj PDV-u

Osnovica = IznosUkupni / (1 + StopaPDV)
IznosPDV = Osnovica * StopaPDV
StopaPDV = IznosUkupni / Osnovica- 1
IznosUkupni = Osnovica * (1 + StopaPDV)
itd .........
Sve izracune izvodiš jednog iz drugog.

StopaPDV-a je u decimalama, a Osnovica, IznosPDV i IznosUkupni su u kunama

Ja u programu sve porezne stope spremam u decimalama, a u postotke ih pretvaram samo prije prikaza na ekranu ili ispisa
Nov 2, 2014 at 9:42 AM
Edited Nov 2, 2014 at 10:36 AM
@Georgia, hvala ti lijepa na upozorenju i savjetima.
Dodajmo u priču i igru s decimalama pa zna tu biti "svega".
Posebno ako se želi s istim vrijednostima računati unaprijed i unatrag.

Uzet ću si danas vremena i proučiti to.

EDIT: Kako radim s trgovinama to je sve jasno.
Molim te da u gornji proračun ubaciš i porez na potrošnju.
Već duže pokušavam pa nemogu skužiti kako se to računa a volio bih i to pripremiti u programu ako mi koji krčmar naiđe.

Isto tako, vrlo je pametno što snimaš brojeve u decimalama.
Posebno je korisno kad se u proračun umiješaju i promjene cijena po (možda svakom) računu pa treba sve komponente u letu preračunavati (a možda i kreirati zapisnik o promjeni cijena na osnovu tog računa ili čak samo jedne stavke) :)
Nov 2, 2014 at 11:21 AM
Osnovica = IznosUkupni / (1 + StopaPDV + StopaPNP)
IznosPDV = Osnovica * StopaPDV
IznosPNP = Osnovica * StopaPNP
StopaPDV = IznosUkupni / Osnovica - StopaPNP - 1
StopaPNP = IznosUkupni / Osnovica - StopaPDV - 1
IznosUkupni = Osnovica * (1 + StopaPDV + StopaPNP)
itd .........

Vidiš da je to sve samo jedna formula i da se sve ostale samo izvode.
Isto ti je i sa "računanjem unatrag" kako ti to zoveš, evo npr. kako dobiti preračunatu stopu PDV-a.
PDV je naravno u decimalama.

Iznos = Osnovica * (1 + PDV) // Dijeliš sve s (1+PDV)
Iznos / (1+PDV) = Osnovica // Malo središ
Iznos * 1/(1+PDV) = Osnovica

Dakle iz iznosa dobiješ osnovicu tako da iznos pomnožiš s 1 / (1+PDV)
Nov 2, 2014 at 11:59 AM
Odlično.

Iz ovoga ću sigurno shvatit sve bitno za Pnp.
Koliko vidim to mogu dograditi u postojeći program i neće utjecati na postojeće podatke ni korisnike koji Pnp ne trebaju.
Malo poservisirati operacije s nulom (dbNull) i to će biti to. Jer kod njih je stopa Pnp uvijek nula (ili bolje reći ništa).

Hvala još jednom.
Nov 4, 2014 at 9:08 AM
Ja sam donekle uglazbio naučeno pa mi uz prodajnu cijenu od 10 kn, stopuPdv-a 13% i stopuPnp-a 3% rezultat ispada ovako:

osnovica = 8,5917
iznosPdv = 1,117
iznosPnp = 0,2913

Što nam daje 8,5917 + 1,117 + 0,2913 = 10

Molim potvrdu da li su mi sada rezultati proračuna s uključenim porezom na potrošnju točni.
Nov 4, 2014 at 9:13 AM
Edited Nov 4, 2014 at 9:17 AM
Nije dobro.
Osnovica je ista i za pdv i za pnp.

osnovica + osnovica*,13 (ili 0,25) + osnovica*,03 = prodajni iznos

osnovica = 8,62
pdv = 1,12
pnp = 0,26

8,62 + 1,12 + 0,26 = 10,00
Nov 4, 2014 at 9:35 AM
OMG, kako onda dobijem osnovicu (8,62) iz prodajne cijene (10)?

Po Georgiinoj formuli Osnovica = IznosUkupni / (1 + StopaPDV + StopaPNP) ne dobijem:
Osnovica = 10 / (1 + 13 + 3) = 10 / 17 = 0,5882 ??
Nov 4, 2014 at 9:41 AM
Stope podijeliš sa 100

10 / (1+0,13+0,03)=8,6207
Nov 4, 2014 at 9:52 AM
Za krepati!
Hvala lijepa, idem sad to primjenit u program pa da vidim...
Nov 5, 2014 at 7:17 AM
Evo primjenivši naučeno sad dobivam ovakav RacunZahtjev, vjerujem da je sad sve točno:
Prodana su 2 artikla po 10 kn.
Jedan ima porez na potrošnju drugi nema.
Iskusno oko će naći grešku ako je ima :)
<tns:RacunZahtjev Id="signXmlId">
<tns:Zaglavlje>
 <tns:IdPoruke>acf5eb0d-1938-42b8-984f-3732776ec130</tns:IdPoruke>
 <tns:DatumVrijeme>04.11.2014T21:47:47</tns:DatumVrijeme>
 </tns:Zaglavlje>
<tns:Racun>
 <tns:Oib>xxxxxxxxxxx</tns:Oib>
 <tns:USustPdv>true</tns:USustPdv>
 <tns:DatVrijeme>04.11.2014T21:47:31</tns:DatVrijeme>
 <tns:OznSlijed>P</tns:OznSlijed>
<tns:BrRac>
 <tns:BrOznRac>12596</tns:BrOznRac>
 <tns:OznPosPr>01</tns:OznPosPr>
 <tns:OznNapUr>01</tns:OznNapUr>
 </tns:BrRac>
<tns:Pdv>
<tns:Porez>
 <tns:Stopa>13.00</tns:Stopa>
 <tns:Osnovica>17.47</tns:Osnovica>
 <tns:Iznos>2.27</tns:Iznos>
 </tns:Porez>
 </tns:Pdv>
<tns:Pnp>
<tns:Porez>
 <tns:Stopa>3.00</tns:Stopa>
 <tns:Osnovica>8.62</tns:Osnovica>
 <tns:Iznos>0.26</tns:Iznos>
 </tns:Porez>
 </tns:Pnp>
 <tns:IznosUkupno>20.00</tns:IznosUkupno>
 <tns:NacinPlac>G</tns:NacinPlac>
 <tns:OibOper>xxxxxxxxxxx</tns:OibOper>
 <tns:ZastKod>6201450967b31a4e7217f604ac7ada98</tns:ZastKod>
 <tns:NakDost>false</tns:NakDost>
 </tns:Racun>
 </tns:RacunZahtjev>
Hvala lijepa svima koji su pomogli.

I sad još samo pitanje:
Kako bi proračun izgledao ako korisnik nije u sustavu PDV-a?
Nov 5, 2014 at 10:02 AM
Samo napomena, mislim da negdje piše da PP i NU ne bi smjeli imati vodeće nule.
Ako nije u sustavu PDV-a ne šalješ nodove gdje je PDV
Nov 5, 2014 at 11:22 AM
@Samo napomena, mislim da negdje piše da PP i NU ne bi smjeli imati vodeće nule.

OK, potražit ću taj "malo čudni" podatak a ako treba vjerujem da bi .NET mogao imati za to već gotovi "format specifier".

@Ako nije u sustavu PDV-a ne šalješ nodove gdje je PDV

Interesantno. Ali što s PNU?
Ja mislim da u tom slučaju PNU treba računati s osnovicom jednakom prodajnoj cijeni i u formulu NE uračunavati PDV.

Ovako: 10 / (1 + 0,03) = 10 / 1,03 = 9,7088 gdje je iznos PNP = 0,2912

Je li to istina?
Nov 5, 2014 at 2:26 PM
bad_exception wrote:
Ovako: 10 / (1 + 0,03) = 10 / 1,03 = 9,7088 gdje je iznos PNP = 0,2912

Je li to istina?
istina :)
Nov 5, 2014 at 11:27 PM
Edited Nov 5, 2014 at 11:45 PM
moremore wrote:
Samo napomena, mislim da negdje piše da PP i NU ne bi smjeli imati vodeće nule.
Tehnička specifikacija 1.2

2.1.1 Podatkovni skup zahtjeva za račun

Podatak: Oznaka poslovnog prostora
Opis/Napomena: Može sadržavati samo znamenke i slova 0-9, a-z, A-Z. Mora biti jedinstvena na razini OIB-a obveznika.
Obavezan (DA/NE): DA
Tip/Duljina: Varchar(20)

Point: Ne piše da se ne smije koristiti nula, što znači da samo treba navesti u internom aktu onako kako je upisano...to se podrazumjeva da se i u tom formatu na računu treba ispisati isto, u ovom slučaju 12596/01/1. U principu poslovni prostor možeš nazvati kako želiš. Vezano za oznaku naplatnog uređaja, sve je isto samo u opisu piše ovo:

Može sadržavati samo znamenke 0-9. Nisu dozvoljene vodeće nule. Mora biti jedinstvena na razini jednog poslovnog prostora obveznika.

To se sasvim jasno podrazumjeva, da ne bude zabune.
Nov 6, 2014 at 2:00 PM
Mislio sam da vrijedi i za PP. Uglavnom, on je i za PP i NU stavio vodeće nule:

<tns:OznPosPr>01</tns:OznPosPr>
<tns:OznNapUr>01</tns:OznNapUr>
Nov 7, 2014 at 8:25 AM
Edited Nov 7, 2014 at 8:26 AM
Da, tako piše kako piše.

No, po logici stvari taj podatak svi imamo u nekakvom "setupu" kojega korisnik može i sam postavljati tj. on je promjenjiv tako da programer nije baš za sve na svijetu kriv.
Sukladno tomu Apisov software BI MORAO prepoznavati bar osnovne tipove podataka pa onda ne bi trebalo brojeve slati kao stringove pa bi 01 i 001 uvijek bilo 1.
Sve u svemu, ne osjećam baš neku krivicu zbog tog i takvog podatka. A zašto?
Pa zato jer neki korisnici taj string "01" koriste duže vrijeme i bojim se da bi promjena izazvala posljedice u kritičnim djelovima ostatka programa koji taj string koriste.

Tako da se odučujem (krajnje svojevoljno) ostaviti kako je.
Nov 7, 2014 at 10:02 AM
Edited Nov 7, 2014 at 10:03 AM
Ma naravno da nećeš to sada mijenjati, na puno računa sam vidio da se koristi vodeća nula. Spomenuo sam to čisto da budeš svjestan toga i da uzmeš u obzir :)

Btw, koliko sam shvatio, inspektori ne rade drame oko toga. I slažem se da bi Apis mogao imati neku kontrolu, ali ne samo za to nego za više toga, jer dozvoljavaju da se šalju nebuloze, mi nemamo uvid u to i na kraju mi uvijek naj.bemo...
Nov 7, 2014 at 10:06 AM
Edited Nov 7, 2014 at 10:07 AM
Georgia47 wrote:
To računanje unaprijed i unatrag su također izmišljotine ekonomista.
Gledaj, zanemari sada PNP, a ako ga ima, samo ga pridodaj PDV-u

Osnovica = IznosUkupni / (1 + StopaPDV)
IznosPDV = Osnovica * StopaPDV
StopaPDV = IznosUkupni / Osnovica- 1
IznosUkupni = Osnovica * (1 + StopaPDV)
itd .........
Sve izracune izvodiš jednog iz drugog.
Mnogi zaborave (ili ne znaju) sto je tocno PoreznaStopa. Dakle, jedna od poreznih stopa PDV-a je 13 % . Oni koji nisu "na ti" sa postotnim racunom, vrlo lako zanemare onaj znak %. Sama rijec kaze, po-sto, sto bi znacilo 13/100. Dakle, porezna stopa od 13% = 13/100 i to je ono sto treba koristiti u gornjim formulama umjesto StopaPDV. Da ponovim, porezna stopa je trinaest posto, a ne trinaest. Iskreno i ja sam se zezno vise puta, dok nisam dobro zapamtio.