» »

Davčne blagajne

Davčne blagajne

««
18 / 27
»»

mickey_ ::

DamijanD je izjavil:

mickey: a tebi na XPjih samo te testne strani ne delujejo ali ti tudi potrjevanje ne deluje?


Potrjevanje, ping, registracija prostora tudi ne... javi timeout, čeprav v fidlerju pa kaže status code 200... Pri ostalih strankah deluje ok, samo pri eni je ta problem.

DamijanD ::

Saj ima slovenski IP, a ne?

mickey_ ::

Je slovenski, pa ne deluje ne na testnem in ne na produkcijskem... Je možno da router kaj blokira?

VKR77 ::

Ne znam da li če pomoči, u rijetkim slučajevima smo morali kod requesta izbaciti request.Timeout parametar da bi konekcija radila..

detroit ::

Fantje meni ni jasno ali pod točko 3.1.1 to pošiljamo na strežnik ali kaj? OZ ali vse postavke? Ker do sedaj sem na testnemu pošiljal samo ZOI, datum izdaje, premise, device, invoice amount, nizki davek, visoki davek (še ne vem kaj je to trneutno:P), in VAT blagajnika pa je bilo vse ok. Pod točko je označenih še desetine več postavk.
Skero

d(-_-)b ::

detroit je izjavil:

Fantje meni ni jasno ali pod točko 3.1.1 to pošiljamo na strežnik ali kaj? OZ ali vse postavke? Ker do sedaj sem na testnemu pošiljal samo ZOI, datum izdaje, premise, device, invoice amount, nizki davek, visoki davek (še ne vem kaj je to trneutno:P), in VAT blagajnika pa je bilo vse ok. Pod točko je označenih še desetine več postavk.

V stolpcu Obvezen podatek DA/NE je navedeno, kdaj je kateri podatek obvezen. Za polje R_3.14 npr. piše DA, če se spreminja prvoten račun, ki je bil izdan preko elektronske naprave. Bo treba preštudirat, ni druge ...

detroit ::

hehe jojoj juhuhu bruha se mi od tega:) veselo na delo jutri moram že oddat neki...:P
Skero

detroit ::

še nekaj mi ni jasno, ali moramo v bazi ohranit kaj drugega kot zoi, eor in date? Ne vidim smisla da shranjujemo kaj drugega ampak iz pdfa mi ni čisto jasno.
Skero

d(-_-)b ::

Danes sem iz firbca naložil aplikacijo FURS za skeniranje računov za nagradno igro in poskeniral en testni račun in ugotovim, da so za moj testni certifikat uporabili davčno številko obstoječe firme?!? Kekci ...
 Slika računa

Slika računa



Ko smo že pri tem - ta račun nima EOR, ker se davčna ni ujemala z davčno na certifikatu - test pač. Ali v tem primeru na računu izpišeš EOR: in pustiš prazno, ali tudi EOR ne napišeš? Gre pa za gotovinski račun - se mi zdi, da bi moral to napisat - vsaj vidiš, da nekaj manjka? Je kje to definirano oz kako to delate ostali?

StratoFlier ::

Ima še kdo Windows Vista?
Imam težave z branjem certifikata iz "store". Vsaka pomoč bo dobrodošla...

d(-_-)b ::

Kakšne težave pa?

detroit ::

d(-_-)b z veseljem bi ti pomagal, samo mislim da je moje znanje oz pomanjkanje letega bolj v napoto in spam:)
Skero

piki0 ::

Kaj takega bi moralo delati?

using System.Security.Cryptography.X509Certificates;
...
...

public static X509Certificate2 CertificateFromThumbprintStoreName(String thumbprint, StoreName storeName, StoreLocation storeLocation)
{
var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates.OfType«X509Certificate2»().ToList();
foreach (var certificate in certificates)
{
if (certificate.Thumbprint == thumbprint) return certificate;
}
return null;
}

romz ::

A kdo vidi zakaj za tako sporočilo za masovno potrjevanje vrača, da ni v skladu s shemo JSON

{
	"InvoiceListRequest": {
		"Header": {
			"MessageID": "8cc7358e-ad46-11e5-83fe-08002777c33d",
			"DateTime": "2015-12-28T10:37:02"
		},
		"InvoiceList": {
			"RecordInfo": [{
				"RecordNumber": 1,
				"Invoice": {
					"TaxNumber": 10257055,
					"IssueDateTime": "2015-12-23T23:15:17",
					"NumberingStructure": "B",
					"InvoiceIdentifier": {
						"BusinessPremiseID": "132",
						"ElectronicDeviceID": "BLA1",
						"InvoiceNumber": "1"
					},
					"InvoiceAmount": 111,
					"PaymentAmount": 111,
					"TaxesPerSeller": [{
						"ExemptVATTaxableAmount": 111
					}],
					"OperatorTaxNumber": 12345678,
					"ProtectedID": "316bdfe28868dfeaca505fb862039243"
				}
			}, {
				"RecordNumber": 2,
				"Invoice": {
					"TaxNumber": 10257055,
					"IssueDateTime": "2015-12-24T00:04:37",
					"NumberingStructure": "B",
					"InvoiceIdentifier": {
						"BusinessPremiseID": "132",
						"ElectronicDeviceID": "BLA1",
						"InvoiceNumber": "5"
					},
					"InvoiceAmount": 24.09,
					"PaymentAmount": 24.09,
					"TaxesPerSeller": [{
						"VAT": [{
							"TaxRate": 9.5,
							"TaxableAmount": 2.09,
							"TaxAmount": 22
						}]
					}],
					"OperatorTaxNumber": 12345678,
					"ProtectedID": "aa48b08ddc9f42047ac624e414367a84"
				}
			}, {
				"RecordNumber": 3,
				"Invoice": {
					"TaxNumber": 10257055,
					"IssueDateTime": "2015-12-24T00:03:24",
					"NumberingStructure": "B",
					"InvoiceIdentifier": {
						"BusinessPremiseID": "132",
						"ElectronicDeviceID": "BLA1",
						"InvoiceNumber": "2"
					},
					"InvoiceAmount": 111,
					"PaymentAmount": 111,
					"TaxesPerSeller": [{
						"ExemptVATTaxableAmount": 111
					}],
					"OperatorTaxNumber": 12345678,
					"ProtectedID": "1be2d2867968a396303b0a478ddaa0fc"
				}
			}]
		}
	}
}

kkrajnc ::

@romz - pojdi na http://www.jsonschemavalidator.net/ in v levo okno skopiraj shemo v desno pa tvoj JSON.

romz ::

hvala!!!

edit: @kkrajnc - a ti uspešno potrdiš tako sporočilo mogoče? Ker zgornji validator mi vrže errorje le pri float številkah, ki nimajo na koncu .00, kar pri posamičnem račnu ni problem. Pa še javi mi da 2.09 prav tako ni multiple od 0.01, kar jaz mislim da je :)

Zgodovina sprememb…

  • spremenil: romz ()

Yoda Master ::

@romz

To zgleda ok. Daj cel token, če ni tam kaj.
Pa še preveri da res pošiljaš na:
cash_registers_batch/invoices
There is no emotion, there is peace. There is no ignorance, there is knowledge. There is no passion, there is serenity. There is no death, there is the Force.

romz ::

Dejansko crkne ker je TaxableAmount 2.09. Če dam ta račun vn mi ostala 2 potrdi normalno. Se bom pozanimal na FURU kaj je s tem. Hvala vsem za pomoč

Yoda Master ::

Ni, meni gre čez tvoja vsebina (pač z mojim certom).
Daj token..
There is no emotion, there is peace. There is no ignorance, there is knowledge. There is no passion, there is serenity. There is no death, there is the Force.

MH0 ::

Morda pa kaj številke preverjajo?
                            "TaxRate": 9.5,
                            "TaxableAmount": 2.09,
                            "TaxAmount": 22

mkrin ::

Pozdravljeni.

Mi lahko prosim kdo pomaga ?
Na demo okolju mi vse deluje.
Na produkciji s strankinim certifikatom mi "ECHO" metoda deluje, pri oddaji poslovnega prostora pa mi sporoči napako "Cold not create SSL/TLS secure channel".

Certifikat mi uspešno najde.
Ima kdo kakšno idejo ?

Najlepša hvala.

DamijanD ::

A uporabljaš v produkciji produkcijske FURS certifikate za seje?

prtenjam ::

mkrin je izjavil:

...pri oddaji poslovnega prostora pa mi sporoči napako "Cold not create SSL/TLS secure channel"...

Po vsej verjetnosti poskušate s produkcijskim certifikatom podatke pošiljati na testni strežnik ali obratno, kar v nobenem primeru ne deluje.
Matjaž Prtenjak
https://mnet.si

mkrin ::

prtenjam je izjavil:

mkrin je izjavil:

...pri oddaji poslovnega prostora pa mi sporoči napako "Cold not create SSL/TLS secure channel"...

Po vsej verjetnosti poskušate s produkcijskim certifikatom podatke pošiljati na testni strežnik ali obratno, kar v nobenem primeru ne deluje.


Najlepša hvala za Vaš odgovor.
Imate prav, v eni funkciji je bila zamenjana davčna številka izdajatelja računa in podjetja programske opreme in je prišlo do zamenjave certifikatov.

SonjaP ::

PrimozHisof je izjavil:

SonjaP je izjavil:

inkanet je izjavil:

A kdo ve katera (zneskovna) polja se pošiljajo na FURS, če se gre za račun izdan s strani malega davčnega zavezanca (davčni zavezanec, ki je oproščen plačila DDV po 94. členu ZDDV-1) ? Ali je dovolj da se pošlje samo:

InvoiceAmount
PaymentnAmount
ExemptVATTaxableAmount
TaxesPerSeller/VAT pa se kompletno izpusti


Mislim, da tudi ExemptVATTaxableAmount ni potrebno vpisovati. Namreč to je oproščen promet: "Skupna vrednost dobav blaga ali storitev na računu, ki so v skladu z Zakonom o davku na dodano vrednost oproščene plačila DDV."
To vrednost bi torej pošiljal, če bi imel na računu blago ali storitve, ki bi bile oproščene DDV-ja, tudi če bi bil zavezanec za DDV.
Komplicirano.. vem... :)


ExemptVATTaxableAmount je potrebno vpisovati če je izdajatelj nezavezanec


Posipam se s pepelom... moje razmišljanje je bilo napačno. FURS je 22.12. dopolnil FAQ s pojasnilom 247: Podatke o vrednosti dobav blaga in storitev na računu, ki so v skladu z določili 94. člena Zakona o davku na dodano vrednost oproščene obračunavanja DDV, vpišejo v polje »Vrednost oproščenih dobav« (R_3.9.5). Torej ExemptVATTaxableAmount.
Se opravičujem.. :|

trstenjak ::

Hvala za info. Tudi jaz sem napačno mislil, da je dovolj osnova ddv 0%.

d-mon ::

marko35 je izjavil:

Kako naj oblikujem XML račun, če nisem davčni zavezanec?
Na računu je klavzula: DDV ni obračunan po 1. točki 94. člena ZDDV - ddv torej ni izkazan.

:ExemptVATTaxableAmount = vrednost oproščenih dobav
:NontaxableAmount = vrednost nobdavčljivih dobav
:SpecialTaxRulesAmount = to naj bi bilo za turistične agencije, prodaja starin...

Kaj mislite da tole zadnje - SpecialTaxRulesAmount miniblagajna za prodajalne starin in turistične agencije sploh upošteva?

LP,Mare


Na miniBlagajni lahko vpises oproscene in neobdavcljive postavke, potem imas pa se samostojno postavko pod sumo Ostale dajatve, v katere vpises opis npr. Turisticna taksa in ta del ni obdavcen, je pa pristet InvoiceAmountu kot bruto. V polje SpecialTaxRulesAmount miniBlagajna ne poroca nic.
[D-mon]

kranjcb ::

Mene pa zanima sledeč scenaril:

Imamo neko storitev/artikel z vrednostjo 200€ (od tega 40€ DDV-ja).

1. če je izdan avansni račun (predplačilo): 100€ (od tega 20€ DDV) (tega smo tudi prijavili FURS-u)
V račun kjer "poračunamo" ta avansni račun:
InvoiceAmount = 100 (100 € je bilo že plačano po avansnem računu)
PaymentnAmount = 100
DDV (TaxesPerSeller/VAT) = 20 (20€ DDV-ja je že bilo plačanega po avansnem računu)

2. če smo dobili predplačilo 100€ (ala akontacija/varščina) in ni bil izdan avansni račun
V račun vpišemo:
InvoiceAmount = 200
PaymentnAmount = 100 (100€ smo dobili po predplačilu)
DDV (TaxesPerSeller/VAT) = 40

3. V primeru da ni davčni zavezanec:
DDV (TaxesPerSeller/VAT) izpustimo
ExemptVATTaxableAmount = vrednost računa (InvoiceAmount)

Ali je tole pravilno (vse 3 tokče)? Iz FURS-a sem dobil le neke generične odgovore ...

peterv6i ::

Pošiljam še primere Java stored procedure, če bo kdo pošiljal podatke iz baze oracle na furs.. (mora pa biti baza 11g (jdk 1.6))
Ideja je takšna:
- pošiljanje se vrši preko plsql procedur, da olajšamo delo programerjem in da nimamo nekih zunanjih ali vmesnih rešitev med bazo in fursom
- certifikati se nahajajo na file sistemu baze.
- Java stored procedura skrbi za https connection s certifikati, ki jih posreduje furs (oracle wallet žal ne podpira novih certifikatov zato sem to naredil v stored proceduri)..
- Za pošiljanje podatkov se ne uporablja oraclov paket UTL_HTTP ampak metoda sendXMLT
- paket se uporablja tako, da se 1x v oraceovi seji pokliče metoda initcert, katera nastavi potrebne certifikate, potem pa se kličejo metode za pošiljanje poslovnega prostora ali pa računa...


Na furs sem probal posredovati že preko 400.000 faktur v šestih - sedmih (job-ih) (threadih)..


CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "DigitalniPodpis" as 
import java.security.Key;
import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Enumeration;
import java.io.*;
import java.lang.Integer;
import java.security.*;
import java.util.*;
import javax.xml.crypto.dsig.*;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.keyinfo.*;
import javax.xml.crypto.dsig.spec.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import java.net.URL;
import java.security.KeyManagementException;

import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

/**
 * ********************************************************************************
 * Naredil Peter Valenčič Izdelava 09.09.2015 Namen metode za generiranje in
 * podpisovanje xml datotek za davčno blagajno Datum metoda Spremembe 10.11.2015
 * initCert Dodan še trustore, webservice url ter inicializacija HTTPS povezave
 *
 **********************************************************************************
 */
public class DigitalniPodpis {
    public static String t="";
    public static KeyStore p12 = null;
    public static String geslo;
    public static String vmesni_rezultat = "";
    public static String alias = null;
    public static Key privateKey = null;
    public static Signature podpis = null;
    public static MessageDigest md = null;
    public static StringBuilder sb = new StringBuilder();
    public static HttpsURLConnection httpsURLConnection; //SSL povezava
    public static URL url; //webservice endpoint
    public static StringBuffer response = new StringBuffer();
    public static String inputLine = "";
    //public static DocumentBuilderFactory dbFactory;


    static {
        try {
            podpis = Signature.getInstance("SHA256WithRSA");
            md = MessageDigest.getInstance("MD5");
            //DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            //dbFactory.setNamespaceAware(true);

        } catch (Exception ex) {

        }

    }

    public static HttpsURLConnection getHttpsURLConnection(URL url, String truststore, String keystore,
            String keyStorePass, String keyPassword, String KeyStoreType, String KeyManagerAlgorithm, String SSLVersion)
            throws NoSuchAlgorithmException, KeyStoreException,
            CertificateException, FileNotFoundException, IOException,
            UnrecoverableKeyException, KeyManagementException {
        //System.setProperty("javax.net.debug", "ssl,handshake,record");

        SSLContext sslcontext = SSLContext.getInstance(SSLVersion);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerAlgorithm);
        KeyStore ks = KeyStore.getInstance(KeyStoreType);
        ks.load(new FileInputStream(keystore), keyStorePass.toCharArray());
        kmf.init(ks, keyPassword.toCharArray());

        CertificateFactory cf = CertificateFactory.getInstance("X.509");

        InputStream is = new FileInputStream(truststore); //"c:/cert/test-tls.cer");
        InputStream caInput = new BufferedInputStream(is);
        Certificate ca;
        try {
            ca = cf.generateCertificate(caInput);
            System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
        } finally {
            caInput.close();
        }
        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);

        // Create a TrustManager that trusts the CAs in our KeyStore
        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

        TrustManager[] tm = tmf.getTrustManagers();

        sslcontext.init(kmf.getKeyManagers(), tm, null);
        SSLSocketFactory sslSocketFactory = sslcontext.getSocketFactory();
        HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
        HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

        return httpsURLConnection;
    }

    public static String podpisiRacun(String vhodniXml) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        dbFactory.setNamespaceAware(true);
        Document doc = (Document) dbFactory.newDocumentBuilder().parse(new ByteArrayInputStream(vhodniXml.getBytes()));
        Node node = doc.getElementsByTagName("fu:InvoiceRequest").item(0);
        Enumeration e = p12.aliases();
        String alias = (String) e.nextElement();
        System.out.println("Alias certifikata:" + alias);
        Key privateKey = p12.getKey(alias, geslo.toCharArray());

        KeyStore.PrivateKeyEntry keyEntry
                = (KeyStore.PrivateKeyEntry) p12.getEntry(alias, new KeyStore.PasswordProtection(geslo.toCharArray()));

        X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

        PublicKey publicKey = cert.getPublicKey();
        final XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance("DOM");
        // Create a Reference to the enveloped document
        Reference ref = sigFactory.newReference("#data",
                sigFactory.newDigestMethod(DigestMethod.SHA256, null),
                Collections.singletonList(sigFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)),
                null,
                null);

        SignedInfo si = sigFactory.newSignedInfo(sigFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), sigFactory.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", null), Collections.singletonList(ref));

        // Create a KeyValue containing the RSA PublicKey
        KeyInfoFactory keyInfoFactory = sigFactory.getKeyInfoFactory();
        X509IssuerSerial x509IssuerSerial = keyInfoFactory.newX509IssuerSerial(cert.getSubjectX500Principal().getName(), cert.getSerialNumber());

        List x509Content = new ArrayList();

        x509Content.add(cert.getSubjectX500Principal().getName());
        x509Content.add(x509IssuerSerial);

        KeyValue keyValue = keyInfoFactory.newKeyValue(publicKey);
        X509Data xd = keyInfoFactory.newX509Data(x509Content);

        // Create a KeyInfo and add the KeyValue to it
        KeyInfo keyInfo = keyInfoFactory.newKeyInfo(Collections.singletonList(xd));

        // Create a DOMSignContext and specify the RSA PrivateKey and
        // location of the resulting XMLSignature's parent element
        DOMSignContext dsc = new DOMSignContext(
                privateKey,
                node
        );

        // Create the XMLSignature (but don't sign it yet)
        XMLSignature signature = sigFactory.newXMLSignature(si, keyInfo);

        // Marshal, generate (and sign) the enveloped signature
        signature.sign(dsc);

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        Transformer trans = TransformerFactory.newInstance()
                .newTransformer();
        trans.transform(new DOMSource(doc), new StreamResult(os));
        byte[] podatki = os.toByteArray();
        os.close();
        return new String(podatki);
    }

    public static String podpisiPoslovniProstor(String vhodniXml) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        dbFactory.setNamespaceAware(true);
        Document doc = (Document) dbFactory.newDocumentBuilder().parse(new ByteArrayInputStream(vhodniXml.getBytes()));
        Node node = doc.getElementsByTagName("fu:BusinessPremiseRequest").item(0);
        Enumeration e = p12.aliases();
        String alias = (String) e.nextElement();
        System.out.println("Alias certifikata:" + alias);
        Key privateKey = p12.getKey(alias, geslo.toCharArray());

        KeyStore.PrivateKeyEntry keyEntry
                = (KeyStore.PrivateKeyEntry) p12.getEntry(alias, new KeyStore.PasswordProtection(geslo.toCharArray()));

        X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

        PublicKey publicKey = cert.getPublicKey();
        final XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance("DOM");
        // Create a Reference to the enveloped document
        Reference ref = sigFactory.newReference("#data",
                sigFactory.newDigestMethod(DigestMethod.SHA256, null),
                Collections.singletonList(sigFactory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null)),
                null,
                null);

        SignedInfo si = sigFactory.newSignedInfo(sigFactory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), sigFactory.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", null), Collections.singletonList(ref));

        // Create a KeyValue containing the RSA PublicKey
        KeyInfoFactory keyInfoFactory = sigFactory.getKeyInfoFactory();
        X509IssuerSerial x509IssuerSerial = keyInfoFactory.newX509IssuerSerial(cert.getSubjectX500Principal().getName(), cert.getSerialNumber());

        List x509Content = new ArrayList();

        x509Content.add(cert.getSubjectX500Principal().getName());
        x509Content.add(x509IssuerSerial);

        KeyValue keyValue = keyInfoFactory.newKeyValue(publicKey);
        X509Data xd = keyInfoFactory.newX509Data(x509Content);

        // Create a KeyInfo and add the KeyValue to it
        KeyInfo keyInfo = keyInfoFactory.newKeyInfo(Collections.singletonList(xd));

        // Create a DOMSignContext and specify the RSA PrivateKey and
        // location of the resulting XMLSignature's parent element
        DOMSignContext dsc = new DOMSignContext(
                privateKey,
                node
        );

        // Create the XMLSignature (but don't sign it yet)
        XMLSignature signature = sigFactory.newXMLSignature(si, keyInfo);

        // Marshal, generate (and sign) the enveloped signature
        signature.sign(dsc);

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        Transformer trans = TransformerFactory.newInstance()
                .newTransformer();
        trans.transform(new DOMSource(doc), new StreamResult(os));

        return new String(os.toByteArray());
    }

    private static String md5Java(byte[] message) throws Exception {
        byte[] hash = md.digest(message); //.getBytes("UTF-8"));
        //StringBuilder sb = new StringBuilder(2 * hash.length);
        sb.setLength(0);
        for (byte b : hash) {
            sb.append(String.format("%02x", b & 0xff));
        }

        return sb.toString();
    }

    /**
     * Metoda inicializira keystore in truststore za SSL povezavo ter podpis
     * dokumentov
     *
     * @param direktorij direktorij kjer se fizično nahajajo certifikati
     * @param certifikat naziv datoteke certifikata
     * @param gesloc Geslo certifikata
     * @param trustStoreCertifikat naziv trustStore certifikata
     * @throws Exception
     */
    public static void initCert(String direktorij, String certifikat, String gesloc, String trustStoreCertifikat, String urlWsEndpoint) throws Exception {
        if (certifikat == null) {
            throw new Exception("ime datoteke certifikata za podpis podatkov ni podano!");
        }
        if (gesloc == null) {
            throw new Exception("geslo certifikata ni podano!");
        }

        if (trustStoreCertifikat == null) {
            throw new Exception("ime datoteke certifikata za trustStore ni podano!");
        }

        File f = new File(direktorij+"/"+certifikat);
        if (f.exists() == false)
        {
            throw new Exception("Certifikat za podpis ne obstaja na:" + (direktorij+"/"+certifikat));
        }

        f = new File(direktorij+"/"+trustStoreCertifikat);
        if (f.exists() == false)
        {
            throw new Exception("Certifikat za dostop do https ne obstaja na:" + (direktorij+"/"+trustStoreCertifikat));
        }

        // določimo URL do webservisa
        url = new URL(urlWsEndpoint);

        geslo = gesloc;
        if (p12 == null) {
            p12 = KeyStore.getInstance("pkcs12");
            p12.load(new FileInputStream(direktorij + "/" + certifikat), geslo.toCharArray());
            Enumeration e = p12.aliases();
            alias = (String) e.nextElement();
            privateKey = p12.getKey(alias, geslo.toCharArray());
            podpis.initSign((PrivateKey) privateKey);
        }

        //parametri za SSL povezavo
        if (httpsURLConnection == null) {
            SSLContext sslcontext = SSLContext.getInstance("TLS");
            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
            KeyStore ks = KeyStore.getInstance("PKCS12");
            ks.load(new FileInputStream(direktorij + "/" + certifikat), geslo.toCharArray());
            kmf.init(ks, geslo.toCharArray());

            CertificateFactory cf = CertificateFactory.getInstance("X.509");

            InputStream is = new FileInputStream(direktorij + "/" + trustStoreCertifikat); //"c:/cert/test-tls.cer");
            InputStream caInput = new BufferedInputStream(is);
            Certificate ca;
            try {
                ca = cf.generateCertificate(caInput);
                System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
            } finally {
                caInput.close();
            }
            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca", ca);

            // Create a TrustManager that trusts the CAs in our KeyStore
            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keyStore);

            TrustManager[] tm = tmf.getTrustManagers();

            sslcontext.init(kmf.getKeyManagers(), tm, null);
            SSLSocketFactory sslSocketFactory = sslcontext.getSocketFactory();
            HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
            //vrnemo https povezavo, ki je globalna in aktivna skozi celo sejo.
            //httpsURLConnection = (HttpsURLConnection) url.openConnection();

        }
    }



        public static String sendXML(String soapAction,String soapEnvelopeXML) throws Exception {

        //nastavimo timeout
        //httpsURLConnection.setConnectTimeout(Integer.valueOf(timeoutMsec).intValue());
        if (httpsURLConnection == null) {
            httpsURLConnection = (HttpsURLConnection) url.openConnection();
        }
        //nastavimo header-je
        httpsURLConnection.setRequestMethod("POST");
        httpsURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0");
        httpsURLConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        httpsURLConnection.setRequestProperty("Content-type", "text/xml; charset=utf-8");
        httpsURLConnection.setRequestProperty("SOAPAction", soapAction);
        httpsURLConnection.setDoOutput(true);

            OutputStream reqStream = httpsURLConnection.getOutputStream();

            reqStream.write(soapEnvelopeXML.getBytes());

            int responseCode = httpsURLConnection.getResponseCode();
            System.out.println("\nSending 'POST' request to URL : " + url);

            System.out.println("Response Code : " + responseCode);
            if (responseCode == 200) {
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(httpsURLConnection.getInputStream()));
                String inputLine;
               // StringBuffer response = new StringBuffer();
                response.setLength(0);
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();
                httpsURLConnection.disconnect();
                return response.toString();

            }
            else
            {
                httpsURLConnection.disconnect();
                throw new Exception("Napaka pri povezavi na strežnik "+ url + ". Koda napake: " + responseCode);
            }

    }

     public static String sendXMLT(int timeout,String soapAction,String soapEnvelopeXML) throws Exception {

        httpsURLConnection = (HttpsURLConnection) url.openConnection();

        //nastavimo timeout
        httpsURLConnection.setConnectTimeout(timeout);
        httpsURLConnection.setReadTimeout(timeout);

      //nastavimo header-je
        httpsURLConnection.setRequestMethod("POST");
        httpsURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0");
        httpsURLConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        httpsURLConnection.setRequestProperty("Content-type", "text/xml; charset=utf-8");
        httpsURLConnection.setRequestProperty("SOAPAction", soapAction);
        httpsURLConnection.setDoOutput(true);

            OutputStream reqStream = httpsURLConnection.getOutputStream();

            reqStream.write(soapEnvelopeXML.getBytes());

            int responseCode = httpsURLConnection.getResponseCode();
            //System.out.println("\nSending 'POST' request to URL : " + url);

            //System.out.println("Response Code : " + responseCode);
            if (responseCode == 200) {
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(httpsURLConnection.getInputStream()));

                response.setLength(0);

                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();
                httpsURLConnection.disconnect();
                return response.toString();

            }
            else
            {
                httpsURLConnection.disconnect();
                throw new Exception("Napaka pri povezavi na strežnik "+ url + ". Koda napake: " + responseCode);
            }

    }

    public static String getZOI(
            String davcnaStevilka,
            String datumIzdaje,
            String stevilkaRacuna,
            String oznakaPoslovnegaProstora,
            String electronicDeviceId,
            String znesekRacuna) throws Exception {

        //sestavimo vrstico
        vmesni_rezultat = davcnaStevilka.concat(datumIzdaje).concat(stevilkaRacuna).concat(oznakaPoslovnegaProstora).concat(electronicDeviceId).concat(znesekRacuna);
        podpis.update(vmesni_rezultat.getBytes("UTF-8"));
        byte[] podpisano = podpis.sign();

        //MD5 hash
        return md5Java(podpisano);
    }

}
/



PLSQL
CREATE OR REPLACE PACKAGE body OZP_FURS_UTIL
  AS
/*******************************************************************************
Naredil        Peter Valencic
Datum nastanka 09.09.2015
Zgodovina sprememb (zadnja na vrhu)

Zst.  Kdaj        Kdo                  Programska enota
      Kaj
================================================================================
7.    23.12.2015  Peter Valenčič       p_prenesi_racun
      Dodano je polnjenje atributov kjer merimo čas
6.    21.12.2105  Petar Grula          p_prenesi_racun
      Dodal obravnavo za avansne račune in izhodne fakture
5.    04.12.2015  Peter Valenčič       p_prenesi_racun_zs
      Nova procedura za prenos računov zunanjih sistemov

4.    10.11.2015  Peter Valenčič       p_inicializiraj_certifikat
3.    05.11.2015  Peter Valenčič       p_prenesi_racun
2.    01.10.2015  Peter Valenčič       p_ws_prenesi_poslovni_prostor
      procedura prenese xml v furs za zapis iz tabele PFR_POSLOVNI_PROSTOR

1.    09.09.2015  Peter Valenčič       f_vrni_zoi           
      izdelava funkcije za vračanje ZOI številke
********************************************************************************/

function f_getQRcode(p_text in varchar2) return BLOB as LANGUAGE JAVA  NAME 'QRCodeGenerator.getQrCode(java.lang.String) return oracle.sql.BLOB';

function f_xml( p_xml in xmltype
              , p_xpath in varchar2
              , p_namespace in varchar2 default 'xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:fu="http://www.fu.gov.si/"'
               ) return varchar2 as
begin
   return case
               when p_xml.extract(p_xpath, p_namespace) is not null then
                  trim(p_xml.extract(p_xpath, p_namespace).getstringval())
               else
                  null
               end;
end;
procedure print(text in varchar2) as
begin
    put_xl_line(text);
end;

function isEmpty(p_tekst in varchar2) return boolean is
begin
    if (p_tekst is null or p_tekst ='' or trim(p_tekst)='') then
        return true;
    end if;
    return false;
end;

function isNotEmpty(p_tekst in varchar2) return boolean is
begin
    if isEmpty(p_tekst) = true then
        return false;
    end if;
    return true;
end;

function f_test return varchar2 is language java name 'DigitalniPodpis.test() return java.lang.String';

function   f_printSignature return varchar2 is language java name 'DigitalniPodpis.printSignature() return java.lang.String';



function   f_send_xml(p_soapAction      in varchar2,
                      p_soapEnvelopeXML in varchar2) return varchar2 is
           language java name 'DigitalniPodpis.sendXML(java.lang.String,java.lang.String) return java.lang.String';

function   f_send_xml_timeout(p_timeout         in number,
                              p_soapAction      in varchar2,
                              p_soapEnvelopeXML in varchar2) return varchar2 is
           language java name 'DigitalniPodpis.sendXMLT(int,java.lang.String,java.lang.String) return java.lang.String';
function   f_java_vrni_zoi(
                      p_davcna_stevilka         in varchar2, -- davčna številka
                      p_datum_izdaje_racuna     in varchar2, -- format dd.mm.yyyy hh:mm:ss
                      p_stevilka_racuna         in varchar2, -- zaporedna številka računa
                      p_oznaka_posl_prostora    in varchar2, -- oznaka poslovnega prostora (glej dokumentacijo FURS-a)
                      p_naziv_prodajnega_mesta  in varchar2, -- naziv prodajnega mesta recimo (blagajna1)
                      p_znesek_racuna           in varchar2  -- znesek mora biti v formatu 12345.00 (brez vejic samo decimalna pika!)
                      ) return varchar2 is language java name
                      'DigitalniPodpis.getZOI(
                                              java.lang.String,
                                              java.lang.String,
                                              java.lang.String,
                                              java.lang.String,
                                              java.lang.String,
                                              java.lang.String) return java.lang.String ';
