Last active
January 14, 2026 19:51
-
-
Save benoitjadinon/58616ddaa3b5480bedae761ed24c7447 to your computer and use it in GitHub Desktop.
Subscriptions obsidian base
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| model: | |
| version: 1 | |
| kind: Table | |
| columns: [] | |
| pluginVersion: 1.0.0 | |
| summaries: | |
| Unique: values.unique().length | |
| Total: values.reduce(number(acc)+number(value), 0).toFixed(2) | |
| filters: | |
| and: | |
| - file.folder == "Finance/Subscriptions" | |
| - file.ext == "md" | |
| - file.name != "Subscriptions" | |
| formulas: | |
| icon: image(if(favicon, favicon, "https://www.google.com/s2/favicons?domain="+url)) | |
| enabled: endDate>=now().date() || formula.isRenewing | |
| price-adjusted: (price+formula["shared-adjustment"]).toFixed(2) | |
| shared-adjustment: (number(if(note["share-price"], -number(note["share-price"]) * shared, 0))) | |
| next-payment-date: |- | |
| if(cycle == "lifetime", null, | |
| if(startDate > now(), startDate, | |
| if(endDate, endDate, | |
| if(cycle.endsWith("d"), | |
| startDate + duration((((today() - startDate).days/number(cycle)).ceil() * 28) + "d"), | |
| if(cycle.endsWith("M"), | |
| startDate + duration((((today() - startDate).months/number(cycle)).ceil() * number(cycle)) + "M"), | |
| if(cycle.endsWith("y"), | |
| startDate + duration((((today() - startDate).years/number(cycle)).ceil() * number(cycle)) + "y"), | |
| startDate | |
| ) | |
| ) | |
| ) | |
| ) | |
| ) | |
| ) | |
| started: startDate.relative() | |
| duration: if (endDate, endDate, now())-startDate | |
| next-payment-duration: if (formula["next-payment-date"].date() == today(), "TODAY",date(formula["next-payment-date"]).relative()) | |
| isRenewing: endDate.isEmpty() | |
| status: |- | |
| if(cycle == "lifetime", 'lifetime', | |
| if (formula.isRenewing, if (startDate > now(), "starts", "renews"), if (endDate > now(), "ends", "ended"))+" "+formula["next-payment-duration"] | |
| ) | |
| next-payment-days: |- | |
| if(cycle == "lifetime", 0, | |
| number((date(formula["next-payment-date"])-now()).days.toFixed(0)) | |
| ) | |
| cycleDays: |- | |
| if(cycle == "lifetime", 'lifetime', | |
| (date("1970-01-01")-cycle-date("1970-01-01")).days.abs() | |
| ) | |
| pricePerMonth: |- | |
| if(cycle == "lifetime", (price / formula.duration.months).toFixed(2), | |
| number((price/formula.cycleDays*31) + (if (shared, (formula["shared-adjustment"]),0))).toFixed(2) | |
| ) | |
| priceInFuture: if(formula.willRenew && startDate < now(),formula.pricePerMonth,number(0).toFixed(2)) | |
| willRenew: |- | |
| if(cycle == "lifetime", 'lifetime', | |
| endDate == null || (endDate.relative() > now()+cycle) | |
| ) | |
| totalCost: |- | |
| if(cycle == "lifetime", price.toFixed(2), | |
| if(startDate > now(),number(0).toFixed(2),(formula.duration.months *number(formula.pricePerMonth)).toFixed(2)) | |
| ) | |
| duration-precise: formula.duration.months.toFixed(2) | |
| endDateOrForever: if (endDate, endDate, date('2099-01-01')) | |
| properties: | |
| formula.enabled: | |
| displayName: active | |
| formula.price-adjusted: | |
| displayName: price-adjusted | |
| formula.next-payment-date: | |
| displayName: next-payment-date | |
| formula.started: | |
| displayName: started | |
| formula.cycleDays: | |
| displayName: cycleDays | |
| formula.priceInFuture: | |
| displayName: priceThisMonth | |
| views: | |
| - type: table | |
| name: Subscriptions | |
| groupBy: | |
| property: formula.enabled | |
| direction: DESC | |
| order: | |
| - formula.icon | |
| - file.name | |
| - product | |
| - formula.status | |
| - formula.next-payment-date | |
| - cycle | |
| - price | |
| - formula.price-adjusted | |
| - formula.pricePerMonth | |
| - formula.priceInFuture | |
| - formula.totalCost | |
| - currency | |
| - formula.started | |
| - startDate | |
| - endDate | |
| - formula.duration | |
| - formula.duration-precise | |
| - account | |
| - account-holder | |
| - category | |
| - tags | |
| - shared | |
| - share-price | |
| - notes | |
| - formula.shared-adjustment | |
| sort: | |
| - property: formula.status | |
| direction: ASC | |
| - property: file.name | |
| direction: DESC | |
| - property: formula.totalCost | |
| direction: ASC | |
| - property: formula.started | |
| direction: ASC | |
| - property: formula.price-adjusted | |
| direction: ASC | |
| summaries: | |
| price: Sum | |
| formula.pricePerMonth: Empty | |
| formula.priceInFuture: Total | |
| columnSize: | |
| formula.icon: 38 | |
| note.product: 129 | |
| formula.status: 128 | |
| formula.next-payment-date: 116 | |
| note.cycle: 47 | |
| note.price: 69 | |
| formula.price-adjusted: 80 | |
| formula.pricePerMonth: 60 | |
| formula.priceInFuture: 61 | |
| formula.totalCost: 66 | |
| note.currency: 55 | |
| note.endDate: 126 | |
| formula.duration-precise: 62 | |
| note.account: 172 | |
| note.account-holder: 53 | |
| note.category: 112 | |
| note.share-price: 67 | |
| note.notes: 204 | |
| - type: table | |
| name: Subscriptions Active | |
| filters: | |
| and: | |
| - formula.enabled == true | |
| order: | |
| - formula.icon | |
| - file.name | |
| - formula.status | |
| - formula.next-payment-date | |
| - cycle | |
| - price | |
| - formula.pricePerMonth | |
| - currency | |
| - formula.started | |
| - endDate | |
| - formula.duration | |
| - account | |
| - account-holder | |
| - category | |
| - tags | |
| - shared | |
| - share-price | |
| - formula.price-adjusted | |
| - notes | |
| sort: | |
| - property: formula.next-payment-date | |
| direction: ASC | |
| - property: file.name | |
| direction: ASC | |
| columnSize: | |
| formula.icon: 38 | |
| formula.status: 128 | |
| formula.next-payment-date: 116 | |
| note.cycle: 47 | |
| formula.pricePerMonth: 58 | |
| note.currency: 55 | |
| note.endDate: 126 | |
| formula.duration_precise: 254 | |
| note.account: 172 | |
| note.account-holder: 53 | |
| note.category: 112 | |
| formula.price-adjusted: 80 | |
| note.notes: 204 | |
| - type: table | |
| name: Subscriptions Inactive | |
| filters: | |
| and: | |
| - formula.enabled == false | |
| order: | |
| - formula.icon | |
| - file.name | |
| - endDate | |
| - cycle | |
| - price | |
| - formula.pricePerMonth | |
| - currency | |
| - formula.started | |
| - formula.duration | |
| - account | |
| - account-holder | |
| - category | |
| - tags | |
| - shared | |
| - share-price | |
| - formula.price-adjusted | |
| - notes | |
| sort: | |
| - property: endDate | |
| direction: DESC | |
| - property: formula.started | |
| direction: ASC | |
| columnSize: | |
| formula.icon: 38 | |
| formula.status: 128 | |
| formula.next-payment-date: 116 | |
| note.cycle: 47 | |
| formula.pricePerMonth: 58 | |
| note.currency: 55 | |
| note.endDate: 126 | |
| formula.duration_precise: 254 | |
| note.account: 172 | |
| note.account-holder: 53 | |
| note.category: 112 | |
| formula.price-adjusted: 80 | |
| note.notes: 204 | |
| - type: calendar | |
| name: Renewals | |
| filters: | |
| and: | |
| - formula.enabled == true | |
| - formula.isRenewing == true | |
| startDate: formula.next-payment-date | |
| - type: calendar | |
| name: Ending | |
| filters: | |
| and: | |
| - formula.isRenewing == false | |
| - formula.enabled == true | |
| startDate: formula.next-payment-date | |
| - type: table | |
| name: Subscriptions Soon | |
| filters: | |
| and: | |
| - formula.enabled == true | |
| order: | |
| - formula.icon | |
| - file.name | |
| - formula.status | |
| - formula.next-payment-date | |
| - notes | |
| sort: | |
| - property: formula.next-payment-date | |
| direction: ASC | |
| limit: 3 | |
| columnSize: | |
| formula.icon: 38 | |
| formula.status: 128 | |
| formula.next-payment-date: 116 | |
| note.currency: 55 | |
| note.cycle: 66 | |
| note.endDate: 126 | |
| note.account: 172 | |
| note.account-holder: 53 | |
| note.category: 112 | |
| formula.price-adjusted: 80 | |
| note.notes: 204 | |
| - type: list | |
| name: Subscriptions Soon List | |
| filters: | |
| and: | |
| - formula.enabled == true | |
| order: | |
| - formula.icon | |
| - file.name | |
| - formula.status | |
| - notes | |
| - formula.next-payment-date | |
| sort: | |
| - property: formula.next-payment-date | |
| direction: ASC | |
| limit: 3 | |
| columnSize: | |
| formula.icon: 38 | |
| formula.status: 128 | |
| formula.next-payment-date: 116 | |
| note.currency: 55 | |
| note.cycle: 66 | |
| note.endDate: 126 | |
| note.account: 172 | |
| note.account-holder: 53 | |
| note.category: 112 | |
| formula.price-adjusted: 80 | |
| note.notes: 204 | |
| separator: " " | |
| markers: number | |
| nestedProperties: false | |
| - type: tasknotesCalendar | |
| name: Ending Calendar View | |
| calendarView: dayGridMonth | |
| showICS_ics_bb91vhfdemf12oemw: false | |
| showICS_ics_q3765di1smf12p46b: false | |
| showICS_ics_0k7qvgafnmghaso1i: false | |
| titleProperty: note.endDate | |
| startDateProperty: note.endDate | |
| - type: calendar | |
| name: Opened Calendar | |
| order: | |
| - file.name | |
| startDate: note.startDate | |
| endDate: formula.endDateOrForever |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment