• Hands up if you find this easier to scan:

    SELECT

    o.ID,

    PAYREAL = ISNULL(SUM(o.VALPAYREAL),0),

    PAYPLAN = ISNULL(SUM(o.VALPAYPLAN),0),

    x.PAYPLANTODATE,

    PAYPROCESS = ISNULL(SUM(o.VALPAYPROCESS),0)

    FROM ABC o

    CROSS APPLY (

    SELECT

    PAYPLANTODATE = SUM(i.VALPAYPLAN)

    FROM ABC i

    WHERE i.[DATE] <= GETDATE()

    AND i.[TYPE] = 'PAYMENT'

    AND i.ID = o.ID

    GROUP BY i.ID),

    ) x

    WHERE o.[TYPE] = 'PAYMENT'

    GROUP BY o.ID

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden