Import Tranzactii din XML

Fisiere XML pentru scrierea in Registre de Contabilitate

I. Schema xsd

Schema xsd.

II. Exemple:

Tag-ul <transaction> - contine antetul tranzactiei, cu urmatoarele atribute:

year = anul fiscal pe care se inregistreaza tranzactia (obligatoriu)

period = perioada fiscala pe care se inregistreaza tranzactia (obligatoriu)

register = registrul contabil (obligatoriu)

documentCode = codul documentului: factura, chitanta, nota de contabilitate (obligatoriu)

documentSeries = seria documentului

documentNumber = numarul documentului (obligatoriu)

documentDate = data documentului; nu este obligatoriu sa apartina perioadei fiscale pe care se introduce tranzactia (obligatoriu)

effectDate = data efectiva - apartine obligatoriu perioadei fiscale pe care se inregistreaza documentul in contabilitate (obligatoriu)

convDate = data conversiei - data la care se calculeaza cursul pentru moneda tranzactiei. Se propune cu valoarea din Data doc (documentDate)

currencyCode =moneda tranzactiei (LEI, USD, EURO etc.) (obligatoriu)

reference = referinta - observatii referitoare la documentul curent, completate de utilizator

explanation = explicatia operatiunii, la dispozitia utilizatorului

transactionId = identificator unic al tranzactiei (obligatoriu)

erpTransactionId = numarul tranzctiei generat in ordtranz

Exemplu:

<transaction year=”2017” period=”8” register=”110” transactionId=”288” documentCode=”NC” documentNumber=”6790” documentSeries=”AZ” documentDate=”2017-08-31” effectDate=”2017-08-31” currencyCode=”RON” reference=”REF” explanation=”Tranzactie de test”> (tagul generat in metoda addTransaction)


Tag-ul <formula> - in tag-ul <transaction>, se pot adauga mai multe tag-uri <formula>, cu urmatoarele atribute:

no = numarul formulei in cadrul tranzactiei. Intr-o tranzactie nu pot exista doua formule cu acelasi numar (obligatoriu)

buCode = codul business unit-ului; Business Unit-ul reprezinta o structura arborescenta a responsabilitatilor de management si/sau necesitati de raportare (bilant, cont de profit si pierdere, cash flow, balanta de verificare - contabilitate in partida dubla descentralizata) (obligatoriu)

Exemplu:

<formula no=”1” buCode=”05”>


Tag-ul <line> - in tag-ul <formula>, se pot adauga mai multe tag-uri <line>, cu urmatoarele atribute:

no = numarul liniei in cadrul formulei. Intr-o formula nu pot exista doua linii cu acelasi numar (obligatoriu)

dc = tipul sumei culese la nivelul contului curent: DEBITOR/CREDITOR (obligatoriu)

accountCode = simbolul (codul) contului (contabil) (obligatoriu)

transAmount = Debit/Credit in valuta tranzactiei. Daca nu este completat, se va pune suma in moneda de baza (obligatoriu)

baseAmount = Debit/Credit in valuta de baza. Daca nu este completat, se va pune suma in moneda tranzactiei (obligatoriu)

consAmount = Debit/Credit in valuta de consolidare. Daca nu este completat, se va calcula in functie de moneda de consolidare

refAmount = Debit/Credit in valuta de referinta. Daca nu este completat, se va calcula in functie de moneda de referinta

fundCode = codul fondului; Fondul este un instrument de management financiar; Poate fi asociat unui scop, unui proiect sau unui obiectiv de realizat, unei structuri, unei activitati, subactivitati eventual combinate cu BU sau nivele de raportare. Se completeaza doar daca domeniul este null

financialSource = codul sursei de finantare asociata tranzactiei; Se completeaza daca domeniul este null si contul este debitor, iar managementul financiar trebuie sa fie in una din valorile: FINANTARE, BUGETARE,ANGAJARE_APROB,ANG_BUGETARE,ANGAJARE_ANGAJ,CONTRACTARE,DREPTURI sau daca domeniul este mijloace fixe sau stocuri, managementul financiar „Receptie” si contul debitor

budgetaryItem = codul articolului de buget asociat tranzactiei. Se completeaza daca domeniul este null si managementul financiar are una dintre valorile: BUGETARE, ANGAJARE_APROB, ANG_BUGETARE, ANGAJARE_ANGAJ, CONTRACTARE si contul este debitor sau daca domeniul este Mijloace fixe sau Stocuri, managementul financiar: RECEPTIE si contul debitor

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

Exemplu:

<line no=”1” dc=”DEBITOR” accountCode=”628.DIS” transAmount=”1200” baseAmount=”1200”>

Notă

In cadrul tag-ului <line>, se pot adauga tag-uri pentru domenii:

