diff --git a/reports/sepa/deprecated/sepa-2.0.5-pl.old b/reports/sepa/deprecated/sepa-2.0.5-pl.old new file mode 100644 index 0000000..045ce81 --- /dev/null +++ b/reports/sepa/deprecated/sepa-2.0.5-pl.old @@ -0,0 +1,188 @@ +2024-01-11T14:31:52.923+01:00true2024-02-19T14:07:31.583+01:001a36c52d3-25bc-4c43-8c41-e90e2fd47432-1708348051587a36c52d3-25bc-4c43-8c41-e90e2fd474322$uniqueid$modelversion$workflowgroup$taskid$workflowsummaryinvoice.numberinvoice.dateinvoice.totalinvoice.currencycdtr.namecdtr.ibancdtr.bicdbtr.namedbtr.ibandbtr.bicpayment.typenumsequencenumberUTF-8SEPA export executed by the SepaScheduler. See the XSL definition for details. sepatype:"workitem" AND $taskid:5500 ReportEntity<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + version="2.0"> + <xsl:strip-space elements="*" /> + <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> + + <xsl:template match="/"> + <xsl:variable name="now" select="current-dateTime()" /> + + <Document + xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07 pain.001.001.07.xsd"> + <CstmrCdtTrfInitn> + + <!-- generate header info --> + <!-- compute count of invoices --> + <xsl:variable name="count" + select="count(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='$uniqueid']/value)" /> + <!-- compute total amount --> + <xsl:variable name="totalsum" + select="xs:decimal(sum(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='invoice.total']/value))" /> + <!-- round to 2 digits --> + <xsl:variable name="total" + select="xs:decimal(round-half-to-even($totalsum, 2))" /> + + <!-- shortcut for the sepa export document --> + <xsl:variable name="exportWorkitem" + select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" /> + + <GrpHdr> + <MsgId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + </MsgId> + <CreDtTm> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /> + </CreDtTm> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <InitgPty> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </InitgPty> + </GrpHdr> + + <PmtInf> + <PmtInfId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + <xsl:text>-1</xsl:text> + </PmtInfId> + <PmtMtd>TRF</PmtMtd> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <PmtTpInf> + <SvcLvl> + <Cd>SEPA</Cd> + </SvcLvl> + </PmtTpInf> + <ReqdExctnDt> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /> + </ReqdExctnDt> + <Dbtr> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </Dbtr> + <DbtrAcct> + <Id> + <IBAN> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> + </DbtrAcct> + <DbtrAgt> + <FinInstnId> + <BIC> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.bic']/value, ' ', '')" /> + </BIC> + </FinInstnId> + </DbtrAgt> + <!-- + SHAR – Charges are shared between debtor and creditor + SLEV – Charges are handled according to service level + --> + <ChrgBr>SHAR</ChrgBr> + <!-- generate CdtTrfTxInf for each invoice --> + <xsl:apply-templates + select="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]" /> + </PmtInf> + </CstmrCdtTrfInitn> + </Document> + </xsl:template> + + + <!-- This template builds sepa header info --> + <xsl:template + match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']"> + <!-- not in use --> + </xsl:template> + + + <!-- This template builds sepa payment info for each invoice --> + <xsl:template + match="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]"> + + <!-- round to 2 digits - geht nur mit sum funktion --> + <xsl:variable + name="wert1" + select="xs:decimal(sum(item[@name='invoice.total']/value))" /> + <xsl:variable name="wert2" + select="xs:decimal(round-half-to-even($wert1,2))" /> + <CdtTrfTxInf + xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> + <PmtId> + <EndToEndId>NOTPROVIDED</EndToEndId> + </PmtId> + <Amt> + <InstdAmt> + <xsl:attribute name="Ccy"><xsl:value-of + select="item[@name='invoice.currency']/value" /></xsl:attribute> + <!-- round to 2 digits --> + <xsl:value-of select="$wert2" /> + </InstdAmt> + </Amt> + <CdtrAgt> + <FinInstnId> + <BIC> + <xsl:value-of select="replace(item[@name='cdtr.bic']/value, ' ', '')" /> + </BIC> + </FinInstnId> + </CdtrAgt> + <Cdtr> + <!-- MAX70 --> + <Nm> + <xsl:value-of select="substring(item[@name='cdtr.name']/value, 1, 70)" /> + </Nm> + </Cdtr> + <CdtrAcct> + <Id> + <IBAN> + <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> + </CdtrAcct> + <RmtInf> + <!-- Max140Text --> + <Ustrd> + <xsl:choose> + <xsl:when test="string-length(item[@name='numsequencenumber']/value) > 0"> + <!-- neues format buchungsnummer / rechn.nr --> + <xsl:value-of + select="item[@name='numsequencenumber']/value" /><xsl:text> / </xsl:text><xsl:value-of + select="item[@name='invoice.number']/value" /> + </xsl:when> + <xsl:otherwise> + <!-- fallback --> + <xsl:value-of + select="substring(item[@name='$workflowsummary']/value, 1, 140)" /> + </xsl:otherwise> + </xsl:choose> + </Ustrd> + </RmtInf> + </CdtTrfTxInf> + + </xsl:template> + +</xsl:stylesheet>/office-alexander-logistics/reports/sepa/sepa-2.0.5.xsl \ No newline at end of file diff --git a/reports/sepa/pain.001.001.03.xsd b/reports/sepa/pain.001.001.03.xsd new file mode 100644 index 0000000..4f65ddc --- /dev/null +++ b/reports/sepa/pain.001.001.03.xsd @@ -0,0 +1,921 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reports/sepa/pain.001.001.07.xsd b/reports/sepa/pain.001.001.07.xsd new file mode 100644 index 0000000..8ee0f20 --- /dev/null +++ b/reports/sepa/pain.001.001.07.xsd @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reports/sepa/result_sepa01.xml b/reports/sepa/result_sepa01.xml index eb56545..4e7fb37 100644 --- a/reports/sepa/result_sepa01.xml +++ b/reports/sepa/result_sepa01.xml @@ -6,7 +6,7 @@ a8a5a0fa48bd49d4987dbda597c66055 - 2024-02-23T10:02:34 + 2024-02-26T11:07:43 2 136.87 @@ -23,7 +23,7 @@ SEPA - 2024-02-23 + 2024-02-26 Muster AG diff --git a/reports/sepa/result_sepa02.xml b/reports/sepa/result_sepa02.xml index 32e6124..3fedf86 100644 --- a/reports/sepa/result_sepa02.xml +++ b/reports/sepa/result_sepa02.xml @@ -1,12 +1,12 @@ - + xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd"> a8a5a0fa48bd49d4987dbda597c66055 - 2024-02-23T10:02:34 + 2024-02-26T11:15:26 2 136.87 @@ -23,7 +23,7 @@ SEPA - 2024-02-23 + 2024-02-26 Muster AG @@ -34,11 +34,11 @@ - OOBADEFFXXX + OOBADEFFXXX SHAR - + NOTPROVIDED @@ -47,7 +47,7 @@ - XXXADEMM + XXXADEMM @@ -62,7 +62,7 @@ Invoice Example-1 - + NOTPROVIDED @@ -71,7 +71,7 @@ - XXXADEMM + XXXADEMM diff --git a/reports/sepa/sepa-2.0.5-pl.imixs-report b/reports/sepa/sepa-2.0.5-pl.imixs-report index ff0fe30..c286aa1 100644 --- a/reports/sepa/sepa-2.0.5-pl.imixs-report +++ b/reports/sepa/sepa-2.0.5-pl.imixs-report @@ -1,374 +1,188 @@ - - - - 2024-01-11T14:31:52.923+01:00 - - - - - - true - - - 2024-02-21T12:40:56.424+01:00 - - - 1 - - - - - - a36c52d3-25bc-4c43-8c41-e90e2fd47432-1708515656428 - - - a36c52d3-25bc-4c43-8c41-e90e2fd47432 - - - 3 - - - - $uniqueid - - - - - - - $modelversion - - - - - - - $workflowgroup - - - - - - - $taskid - - - - - - - $workflowsummary - - - - - - - invoice.number - - - - - - - invoice.date - - - - - - - invoice.total - - - - - - - invoice.currency - - - - - - - cdtr.name - - - - - - - cdtr.iban - - - - - - - cdtr.bic - - - - - - - dbtr.name - - - - - - - dbtr.iban - - - - - - - dbtr.bic - - - - - - - payment.type - - - - - - - numsequencenumber - - - - - - - - - - - UTF-8 - - - SEPA export executed by the SepaScheduler. See the XSL - definition for details. - - - sepa - - - type:"workitem" AND $taskid:5500 - - - ReportEntity - - - <?xml version="1.0" encoding="UTF-8" - standalone="yes"?> - <xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:xs="http://www.w3.org/2001/XMLSchema" - version="2.0"> - <xsl:strip-space elements="*" /> - <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> - - <xsl:template match="/"> - <xsl:variable name="now" select="current-dateTime()" /> - - <Document - xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07" +2024-01-11T14:31:52.923+01:00true2024-02-26T11:30:39.426+01:001a36c52d3-25bc-4c43-8c41-e90e2fd47432-1708943439428a36c52d3-25bc-4c43-8c41-e90e2fd474324$uniqueid$modelversion$workflowgroup$taskid$workflowsummaryinvoice.numberinvoice.dateinvoice.totalinvoice.currencycdtr.namecdtr.ibancdtr.bicdbtr.namedbtr.ibandbtr.bicpayment.typenumsequencenumberUTF-8SEPA export executed by the SepaScheduler. See the XSL definition for details. sepatype:"workitem" AND $taskid:5500 ReportEntity<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + version="2.0"> + <xsl:strip-space elements="*" /> + <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> + + <xsl:template match="/"> + <xsl:variable name="now" select="current-dateTime()" /> + + <Document + xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07 - pain.001.001.07.xsd"> + xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd"> <CstmrCdtTrfInitn> - - <!-- generate header info --> - <!-- compute count of invoices --> - <xsl:variable name="count" - select="count(/data/document[starts-with(normalize-space(item[@name = - '$modelversion']/value),'rechnungseingang')]/item[@name='$uniqueid']/value)" /> - <!-- compute total amount --> - <xsl:variable name="totalsum" - select="xs:decimal(sum(/data/document[starts-with(normalize-space(item[@name = - '$modelversion']/value),'rechnungseingang')]/item[@name='invoice.total']/value))" - /> - <!-- round to 2 digits --> - <xsl:variable name="total" - select="xs:decimal(round-half-to-even($totalsum, 2))" /> - - <!-- shortcut for the sepa export document --> - <xsl:variable name="exportWorkitem" - select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = - 'SEPA-Export']" /> - - <GrpHdr> - <MsgId> - <xsl:value-of - select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> - </MsgId> - <CreDtTm> - <xsl:value-of - select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /> - </CreDtTm> - <NbOfTxs> - <xsl:value-of select="$count" /> - </NbOfTxs> - <CtrlSum> - <!-- round to 2 digits --> - <xsl:value-of select="$total" /> - </CtrlSum> - <InitgPty> - <Nm> - <xsl:value-of - select="$exportWorkitem/item[@name='dbtr.name']/value" /> - </Nm> - </InitgPty> - </GrpHdr> - - <PmtInf> - <PmtInfId> - <xsl:value-of - select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> - <xsl:text>-1</xsl:text> - </PmtInfId> - <PmtMtd>TRF</PmtMtd> - <NbOfTxs> - <xsl:value-of select="$count" /> - </NbOfTxs> - <CtrlSum> - <!-- round to 2 digits --> - <xsl:value-of select="$total" /> - </CtrlSum> - <PmtTpInf> - <SvcLvl> - <Cd>SEPA</Cd> - </SvcLvl> - </PmtTpInf> - <ReqdExctnDt> - <xsl:value-of - select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /> - </ReqdExctnDt> - <Dbtr> - <Nm> - <xsl:value-of - select="$exportWorkitem/item[@name='dbtr.name']/value" /> - </Nm> - </Dbtr> - <DbtrAcct> - <Id> - <IBAN> - <xsl:value-of - select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> - </IBAN> - </Id> - </DbtrAcct> - <DbtrAgt> - <FinInstnId> - <BICFI> - <xsl:value-of - select="replace($exportWorkitem/item[@name='dbtr.bic']/value, ' ', '')" /> - </BICFI> - </FinInstnId> - </DbtrAgt> - <!-- - SHAR – Charges are shared between debtor and creditor - SLEV – Charges are handled according to service level - --> - <ChrgBr>SHAR</ChrgBr> - <!-- generate CdtTrfTxInf for each invoice --> - <xsl:apply-templates - select="/data/document[starts-with(normalize-space(item[@name = - '$modelversion']/value),'rechnungseingang')]" /> - </PmtInf> + + <!-- generate header info --> + <!-- compute count of invoices --> + <xsl:variable name="count" + select="count(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='$uniqueid']/value)" /> + <!-- compute total amount --> + <xsl:variable name="totalsum" + select="xs:decimal(sum(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='invoice.total']/value))" /> + <!-- round to 2 digits --> + <xsl:variable name="total" + select="xs:decimal(round-half-to-even($totalsum, 2))" /> + + <!-- shortcut for the sepa export document --> + <xsl:variable name="exportWorkitem" + select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" /> + + <GrpHdr> + <MsgId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + </MsgId> + <CreDtTm> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /> + </CreDtTm> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <InitgPty> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </InitgPty> + </GrpHdr> + + <PmtInf> + <PmtInfId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + <xsl:text>-1</xsl:text> + </PmtInfId> + <PmtMtd>TRF</PmtMtd> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <PmtTpInf> + <SvcLvl> + <Cd>SEPA</Cd> + </SvcLvl> + </PmtTpInf> + <ReqdExctnDt> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /> + </ReqdExctnDt> + <Dbtr> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </Dbtr> + <DbtrAcct> + <Id> + <IBAN> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> + </DbtrAcct> + <DbtrAgt> + <FinInstnId> + <BIC> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.bic']/value, ' ', '')" /> + </BIC> + </FinInstnId> + </DbtrAgt> + <!-- + SHAR – Charges are shared between debtor and creditor + SLEV – Charges are handled according to service level + --> + <ChrgBr>SHAR</ChrgBr> + <!-- generate CdtTrfTxInf for each invoice --> + <xsl:apply-templates + select="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]" /> + </PmtInf> </CstmrCdtTrfInitn> - </Document> - </xsl:template> - - - <!-- This template builds sepa header info --> - <xsl:template - match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = - 'SEPA-Export']"> - <!-- not in use --> - </xsl:template> - - - <!-- This template builds sepa payment info for each invoice --> - <xsl:template - match="/data/document[starts-with(normalize-space(item[@name = - '$modelversion']/value),'rechnungseingang')]"> - - <!-- round to 2 digits - geht nur mit sum funktion --> - <xsl:variable + </Document> + </xsl:template> + + + <!-- This template builds sepa header info --> + <xsl:template + match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']"> + <!-- not in use --> + </xsl:template> + + + <!-- This template builds sepa payment info for each invoice --> + <xsl:template + match="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]"> + + <!-- round to 2 digits - geht nur mit sum funktion --> + <xsl:variable name="wert1" select="xs:decimal(sum(item[@name='invoice.total']/value))" /> - <xsl:variable name="wert2" + <xsl:variable name="wert2" select="xs:decimal(round-half-to-even($wert1,2))" /> - <CdtTrfTxInf - xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> + <CdtTrfTxInf + xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> <PmtId> - <EndToEndId>NOTPROVIDED</EndToEndId> + <EndToEndId>NOTPROVIDED</EndToEndId> </PmtId> <Amt> - <InstdAmt> - <xsl:attribute name="Ccy"><xsl:value-of - select="item[@name='invoice.currency']/value" /></xsl:attribute> - <!-- round to 2 digits --> - <xsl:value-of select="$wert2" /> - </InstdAmt> + <InstdAmt> + <xsl:attribute name="Ccy"><xsl:value-of + select="item[@name='invoice.currency']/value" /></xsl:attribute> + <!-- round to 2 digits --> + <xsl:value-of select="$wert2" /> + </InstdAmt> </Amt> <CdtrAgt> - <FinInstnId> - <BICFI> - <xsl:value-of select="replace(item[@name='cdtr.bic']/value, ' ', '')" /> - </BICFI> - </FinInstnId> + <FinInstnId> + <BIC> + <xsl:value-of select="replace(item[@name='cdtr.bic']/value, ' ', '')" /> + </BIC> + </FinInstnId> </CdtrAgt> <Cdtr> - <!-- MAX70 --> - <Nm> - <xsl:value-of select="substring(item[@name='cdtr.name']/value, 1, 70)" /> - </Nm> + <!-- MAX70 --> + <Nm> + <xsl:value-of select="substring(item[@name='cdtr.name']/value, 1, 70)" /> + </Nm> </Cdtr> <CdtrAcct> - <Id> - <IBAN> - <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> - </IBAN> - </Id> + <Id> + <IBAN> + <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> </CdtrAcct> <RmtInf> - <!-- Max140Text --> - <Ustrd> - <xsl:choose> - <xsl:when test="string-length(item[@name='numsequencenumber']/value) > 0"> - <!-- neues format buchungsnummer / rechn.nr --> - <xsl:value-of - select="item[@name='numsequencenumber']/value" /><xsl:text> / - </xsl:text><xsl:value-of - select="item[@name='invoice.number']/value" /> - </xsl:when> - <xsl:otherwise> - <!-- fallback --> - <xsl:value-of - select="substring(item[@name='$workflowsummary']/value, 1, 140)" /> - </xsl:otherwise> - </xsl:choose> - </Ustrd> + <!-- Max140Text --> + <Ustrd> + <xsl:choose> + <xsl:when test="string-length(item[@name='numsequencenumber']/value) > 0"> + <!-- neues format buchungsnummer / rechn.nr --> + <xsl:value-of + select="item[@name='numsequencenumber']/value" /><xsl:text> / </xsl:text><xsl:value-of + select="item[@name='invoice.number']/value" /> + </xsl:when> + <xsl:otherwise> + <!-- fallback --> + <xsl:value-of + select="substring(item[@name='$workflowsummary']/value, 1, 140)" /> + </xsl:otherwise> + </xsl:choose> + </Ustrd> </RmtInf> - </CdtTrfTxInf> - - </xsl:template> - - </xsl:stylesheet> - - - /office-alexander-logistics/reports/sepa/sepa-2.0.5.xsl - - \ No newline at end of file + </CdtTrfTxInf> + + </xsl:template> + +</xsl:stylesheet>/office-alexander-logistics/reports/sepa/sepa-2.0.5.xsl \ No newline at end of file diff --git a/reports/sepa/sepa-2.0.5-pl.old b/reports/sepa/sepa-2.0.5-pl.old index 045ce81..ff0fe30 100644 --- a/reports/sepa/sepa-2.0.5-pl.old +++ b/reports/sepa/sepa-2.0.5-pl.old @@ -1,188 +1,374 @@ -2024-01-11T14:31:52.923+01:00true2024-02-19T14:07:31.583+01:001a36c52d3-25bc-4c43-8c41-e90e2fd47432-1708348051587a36c52d3-25bc-4c43-8c41-e90e2fd474322$uniqueid$modelversion$workflowgroup$taskid$workflowsummaryinvoice.numberinvoice.dateinvoice.totalinvoice.currencycdtr.namecdtr.ibancdtr.bicdbtr.namedbtr.ibandbtr.bicpayment.typenumsequencenumberUTF-8SEPA export executed by the SepaScheduler. See the XSL definition for details. sepatype:"workitem" AND $taskid:5500 ReportEntity<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:xs="http://www.w3.org/2001/XMLSchema" - version="2.0"> - <xsl:strip-space elements="*" /> - <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> - - <xsl:template match="/"> - <xsl:variable name="now" select="current-dateTime()" /> - - <Document + + + + 2024-01-11T14:31:52.923+01:00 + + + + + + true + + + 2024-02-21T12:40:56.424+01:00 + + + 1 + + + + + + a36c52d3-25bc-4c43-8c41-e90e2fd47432-1708515656428 + + + a36c52d3-25bc-4c43-8c41-e90e2fd47432 + + + 3 + + + + $uniqueid + + + + + + + $modelversion + + + + + + + $workflowgroup + + + + + + + $taskid + + + + + + + $workflowsummary + + + + + + + invoice.number + + + + + + + invoice.date + + + + + + + invoice.total + + + + + + + invoice.currency + + + + + + + cdtr.name + + + + + + + cdtr.iban + + + + + + + cdtr.bic + + + + + + + dbtr.name + + + + + + + dbtr.iban + + + + + + + dbtr.bic + + + + + + + payment.type + + + + + + + numsequencenumber + + + + + + + + + + + UTF-8 + + + SEPA export executed by the SepaScheduler. See the XSL + definition for details. + + + sepa + + + type:"workitem" AND $taskid:5500 + + + ReportEntity + + + <?xml version="1.0" encoding="UTF-8" + standalone="yes"?> + <xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + version="2.0"> + <xsl:strip-space elements="*" /> + <xsl:output method="xml" indent="yes" encoding="UTF-8" standalone="yes" /> + + <xsl:template match="/"> + <xsl:variable name="now" select="current-dateTime()" /> + + <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07 pain.001.001.07.xsd"> + xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.07 + pain.001.001.07.xsd"> <CstmrCdtTrfInitn> - - <!-- generate header info --> - <!-- compute count of invoices --> - <xsl:variable name="count" - select="count(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='$uniqueid']/value)" /> - <!-- compute total amount --> - <xsl:variable name="totalsum" - select="xs:decimal(sum(/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]/item[@name='invoice.total']/value))" /> - <!-- round to 2 digits --> - <xsl:variable name="total" - select="xs:decimal(round-half-to-even($totalsum, 2))" /> - - <!-- shortcut for the sepa export document --> - <xsl:variable name="exportWorkitem" - select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']" /> - - <GrpHdr> - <MsgId> - <xsl:value-of - select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> - </MsgId> - <CreDtTm> - <xsl:value-of - select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /> - </CreDtTm> - <NbOfTxs> - <xsl:value-of select="$count" /> - </NbOfTxs> - <CtrlSum> - <!-- round to 2 digits --> - <xsl:value-of select="$total" /> - </CtrlSum> - <InitgPty> - <Nm> - <xsl:value-of - select="$exportWorkitem/item[@name='dbtr.name']/value" /> - </Nm> - </InitgPty> - </GrpHdr> - - <PmtInf> - <PmtInfId> - <xsl:value-of - select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> - <xsl:text>-1</xsl:text> - </PmtInfId> - <PmtMtd>TRF</PmtMtd> - <NbOfTxs> - <xsl:value-of select="$count" /> - </NbOfTxs> - <CtrlSum> - <!-- round to 2 digits --> - <xsl:value-of select="$total" /> - </CtrlSum> - <PmtTpInf> - <SvcLvl> - <Cd>SEPA</Cd> - </SvcLvl> - </PmtTpInf> - <ReqdExctnDt> - <xsl:value-of - select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /> - </ReqdExctnDt> - <Dbtr> - <Nm> - <xsl:value-of - select="$exportWorkitem/item[@name='dbtr.name']/value" /> - </Nm> - </Dbtr> - <DbtrAcct> - <Id> - <IBAN> - <xsl:value-of - select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> - </IBAN> - </Id> - </DbtrAcct> - <DbtrAgt> - <FinInstnId> - <BIC> - <xsl:value-of - select="replace($exportWorkitem/item[@name='dbtr.bic']/value, ' ', '')" /> - </BIC> - </FinInstnId> - </DbtrAgt> - <!-- - SHAR – Charges are shared between debtor and creditor - SLEV – Charges are handled according to service level - --> - <ChrgBr>SHAR</ChrgBr> - <!-- generate CdtTrfTxInf for each invoice --> - <xsl:apply-templates - select="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]" /> - </PmtInf> + + <!-- generate header info --> + <!-- compute count of invoices --> + <xsl:variable name="count" + select="count(/data/document[starts-with(normalize-space(item[@name = + '$modelversion']/value),'rechnungseingang')]/item[@name='$uniqueid']/value)" /> + <!-- compute total amount --> + <xsl:variable name="totalsum" + select="xs:decimal(sum(/data/document[starts-with(normalize-space(item[@name = + '$modelversion']/value),'rechnungseingang')]/item[@name='invoice.total']/value))" + /> + <!-- round to 2 digits --> + <xsl:variable name="total" + select="xs:decimal(round-half-to-even($totalsum, 2))" /> + + <!-- shortcut for the sepa export document --> + <xsl:variable name="exportWorkitem" + select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = + 'SEPA-Export']" /> + + <GrpHdr> + <MsgId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + </MsgId> + <CreDtTm> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')" /> + </CreDtTm> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <InitgPty> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </InitgPty> + </GrpHdr> + + <PmtInf> + <PmtInfId> + <xsl:value-of + select="replace($exportWorkitem/item[@name='$uniqueid']/value, '-', '')" /> + <xsl:text>-1</xsl:text> + </PmtInfId> + <PmtMtd>TRF</PmtMtd> + <NbOfTxs> + <xsl:value-of select="$count" /> + </NbOfTxs> + <CtrlSum> + <!-- round to 2 digits --> + <xsl:value-of select="$total" /> + </CtrlSum> + <PmtTpInf> + <SvcLvl> + <Cd>SEPA</Cd> + </SvcLvl> + </PmtTpInf> + <ReqdExctnDt> + <xsl:value-of + select="format-dateTime($now, '[Y0001]-[M01]-[D01]')" /> + </ReqdExctnDt> + <Dbtr> + <Nm> + <xsl:value-of + select="$exportWorkitem/item[@name='dbtr.name']/value" /> + </Nm> + </Dbtr> + <DbtrAcct> + <Id> + <IBAN> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> + </DbtrAcct> + <DbtrAgt> + <FinInstnId> + <BICFI> + <xsl:value-of + select="replace($exportWorkitem/item[@name='dbtr.bic']/value, ' ', '')" /> + </BICFI> + </FinInstnId> + </DbtrAgt> + <!-- + SHAR – Charges are shared between debtor and creditor + SLEV – Charges are handled according to service level + --> + <ChrgBr>SHAR</ChrgBr> + <!-- generate CdtTrfTxInf for each invoice --> + <xsl:apply-templates + select="/data/document[starts-with(normalize-space(item[@name = + '$modelversion']/value),'rechnungseingang')]" /> + </PmtInf> </CstmrCdtTrfInitn> - </Document> - </xsl:template> - - - <!-- This template builds sepa header info --> - <xsl:template - match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = 'SEPA-Export']"> - <!-- not in use --> - </xsl:template> - - - <!-- This template builds sepa payment info for each invoice --> - <xsl:template - match="/data/document[starts-with(normalize-space(item[@name = '$modelversion']/value),'rechnungseingang')]"> - - <!-- round to 2 digits - geht nur mit sum funktion --> - <xsl:variable + </Document> + </xsl:template> + + + <!-- This template builds sepa header info --> + <xsl:template + match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) = + 'SEPA-Export']"> + <!-- not in use --> + </xsl:template> + + + <!-- This template builds sepa payment info for each invoice --> + <xsl:template + match="/data/document[starts-with(normalize-space(item[@name = + '$modelversion']/value),'rechnungseingang')]"> + + <!-- round to 2 digits - geht nur mit sum funktion --> + <xsl:variable name="wert1" select="xs:decimal(sum(item[@name='invoice.total']/value))" /> - <xsl:variable name="wert2" + <xsl:variable name="wert2" select="xs:decimal(round-half-to-even($wert1,2))" /> - <CdtTrfTxInf + <CdtTrfTxInf xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> <PmtId> - <EndToEndId>NOTPROVIDED</EndToEndId> + <EndToEndId>NOTPROVIDED</EndToEndId> </PmtId> <Amt> - <InstdAmt> - <xsl:attribute name="Ccy"><xsl:value-of - select="item[@name='invoice.currency']/value" /></xsl:attribute> - <!-- round to 2 digits --> - <xsl:value-of select="$wert2" /> - </InstdAmt> + <InstdAmt> + <xsl:attribute name="Ccy"><xsl:value-of + select="item[@name='invoice.currency']/value" /></xsl:attribute> + <!-- round to 2 digits --> + <xsl:value-of select="$wert2" /> + </InstdAmt> </Amt> <CdtrAgt> - <FinInstnId> - <BIC> - <xsl:value-of select="replace(item[@name='cdtr.bic']/value, ' ', '')" /> - </BIC> - </FinInstnId> + <FinInstnId> + <BICFI> + <xsl:value-of select="replace(item[@name='cdtr.bic']/value, ' ', '')" /> + </BICFI> + </FinInstnId> </CdtrAgt> <Cdtr> - <!-- MAX70 --> - <Nm> - <xsl:value-of select="substring(item[@name='cdtr.name']/value, 1, 70)" /> - </Nm> + <!-- MAX70 --> + <Nm> + <xsl:value-of select="substring(item[@name='cdtr.name']/value, 1, 70)" /> + </Nm> </Cdtr> <CdtrAcct> - <Id> - <IBAN> - <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> - </IBAN> - </Id> + <Id> + <IBAN> + <xsl:value-of select="replace(item[@name='cdtr.iban']/value, ' ', '')" /> + </IBAN> + </Id> </CdtrAcct> <RmtInf> - <!-- Max140Text --> - <Ustrd> - <xsl:choose> - <xsl:when test="string-length(item[@name='numsequencenumber']/value) > 0"> - <!-- neues format buchungsnummer / rechn.nr --> - <xsl:value-of - select="item[@name='numsequencenumber']/value" /><xsl:text> / </xsl:text><xsl:value-of - select="item[@name='invoice.number']/value" /> - </xsl:when> - <xsl:otherwise> - <!-- fallback --> - <xsl:value-of - select="substring(item[@name='$workflowsummary']/value, 1, 140)" /> - </xsl:otherwise> - </xsl:choose> - </Ustrd> + <!-- Max140Text --> + <Ustrd> + <xsl:choose> + <xsl:when test="string-length(item[@name='numsequencenumber']/value) > 0"> + <!-- neues format buchungsnummer / rechn.nr --> + <xsl:value-of + select="item[@name='numsequencenumber']/value" /><xsl:text> / + </xsl:text><xsl:value-of + select="item[@name='invoice.number']/value" /> + </xsl:when> + <xsl:otherwise> + <!-- fallback --> + <xsl:value-of + select="substring(item[@name='$workflowsummary']/value, 1, 140)" /> + </xsl:otherwise> + </xsl:choose> + </Ustrd> </RmtInf> - </CdtTrfTxInf> - - </xsl:template> - -</xsl:stylesheet>/office-alexander-logistics/reports/sepa/sepa-2.0.5.xsl \ No newline at end of file + </CdtTrfTxInf> + + </xsl:template> + + </xsl:stylesheet> + + + /office-alexander-logistics/reports/sepa/sepa-2.0.5.xsl + + \ No newline at end of file diff --git a/reports/sepa/sepa-2.0.5-pl.xsl b/reports/sepa/sepa-2.0.5-pl.xsl index 7e28fd1..fd3ddf3 100644 --- a/reports/sepa/sepa-2.0.5-pl.xsl +++ b/reports/sepa/sepa-2.0.5-pl.xsl @@ -10,9 +10,9 @@ + xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd"> @@ -93,10 +93,10 @@ - + - + - + @@ -40,8 +32,8 @@ true - - + + - + - + - + - + IntermediateCatchEvent_6 @@ -84,7 +75,7 @@ EndEvent_3 IntermediateCatchEvent_4 IntermediateCatchEvent_5 - + textAnnotation_Ku1gIw TextAnnotation_2 TextAnnotation_3 @@ -102,9 +93,9 @@ true - - - + + + @@ -127,12 +118,12 @@ SequenceFlow_10 - + SequenceFlow_10 SequenceFlow_17 - + @@ -142,9 +133,9 @@ true - - - + + + @@ -167,13 +158,13 @@ SequenceFlow_19 - + SequenceFlow_28 SequenceFlow_18 SequenceFlow_1 - + sequenceFlow_0QFTlw @@ -190,7 +181,7 @@ - + @@ -222,16 +213,15 @@ SequenceFlow_28 - + - + - + Rechnungscontrolling]]> @@ -241,13 +231,12 @@ SequenceFlow_7 - + - + - + @@ -256,7 +245,7 @@ - + @@ -265,7 +254,7 @@ - + @@ -285,12 +274,12 @@ - + - + home @@ -312,15 +301,14 @@ SequenceFlow_2 - - + + sequenceFlow_rhKXDQ - + - + @@ -329,7 +317,7 @@ - + @@ -338,12 +326,12 @@ - + - + @@ -356,12 +344,12 @@ - + - + @@ -374,7 +362,7 @@ - + false @@ -384,39 +372,37 @@ SequenceFlow_12 - + SequenceFlow_6 - + - + - + - + - + SequenceFlow_8 - + - + - + @@ -425,7 +411,7 @@ - + @@ -434,12 +420,12 @@ - + - + @@ -452,12 +438,12 @@ - + - + home]]> @@ -489,12 +475,11 @@ result.isValid=true; SequenceFlow_19 sequenceFlow_nyv4vw - - + + - + @@ -528,10 +513,10 @@ result.isValid=true; - + - + $workflowgroup - $workflowstatus]]> @@ -540,8 +525,7 @@ result.isValid=true; SequenceFlow_9 SequenceFlow_4 - + @@ -577,10 +561,10 @@ result.isValid=true; - + - + @@ -595,25 +579,26 @@ result.isValid=true; - + - + - + + - + - + - + @@ -628,28 +613,26 @@ result.isValid=true; SequenceFlow_1 SequenceFlow_3 - + DataOutput_2 DataOutput_2 - + sequenceFlow_ePZrvQ - - + + - + - + - + @@ -684,15 +667,15 @@ result.isValid=true; - + - + - + @@ -717,13 +700,13 @@ result.isValid=true; }]]> - + - + - + SEPA-Body]]> @@ -734,39 +717,38 @@ result.isValid=true; SequenceFlow_11 - + DataOutput_1 DataOutput_1 - + - + - + - + - + SequenceFlow_9 - + - + The SEPA Export holds a list of referncees to all invoices in the item @@ -775,51 +757,46 @@ result.isValid=true; Instances are created grouped by the item 'dbtr.IBAN' The SEPA Export process runs on a scheduled basis (e.g. once a day) - + Contains Report Definition - + - - + + - + - - + + The linked invoice workitem will be added to thhe $workitemref - + - + SequenceFlow_18 sequenceFlow_yVyNRw sequenceFlow_nyv4vw - + SequenceFlow_4 sequenceFlow_rhKXDQ sequenceFlow_yVyNRw - - + + - - + + - - + + @@ -830,7 +807,7 @@ result.isValid=true; - + @@ -839,12 +816,12 @@ result.isValid=true; - + - + @@ -857,12 +834,12 @@ result.isValid=true; - + - + @@ -886,311 +863,273 @@ result.isValid=true; - + sequenceFlow_0QFTlw - + sequenceFlow_ePZrvQ - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - + - + - - + + - + - + - - + + - + - - + + - + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - + + + + - + - - - - - + + + + + - + - + - + - + - - - + + + - - - + + + - - - + + + - + - + - - - + + + - - - - + + + + - - - - - + + + + + - + - \ No newline at end of file +