]> Git — Sourcephile - tmp/julm/literate-invoice.git/commitdiff
update(log): invoice #org3sale2 main
authorJulien Moutinho <julm@sourcephile.fr>
Wed, 28 Jan 2026 00:22:36 +0000 (01:22 +0100)
committerJulien Moutinho <julm@sourcephile.fr>
Wed, 28 Jan 2026 00:22:52 +0000 (01:22 +0100)
tests/Tests/Invoice.hs
tests/Tests/Invoice/org3sale2.html
tests/Tests/Invoice/org3sale3.html [new file with mode: 0644]

index d97348e654119852dca140ae7cd9ba9a76238133..86f27acf7082069ecd3789e7afdd4da86a65d20c 100644 (file)
@@ -489,7 +489,7 @@ ngipkgsLog =
       { invoiceLogDate = "2025-12-29"
       , invoiceLogDuration = 0.5
       , invoiceLogAction = ["review"]
-      , invoiceLogScope = ["NGIpkgs", "Funkwhale"]
+      , invoiceLogScope = ["NGIpkgs", "Funkwhale"] -- goes into NGI Review
       , invoiceLogReferences = ["https://github.com/ngi-nix/ngipkgs/pull/1707#discussion_r2651644145"]
       , invoiceLogDescription = ""
       }
@@ -545,7 +545,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-07"
       , invoiceLogDuration = 1
       , invoiceLogAction = ["documentation"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = ["https://github.com/ngi-nix/ngipkgs/pull/1891"]
       , invoiceLogDescription = "address reviewer’s comment"
       }
@@ -553,7 +553,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-09"
       , invoiceLogDuration = 2
       , invoiceLogAction = ["documentation"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = []
       , invoiceLogDescription = "address reviewer’s comments"
       }
@@ -593,7 +593,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-12"
       , invoiceLogDuration = 6
       , invoiceLogAction = ["documentation"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = []
       , invoiceLogDescription = "render options"
       }
@@ -601,7 +601,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-13"
       , invoiceLogDuration = 1
       , invoiceLogAction = ["documentation"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = []
       , invoiceLogDescription = "update"
       }
@@ -617,7 +617,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-19"
       , invoiceLogDuration = 2
       , invoiceLogAction = ["documentation"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = []
       , invoiceLogDescription = "split into several PDF"
       }
@@ -625,7 +625,7 @@ ngipkgsLog =
       { invoiceLogDate = "2026-01-22"
       , invoiceLogDuration = 4
       , invoiceLogAction = ["development"]
-      , invoiceLogScope = ["NGIpkgs", "Manuals"]
+      , invoiceLogScope = ["NGIpkgs", "Manuals"] -- goes into NGI Core
       , invoiceLogReferences = ["https://github.com/ngi-nix/ngipkgs/pull/2010"]
       , invoiceLogDescription = "address reviewers’ concerns"
       }
@@ -637,6 +637,30 @@ ngipkgsLog =
       , invoiceLogReferences = []
       , invoiceLogDescription = "weekly meeting"
       }
+  , InvoiceLog
+      { invoiceLogDate = "2026-01-25"
+      , invoiceLogDuration = 4
+      , invoiceLogAction = ["development"]
+      , invoiceLogScope = ["NGIpkgs", "Seppo"]
+      , invoiceLogReferences = []
+      , invoiceLogDescription = "begin packaging"
+      }
+  , InvoiceLog
+      { invoiceLogDate = "2026-01-26"
+      , invoiceLogDuration = 5
+      , invoiceLogAction = ["development"]
+      , invoiceLogScope = ["NGIpkgs", "Seppo"]
+      , invoiceLogReferences = []
+      , invoiceLogDescription = "continue packaging"
+      }
+  , InvoiceLog
+      { invoiceLogDate = "2026-01-27"
+      , invoiceLogDuration = 5
+      , invoiceLogAction = ["development"]
+      , invoiceLogScope = ["NGIpkgs", "Seppo"]
+      , invoiceLogReferences = []
+      , invoiceLogDescription = "continue packaging"
+      }
   ]
 
 invoiceRateNGIpkgs =
@@ -701,9 +725,58 @@ invoices =
                         and $
                           [ inv & invoiceLogDate & (>= "2025-12-23")
                           , inv & invoiceLogDate & (<= "2026-12-31")
-                          , or $
+                          , inv & invoiceLogScope & (/= ["NGIpkgs", "Manuals"])
+                          , inv & invoiceLogScope & (/= ["NGIpkgs", "Funkwhale"])
+                          , not $
+                              and $
+                                [ inv & invoiceLogDate & (>= "2026-01-09")
+                                , inv & invoiceLogDate & (<= "2026-01-28")
+                                , inv & invoiceLogAction & (== ["organization"])
+                                , inv & invoiceLogScope & (== ["NGIpkgs"])
+                                ]
+                                  & list
+                          ]
+                            & list
+                }
+    , InvoiceId
+        { invoiceIdRecipient = Tests.Organization.nixosFoundationNGITeam
+        , invoiceIdType = InvoiceTypeSale
+        , invoiceIdCount = 3
+        }
+        := let invoiceEmittedOn = "2026-01-28"
+           in invoice
+                { invoiceOrders = ["contract n°2026-FixMe"]
+                , invoiceEmittedOn
+                , invoicePaymentDueBefore = invoiceEmittedOn & Time.addLocalTime (31 * Time.nominalDay)
+                , invoiceIssuer = Tests.Organization.julmInfo
+                , invoiceRecipient = Tests.Organization.nixosFoundationNGITeam
+                , invoiceRates = invoiceRateNGIpkgs
+                , invoiceMentions =
+                    [ InvoiceMentionTVANonApplicable
+                    , InvoiceMentionIndemnitéForfaitaire
+                    , InvoiceMentionIndemnitéTaux (12.15 :: Amount 100 (UnitName "%"))
+                    ]
+                , invoiceLogs =
+                    ngipkgsLog
+                      & List.filter \inv ->
+                        or $
+                          [ and $
                               [ inv & invoiceLogDate & (>= "2026-01-21")
-                              , inv & invoiceLogScope & (/= ["NGIpkgs", "Manuals"])
+                              , inv & invoiceLogDate & (<= "2026-12-31")
+                              , inv & invoiceLogScope & (== ["NGIpkgs", "Manuals"])
+                              ]
+                                & list
+                          , and $
+                              [ inv & invoiceLogDate & (>= "2025-12-29")
+                              , inv & invoiceLogDate & (<= "2026-12-31")
+                              , inv & invoiceLogScope & (== ["NGIpkgs", "Funkwhale"])
+                              ]
+                                & list
+                          , and $
+                              [ inv & invoiceLogDate & (>= "2026-01-09")
+                              , inv & invoiceLogDate & (<= "2026-01-28")
+                              , inv & invoiceLogAction & (== ["organization"])
+                              , inv & invoiceLogScope & (== ["NGIpkgs"])
                               ]
                                 & list
                           ]
index bea9fa21913bf68cd569752a335f6f87d01fee08..15598513bc0255659ba4b90adc34c7521e61acbe 100644 (file)
@@ -1,2 +1,2 @@
 <!DOCTYPE HTML>
-<html><head><title>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Document.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Invoice.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/List.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Paper.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Table.css"></head><body><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Invoice</p></div><section class="invoice-headers"><div class="dict"><div class="dict-entry"><div class="dict-key">InvoiceIdentifier:</div><div class="dict-value"><p>org3sale2</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceType:</div><div class="dict-value"><p>sale</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceOrders:</div><div class="dict-value"><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">-</div><div class="list-value" style="justify-items:start;"><p>contract n°2026-03</p></div></div></div></div></div><div class="dict-entry"><div class="dict-key">InvoiceEmittedOn:</div><div class="dict-value"><p>2026-01-27</p></div></div><div class="dict-entry"><div class="dict-key">InvoicePaymentDueBefore:</div><div class="dict-value"><p>2026-02-27</p></div></div></div></section><section class="invoice-from-to"><div class="org"><div class="dict"><div class="dict-entry"><div class="dict-key">Seller:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>julminfo</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>3, place du Monument</p><p>Mairie - Bureau 1</p><div class="address-bottom"><p>23340 Gentioux-Pigerolles France</p></div></div></div></div><div class="dict-entry"><div class="dict-key">SIREN:</div><div class="dict-value"><p>942798083</p></div></div><div class="dict-entry"><div class="dict-key">IBAN:</div><div class="dict-value"><p>FR18 2004 1010 0820 3735 3D02 912</p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Julien Moutinho</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:julm@sourcephile.fr">julm​@sourcephile.fr</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div><div class="dict-entry"><div class="dict-key">Buyer:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Stichting NixOS Foundation</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>Korte Lijnbaanssteeg 1-4318</p><div class="address-bottom"><p>1012 SL Amsterdam Netherlands</p></div></div></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:finance@nixos.org">finance​@nixos.org</a></p></div></div></div></div><div class="dict"></div></div></div></div><div class="dict-entry"><div class="dict-key">Department:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Nix@NGI Team</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:ngi@nixos.org">ngi​@nixos.org</a></p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Daniel Ramirez</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:danielramirez5@protonmail.com">danielramirez5​@protonmail.com</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></section><section><div class="title"><p>Grand totals</p></div><div class="table" style="grid-template-columns:1fr 1fr 1fr;"><div class="table-head"><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Workload</p></div></div><div class="table-cell"><div><p>To pay (excl. taxes)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-23</p><p>2026-01-23</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>60.00 h</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>1875.00 €</p></div></div></div></section><section><div class="title"><p>Mandatory legal notices</p></div><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>VAT not applicable, art. 293 B of the French General Tax Code.</p></div></div><div class="list-body even"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Fixed compensation for recovery costs in case of late payment: 40.00 €</p></div></div><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Late payment penalty rate (applicable from 2026-02-28): 12.15 % × unpaid amount × number of days late / 365.25</p></div></div></div></section></div><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03</p><p>1/4</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-summary"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Summary</p></div><div class="table" style="grid-template-columns:max-content max-content 1fr max-content max-content max-content max-content max-content;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Type</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Rate</p><p>(excl. taxes.)</p></div></div><div class="table-cell"><div><p>Quantity</p></div></div><div class="table-cell"><div><p>Total</p><p>(excl. taxes.)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-09</p><p>2026-01-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.50 h</p><p>(9.17%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>171.88 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / BEAM</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-30</p><p>2025-12-30</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p><p>(6.67%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>125.00 €</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-23</p><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>36.00 h</p><p>(60.0%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1125.00 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Funkwhale</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>review</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-29</p><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>0.50 h</p><p>(0.83%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>15.62 €</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Manuals</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-22</p><p>2026-01-22</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p><p>(6.67%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>125.00 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>6</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-11</p><p>2026-01-12</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>10.00 h</p><p>(16.67%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>312.50 €</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>2/4</p><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Summary</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-details"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Details</p></div><div class="table" style="grid-template-columns:max-content max-content max-content 1fr 1fr 50.0mm 2fr;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Date</p></div></div><div class="table-cell"><div><p>Duration</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>References</p></div></div><div class="table-cell"><div><p>Description</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>address reviewers’ concerns</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-24</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update Bonfire and report issues upstream</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-24</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update Bonfire to fix bugs</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-25</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>6.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/bonfire-networks/bonfire-app/issues/1698#issuecomment-3692147409">https://github.com/bonfire-networks/bonfire-app/issues/1698#issuecomment-3692147409</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update and fix bugs</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-26</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update to fix bugs</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>6</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>add more tests</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>7</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>0.50 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Funkwhale</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>review</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ngi-nix/ngipkgs/pull/1707#discussion_r2651644145">https://github.com/ngi-nix/ngipkgs/pull/1707#discussion_r2651644145</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>8</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-30</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / BEAM</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>improve <code>buildMix</code> &amp; <code>mixRelease</code> for packaging Elixir software</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>9</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-01</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>support other flavours</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>10</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-03</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>support other flavours, and make update more resilient</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>11</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-04</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>provide upstream with reproducers</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>12</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-05</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update to latest version</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>13</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-07</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>fix updating</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>14</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/bonfire-networks/bonfire-app/issues/1730">https://github.com/bonfire-networks/bonfire-app/issues/1730</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>answer upstream’s questions</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>15</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-11</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>replace <code>hillingar</code> to package MirageOS unikernels</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Details</p><p>3/4</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-details"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="table" style="grid-template-columns:max-content max-content max-content 1fr 1fr 50.0mm 2fr;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Date</p></div></div><div class="table-cell"><div><p>Duration</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>References</p></div></div><div class="table-cell"><div><p>Description</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>16</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>17</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-12</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ju1m/ngipkgs/commits/dnsvizor/">https://github.com/ju1m/ngipkgs/commits/dnsvizor/</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>remove the need for <code>--allow-import-from-derivation</code></p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>18</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-16</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>19</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-22</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Manuals</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ngi-nix/ngipkgs/pull/2010">https://github.com/ngi-nix/ngipkgs/pull/2010</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>address reviewers’ concerns</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>20</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1.50 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>4/4</p><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Details</p></div></div></div></body></html>
\ No newline at end of file
+<html><head><title>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Document.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Invoice.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/List.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Paper.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Table.css"></head><body><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Invoice</p></div><section class="invoice-headers"><div class="dict"><div class="dict-entry"><div class="dict-key">InvoiceIdentifier:</div><div class="dict-value"><p>org3sale2</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceType:</div><div class="dict-value"><p>sale</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceOrders:</div><div class="dict-value"><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">-</div><div class="list-value" style="justify-items:start;"><p>contract n°2026-03</p></div></div></div></div></div><div class="dict-entry"><div class="dict-key">InvoiceEmittedOn:</div><div class="dict-value"><p>2026-01-27</p></div></div><div class="dict-entry"><div class="dict-key">InvoicePaymentDueBefore:</div><div class="dict-value"><p>2026-02-27</p></div></div></div></section><section class="invoice-from-to"><div class="org"><div class="dict"><div class="dict-entry"><div class="dict-key">Seller:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>julminfo</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>3, place du Monument</p><p>Mairie - Bureau 1</p><div class="address-bottom"><p>23340 Gentioux-Pigerolles France</p></div></div></div></div><div class="dict-entry"><div class="dict-key">SIREN:</div><div class="dict-value"><p>942798083</p></div></div><div class="dict-entry"><div class="dict-key">IBAN:</div><div class="dict-value"><p>FR18 2004 1010 0820 3735 3D02 912</p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Julien Moutinho</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:julm@sourcephile.fr">julm​@sourcephile.fr</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div><div class="dict-entry"><div class="dict-key">Buyer:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Stichting NixOS Foundation</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>Korte Lijnbaanssteeg 1-4318</p><div class="address-bottom"><p>1012 SL Amsterdam Netherlands</p></div></div></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:finance@nixos.org">finance​@nixos.org</a></p></div></div></div></div><div class="dict"></div></div></div></div><div class="dict-entry"><div class="dict-key">Department:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Nix@NGI Team</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:ngi@nixos.org">ngi​@nixos.org</a></p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Daniel Ramirez</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:danielramirez5@protonmail.com">danielramirez5​@protonmail.com</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></section><section><div class="title"><p>Grand totals</p></div><div class="table" style="grid-template-columns:1fr 1fr 1fr;"><div class="table-head"><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Workload</p></div></div><div class="table-cell"><div><p>To pay (excl. taxes)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-23</p><p>2026-01-27</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>64.00 h</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2000.00 €</p></div></div></div></section><section><div class="title"><p>Mandatory legal notices</p></div><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>VAT not applicable, art. 293 B of the French General Tax Code.</p></div></div><div class="list-body even"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Fixed compensation for recovery costs in case of late payment: 40.00 €</p></div></div><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Late payment penalty rate (applicable from 2026-02-28): 12.15 % × unpaid amount × number of days late / 365.25</p></div></div></div></section></div><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03</p><p>1/4</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-summary"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Summary</p></div><div class="table" style="grid-template-columns:max-content max-content 1fr max-content max-content max-content max-content max-content;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Type</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Rate</p><p>(excl. taxes.)</p></div></div><div class="table-cell"><div><p>Quantity</p></div></div><div class="table-cell"><div><p>Total</p><p>(excl. taxes.)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / BEAM</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-30</p><p>2025-12-30</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p><p>(6.25%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>125.00 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-23</p><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>36.00 h</p><p>(56.25%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1125.00 €</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Seppo</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-25</p><p>2026-01-27</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>14.00 h</p><p>(21.88%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>437.50 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-11</p><p>2026-01-12</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>10.00 h</p><p>(15.62%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>312.50 €</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>2/4</p><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Summary</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-details"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Details</p></div><div class="table" style="grid-template-columns:max-content max-content max-content 1fr 1fr 50.0mm 2fr;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Date</p></div></div><div class="table-cell"><div><p>Duration</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>References</p></div></div><div class="table-cell"><div><p>Description</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>address reviewers’ concerns</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-24</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update Bonfire and report issues upstream</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-24</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update Bonfire to fix bugs</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-25</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>6.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/bonfire-networks/bonfire-app/issues/1698#issuecomment-3692147409">https://github.com/bonfire-networks/bonfire-app/issues/1698#issuecomment-3692147409</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update and fix bugs</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-26</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update to fix bugs</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>6</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>add more tests</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>7</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-30</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / BEAM</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>improve <code>buildMix</code> &amp; <code>mixRelease</code> for packaging Elixir software</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>8</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-01</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>support other flavours</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>9</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-03</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>support other flavours, and make update more resilient</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>10</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-04</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>provide upstream with reproducers</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>11</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-05</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>update to latest version</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>12</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-07</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>fix updating</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>13</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Bonfire</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/bonfire-networks/bonfire-app/issues/1730">https://github.com/bonfire-networks/bonfire-app/issues/1730</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>answer upstream’s questions</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>14</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-11</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>replace <code>hillingar</code> to package MirageOS unikernels</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>15</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-12</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / dnsvizor</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ju1m/ngipkgs/commits/dnsvizor/">https://github.com/ju1m/ngipkgs/commits/dnsvizor/</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>remove the need for <code>--allow-import-from-derivation</code></p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Details</p><p>3/4</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-details"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="table" style="grid-template-columns:max-content max-content max-content 1fr 1fr 50.0mm 2fr;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Date</p></div></div><div class="table-cell"><div><p>Duration</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>References</p></div></div><div class="table-cell"><div><p>Description</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>16</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-25</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Seppo</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>begin packaging</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>17</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-26</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Seppo</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>continue packaging</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>18</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-27</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Seppo</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>continue packaging</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>4/4</p><p>julminfo - 2026-01-27 - Invoice #org3sale2 - contract n°2026-03 — Details</p></div></div></div></body></html>
\ No newline at end of file
diff --git a/tests/Tests/Invoice/org3sale3.html b/tests/Tests/Invoice/org3sale3.html
new file mode 100644 (file)
index 0000000..3337097
--- /dev/null
@@ -0,0 +1,2 @@
+<!DOCTYPE HTML>
+<html><head><title>julminfo - 2026-01-28 - Invoice #org3sale3 - contract n°2026-FixMe</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Document.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Invoice.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/List.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Paper.css"><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/literate-invoice/data/styles/Table.css"></head><body><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Invoice</p></div><section class="invoice-headers"><div class="dict"><div class="dict-entry"><div class="dict-key">InvoiceIdentifier:</div><div class="dict-value"><p>org3sale3</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceType:</div><div class="dict-value"><p>sale</p></div></div><div class="dict-entry"><div class="dict-key">InvoiceOrders:</div><div class="dict-value"><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">-</div><div class="list-value" style="justify-items:start;"><p>contract n°2026-FixMe</p></div></div></div></div></div><div class="dict-entry"><div class="dict-key">InvoiceEmittedOn:</div><div class="dict-value"><p>2026-01-28</p></div></div><div class="dict-entry"><div class="dict-key">InvoicePaymentDueBefore:</div><div class="dict-value"><p>2026-02-28</p></div></div></div></section><section class="invoice-from-to"><div class="org"><div class="dict"><div class="dict-entry"><div class="dict-key">Seller:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>julminfo</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>3, place du Monument</p><p>Mairie - Bureau 1</p><div class="address-bottom"><p>23340 Gentioux-Pigerolles France</p></div></div></div></div><div class="dict-entry"><div class="dict-key">SIREN:</div><div class="dict-value"><p>942798083</p></div></div><div class="dict-entry"><div class="dict-key">IBAN:</div><div class="dict-value"><p>FR18 2004 1010 0820 3735 3D02 912</p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Julien Moutinho</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:julm@sourcephile.fr">julm​@sourcephile.fr</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div><div class="dict-entry"><div class="dict-key">Buyer:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Stichting NixOS Foundation</p></div></div><div class="dict-entry"><div class="dict-key">Address:</div><div class="dict-value"><div class="address"><p>Korte Lijnbaanssteeg 1-4318</p><div class="address-bottom"><p>1012 SL Amsterdam Netherlands</p></div></div></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:finance@nixos.org">finance​@nixos.org</a></p></div></div></div></div><div class="dict"></div></div></div></div><div class="dict-entry"><div class="dict-key">Department:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Nix@NGI Team</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:ngi@nixos.org">ngi​@nixos.org</a></p></div></div></div></div><div class="dict"><div class="dict-entry"><div class="dict-key">Admin:</div><div class="dict-value"><div class="org"><div class="entity"><div class="dict"><div class="dict-entry"><div class="dict-key">Name:</div><div class="dict-value"><p>Daniel Ramirez</p></div></div><div class="dict-entry"><div class="dict-key">Email:</div><div class="dict-value"><p><a href="mailto:danielramirez5@protonmail.com">danielramirez5​@protonmail.com</a></p></div></div></div></div><div class="dict"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></section><section><div class="title"><p>Grand totals</p></div><div class="table" style="grid-template-columns:1fr 1fr 1fr;"><div class="table-head"><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Workload</p></div></div><div class="table-cell"><div><p>To pay (excl. taxes)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-29</p><p>2026-01-23</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>10.00 h</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>312.50 €</p></div></div></div></section><section><div class="title"><p>Mandatory legal notices</p></div><div class="list" style="grid-template-columns:max-content 1fr;"><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>VAT not applicable, art. 293 B of the French General Tax Code.</p></div></div><div class="list-body even"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Fixed compensation for recovery costs in case of late payment: 40.00 €</p></div></div><div class="list-body odd"><div class="list-key" style="justify-items:end;">—</div><div class="list-value" style="justify-items:start;"><p>Late payment penalty rate (applicable from 2026-03-01): 12.15 % × unpaid amount × number of days late / 365.25</p></div></div></div></section></div><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-28 - Invoice #org3sale3 - contract n°2026-FixMe</p><p>1/3</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-summary"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Summary</p></div><div class="table" style="grid-template-columns:max-content max-content 1fr max-content max-content max-content max-content max-content;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Type</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>Time frame</p></div></div><div class="table-cell"><div><p>Rate</p><p>(excl. taxes.)</p></div></div><div class="table-cell"><div><p>Quantity</p></div></div><div class="table-cell"><div><p>Total</p><p>(excl. taxes.)</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-09</p><p>2026-01-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5.50 h</p><p>(55.0%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>171.88 €</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Funkwhale</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>review</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2025-12-29</p><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>0.50 h</p><p>(5.0%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>15.62 €</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>service</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Manuals</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>2026-01-22</p><p>2026-01-22</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>31.25 € / h</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p><p>(40.0%)</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>125.00 €</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>2/3</p><p>julminfo - 2026-01-28 - Invoice #org3sale3 - contract n°2026-FixMe — Summary</p></div></div></div><div class="page A4 portrait" style="display:flex;size:A4 portrait;"><div style="align-content:stretch;display:flex;flex-direction:column;gap:5.0mm;justify-content:space-between;width:100%;" style="width:100%;"><section class="invoice-details"><div style="display:flex;flex-direction:column;gap:5.0mm;width:100%;"><div class="title"><p>Details</p></div><div class="table" style="grid-template-columns:max-content max-content max-content 1fr 1fr 50.0mm 2fr;"><div class="table-head"><div class="table-cell"><div><p>#</p></div></div><div class="table-cell"><div><p>Date</p></div></div><div class="table-cell"><div><p>Duration</p></div></div><div class="table-cell"><div><p>Scope</p></div></div><div class="table-cell"><div><p>Action</p></div></div><div class="table-cell"><div><p>References</p></div></div><div class="table-cell"><div><p>Description</p></div></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2025-12-29</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>0.50 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Funkwhale</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>review</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ngi-nix/ngipkgs/pull/1707#discussion_r2651644145">https://github.com/ngi-nix/ngipkgs/pull/1707#discussion_r2651644145</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-09</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>3</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-16</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>2.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div><div class="table-body even"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-22</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>4.00 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs / Manuals</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>development</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p><a style="word-break:break-all;" href="https://github.com/ngi-nix/ngipkgs/pull/2010">https://github.com/ngi-nix/ngipkgs/pull/2010</a></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>address reviewers’ concerns</p></div></div><div class="table-body odd"><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>5</p></div><div class="table-cell" style="justify-items:center;" style="align-items:center;"><p>2026-01-23</p></div><div class="table-cell" style="justify-items:end;" style="align-items:center;"><p>1.50 h</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>NGIpkgs</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>organization</p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p></p></div><div class="table-cell" style="justify-items:start;" style="align-items:center;"><p>weekly meeting</p></div></div></div></div></section><div style="display:flex;flex-direction:row;gap:5.0mm;justify-content:space-between;width:100%;"><p>julminfo - 2026-01-28 - Invoice #org3sale3 - contract n°2026-FixMe — Details</p><p>3/3</p></div></div></div></body></html>
\ No newline at end of file