1. Domeniul VENITURI, pentru conturi cu domeniul VE; are urmatoarele atribute:

zoneCode = codul zonei de cheltuiala care a inregistrat venitul (obligatoriu)

bearerCode = codul purtatorului din cadrul zonei pe care s-a inregistrat venitul(obligatoriu)

transAmount = suma inregistrata ca a venit in valuta tranzactiei (obligatoriu)

baseAmount = suma inregistrata ca a venit in valuta de baza (obligatoriu)

consAmount = suma inregistrata ca a venit in valuta de consolidare

refAmount = suma inregistrata ca a venit in valuta de referinta

fundCode = codul fondului asociat venitului

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata venitului

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

Exemplu:

<domainVE zoneCode=”50616” bearerCode=”05.99.616” transAmount=”1200” baseAmount=”1200”></domainVE>


2. Domeniul COSTURI, pentru conturi cu domeniul CS; are urmatoarele atribute:

zoneCode = codul zonei de cheltuiala pe care se inregistreaza costul/cheltuiala (obligatoriu)

bearerCode = codul purtatorului din cadrul zonei pe care s-a inregistrat costul/cheltuiala (obligatoriu)

orderNumber = numarul comenzii de lucru in cazul in care purtatorul de cheltuiala are metoda „Pe comenzi”

transAmount = suma in moneda tranzactiei (obligatoriu)

baseAmount = suma in moneda de baza (obligatoriu)

consAmount = suma in moneda de consolidare

refAmount = suma in moneda de referinta

fundCode = codul fondului asociat costului

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata costului

budgetaryItem = codul articolului bugetar asociat costului

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

Exemplu:

<domainCS zoneCode=”50616” bearerCode=”05.99.616” transAmount=”1200” baseAmount=”1200”></domainCS>


3. Domeniul CLIENTI, pentru conturi cu domeniul CL; are urmatoarele atribute:

partnerCode = codul clientului pentru care se inregistreaza factura/incasarea (obligatoriu)

operationType = operatia privind inregistrarea clientului, in sarcina utilizatorului „FACT”-pentru facturi; „INCAS”-pentru incasari (obligatoriu)

transAmount = suma debitoare/creditoare in valuta tranzactiei (obligatoriu)

