Expense XML-fil importspecifikation

Detta är en kort beskrivning av xml-filformatet som används för att importera data från ett externt system till Expense.

Revision 1.3, april 2024


1.0 Ursprunglig version
1.1 Datum och tid anges i ISO 8601-formatet
  • Ny tagg: Person_InternalAccountDataDefault
  • Ny tagg: WorkingHours
  • Ny tagg: AllowableAmounts
  • Ny tagg: ChartOfAccounts
  • Ny tagg: Person_Reviewer

1.2 Ny tagg: SsoToken
1.3 Nya personfält: AddressLine1, AddressLine2, PostalCode, City, Country och SSN

XML-filen

XML-filen kan innehålla följande objekt: personer, personroller, interna kontodata, löner, arbetstider och relationer mellan dessa objekt.

XML-filen är kodad i utf-8.

  • Datum och tid anges i ISO 8601-formatet:
  • Datum är formaterade som "ÅÅÅÅ-MM-DD" där ÅÅÅÅ anger året, MM anger månaden och DD anger dagen. (Exempel: "2015-08-14".)
  • Tiden är formaterad som "hh:mm:ss" där hh anger timmen, mm anger minuten och ss anger sekunden. (Exempel: "06:01:23".)
  • DateTime formateras som "ÅÅÅÅ-MM-DDThh:mm:ss". (Exempel: "2015-08-14T06:01:23".)

Exempel:

<?xml version="1.0" encoding="utf-8"?>

<DataImport xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="https://api.dicomkontera.se/Schemas/Dicom.Expense.Import.1.3.xsd">

(File header)

(Import data)

</DataImport>

Filrubrik

Filrubrik, som innehåller metadata om importen.

FileId-attributet är ett godtyckligt unikt id per filexport, t.ex. en GUID.

<FileHeader fileType="DataImport" fileId="{guid}">

Hemlig token tillhandahållen av Expense.

<Token>{secretToken}</Token>

Unikt ID för företaget, t.ex. Momsregistreringsnummer.

<DeliveryId>{VAT-number}</DeliveryId>

Företagsvänligt namn.

<Företagsnamn>{companyName}</CompanyName>

Filformatets version.

<SchemaVersion>dicom_expense_1.3</SchemaVersion>

Datum och tid då filen skapades i ISO 8601-format.

<DateGenerated>2015-08-14T06:01:23</DateGenerated>

Det godtyckliga ID och namn på avsändaren.

<Sender senderId="EXMPLAB">Exempelföretaget AB</Sender> </FileHeader>

FullSync-attributet

Om attributet fullSync är satt till "false" (på taggar som stöder detta attribut), kommer endast poster som refereras till i filen att uppdateras. Om inställt på "true" kommer alla poster som det inte hänvisas till att inaktiveras. Endast tidigare importerade poster kommer att påverkas (dvs. poster som skapats manuellt i Expense kommer inte att redigeras eller inaktiveras av denna import). Ett undantag är för personer som kommer att försöka matcha osynkroniserade personer med e-postadressen.

Använder CDATA för att undvika specialtecken.

Det rekommenderas att använda CDATA-taggen för att undvika specialtecken som < > och &, i textblock där dessa kan förekomma. Detta görs genom att infoga texten i CDATA-taggen. Ett exempel ges i avsnittet Personroller.

<![CDATA[Text needed to be escaped, like firstName or Description]]>

Synkroniseringsnycklar

Alla objekt utom relationer behöver en unik nyckel som måste finnas kvar vid efterföljande importer och som aldrig återanvänds av ett annat objekt. Denna nyckel används för att lokalisera rätt objekt i Expense, för synkronisering. Om nyckeln ändras kommer systemet att betrakta det som ett nytt objekt och en ny post kommer att skapas i Expense. Om en annan post återanvänder samma nyckel kommer en felaktig synkronisering att resultera. Denna nyckel är godtycklig och kan vara en GUID eller en primärnyckel från den exporterande databasen. Vi rekommenderar att du inte använder e-post eller annan data som från början kan verka unik men som potentiellt kan återanvändas av en annan person i framtiden.

Obs: I beskrivningarna nedan finns nycklar som exempel (t.ex. "P23" för person). I en verklig import måste de ersättas med lämplig nyckel för protokollet.

Obs: I beskrivningarna nedan finns nycklar som exempel (t.ex. "P23" för person). I en verklig import måste de ersättas med lämplig nyckel för protokollet.

Interna kontodata

Attributet internalAccountPrimaryKey måste matcha den numeriska primärnyckeln för det interna kontot (t.ex. projekt, anställda och avdelningar) i Expense.

Attributet internalAccountDataId är en godtycklig unik nyckel som ges till varje internt kontodataobjekt. Denna nyckel får aldrig ändras för samma interna kontodata och får inte återanvändas av ett annat objekt. Det kan vara en GUID eller primärnyckeln från den exporterande databasen.

<InternalAccountsData fullSync="false">

<InternalAccountData internalAccountDataId="IAD1"

internalAccountPrimaryKey="1" state="active">

<InternalAccountDataCaption>Project 1</InternalAccountDataCaption>

<InternalAccountDataCode>PRO-0001</InternalAccountDataCode>

</InternalAccountData>

</InternalAccountsData>

Personroller

Attributet personRoleId är en godtycklig unik nyckel som ges till varje personrollobjekt. Denna nyckel får aldrig ändras för samma personroll och får inte återanvändas av ett annat objekt. Det kan vara en GUID eller primärnyckeln från den exporterande databasen.

<PersonRoles fullSync="false">

<PersonRole personRoleId="PR1" state="active">

<PersonRoleName>Person role one</PersonRoleName>

<Description><![CDATA[Description for person role one]]></Description>

</PersonRole>

</PersonRoles>

Personer

Attributet personId är en godtycklig unik nyckel som ges till varje personobjekt. Denna nyckel får aldrig ändras för samma person och får inte återanvändas av ett annat objekt. Det kan vara en GUID eller primärnyckeln från den exporterande databasen.

Om personen med personId=”P23” inte existerar kommer den att försöka hitta en motsvarande person via e-postadressen, som inte redan är synkroniserad, innan en ny person skapas.
EmployeeNumber, EmployeeCode och SsoTokens är valfria.

SsoTokens används för enkel inloggning. För att inaktivera en token, ställ in det valfria attributtillståndet till inaktivt.

Attributet idp är identitetsleverantören och tillhandahålls från Dicom Expense AB. Attributet nameId är nameId-anspråket som ingår i saml-biljetten, som används för att identifiera användaren i påstående konsumenttjänsten.

<Persons fullSync="false">

<Person personId="P23" state="active">

<FirstName>Kalle</FirstName>

<LastName>Andersson</LastName>

<EmployeeNumber>007</EmployeeNumber>

<EmployeeCode>KAAN</EmployeeCode>

<EmailAddress>kalle@exempelbolaget.se</EmailAddress>

<AddressLine1>Person Street 17</AddressLine1>

<AddressLine2>Person Neighboor and Local</AddressLine2>

<PostalCode>1234-5678</PostalCode>

<City>Stockholm</City>

<Country>Sweden</Country>

<SSN>12345678910</SSN>

<SsoTokens>

<Saml idp="DIMuG53auwH" nameId="vO56196zbc28ac7eRRd3df1wb1" state=”active|inactive” />

</SsoTokens>

</Person>

</Persons>

Diagram av konto

Attributnumret är kontonumret. Det valfria attributet moms är momskoden för kontoplanen – om det utelämnas kommer momsen att väljas manuellt. Den här taggen lägger bara till nya, eller uppdaterar befintliga, poster. Det tar inte bort poster. Om moms anges, och det inte finns, kommer det att skapas.

<ChartOfAccounts>

<Account number="5410" vat="25">

<AccountName><![CDATA[Förbrukningsinventarier]]></ AccountName>

<SortOrder><![CDATA[Förbrukningsinventarier]]></SortOrder>

<Description />

</Account>

</ChartOfAccounts>

Arbetstimmar

(Denna tagg används endast med modulens restidskompensation)

Definierar arbetstiden per vardag för en person. Attributet fromDate anger från vilket datum schemat är aktivt. Flera poster per veckodag är tillåtna. Det valfria attributet toDate används när ett arbetsveckoschema är tillfälligt och bör utelämnas om det är en permanent ändring.

De valfria attributen recurrenceFactor och recurrenceOffset används för att alternera tid mellan veckor. Den här taggen lägger bara till nya, eller uppdaterar befintliga, poster. Det tar inte bort poster.

<WorkingWeeks>

<WorkingWeek fromDate="2015-08-03" personId="P23">

<Monday fromTime="08:00:00" toTime="17:00:00" recurrenceFactor="2" recurrenceOffset="0" />

<Monday fromTime="08:00:00" toTime="12:00:00" recurrenceFactor="2" recurrenceOffset="1" />

<Tuesday fromTime="08:00:00" toTime="17:00:00" />

<Wednesday fromTime="08:00:00" toTime="17:00:00" />

<!-- … -->

</WorkingWeek>

</WorkingWeeks>

Tillåtet belopp

(Denna tagg används endast med modulens restidskompensation)

Definierar månadslönen för en person. Attributet fromDate anger det datum från vilket denna lön är aktiv. Den här taggen lägger bara till nya, eller uppdaterar befintliga, poster. Det tar inte bort poster. Attributet Belopp är hela beloppet, inklusive relevanta förmåner och bonusar.
Attributet salaryType kan vara "månadsvis" eller "timme".

<AllowableAmounts>

<Salary fromDate="2015-06-01" amount="27500" personId="P23" salaryType="monthly" />

</AllowableAmounts>

Relationer


Relationer är inslagna i Relations-taggen.

<Relations fullSync="true">

(Relationsdata)

</Relationer>


Relation mellan internkontodata och personroller.

<InternalAccountData_PersonRole internalAccountDataId="IAD123" personRoleId="PR3" state="active"></InternalAccountData_PersonRole>


Samband mellan kontoplan och personroller.
Om kontoplanen saknas i Expense kommer den att läggas till med ”(Okänt)” som kontonamn.

<ChartOfAccount_PersonRole chartOfAccountNumber="4020" personRoleId="PR3" state="active"></ChartOfAccount_PersonRole>


Om kontoplanen saknas i Expense kommer den att läggas till med ”(Okänt)” som kontonamn.

<InternalAccountData_PersonRole internalAccountDataId="IAD123" personRoleId="PR3" state="active"></InternalAccountData_PersonRole>


Om kontoplanen saknas i Expense kommer den att läggas till med ”(Okänt)” som kontonamn.

<ChartOfAccount_PersonRole chartOfAccountNumber="4020" personRoleId="PR3" state="active"></ChartOfAccount_PersonRole>


Relation mellan personer och personroller.

<Person_PersonRole personId="P23" personRoleId="PR2" state="active"></Person_PersonRole>


Förhållande mellan kontoplan och personer.
Om kontoplanen saknas i Expense kommer den att läggas till med ”(Okänt)” som kontonamn.

<ChartOfAccount_Person chartOfAccountNumber="4020" personId="P23" state="active"></ChartOfAccount_Person>


Förhållandet mellan internkontodata och personer.

<InternalAccountData_Person internalAccountDataId="IAD123" personId="P23" state="inactive"></InternalAccountData_Person>


Relation mellan personer och intygande personer/godkännare.
Godkänn auktorisering kommer automatiskt att läggas till intygspersonen/godkännaren om den saknas.

<Person_AttestPerson personId="P23" attestPersonId="P1" state="active"></Person_AttestPerson>


Relation mellan personer och granskare.
Granskningsauktorisering läggs automatiskt till granskaren om den saknas.

<Person_Reviewer personId="P23" reviewerPersonId="P1" state="active"></Person_Reviewer>


Valfri relation mellan personer och ett standardval av internt kontodata. Om den interna kontoinformationen endast ska vara ett förslag och därmed kan ändras av personen, ställ in attributet låst till false. Om det är obligatoriskt och inte bör ändras, ställ in låst till sant.

<Person_InternalAccountDataDefault internalAccountDataId="IAD123" personId="P23"
locked="false"></Person_InternalAccountDataDefault>

Ladda upp filen

Filen laddas upp med en konventionell POST till https://api.dicomkontera.se/File/Import

Klienten autentiseras med en standard HTTP Basic Authentication.

Filnamnet test.txt kan användas för att testa anslutningen; alla filer med detta namn ignoreras av importtjänsten. Filnamnet är annars godtyckligt, men formatet företagsnamn.xml är att föredra för tydlighetens skull.

Ett exempel, med hjälp av cURL:

curl -u användarnamn:lösenord --form upload=@test.txt https://api.dicomkontera.se/File/Import -k

VIKTIGT: "–k" switch gör att cURL ignorerar certifikatfel, den bör utelämnas om möjligt. Konfiguration av cURL ligger utanför ramen för detta dokument.

Autentiseringsuppgifter och inställningar

För att begära installation/konfiguration av servern och för att få autentiseringsuppgifter (användarnamn, lösenord och säker token), vänligen kontakta Expense.