procedure p_java_init_cert(p_lokacija_certifikata       in varchar2, -- naziv oracle direktorija kjer je certifikat recimo: 'certifikati'
                          p_naziv_certifikata           in varchar2, -- naziv datoteke recimo: test.p12
                          p_geslo_certifikata           in varchar2, -- geslo certifikata, ki ga dobimo poleg certifikata
                          p_naziv_trustore_certifikata  in varchar2, -- naziv do trustore certifikata
                          p_url_ws_endpoint             in varchar2  -- url
                          ) is language java name    'DigitalniPodpis.initCert(java.lang.String, java.lang.String,java.lang.String,java.lang.String,java.lang.String)';

function f_java_podpisi_posl_prostor(p_vhodni_xml    in varchar2
                                     ) return varchar2 is language java name    'DigitalniPodpis.podpisiPoslovniProstor(java.lang.String) return java.lang.String';

function f_java_podpisi_racun(p_vhodni_xml    in varchar2
                                     ) return varchar2 is language java name    'DigitalniPodpis.podpisiRacun(java.lang.String) return java.lang.String';

function p_java_podpisi_racun1(p_vhodni_xml_clob    in varchar2
                                     ) return varchar2
as
begin
    return f_java_podpisi_racun(p_vhodni_xml_clob);
end;

 procedure p_inicializiraj_certifikat(   p_lokacija_certifikata         in varchar2, -- naziv oracle direktorija kjer je certifikat recimo: 'certifikati'
                                         p_naziv_certifikata            in varchar2, -- naziv datoteke recimo: test.p12
                                         p_geslo_certifikata            in varchar2, -- geslo certifikata, ki ga dobimo poleg certifikata
                                         p_naziv_trustore_certifikata   in varchar2, -- naziv do trustore certifikata
                                         p_url_ws_endpoint              in varchar2  -- url do webservisa (webservice endpoint url)
                                      ) as
  l_direktorij varchar2(200);
begin
    -- kontrola podatkov
    if isEmpty(p_lokacija_certifikata) then
        raise_application_error(-20001,'Parameter p_lokacija_certifikata ne sme biti prazen');
    end if;

    if isEmpty(p_naziv_certifikata) then
        raise_application_error(-20001,'Parameter p_naziv_certifikata ne sme biti prazen');
    end if;

    if isEmpty(p_geslo_certifikata) then
        raise_application_error(-20001,'Parameter p_geslo_certifikata ne sme biti prazen');
    end if;

    if isEmpty(p_naziv_trustore_certifikata) then
        raise_application_error(-20001,'Parameter p_naziv_trustore_certifikata ne sme biti prazen');
    end if;

    if isEmpty(p_url_ws_endpoint) then
        raise_application_error(-20001,'p_url_ws_endpoint');
    end if;

    -- pridobimo fizični naslov na disku za podan "direktorij"
    begin
        select directory_path into l_direktorij
        from all_directories adc
        where upper(adc.directory_name) = upper(p_lokacija_certifikata);
        dbms_output.put_line(l_direktorij);
    exception when no_data_found then
        raise_application_error(-20001,'Za podani direktorij ne morem pridobiti fizični naslov na disku');
    end;

    -- inicializiramo certifikat
    p_java_init_cert(p_lokacija_certifikata         => l_direktorij, -- naziv oracle direktorija kjer je certifikat recimo: 'certifikati'
                     p_naziv_certifikata            => p_naziv_certifikata, -- naziv datoteke recimo: test.p12
                     p_geslo_certifikata            => p_geslo_certifikata,
                     p_naziv_trustore_certifikata   => p_naziv_trustore_certifikata, -- naziv do trustore certifikata
                     p_url_ws_endpoint              => p_url_ws_endpoint
                     );

exception
   when qms$errors.qms$exception then
      raise;
   when others then
      qms$errors.show_message(p_mesg=>'ZAV-00002'
         , p_param0=>sqlerrm
         , p_param1=>'ozp_furs_util.p_inicializiraj_certifikat');
end;


function   f_vrni_zoi(
                      p_davcna_stevilka         in varchar2, -- davčna številka
                      p_datum_izdaje_racuna     in varchar2, -- format dd.mm.yyyy hh:mm:ss
                      p_stevilka_racuna         in varchar2, -- zaporedna številka računa
                      p_oznaka_posl_prostora    in varchar2, -- oznaka poslovnega prostora (glej dokumentacijo FURS-a)
                      p_naziv_prodajnega_mesta  in varchar2, -- naziv prodajnega mesta recimo (blagajna1)
                      p_znesek_racuna           in varchar2  -- znesek mora biti v formatu 12345.00 (brez vejic samo decimalna pika!)
                      ) return varchar2 -- MD5 hash 32 mestna številka
as
   l_direktorij varchar2(200);
begin


    return f_java_vrni_zoi(
                           P_DAVCNA_STEVILKA        => p_davcna_stevilka,
                           P_DATUM_IZDAJE_RACUNA    => p_datum_izdaje_racuna,
                           P_STEVILKA_RACUNA        => p_stevilka_racuna,
                           P_OZNAKA_POSL_PROSTORA   => p_oznaka_posl_prostora,
                           P_NAZIV_PRODAJNEGA_MESTA => p_naziv_prodajnega_mesta,
                           P_ZNESEK_RACUNA          => p_znesek_racuna);

exception
   when qms$errors.qms$exception then
      raise;
   when others then
      qms$errors.show_message(p_mesg=>'ZAV-00002'
         , p_param0=>sqlerrm
         , p_param1=>'ozp_furs_util.f_vrni_zoi');
end;

procedure p_ws_furs_echo(p_tekst               in varchar2,
                         p_echo_result         out clob,
                         p_napaka              out varchar2
                         ) as
   v_soap_request_text  clob;
   v_request            UTL_HTTP.REQ;
   v_response           UTL_HTTP.RESP;
   v_buffer             varchar2(32767);
   v_response_xml       clob;
   l_soap_env           xmltype;
   l_soap_body          xmltype;
   l_napaka_opis        varchar2(1000);
   l_napaka_koda        varchar2(200);
   l_tmp                varchar2(200);
   l_znesek             varchar2(1000);
   l_vsebina            clob;
   l_xmlns              clob;
   l_url                clob;