baseAmount =suma debitoare/creditoare (in valuta de baza (obligatoriu)

fundCode = codul fondului asociat clientului

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata clientului

documentCodeCL = codul documentului

documentSeriesCL = seria documentului

documentNumberCL = numarul documentului

documentDateCL = data documentului

Exemplu:

<domainCL partnerCode=”PART01” operationType=”FACT” dueDate=”01-03-2021” transAmount=”1200” baseAmount=”1200”></domainCL>


4. Domeniul FURN, pentru conturi cu domeniul FU; are urmatoarele atribute:

partnerCode = codul furnizorului pentru care se inregistreaza factura/plata (obligatoriu)

operationType = operatia privind inregistrarea furnizorului, in sarcina utilizatorului (FACT - facturare, PLATA - plati) (obligatoriu)

transAmount = suma debitoare/creditoare in valuta tranzactiei (obligatoriu)

baseAmount = suma debitoare/creditoare in valuta de baza (obligatoriu)

fundCode = codul fondului asociat furnizorului

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata furnizorului

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentCodeFU = codul documentului

documentSeriesFU = seria documentului

documentNumberFU = numarul documentului

documentDateFU = data documentului

Exemplu:

<domainFU partnerCode=”PART01” operationType=”FACT” dueDate=”01-03-2021” transAmount=”1200” baseAmount=”1200”></domainFU>


5. Domeniul INCASARI, pentru conturi cu domeniul IP, culese pe debit; are urmatoarele atribute:

zoneCode = codul zonei de cheltuiala pentru care s-a realizat incasarea

bearerCode = codul purtatorului din cadrul zonei pe care s-a inregistrat incasarea

collectionType = tipul de lista rezervata pentru „Tip incasari” („IN”) (obligatoriu)

transAmount = suma incasata in valuta tranzactiei (obligatoriu)

baseAmount = suma incasata in valuta de baza (obligatoriu)

vecs = tipul clasificatiei: VE, CS, SD, ST (obligatoriu)

fundCode = codul fondului asociat incasarii

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata incasarii

budgetaryItem = codul articolului bugetar asociat incasariioperation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentCodeIN = codul documentului de incasare

documentSeriesIN = seria documentului de incasare

documentNumberIN = numarul documentului de incasare

documentDateIN = data documentului de incasare

Exemplu:

<domainIN zoneCode=”50616” bearerCode=”05.99.616” collectionType=”” transAmount=”1200” baseAmount=”1200” vecs=””></domainIN>


6. Domeniul PLATI, pentru conturi cu domeniul IP, culese pe credit; are urmatoarele atribute:

zoneCode = codul zonei de cheltuiala pentru care s-a realizat plata

bearerCode = codul purtatorului din cadrul zonei pe care s-a inregistrat plata

collectionType = tipul de lista rezervata pentru „Tip plata” („PL”) (obligatoriu)

transAmount = suma platita in valuta tranzactiei (obligatoriu)

baseAmount = sumaplatita in valuta de baza (obligatoriu)

fundCode = codul fondului asociat platii

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata platii

budgetaryItem = codul articolului bugetar asociat platii

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentCodePL = codul documentului de plata

documentSeriesPL = seria documentului de plata

documentNumberPL = numarul documentului de plata

documentDatePL = data documentului de plata

Exemplu:

<domainPL zoneCode=”50616” bearerCode=”05.99.616” collectionType=”” transAmount=”1200” baseAmount=”1200”></domainPL>


7. Domeniul ANALITICE DINAMICE, pentru conturi cu domeniul AD; are urmatoarele atribute:

transAmount = suma debitoare/creditoare in valuta tranzactiei

baseAmount = suma debitoare/creditoare in valuta de baza

consAmount = suma debitoare/creditoare in valuta de consolidare

refAmount = suma debitoare/creditoare in valuta de referinta

analitycCode1 = coduri din lista de tip 1, cand lista 1 face parte din listele diverse nerezervate. Pot fi parteneri,beneficiari, marci

analitycCode2 = coduri din lista de tip 2, cand lista 2 face parte din listele diverse nerezervate. Pot fi parteneri,beneficiari, marci

analitycCode3 = coduri din lista de tip 1, cand lista 1 face parte din listele diverse nerezervate. Pot fi parteneri,beneficiari, marci

fundCode = codul fondului asociat

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociata

budgetaryItem = codul articolului bugetar asociat

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentCodeAD = codul documentului

documentSeriesAD = seria documentului

documentNumberAD = numarul documentului

documentDateAD = data documentului

Exemplu:

<domainAD transAmount=”1200” baseAmount=”1200” analitycCode1=”” analitycCode2=”” analitycCode3=””></domainAD>


8. Domeniul JURNAL DE CUMPARARI, pentru conturi cu domeniul TC; are urmatoarele atribute:

partnerCode = codul de furnizor (obligatoriu)

taxCode = codul taxei TVA (obligatoriu)

VATCode = Cota TVA

baseTrans = baza de impozitare in valuta tranzactiei

VATTrans = valoare TVA in valuta tranzactiei

baseBase = baza de impozitare in valuta de baza

VATBase = valoare TVA in valuta de baza

totalBase = valoarea totala din actul fiscal in valuta de baza

totalTrans = valoarea totala din actul fiscal in valuta tranzactiei

fundCode = codul fondului asociat

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociate

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentSeriesTC = seria actului fiscal

documentNumberTC = numarul actului fiscal

documentDateTC = data actului fiscal

Exemplu:

<domainTC partnerCode=”PART001” taxCode=”19”></domainTC>


9. Domeniul JURNAL DE VANZARI, pentru conturi cu domeniul TV; are urmatoarele atribute:

partnerCode = cod cumparator (client) (obligatoriu)

taxCode = codul taxei TVA (obligatoriu)

VATCode = cota TVA

VATSystem = delimitare domenii TV (Colectat) si TN (Neexigibil), TE (Exigibil)

baseTrans = baza de impozitare in valuta tranzactiei

VATTrans = valoare TVA in valuta tranzactiei

baseBase = baza de impozitare in valuta de baza

VATBase = valoare TVA in valuta de baza

totalBase = valoarea totala din actul fiscal in valuta de baza

totalTrans = valoarea totala din actul fiscal in valuta tranzactiei

fundCode = codul fondului asociat

fundRate = cursul pentru fondul asociat

financialSource = codul sursei de finantare asociate

operation = operatia asociata contului

objectiv = denumirea scurta a obiectivului - se completeaza daca Fond are tipul „Investitional”

contract = contractul sau comanda furnizor

documentSeriesTV = seria actului fiscal

documentNumberTV = numarul actului fiscal

documentDateTV = data actului fiscal

Exemplu:

<domainTV partnerCode=”PART001” taxCode=”19”></domainTV>


III. API de trimitere /parsare java

1. Generarea Fisierlui

Notă

Pentru generarea automata a fisierului se apeleaza metodele din clasa TransactionWriter:

init (metoda in care se salveaza fisierul in calea specificata si care scrie partea initiala generala a oricarui fisier – primeste ca parametru calea fisierului si TimeZone-ul care daca este null se va seta cu cel default)

addTransaction – metoda care adauga tagul <transaction> si primeste ca parametru un obiect (TransactionObj) pe care se seteaza campurile din tranzactie.

addFormula – metoda care adauga tagul <formula> si primeste ca parametru un obiect (FormulaObj) pe care se seteaza campurile din formula

addLinie – metoda care adauga tagul <line> si primeste ca parametru un obiect (LineObj) pe care se seteaza campurile de pe linia tranzactiei

addDomainCS – metoda care adauga tagul <domainCS> si primeste ca parametru un obiect (DomainCSObj) pe care se seteaza campurile de pe domeniul Costuri

addDomainVE – metoda care adauga tagul <domainVE> si primeste ca parametru un obiect (DomainVEObj) pe care se seteaza campurile de pe domeniul Venituri

la final se apeleaza metoda close() care inchide toate tagurile ramase deschise.

Exemplu:

La rularea exemplului anterior se va obtine un fisier care va contine:

<?xml version=”1.0” encoding=”UTF-8”?>

<transactions xmlns=”http://static.prodinf.ro/xsd/fiTransactionsV1

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://static.prodinf.ro/xsd/fiTransactionsV1

http://static.prodinf.ro/xsd/fiTransactionsV1.xsd”> (aceasta este partea generata in metoda init)

<transaction year=”2017” period=”8” register=”110” transactionId=”288” documentCode=”NC” documentNumber=”6790” documentSeries=”AZ”

documentDate=”2017-08-31” effectDate=”2017-08-31” currencyCode=”RON” reference=”REF” explanation=”Tranzactie de test”> (tagul generat in metoda addTransaction)

<formula no=”1” buCode=”05”> (tagul generat in metoda addFormula)

<line no=”1” dc=”DEBITOR” accountCode=”628.DIS” transAmount=”1200” baseAmount=”1200”> ( metoda addLine)

<domainCS zoneCode=”50616” bearerCode=”05.99.616” transAmount=”1200” baseAmount=”1200”

financialSource=”VENITURI_PROPRII” budgetaryItem=”CHELT_PREST_FILIALE”>

</domainCS> (addDomainCS)

</line> <line no=”2” dc=”DEBITOR” accountCode=”628.DIS” transAmount=”1200” baseAmount=”1200”> ( metoda addLine)

<domainCS zoneCode=”50616” bearerCode=”05.99.616” transAmount=”1200” baseAmount=”1200”

financialSource=”VENITURI_PROPRII” budgetaryItem=”CHELT_PREST_FILIALE”>

</domainCS> (addDomainCS)

</line>

</formula>

</transaction>

</transactions> (metoda close())

-dependinte necesare: apply plugin: «java» dependencies{

compile «com.squareup.okhttp3:okhttp:3.9.0»

}


2. Trimiterea Fisierului

Pentru testare a se folosi <base_erp_url>/EMSYS_FINANCIALS/testimport.jsp.

Prin utilizarea serviciilor REST – (pentru aplicatiile externe )

<base_erp_url>/EMSYS_FINANCIALS/services/rest/fitransactions/importxml

POST

tip :multipart/form-data

Parametrii:ERP_COMPANY_CODE …

xml -fisierul blob xml


3. Parsare fisier de raspuns API Java

Fisierul de raspuns poate fi parsat , iar campurile si mesajele de eroare care provin din fisierul de raspuns pot fi folosite ulterior in scopul dorit de utilizator (raport cu mesajele de err etc.) cu ajutorul obiectelor:

ResponseTransactionObj

ResponseFormulaObj

ResponseLineObj

ResponseDomainADObj

ResponseDomainVEObj…

clasa: TransactionsReader(In aceasta clasa se citeste fisierul de response, iar mesajele de eroare sunt puse pe obiectele enumerate anterior)

Se foloseste interfata ParserCallBack ce contine metodele:

public void onTransactionOk(ResponseTransactionObj obj);

public void onTransactionErr(ResponseTransactionObj obj);

public void onFormulaErr(ResponseFormulaObj obj);

public void onLineErr(ResponseLineObj obj);

public void onDomainADErr(ResponseDomainADObj obj);

public void onDomainVEErr(ResponseDomainVEObj obj);

public void onDomainCSErr(ResponseDomainCSObj obj);

public void onDomainTCErr(ResponseDomainTCObj obj);

public void onDomainTVErr(ResponseDomainTVObj obj);

public void onDomainCLErr(ResponseDomainCLObj obj);

public void onDomainFUErr(ResponseDomainFUObj obj);

public void onDomainINErr(ResponseDomainINObj obj);

public void onDomainPLErr(ResponseDomainPLObj obj);