2016-03-04 41 views
0

我正試圖計算醫療保險的合同覈銷,但計算似乎沒有工作。例如,我需要取<charge>標籤上的費用屬性值,然後減去<adjustment>標籤上的金額屬性值,但僅當<adjustment>標籤上的組和代碼屬性爲:group ='CO'和代碼='45'或'385'xslt計算保險註銷不起作用

我能夠得到一切,但計算工作。我試着在這個論壇上看到幾個答案,但我明顯錯過了一些東西。任何幫助,將不勝感激。

這裏是我的XML(簡體):

<result check_number="05173408" ...> 
    <claim ... total_charge="720" total_paid="43"> 
     <charge charge="200"> 
      <adjustment amount="125" code="45" group="CO" /> 
      <adjustment amount="35" code="385" group="CO" /> 
      <adjustment amount="20" code="3" group="PR" /> 
     </charge> 
     <charge charge="70"> 
      <adjustment amount="70" code="204" group="PR" /> 
     </charge> 
     <charge charge="300"> 
      <adjustment amount="273" code="45" group="CO" /> 
      <adjustment amount="15" code="3" group="PR" /> 
     </charge> 
     <charge charge="150"> 
      <adjustment amount="139" code="45" group="CO" /> 
     </charge> 
    </claim> 
</result> 

這裏是我的XSLT把日期:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> 
    <xsl:template match="/"> 
     <!-- maps to the beginning result tag --> 
     <xsl:for-each select="/result/claim/charge"> 
     <!-- amount allowed by the insurance for line item --> 
      <COL> 
       <DATA> 
       <xsl:apply-templates select="adjustment" mode="calcAdjTotal" > 
       </xsl:apply-templates> 
       </DATA> 
      </COL> 
     </xsl:for-each> 
     <!-- Template created to test Parfait's suggestion --> 
     <xsl:template match="adjustment" mode="calcAdjTotal" > 
      <xsl:variable name="condition" select="adjustment[@group='CO' and (@code='45' or @code='385')]"></xsl:variable> 
       <xsl:value-of select="../@charge - sum($condition/@amount)" /> 
      </xsl:if> 
     </xsl:template> 
    </xsl:template> 
</xsl:stylesheet> 

這裏是我的輸出:(更新輸出)

<COL> 
    </DATA> 
</COL> 
<COL> 
    </DATA> 
</COL> 
<COL> 
    </DATA> 
</COL> 
<COL> 
    </DATA> 
</COL> 

這裏的我想要得到的:

<COL> 
    <DATA> 
     40 
    </DATA> 
</COL> 
<COL> 
    <DATA> 
    </DATA> 
</COL> 
<COL> 
    <DATA> 
     27 
    </DATA> 
</COL> 
<COL> 
    <DATA> 
     11 
    </DATA> 
</COL> 

然後將使用該格式將數據導入Filemaker。

+0

您能否以文字解釋所需的邏輯?從示例或非工作代碼中很難推斷出它。如果我從扣款中扣除符合條件的調整,我會得到{40,70,27,11}。你顯示{40,,27,11}。 –

回答

1

考慮將您的條件方程包裝在<xsl:if>中。此外,您可以使用一個存儲條件值的變量來避免重複:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output version="1.0" encoding="UTF-8" indent="yes" /> 
<xsl:strip-space elements="*"/>  

    <xsl:template match="/"> 
    <ROOT> 
     <xsl:apply-templates select="*"/> 
    </ROOT> 
    </xsl:template> 

    <xsl:template match="charge"> 
    <xsl:variable name="condition" select="adjustment[(@code='45' or @code='385') and @group='CO']"/>   
    <COL> 
     <DATA> 
     <xsl:if test="$condition">    
      <xsl:value-of select="@charge - sum($condition/@amount)"/>    
     </xsl:if> 
     </DATA> 
    </COL>  
    </xsl:template>  
</xsl:transform> 
+0

@ michael.hor257k和Parfait,謝謝你的幫助!帕菲特的解決方案奏效。我修改了一些xslt,我從調整標記開始,而不是電荷標記,但它創建了所需的結果。我在變量=「@ code = '45'或'385'」和我的值 - select =「../@ charge - sum(@amount)」上設置了我的選擇。當我不需要時,我試圖使用遞歸。再次感謝。 – JMW

+0

我做了一些更多的測試,你的xml僅適用於一個數量屬性,我需要它爲多個屬性工作。在我的示例xml中查看標記的頂部組。 – JMW

+0

這裏的答案有條件地彙總所有調整節點。你是說40對第一個'充電'組不正確:200 - (125 + 35)= 40?如果不是這種情況,請發佈XML。 – Parfait

1

我猜你想要的東西,像(!):

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/result"> 
    <RESULT> 
     <xsl:for-each select="claim/charge"> 
      <ROW> 
       <COL> 
        <DATA> 
         <xsl:value-of select="@charge - sum(adjustment[@group='CO' and (@code='45' or @code='385')]/@amount)" /> 
        </DATA> 
       </COL> 
      </ROW> 
     </xsl:for-each> 
    </RESULT> 
</xsl:template> 

</xsl:stylesheet> 

應用到你的輸入例子,結果將是:

<?xml version="1.0" encoding="UTF-8"?> 
<RESULT> 
    <ROW> 
     <COL> 
     <DATA>40</DATA> 
     </COL> 
    </ROW> 
    <ROW> 
     <COL> 
     <DATA>70</DATA> 
     </COL> 
    </ROW> 
    <ROW> 
     <COL> 
     <DATA>27</DATA> 
     </COL> 
    </ROW> 
    <ROW> 
     <COL> 
     <DATA>11</DATA> 
     </COL> 
    </ROW> 
</RESULT> 

這是假設你想爲每個charge創建一個記錄(有一個字段)。

請注意,這是無效的FileMaker XML語法。


- 響應編輯,以澄清在評論: -

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/result"> 
    <RESULT> 
     <xsl:for-each select="claim/charge[adjustment[not(@group='PR')]]"> 
      <ROW> 
       <COL> 
        <DATA> 
         <xsl:value-of select="@charge - sum(adjustment[not(@group='PR')]/@amount)" /> 
        </DATA> 
       </COL> 
      </ROW> 
     </xsl:for-each> 
    </RESULT> 
</xsl:template> 

</xsl:stylesheet> 

結果

<?xml version="1.0" encoding="UTF-8"?> 
<RESULT> 
    <ROW> 
     <COL> 
     <DATA>40</DATA> 
     </COL> 
    </ROW> 
    <ROW> 
     <COL> 
     <DATA>27</DATA> 
     </COL> 
    </ROW> 
    <ROW> 
     <COL> 
     <DATA>11</DATA> 
     </COL> 
    </ROW> 
</RESULT> 
+0

我需要找到所有帶有group ='CO'和code = '45'或'385'的調整標籤。然後從charge標籤的費用屬性的金額中減去amount屬性的金額。 所以,我需要從輸出中排除group ='PR'的調整標籤。 最終,我需要200-125-35 = 40,一個空標籤或0,300-273 = 27和150-139 = 11作爲標籤的輸出。 – JMW

+0

@JMW爲什麼一個空標籤或0而不是70 - 0 = 70? –

+0

是的,我知道這是無效的Filemaker XML語法。我有一個更大的xslt可以創建有效的Filemaker XML。這只是它的一部分。我正試圖找出爲什麼我的數學計算不起作用。 – JMW