Import Tranzactii din XML¶
Fisiere XML pentru scrierea in Registre de Contabilitate¶
I. 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); |