begin
  p_napaka := '';

   v_soap_request_text := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fu="http://www.fu.gov.si/">
   <soapenv:Header/>
   <soapenv:Body>
      <fu:EchoRequest>'|| utl_url.escape(p_tekst) ||'</fu:EchoRequest>
   </soapenv:Body>
</soapenv:Envelope>';

  put_xl_line('nastavimo timeout...');
  v_response_xml := f_send_xml_timeout( p_timeout => 2500, P_SOAPACTION =>'"/echo"', P_SOAPENVELOPEXML => v_soap_request_text);
  put_xl_line('response xml: ' || v_response_xml);
  -- variable za parsanje xml-a
  l_soap_env  := xmltype.createxml(v_response_xml);
  l_soap_body := l_soap_env.extract('/soapenv:Envelope/soapenv:Body/*','xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"');

  put_xl_line('body: ' || l_soap_body.getClobVal());
  p_echo_result := l_soap_body.extract('/fu:EchoResponse/text()','xmlns:fu="http://www.fu.gov.si/"').getstringval();

  -- sprostimo clob
  DBMS_LOB.freetemporary(v_response_xml);
exception
  when others then
    print('exception block');
    print( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
    --utl_http.end_response(v_response);
    print(sqlerrm);
    p_napaka := sqlerrm;
end;
.
.
.
.

Zgodovina sprememb…

  • spremenilo: peterv6i ()

maticx46 ::

Pozdravljeni tisti, ki se še ukvarjate z blagajno.

Ali morda kdo ve, kako se ZOI številko konvertira v decimalno vrednost?
Sestaviti moram QR za na račun in ta je sestavljena iz ZOI + DŠ + DATUM.

Prosim za pomoč, da dobim string potem za QR kodo.

Hvala in LP

kkrajnc ::

maticx46 je izjavil:

Pozdravljeni tisti, ki se še ukvarjate z blagajno.

Ali morda kdo ve, kako se ZOI številko konvertira v decimalno vrednost?
Sestaviti moram QR za na račun in ta je sestavljena iz ZOI + DŠ + DATUM.

Prosim za pomoč, da dobim string potem za QR kodo.

Hvala in LP

Iz hexa moreš konvertirat v decimalni string.
Je pa odvisno v katerem programskem jeziku delaš. Poglej če imaš tip BigInt (če si slučajno v delphi-ju ti lahko dam funkcijo da ne rabiš uvažat dodatnih knjižnic).

Zgodovina sprememb…

  • predlagal izbris: frke ()

maticx46 ::

Hoj,

delam v C#. Nikakor ne spravim skupaj, da iz tehle črev (ZOI) dobim decimalno vrednost za nadaljni izračun.

evo, ZOI številka :

4a5192042ca8474ba8e203b13a8b1111

Nimam pojma kako.
Če ve kdo rešitev, se priporočam.

lp

MH0 ::

                    string k = BigInteger.Parse("0" + rs.ZKI, NumberStyles.HexNumber).ToString().PadLeft(39, '0') + Global.Davcna + dt.Value.ToString("yyMMddHHmmss");
                    k += Mod10AlaFurs(k);

maticx46 ::

MH0 je izjavil:


string k = BigInteger.Parse("0" + rs.ZKI, NumberStyles.HexNumber).ToString().PadLeft(39, '0') + Global.Davcna + dt.Value.ToString("yyMMddHHmmss");
k += Mod10AlaFurs(k);



Hvala lepa, se še matram.

ALi mi lahko pošlješ še Mod10AlaFurs, vidim, da imaš lepo spedenano.

:)

DamijanD ::

V preverjanje / morebitno pomoč:

Račun z obratno davčno vrednostjo: znesek v ReverseVATTaxableAmount, VAT je prazen

Račun s posebnimi davčnimi ureditvami (preprodaja v turističnih agencijah ipd.): znesek v SpecialTaxRulesAmount, VAT je prazen

Račun, ki je za dobavo v EU članice ali je oproščen davka po 94. členu: znesek v ExemptVATTaxableAmount, VAT je prazen

"Navadni" računi:
Nezavezanci: VAT je napolnjen z uporabljenimi davčnimi stopnjami (realno je prazen - postavke na računu naj bi bile z 0% DDV stopnjo)
Zavezanci: VAT je napolnjen z uporabljenimi davčnimi stopnjami

MH0 ::

maticx46 je izjavil:


ALi mi lahko pošlješ še Mod10AlaFurs, vidim, da imaš lepo spedenano.

:)

        private string Mod10AlaFurs(string s) {
            int n = 0;
            for(int i = s.Length - 1; i >= 0; i--) n += (Convert.ToInt32(s[i]) - 48);
            return (n % 10).ToString();
        }

pubi1 ::

Živijo,

ima kdo XML primer naknadnega potrjevanja? vem, da je potrebno dodati oznako SubsequentSubmit, ampak ali je potrebno tudi navajati ostale tage, ki so obvezni pri spremembi računa? (ne vem, ali se naknadno potrjevanje smatra kot sprememba).

Vprašanje je tudi, kateri časi se pošiljajo? Ali se čas v XML-u popravi na čas ponovnega potrjevanja, al ostane čas računa?

DusanU ::

BT tiskanje iz WIN 10

Ali še koga muči tiskanja na mobilne BT tiskalnike s protokolom SPP 1.1 iz Windows 10, pri MS so namreč pri win 10 odrezali ta protokol in zahtevajo novejšo verzijo. (vsaj na nekaterih verzijah win10 je tako)

Ima kdo kakšno rešitev, razen povratka na win 8.1?

DamijanD ::

pubi1 je izjavil:

Živijo,

ima kdo XML primer naknadnega potrjevanja? vem, da je potrebno dodati oznako SubsequentSubmit, ampak ali je potrebno tudi navajati ostale tage, ki so obvezni pri spremembi računa? (ne vem, ali se naknadno potrjevanje smatra kot sprememba).

Vprašanje je tudi, kateri časi se pošiljajo? Ali se čas v XML-u popravi na čas ponovnega potrjevanja, al ostane čas računa?


Jaz mislim, da samo dodaš ta flag - vse ostalo ostane isto

PrimozHisof ::

 racun s kao nepravilno kodo

racun s kao nepravilno kodo


 aplikacija PREVERI RACUN

aplikacija PREVERI RACUN


kdo ve zakaj aplikacija PREVERI RAČUN javi napako:

Skeniranje računa ni bilo uspešno.
Koda ni pravilno sestavljena


podatke pa prebere pravilno

aplikacija PREVERI KODO pa ne javi napake!

srečno novo leto vsem

Zgodovina sprememb…

perci ::

Tale račun je čist legit - meni skeniranje deluje OK.

Je pa res, da tale app med povezovanjem na strežnik v ozadju javlja, da skeniranje računa ni bilo uspešno. Ko se poveže in pridobi podatke, ti pa javi njegove podatke. Meni je recimo javil, da je račun že bil preverjen.

Po mojem si imel slabe internete.

kranjcb ::

kranjcb je izjavil:

Mene pa zanima sledeč scenaril:

Imamo neko storitev/artikel z vrednostjo 200€ (od tega 40€ DDV-ja).

1. če je izdan avansni račun (predplačilo): 100€ (od tega 20€ DDV) (tega smo tudi prijavili FURS-u)
V račun kjer "poračunamo" ta avansni račun:
InvoiceAmount = 100 (100 € je bilo že plačano po avansnem računu)
PaymentnAmount = 100
DDV (TaxesPerSeller/VAT) = 20 (20€ DDV-ja je že bilo plačanega po avansnem računu)

2. če smo dobili predplačilo 100€ (ala akontacija/varščina) in ni bil izdan avansni račun
V račun vpišemo:
InvoiceAmount = 200
PaymentnAmount = 100 (100€ smo dobili po predplačilu)
DDV (TaxesPerSeller/VAT) = 40

3. V primeru da ni davčni zavezanec:
DDV (TaxesPerSeller/VAT) izpustimo
ExemptVATTaxableAmount = vrednost računa (InvoiceAmount)

Ali je tole pravilno (vse 3 tokče)? Iz FURS-a sem dobil le neke generične odgovore ...


Sem dobil odgovore v FAQ-jih. So včeraj dodal tak primer not... Zgleda da je treba periodično gledat te FAQ-ju...

shadow7 ::

PrimozHisof je izjavil:

racun s kao nepravilno kodo



Po občutku imaš premalo beline okrog kode. Predpisan minimum je 4 module. Pri 12 mm QR kodi je to 2 mm (1,92 mm).

Zgodovina sprememb…

  • zavaroval slike: Mavrik ()

perci ::

Tudi, če je to res, ni to bil problem. Tale skrinšot se da čist lepo poskenirat in ne javi napake.

HighMoon ::

PrimozHisof je izjavil:

 racun s kao nepravilno kodo

racun s kao nepravilno kodo


kdo ve zakaj aplikacija PREVERI RAČUN javi napako:

Skeniranje računa ni bilo uspešno.
Koda ni pravilno sestavljena


podatke pa prebere pravilno

aplikacija PREVERI KODO pa ne javi napake!

srečno novo leto vsem


Napaka ti je "v napaki".
Tvoja QR koda je izrajena z napakom "L", in po tehničkim specifikacijam mora biti izrajena z napakom "M"

Zgodovina sprememb…

  • spremenil: HighMoon ()

DamijanD ::

stupid xml error

Zgodovina sprememb…

  • spremenilo: DamijanD ()

blich ::

Ima še kdo izkušnje s tem da je strežnik FURS preobremenjen in sem pa tja kakšen račun ne dobi EOR-ja. V teh parih dneh testiranja približno 2-5 računov na 1000 ostane brez EOR.
Ko jih naknadno še enkrat potrdim pa pridobim EOR brez problema.

Kako ste vi to rešili? Imate kakšne scheduled cronjobe ali kaj podobnega, da časovno potrjujete neuspešne izdane račune? Razmišljal sem tudi, da bi rešil malo bolj po češko in bi račun, ki ne dobi EOR zaradi neuspešne povezave s FURSOM počakal kakšno sekundo dve in še enkrat poskusil potrditi. Seveda bi naštimal counter, da bi to recimo samo še enkrat ob neuspešnem poskusu naredil, da ne zaciklam reči.

VKR77 ::

"približno 2-5 računov na 1000 ostane brez EOR", reklo bi se prosječno idealna fiskalizacija. U praksi treba očekivati kod loših GSM veza i obrnuto, nekoliko fiskaliziranih od tisuču.
Naravno da moramo uvijek gledati najbolje riješenje da ne zagušimo sustav i svaki prijedlog u tom smjeru je dobro došao.

Ideje radi kako smo mi to pokušali riješiti:
- Šaljemo tri puta u prvom pokušaju, sa zadrškom od nekoliko sekundi. Ovo smo uveli najviše jer u sezonskim vršnim opterečenjima često dobivamo null exceptions.
- Postoji error icon sa porukom, koja se pojavljuje kada ima ne fiskaliziranih računa. Tu se može i ručno pokrenuti postupak za dobivanje EOR-a.
- U drugom tasku svake minute se šalje jedan (prvi) račun koji je ostao bez EOR-a.
- Svakih 20 minuta provjeravamo da li je pristigao koji zaostali EOR.
- Svaki sat pokrečemo servis u neovisnom tasku, koji uz ostalo i fisklazira zaostale račune iz arhive.
- Na kraju dana nudimo fiskalizaciju posebno dnevnih i arhivskih ne fiskaliziranih računa. U koliko je tih računa previše nudimo opciju odustajanja.
- Po danima u arhivi nudimo ručno pokretanje fiskalizacije.

Koji puta kod lošeg interneta, ili računalo nije upaljeno, ni ovo nije dovoljno. Tu su još isključenja interneta i kvarovi..

gapipro1 ::

Super app je tale "Preveri Račun".

Glede na to da so na netu dostopne davčne številke lahko enostavno preverimo koliko računov so že potrdili.

POST: https://blagajne.fu.gov.si/v1/mobile_cr...

Fajn =)

AndraZK ::

Ali kdo ve postopek, ki ga mora zavezanec narediti, če internetna povezava ne dela več kot 2 dni? Nekam bi moral javiti opravičilo, oziroma dokazilo o reševanju težav na nivoju operaterja... Kam in kakšno opravičilo/dokazilo je to?

Telekom in Telemach ne uredita povezave z napako prijavljeno že 31.12.2015. Dva delovna dneva po nastali napaki sta torej ponedeljek in torek. Jutri pa sem potem v ilegali :)
The Matrix Has Me...
««
18 / 27
»»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne - PHP

Oddelek: Programiranje
116241 (1287) vsepocenv
»

C# davčno potrjevanje

Oddelek: Programiranje
164485 (3954) windigo
»

E-račun

Oddelek: Programiranje
217584 (4347) ivanhoe5x
»

PHP davčna blagajna

Oddelek: Programiranje
188187 (6211) brble
»

[JAVA] HTTPS client

Oddelek: Programiranje
173197 (1927) peterv6i

Več podobnih tem